MSA (Microservices Architecture)?
애플리케이션을 작은 독립된 서비스(마이크로 서비스)들로 나누어 설계하는 아키텍처 스타일
서비스들은 각각 독립적으로 배포, 개발, 유지보수가 가능하며 각 서비스들은 서로 다른 기술 스택이나 언어로 구현될 수 있다
MSA의 주요 개념
서비스 분리
하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리
독립 배포
분리된 서비스를 독립적으로 배포
데이터베이스 분리
분리된 서비스마다 개별 데이터베이스와 상호작용
서비스 통신
각 서비스는 주로 REST API, 메시징 등을 통해 서로 통신
MSA의 핵심 설계 원칙
각 서비스들은 독립적으로 실행될 수 있어야 한다
각 서비스 간의 결합도를 최소화 해야 한다
장애가 발생되더라도 전체 시스템이 중단되지 않도록 설계 해야 한다
모놀리틱과의 차이점 및 장단점
모놀리틱 아키텍처 (Monolithic Architecture)
애플리케이션의 모든 기능이 단일 코드 베이스로 구성된 구조이다
하나의 애플리케이션이 배포 단위가 되고 하나의 프로세스로 실행된다
MSA 아키텍처 (Microservices Architecture)
애플리케이션을 작고 독립적인 서비스 단위로 분리하는 구조이다
각 서비스는 독립적으로 배포, 실행, 개발이 가능하고 서비스 간의 통신은 REST API, 메시징 등을 통해 서로 통신한다
모놀리틱 아키텍처의 장점
단순한 개발 및 배포
코드 베이스와 배포 단위가 하나의 애플리케이션이므로 초기 개발 및 관리가 용이하다
테스트 및 디버깅
모든 코드가 하나의 애플리케이션에 존재하기 때문에 디버깅과 테스트가 상대적으로 간단하다
일관된 기술 스택
하나의 기술로 통일되어 일관적이다
성능 이점
서비스 간의 통신 오버헤드가 없으므로 성능이 비교적 우수하다
모놀리틱 아키텍처의 단점
변경 영향
하나의 코드 변경이 전체 애플리케이션에 영향을 미칠 가능성이 있다
장애 전파
하나의 문제로도 전체 애플리케이션이 중단될 가능성이 있다
대규모 팀관리
대규모로 작업하는 프로젝트인 경우 많은 팀의 협업이 상대적으로 어렵다
MSA 아키텍처의 장점
독립적인 배포 및 개발
서비스 단위로 개발 및 배포가 가능하여 배포 주기가 비교적 빠르다
팀 별로 각각 다른 서비스를 독립적으로 개발할 수 있다
장애 격리
한 서비스의 장애가 다른 서비스에 영향을 미칠 가능성이 최소화된다
다양한 기술 스택 선택
서비스별로 적합한 기술 스택을 사용할 수 있다
유지보수 향상
각 서비스가 작고 독립적이므로 관리 및 유지보수가 용이하다
CI/CD 최적화
서비스 단위로 배포가 가능하므로 CI/CD 환경에 적합하다
MSA 아키텍처의 단점
복잡성 증가
서비스 간의 통신, 데이터 일관성 관리, 장애 처리 등 복잡도가 증가한다
초기 설계 및 구현 비용
설계 및 구축에 많은 리소스와 시간이 소요된다
운영 부담 증가
서비스가 많아질 경우 모니터링, 로깅, 배포, 테스트 등이 어려워진다
통신 오버헤드
REST API나 메시지 큐를 통한 서비스 간의 통신으로 인해 성능 저하 가능성이 존재한다
데이터 관리 어려움
서비스 별 데이터베이스 분리로 데이터 일관성 및 트랜잭션 관리가 어려워진다
주요 차이점

아키텍처 선택 기준
모놀리틱
소규모 애플리케이션이나 초기 단계 프로젝트에 선택
팀 규모가 작고 관리할 서비스가 적은 경우에 선택
MSA
대규모 애플리케이션이나 확장성이 중요한 프로젝트에 선택
복잡한 도메인과 높은 트래픽을 처리해야 하는 경우에 선택
팀 규모가 크고 각 팀이 독립적으로 작업해야 하는 경우에 선택
즉 모놀리틱은 단순성과 속도가 중요할 때 유리하며 MSA는 확장성과 독립성이 필요할 때 적합하다
모놀리틱으로 시작한 뒤에 애플리케이션이 확장되어야 하는 경우에 점진적으로 분리하는 것도 좋을 것 같다