모놀리식 아키텍처 vs 마이크로서비스

GonnabeAlright·2022년 4월 10일
0
post-thumbnail

모놀리식 아키텍처 (Monolithic Architecture)

장점

  • 어떤 기능(서비스)든지 개발되어있는 환경이 같아서 복잡하지 않다.
  • 쉽게 고가용성 서버 환경을 만들 수 있다. (같은 애플리케이션으로 하나 더 생성)
  • End-to-End 테스트가 용이하다. (MSA의 경우 테스트에 필요한 서비스들을 모두 동작시켜야 한다.)

단점

  • 한 프로젝트의 덩치가 너무 커져서 애플리케이션 구동시간이 늘어나면 빌드, 배포 시간도 길어진다.
  • 조그마한 수정사항이 있어도 전체를 다시 빌드하고 배포를 해야한다.
  • 많은 양의 코드가 몰려있어 개발자가 모두를 이해할 수 없고 유지보수도 힘들다.
  • 일부분의 오류가 전체에 영향을 미친다.
  • 기능별로 알맞는 기술, 언어, 프레임워크를 선택하기가 까다롭다.

마이크로 서비스 (MicroService)

장점

  • 기능별로 마이크로서비스를 개발하고, 작업 할당을 서비스 단위로 하면 개발자가 해당 부분을 온전히 이해할 수 있다.
  • 새로 추가되거나 수정사항이 있는 마이크로서비스만 빠르게 빌드, 배포가 가능하다.
  • 해당 기능에 맞는 기술, 언어 등을 선택하여 사용할 수 있다.
  • 일부분의 오류가 있으면 해당 기능에만 오류가 발생하고 그 부분만 빠르게 고쳐서 정상화가 가능하다.

단점

  • 무엇보다 관리가 힘들다. 작은 여러 서비스들이 분산되어 있기 때문에 모니터링이 힘들다.
  • 서로를 호출하여 전체 서비스가 이루어지기 때문에 무조건 다른 서비스를 호출하는 코드가 추가되는데 이부분이 모놀리식 아키텍쳐의 개발보다 까다롭다.
  • 통신관련 오류가 잦을 수 있다. 마이크로 서비스들끼리 계속하여 통신을 하다보니 모놀리식 아키텍쳐에 비해 통신관련 오류가 잦다.
  • 테스트가 불편하다. End-to-End 테스트를 위해 UI, Gateway 등등 여러개의 마이크로 서비스를 구동시켜야 한다.

모놀리식이라는 용어는 애플리케이션의 모든 서비스가 상호 연결되어 거의 구분할 수 없는 시스템을 떠올리게 만듭니다.

그러나 항상 그렇지만은 않습니다. 종종 모놀리식 시스템은 고도로 모듈화된 아키텍처와 내부 컴포넌트 간에 좋은 수준의 디커플링을 가지고 있습니다.

완벽한 예로는 모놀리식 커널이라는 범주의 일부인 LinuxOS 커널입니다. Linux에는 시스템이 실행되는 동안에도 동적으로 로드 및 언로드할 수 있는 수천 개의 서비스와 모듈이 존재합니다. 그러나 이들은 모두 커널 모드에서 실행됩니다. 즉, 이들 중 하나에서 오류가 발생하면 전체 OS가 다운될 수 있습니다. 이 접근 방식은 운영체제의 핵심 서비스만 커널모드에서 실행되고 나머지는 일반적으로 각각의 고유한 프로세스가 있는 사용자 모드에서 실행되는 마이크로 커널 아키텍처와 반대입니다. 마이크로 커널 접근 방식의 가장 큰 장점은 구성 서비스 중 하나의 문제로 인해 전체 시스템의 안정성에 영향을 주지 않고 격리된 상태에서 충돌이 발생할 가능성이 높다는 것입니다.

현대의 모놀리식 애플리케이션은 모놀리식 커널과 비슷합니다. 컴포넌트 중 하나라도 실패하면 전체 시스템이 영향으 받습니다. 즉, Nodejs 용어로 번역하면 모든 서비스가 동일한 코드 베이스의 일부이며 단일 프로세스에서 실행됩니다.

0개의 댓글