
MSA 란?
하나의 애플리케이션을 다수의 독립적인 서비스로 구성한 아키텍처입니다.
마틴파울러의 블로그에 따르면 MSA 는 다음의 특징을 갖습니다.
- 서비스들은 각자 별도의 프로세스에서 실행된다.
- HTTP API 와 같은 가벼운 매커니즘으로 통신하는 작은 애플리케이션이다.
- 작은 서비스들은 각자의 비즈니스 기능을 담당하고 완전 자동화 된 절차에 따라 독립적으로 배포된다.
- 각 서비스는 서로 다른 프로그맹 언어, 프레임워크, 데이터 저장 기술을 사용할 수 있다.
대표적인 사례로는 Netflix 가 있으며, 국내에는 쿠팡, 배달의 민족 등이 있습니다. MSA 의 어떤 점이 매력적이길래 이들은 MSA 를 도입한 걸까요?
MSA 의 장점
- 빠른 Delivery
- 각 서비스는 독립적이므로 코드 수정 영향 범위가 작습니다.
- 결과적으로, 고객에게 가치를 빠르게 전달할 수 있어 시장 경쟁력을 강화합니다.
- Polyglot Architecture
- 각 서비스가 독립적으로 운영되므로 각 팀이 최적의 기술 스택을 선택할 수 있습니다.
- 도메인 전문성이 증가하고, 팀의 자율성이 높아집니다.
- 실험과 혁신 가능
- 코드베이스가 작아 수정으로 인한 영향 예측이 용이합니다.
- 혁신적인 기술을 더 쉽게 도입할 수 있어서 IT 의존적인 비즈니스들은 시장역량을 강화할 수 있습니다.
- 탄력적이고 선택적인 확장
- 특정 서비스만 Scale-out 할 수 있어 운영 효율성이 높아집니다.
- 대체가능성
- 서비스 단위로 기술을 변경하거나 외부 솔루션으로 교체가 용이합니다.
- 이를 통해 NIH(Not Invented Here) 증후군의 위험을 줄일 수 있습니다.
하지만 항상 기술 선택에 따른 트레이드오프가 있기 마렵입니다. MSA 는 다음과 같은 단점이 있어서 신중한 고려가 필요합니다.
MSA 의 단점
- 비교적 비효율적인 컴퓨타 자원 사용
- 각 서비스가 독립적으로 실행되기 때문에 컴퓨팅 자원(중복 런타임 리소스, 네트워크)을 더 많이 사용합니다.
- 예: JVM 런타임 중복 실행, 마샬링/언마샬링 오버헤드 등.
- 운영 난이도 상승
- 모니터링 대상이 증가할 뿐만아니라 모니터링 해야하는 기술도 다양해집니다.
- 각 서비스가 상호 의존적이기 때문에 단위 테스트 난이도가 증가합니다.
- DB 트랜잭션의 모호함
- 서비스간 서로 다른 DB 를 사용하기 때문에 애초에 DB 수준에서 트랜잭션 관리가 안됩니다.
- 데이터 일관성이 중요한 서비스에서는 MSA 도입을 신중히 도입해야합니다.
MSA는 많은 장점이 있지만, 그만큼 기술적인 어려움도 존재합니다. 이러한 어려움을 해결하기 위해 컨테이너 기술과 오케스트레이션 도구(Kubernetes) 같은 기술들이 필요합니다.
'기초 지식 > MSA' 카테고리의 다른 글
MSA 주요 패턴: 중앙화된 로그 집계 패턴 (0) | 2024.11.27 |
---|---|
MSA 전환을 위한 서비스 분리 전략 (1) | 2024.11.26 |
MSA 주요 패턴: 사가(Saga) 패턴 (1) | 2024.11.20 |
MSA 주요 패턴: 서비스 디스커버리(Service Discovery) 패턴 (0) | 2024.11.20 |