나의 개발 일상 기록
[MSA] MSA(Microservices Architecture) 본문
MSA(Microservices Architecture)
최근 많은 기업들이 기존에 사용하는 모놀리식 아키텍쳐(Monolithic Architecture)의 한계를 극복하고 클라우드 환경에서 시스템 운영 이점을 극대화하기 위해서 마이크로서비스 아키텍쳐 즉 MSA(Microservices Archithecture)를 채택하고 있습니다. 기존의 모놀리식 아키텍쳐와 마이크로서비스 아키텍쳐에 대해서 알아보겠습니다.
1. 모놀리식 아키텍쳐(Monolithic Architecture)

아직까지도 많은 기업들은 모놀리식 아키텍쳐를 사용하는 기업들이 많이 있습니다. 모놀리식 아키텍쳐란, 마이크로서비스의 각광에 따라 마이크로서비스가 아닌 전통의 아키텍쳐를 지칭하는 의미로 생겨난 단어입니다. 하나의 서비스 또는 어플리케이션이 하나의 거대한 아키텍쳐를 가질 때 Monolithic 하다고 합니다.
- 모놀리식 아키텍쳐의 특징
모놀리식 아키텍쳐를 갖는 소프트웨어의 특징은 그 자체로 강건하며 내부 요소간의 의존성이 강하다는 점입니다. 이는 필연적으로 구조적인 결합이 강력하게 유지되는 결과를 초래하며, 또한 비즈니스 컴포넌트들이 하나의 강한 결합 구조를 지니고 통일성이 있습니다. 비즈니스 로직이 서비스에 최적화된 코드를 만들어내는데 좀 더 집중할 수 있는 반면, 복합적인 예외를 만들수 있는 위험성을 내포하게 됩니다.
- 모놀리식 아키텍쳐의 장점
1. 어떤 기능(서비스)이든지 개발되어있는 환경이 같아서 복잡하지 않습니다.
2. 개발이 단순해집니다. (repository하나 체크아웃 받아서 띄우면 됩니다.)
3. 배포가 단순해집니다. (war 하나만 배포하면 됩니다.)
4. scale-out이 단순해집니다. (서버 하나 복사하면 됩니다.)
5. End-to-End 테스트가 용이합니다. (MSA의 경우 테스트에 필요한 서비스들을 모두 동작시켜야합니다.)
- 모놀리식 아키텍쳐의 단점
1. 프로젝트의 규모가 커지면 어플리케이션 구동시간이 늘어나고 빌드, 배포 시간도 길어집니다.
2. 작은 수정사항에도 전체를 다시 빌드하고 배포를 진행해야합니다.
3. 코드베이스의 책임 한계와 소유권이 불투명해집니다.
4. 기술 스택을 바꾸기가 어렵습니다. 기능별로 기술, 언어, 프레임워크를 선택하기가 어렵습니다.
5. 일부분의 오류가 전체에 영향을 미칩니다.
2. 마이크로서비스 아키텍쳐(MSA, Microservices Archithecture)

대부분 기업용 애플리케이션은 하나의 거대한 서비스 형태로 개발되어 왔습니다. 모놀리식 아키텍쳐는 개발, 관리가 용이하다는 장점이 있습니다. 그러나 시스템 규모가 커질 경우 복잡도도 증가해 코드의 이해와 분석이 어려워지고 작은 수정사항에도 전체를 빌드, 배포해야 하는 비효율이 발생하는 등 개선과 확장이 어려운 단점이 존재합니다.
이에 대응하는 개념이 MSA입니다. 경량화되고 독립적인 여러 개의 서비스를 조합하여 애플리케이션을 구현하는 방식으로 서비스마다 자체 데이터베이스를 가지고 동작하기 때문에 개발부터 빌드, 배포까지 효율적으로 수행할 수 있습니다. 개발과 유지관리에 소요되는 시간과 비용을 줄일 수 있어 활용도가 높아지는 추세입니다.
한 문장으로 정리하자면 여러개의 독립된 서비스로 나눠서, 이 서비스를 조합함으로서 기능을 제공하는 아키텍쳐 디자인 패턴이라고 할수있습니다.
- MSA의 특징
- 서비스들은 섬세하고 프로토콜은 가벼운 편입니다.
- 애플리케이션을 여러개의 작은 서비스로 분해할 수 있습니다.
- 모듈성을 개션시키고 애플리케이션의 이해, 개발, 빌드, 테스트, 배포를 쉽게 해줍니다.
- 규모가 작은 팀들이 팀별 서비스를 독립적으로 개발 및 배포를 할 수 있게 해줍니다.
- 지속적인 리팩토링을 통해 각각의 서비스 아키텍쳐를 하나로 병합할 수 있게 해줍니다.
- 지속적 배로를 가능하게 해줍니다.
- MSA의 장점
- 기능별로 마이크러서비스를 개발하고, 작업 할당을 서비스 단위로 하면 개발자가 해당 부분을 온전히 이해할 수 있습니다.
- 각 서비스는 쉽게 교체가능하며 기능 중심으로 구성됩니다. 또한, 적합한 프로그래밍 언어, 데이터베이스, 환경으로 만들어집니다.
- 각 서비스는 크기가 작고,상황에 따라 경계를 정하고, 자율적으로 개발되고, 독립적으로 배포되고, 분산되고, 자동화 된 프로세스로 구축되고 배포됩니다.
- 일부분의 오류가 있으면 해당 기능에만 오류가 발생하고 그 부분만 빠르게 수정하여 정상화가 가능합니다.
- 각각 서비스의 부하에 따라 개별적으로 scale-out이 가능합니다. 메로리, CPU적으로 상당부분 이득이 됩니다.
- MSA의 단점
- 서비스 간 호출 시 API를 사용하기 때문에 통신 비용이 그만큼 늘어나게 됩니다.
- 서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도가 증가하고 많은 자원을 필요로 합니다.
- 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어렵고 데이터의 정합성 또한 관리하기 어렵습니다.
'MSA' 카테고리의 다른 글
| [MSA] Hystrix Monitoring With Turbine (0) | 2021.07.22 |
|---|---|
| [MSA] MSA 운영 환경을 위한 전용 모니터링 도구 (0) | 2021.07.21 |
| [MSA] Hystrix, Ribbon, Eureka in Spring Cloud Zuul (0) | 2021.07.20 |
| [MSA] Spring Cloud Netflix (0) | 2021.07.14 |