Skip to content

KR_CS_MSA

somaz edited this page Mar 30, 2026 · 1 revision

Q2: 마이크로서비스 아키텍처 (MSA)

질문: MSA가 무엇인지 설명하고, 모놀리식 아키텍처와 비교하여 장단점을 설명하세요. 특히 느슨한 결합, 서비스 간 통신, 데이터 관리 전략을 중심으로 설명하세요.


주요 용어

용어 설명
MSA 애플리케이션을 독립적으로 배포 가능한 작은 서비스 집합으로 구성하는 아키텍처
Loosely Coupled 서비스 간 의존성을 최소화한 느슨한 결합 구조
API Gateway 클라이언트 요청을 각 서비스로 라우팅하는 단일 진입점
Service Discovery 서비스 인스턴스의 위치를 동적으로 찾는 메커니즘
Circuit Breaker 장애 서비스로의 요청을 차단하여 전파를 방지하는 패턴
Saga Pattern 분산 트랜잭션을 이벤트 기반으로 처리하는 패턴
Polyglot Persistence 서비스별로 최적의 DB 기술을 선택하는 전략

Monolithic vs Microservices

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 vs MSA 비교

항목 Monolithic Microservices
배포 전체 재배포 서비스별 독립 배포
확장 수직 확장 (Scale-Up) 수평 확장 (Scale-Out)
기술 스택 단일 서비스별 최적 선택 가능
장애 영향 전체 시스템 다운 특정 서비스만 영향
개발 초기 빠름 (간단) 느림 (인프라 구축 필요)
운영 복잡도 낮음 높음 (모니터링, 로깅, 추적)
데이터 일관성 강한 일관성 (ACID) 최종 일관성 (BASE)

서비스 간 통신

동기 통신 (Synchronous)

  • REST API: 간단하고 직관적. 타임아웃 및 Cascade Failure 위험
  • gRPC: Protocol Buffers 기반으로 빠름, Type-Safe. 디버깅 어려움

비동기 통신 (Asynchronous)

  • Message Queue (Kafka, RabbitMQ): 서비스 간 완전한 디커플링, 장애 격리
  • 단점: 메시지 순서/중복 처리 복잡, Eventual Consistency

데이터 관리 전략

Database per Service

각 서비스가 자체 DB를 소유 (Polyglot Persistence).

  • 장점: 스키마 변경 독립, 장애 격리, 최적 DB 선택 가능
  • 단점: JOIN 불가 → API 조합 필요, 분산 트랜잭션 문제

Saga Pattern (분산 트랜잭션)

각 서비스가 로컬 트랜잭션을 수행하고 이벤트로 다음 서비스를 트리거. 실패 시 보상 트랜잭션(Compensating Transaction)으로 롤백.

주문 생성 → 재고 감소 → 결제 처리
실패 시: 결제 실패 → 재고 복구 → 주문 취소

MSA 필수 패턴

패턴 역할
API Gateway 라우팅, 인증/인가, Rate Limiting, 로깅 단일화
Service Discovery 서비스 인스턴스 위치 동적 탐색 (Eureka, Consul)
Circuit Breaker 장애 서비스 차단 → Fallback 응답 (Resilience4j)
Distributed Tracing 요청 흐름 추적 (Jaeger, Zipkin)

MSA 도입 판단 기준

적합 부적합
트래픽이 급증하는 특정 기능 존재 스타트업 초기 (빠른 프로토타입 필요)
팀 규모 10명 이상 팀 규모 5명 이하
독립적 배포 주기 필요 (일 1회 이상) DevOps 인프라 없음

참고

Clone this wiki locally