마이크로서비스 아키텍처란?
학습 목표
이 강의를 마치면 다음을 이해하게 됩니다:
- 마이크로서비스 아키텍처의 정의
- 모놀리식 vs 마이크로서비스
- 마이크로서비스의 핵심 특징
- 언제 마이크로서비스를 선택해야 하는가
마이크로서비스란?
마이크로서비스 아키텍처(MSA)는 애플리케이션을 작고 독립적인 서비스들의 집합으로 구성하는 아키텍처 패턴입니다.
핵심 특징
- 독립성: 각 서비스는 독립적으로 배포 가능
- 비즈니스 중심: 비즈니스 기능 단위로 분리
- 기술 다양성: 서비스마다 다른 기술 스택 사용 가능
- 느슨한 결합: 서비스 간 의존성 최소화
모놀리식 vs 마이크로서비스
모놀리식 아키텍처
graph TB
subgraph Monolithic["모놀리식 애플리케이션"]
UI[UI Layer]
BL[Business Logic]
DAL[Data Access Layer]
UI --> BL
BL --> DAL
end
DAL --> DB[(Single Database)]
style Monolithic fill:#f0f0f0,stroke:#333,stroke-width:2px
style DB fill:#4a90e2,stroke:#333,stroke-width:2px
장점:
- 개발 초기 단순함
- 쉬운 배포
- 통합 테스트 용이
단점:
- 확장성 제한
- 기술 스택 고정
- 배포 리스크 높음
- 팀 간 의존성
마이크로서비스 아키텍처
graph TB
subgraph ServiceA["Service A"]
A[Business Logic A]
A --> DBA[(DB A)]
end
subgraph ServiceB["Service B"]
B[Business Logic B]
B --> DBB[(DB B)]
end
subgraph ServiceC["Service C"]
C[Business Logic C]
C --> DBC[(DB C)]
end
Client[Client] --> ServiceA
Client --> ServiceB
Client --> ServiceC
ServiceA -.통신.-> ServiceB
ServiceB -.통신.-> ServiceC
style ServiceA fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style ServiceB fill:#e3f2fd,stroke:#2196f3,stroke-width:2px
style ServiceC fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style Client fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px
장점:
- 독립적 확장
- 기술 선택 자유
- 장애 격리
- 팀 자율성
단점:
- 분산 시스템 복잡도
- 네트워크 레이턴시
- 데이터 일관성 관리
- 운영 오버헤드
언제 마이크로서비스를 선택할까?
적합한 경우
✅ 대규모 팀으로 개발 ✅ 서비스별로 다른 확장 요구사항 ✅ 빠른 배포 주기 필요 ✅ 기술 실험과 혁신 중요
부적합한 경우
❌ 소규모 프로젝트 ❌ 제한된 리소스 ❌ 도메인 이해 부족 ❌ 분산 시스템 경험 부족
실제 사례: 넷플릭스
넷플릭스는 2008년부터 모놀리식에서 마이크로서비스로 전환했습니다.
결과:
- 1일 수십 번 배포 가능
- 글로벌 1억+ 사용자 지원
- 99.99% 가용성 달성
다음 강의
다음 강의에서는 마이크로서비스를 어떻게 분리할지 **도메인 주도 설계(DDD)**를 배웁니다.
핵심 정리
- 마이크로서비스는 독립적인 서비스들의 집합
- 모놀리식보다 복잡하지만 확장성과 유연성이 뛰어남
- 프로젝트 규모와 팀 역량에 따라 선택
- 넷플릭스, 아마존 등 대규모 서비스에서 성공적으로 사용 중