-
Notifications
You must be signed in to change notification settings - Fork 0
KR_CS_MSA
somaz edited this page Mar 30, 2026
·
1 revision
질문: MSA가 무엇인지 설명하고, 모놀리식 아키텍처와 비교하여 장단점을 설명하세요. 특히 느슨한 결합, 서비스 간 통신, 데이터 관리 전략을 중심으로 설명하세요.
| 용어 | 설명 |
|---|---|
| MSA | 애플리케이션을 독립적으로 배포 가능한 작은 서비스 집합으로 구성하는 아키텍처 |
| Loosely Coupled | 서비스 간 의존성을 최소화한 느슨한 결합 구조 |
| API Gateway | 클라이언트 요청을 각 서비스로 라우팅하는 단일 진입점 |
| Service Discovery | 서비스 인스턴스의 위치를 동적으로 찾는 메커니즘 |
| Circuit Breaker | 장애 서비스로의 요청을 차단하여 전파를 방지하는 패턴 |
| Saga Pattern | 분산 트랜잭션을 이벤트 기반으로 처리하는 패턴 |
| Polyglot Persistence | 서비스별로 최적의 DB 기술을 선택하는 전략 |
Monolithic: Microservices:
┌────────────────────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Single Application │ │ User │ │ Order │ │ Payment │
│ - User Service │ │ Service │ │ Service │ │ Service │
│ - Order Service │ → │ (Node) │ │ (Java) │ │ (Python) │
│ - Payment Service │ │ UserDB │ │ OrderDB │ │ PayDB │
│ - Single Database │ └──────────┘ └──────────┘ └──────────┘
└────────────────────────┘ ↑ API Gateway ↑
| 항목 | Monolithic | Microservices |
|---|---|---|
| 배포 | 전체 재배포 | 서비스별 독립 배포 |
| 확장 | 수직 확장 (Scale-Up) | 수평 확장 (Scale-Out) |
| 기술 스택 | 단일 | 서비스별 최적 선택 가능 |
| 장애 영향 | 전체 시스템 다운 | 특정 서비스만 영향 |
| 개발 초기 | 빠름 (간단) | 느림 (인프라 구축 필요) |
| 운영 복잡도 | 낮음 | 높음 (모니터링, 로깅, 추적) |
| 데이터 일관성 | 강한 일관성 (ACID) | 최종 일관성 (BASE) |
- REST API: 간단하고 직관적. 타임아웃 및 Cascade Failure 위험
- gRPC: Protocol Buffers 기반으로 빠름, Type-Safe. 디버깅 어려움
- Message Queue (Kafka, RabbitMQ): 서비스 간 완전한 디커플링, 장애 격리
- 단점: 메시지 순서/중복 처리 복잡, Eventual Consistency
각 서비스가 자체 DB를 소유 (Polyglot Persistence).
- 장점: 스키마 변경 독립, 장애 격리, 최적 DB 선택 가능
- 단점: JOIN 불가 → API 조합 필요, 분산 트랜잭션 문제
각 서비스가 로컬 트랜잭션을 수행하고 이벤트로 다음 서비스를 트리거. 실패 시 보상 트랜잭션(Compensating Transaction)으로 롤백.
주문 생성 → 재고 감소 → 결제 처리
실패 시: 결제 실패 → 재고 복구 → 주문 취소
| 패턴 | 역할 |
|---|---|
| API Gateway | 라우팅, 인증/인가, Rate Limiting, 로깅 단일화 |
| Service Discovery | 서비스 인스턴스 위치 동적 탐색 (Eureka, Consul) |
| Circuit Breaker | 장애 서비스 차단 → Fallback 응답 (Resilience4j) |
| Distributed Tracing | 요청 흐름 추적 (Jaeger, Zipkin) |
| 적합 | 부적합 |
|---|---|
| 트래픽이 급증하는 특정 기능 존재 | 스타트업 초기 (빠른 프로토타입 필요) |
| 팀 규모 10명 이상 | 팀 규모 5명 이하 |
| 독립적 배포 주기 필요 (일 1회 이상) | DevOps 인프라 없음 |