MSA(Microservices Architecture) 정의
**MSA(Microservices Architecture)**는
애플리케이션을 작고 독립적인 서비스들로 나누어 개발하고 운영하는 아키텍처 스타일입니다.
각 마이크로서비스는 독립적으로 배포 가능하며, 자기 자신만의 데이터 저장소와 로직, 그리고 개별 개발·운영 주기를 가집니다.
🎯 MSA의 핵심 특징
항목 | 설명 |
작은 서비스 단위 | 각각의 서비스가 하나의 비즈니스 기능 단위로 나뉨 |
독립 배포 가능 | 서비스 단위로 배포 가능 (CI/CD 자동화 용이) |
개별 팀 관리 가능 | 기능별 팀이 독립적으로 관리 및 운영 가능 |
분산 시스템 기반 | 네트워크 통신 기반 (REST, gRPC, 메시지 큐 등) |
폴리글랏 지원 | 언어, 데이터베이스, 프레임워크 모두 다양하게 사용 가능 |
📊 모놀리식 아키텍처 vs MSA 아키텍처 비교
항목 | 모놀리식 아키텍처 | 마이크로서비스 아키텍처 (MSA) |
구성 방식 | 하나의 통합된 애플리케이션 | 여러 개의 독립된 서비스 |
배포 방식 | 전체 앱을 통째로 배포 | 서비스 단위로 독립 배포 |
개발 속도 | 초기 빠르지만 점점 느려짐 | 팀별로 병렬 개발 가능 |
확장성 | 전체 앱 단위로만 확장 | 서비스 단위로 세분화 확장 |
장애 영향 | 하나가 죽으면 전체 영향 | 하나 죽어도 전체 다운 방지 가능 |
운영 복잡도 | 단순 | 서비스 수 많아지면 복잡 |
기술 스택 | 통일된 기술 스택 | 서비스별로 다양 가능 |
테스트 | 단일 테스트 쉬움 | E2E 테스트 복잡 |
학습 곡선 | 낮음 | 높음 (분산, 네트워크, 장애 처리 등) |
🧱 MSA 구성 요소
구성 요소 | 설명 |
API Gateway | 외부 요청을 각 서비스로 라우팅 |
Service Discovery | 서비스 위치(주소)를 동적으로 탐색 |
Config Server | 중앙에서 설정을 관리 |
Circuit Breaker | 장애 전파 방지 |
Monitoring / Logging | 분산 로그 추적, 메트릭 수집 |
Container / Orchestrator | Docker, Kubernetes 등으로 배포 및 확장 |
그러나 많은 기업이 MSA 도입을 고민하다가 과도한 복잡성과 비용 때문에 실패하거나 후회하는 사례가 많습니다.
그럼에도 불구하고 MSA를 선택해야 하는 명확한 기준을 생각해 볼 필요가 있습니다.
✅ MSA 도입을 정당화할 수 있는 기준
판단 기준 | 설명 |
개발/배포 속도 병목 | 팀 규모가 커지고, 단일 배포로 인해 릴리스가 느리면 → 팀 단위 독립 배포 필요 |
서비스 간 책임 분리 명확 | 각 도메인(예: 결제, 로그인, 알림 등)이 독립적이고 재사용 가능하면 마이크로서비스화 가치 있음 |
고가용성과 확장성 중요 | 일부 서비스만 집중적으로 트래픽이 몰리는 경우 → 해당 서비스만 확장해야 효율적 |
장애 전파 리스크 크다 | 하나의 작은 오류가 전체 시스템 다운으로 이어진다면, 격리된 서비스로 전환 필요 |
조직이 기능별로 나뉘어 있음 | 백엔드, 데이터팀, 결제팀 등 기능 중심 조직이면 서비스 분리로 효율 향상 가능 |
이기종 기술 필요 | 서비스마다 최적 기술 스택이 다르거나 폴리글랏 환경이 필요할 경우 |
장기적인 유지보수 고려 | 모놀리식으로는 장기 운영이 어려울 만큼 코드베이스가 커지거나 변경이 자주 발생할 경우 |
❗ “하지 말아야 할” 상황도 분명 존재
상황 | 이유 |
팀 규모가 작고 도메인이 단순함 | 오히려 MSA는 과한 선택 (모놀리식이 더 효율적) |
인프라/자동화 성숙도가 낮음 | CI/CD, 모니터링 없이는 오히려 운영 부담만 증가 |
경험 없는 팀이 무작정 도입 | 로깅, 트레이싱, 트래픽 라우팅 등 준비 부족으로 실패 확률 큼 |
아직 기능 요구가 자주 변함 | 빠른 개발을 위해선 모놀리식이 더 유리할 수 있음 |
MSA는 궁극적인 목표가 아니라, 문제 해결 수단입니다.
다음과 같은 경우에만 비용을 감수할 가치가 있습니다:
- 독립 배포로 병렬 개발이 필수적일 때
- 일부 서비스만 고성능 확장이 필요할 때
- 조직이 크고 책임 구분이 명확할 때
- 서비스가 커지고 복잡성이 더는 감당되지 않을 때
그 외에는 모놀리식 + 잘 관리된 모듈 구조로도 충분히 운영 가능하며, MSA는 도입이 아니라 운영이 더 어려운 모델임을 항상 기억해야 합니다.
'Dev > Article' 카테고리의 다른 글
Modular Monolith 아키텍처 (0) | 2025.05.30 |
---|---|
OAuth2와 OIDC(OpenID Connect) (0) | 2025.05.30 |
어니언 아키텍처 (Onion Architecture) (0) | 2025.05.29 |
[용어/개념] Head-of-Line Blocking (0) | 2025.05.29 |
동시성 문제 - Priority Inversion(우선순위 역전) (0) | 2025.05.28 |