MSA는 Micro Service Architecture의 약어로써 과거 Monolitic Architecture로 서비스되고 있는 IT기업의 서비스 규모가 현재에는 비교도 할 수 없을만큼 커졌기에, 과거 소규모의 프로젝트에서의 Monolithic 형태는 간단하며, 유지보수가 편하기 때문에 선호되었지만 일정 규모이상으로 넘어가면 다양한 기술 부채와, 너무 복잡한 로직 속에 개발이 더뎌지며, CI/CD는 꿈도 못 꾸게 된다. 때문에 Monolitic Architecture의 대안으로 MSA라는 개념이 대두되기 시작했다. 때문에 MSA가 장단점을 설명하기 전에 기존의 모놀리식 아키텍처의 장단점에 대해 먼저 설명하고 이후 MSA의 장단점에 대해 설명하고자 한다.
Monolithic Architecture
한 덩어리로 뭉쳐진 단일 서비스 개발 형식, 하나의 프로젝트로 구성되어 있으며 단일 패키지로 배포하는 아키텍처
장점
- MSA에 비해 상대적으로 운영이 용이하다. 하나의 코드 베이스를 유지하기에, 코드 관리가 쉽고 서버의 수도 적기 때문에 장애 관리, 로그 관리, 모니터링 등도 상대적으로 용이하다.
- MSA에 비해 트랜잭션 관리가 용이하다 Monolithic의 트랜잭션 관리 수준으로 MSA에 적용할 수 있는 방법이 없다.
- 단일 모듈을 배포하기에 MSA에 비해 배포가 간단하다.
단점
- 하나의 코드베이스를 유지하기에, 누군가가 어떤 기능을 변경하였을 시, 다른 기능에 어떤 영향을 주는지 파악하기 힘들다.
- 개발 언어가 종속적이다.
- 단일 모듈이기에 선택적으로 확장이 불가능하며 굉장히 작은 수정을 해도 전체 시스템을 빌드하고 배포해야만 한다. ( 지속적인 통합 및 지속적인 배포가 어렵다)
- 하나의 서비스가 다른 모든 서비스에 영향을 준다. (기능들 간의 결합도가 높다)
- Scale-Out을 하려고 해도 전체 시스템을 확장해야 하는 비효율적인 부분도 존재한다.
MSA(Microservice Architecture)
애플리케이션을 느슨히 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처 스타일의 일종인 소프트 웨어 개발 기법이다.
장점
- 멀티 모듈로 서비스가 구성되어 있기에, 탄력적이고 선택적인 확장을 할 수 있다.
- 서비스 단위로 자율적인 배포가 가능하다.
- 다양한 언어로 개발이 가능하다 - Polyglot Architecture
- 마이크로 서비스 아키텍처 덕분에 팀이 자율적으로 움직일 수 있다.
- 결함 격리가 잘된다.
단점
- 서비스 단위로 개발하기에 배포가 어렵고 서비스 간 통신방법이 필요하며, 서비스를 나눠서 데이터 중복이 발생할 수 있고 정합성을 보장하기 어렵다.
- 마이크로 서비스 응용테스트도 모놀리식에 비해 훨씬 더 복잡하다.
MSA도 Mono 도 하나의 아키텍처 종류
현재 MSA가 중요한 화두가 된 이유는 MSA는 독립적인 기능들로 이루어져 있고, 각 기능은 다양한 기술들로 개발될 수 있다. 때문에 비즈니스 환경은 점점 빠르게 급변하고 점점 더 많은 비즈니스들이 IT 기술에 의존하기에 IT 기술의 진보 없이는 비즈니스의 빠른 변화에 대처할 수 없고, 그러한 IT기술의 발전을 적용시키는 기술로는 MSA가 딱 들어맞는 아키텍처이었기에 MSA가 대두가 되었던 거지 무조건 모놀리식이 나쁘고 쓰지 말아야 할 아키텍처라고 생각하는 것은 지양되어야 한다.