초기 서비스는 하나의 Application으로 모든 기능을 관리하는 Monolithic 구조로 시작하는 경우가 많습니다.
기본 구조:
User
↓
Application
↓
Database
하지만 서비스 규모가 커지면 하나의 Application에 모든 기능이 포함되어 관리가 어려워집니다.
문제:
- 작은 변경도 전체 배포 필요
- 특정 기능만 확장 어려움
- 장애 영향 범위 증가
- 코드 관리 복잡
이때 사용하는 구조가 Microservice Architecture입니다.
Microservice 구조:
User Service
Order Service
Payment Service
Product Service
Notification Service
각 기능을 독립적인 Service로 분리하여 운영합니다.
이번 글에서는 Docker Compose 기반 Microservice 구조부터 Service 분리 방법, Container 설계, Network 구성, Database 운영 전략까지 알아보겠습니다.
Microservice Architecture란?
Microservice는 하나의 큰 Application을 여러 개의 작은 Service로 분리하는 설계 방식입니다.
Monolithic:
하나의 Application
↓
모든 기능 포함
Microservice:
User Service
↓
Order Service
↓
Payment Service
각 Service는 독립적으로 개발되고 배포됩니다.
Monolithic과 Microservice 비교
Monolithic 구조
Application
├── 회원
├── 주문
├── 결제
├── 상품
장점:
- 구조 단순
- 개발 빠름
단점:
- 확장 어려움
- 장애 영향 증가
Microservice 구조
User Service
Order Service
Payment Service
장점:
- 독립 배포
- 선택적 Scaling
- 장애 격리
단점:
- 운영 복잡도 증가
- Network 관리 필요
Docker Compose Microservice 기본 구조
예:
docker-compose.yml
services:
├── user-service
├── order-service
├── payment-service
└── database
각 Service는 독립 Container로 실행됩니다.
Docker Compose Service 분리 설계
잘못된 구조:
app-container
↓
모든 기능 포함
개선:
user-api
order-api
payment-api
장점:
- 필요한 Service만 수정
- 특정 Service만 Scale 가능
Docker Compose Microservice Container 구성
예:
services:
user-service:
image: user-api
order-service:
image: order-api
payment-service:
image: payment-api
구조:
User Container
Order Container
Payment Container
Docker Compose Microservice Network 구성
Microservice에서는 Service 간 통신이 중요합니다.
구조:
User Service
↓
Network
↓
Order Service
Compose Network:
networks:
backend:
각 Service는 같은 Network에서 통신합니다.
Docker Compose Service Discovery
Microservice에서는 Container IP를 직접 사용하면 안 됩니다.
잘못된 방식:
192.168.1.20
문제:
- Container 변경 시 주소 변경
- 관리 어려움
올바른 방식:
order-service:3000
Docker DNS가 자동 연결합니다.
Docker Compose Database 설계
Microservice에서는 Database 설계가 중요합니다.
공유 Database:
User Service
↓
Database
↓
Order Service
문제:
- 서비스 결합 증가
권장:
User Service
↓
User Database
Order Service
↓
Order Database
각 Service가 자신의 Database를 관리합니다.
Docker Compose API Gateway 구조
Microservice가 많아지면 외부 요청 관리가 필요합니다.
구조:
User
↓
API Gateway
↓
----------------
User Service
Order Service
Payment Service
----------------
API Gateway 역할:
- 인증
- Routing
- Rate Limit
- Logging
Docker Compose Microservice Scaling
Microservice의 장점은 필요한 부분만 확장할 수 있다는 것입니다.
예:
주문 증가:
Order Service
↓
Container 증가
결제 서비스:
그대로 유지
구조:
User Service x2
Order Service x10
Payment Service x3
Docker Compose Microservice CI/CD
각 Service별 배포가 가능합니다.
구조:
User Service 변경
↓
User Image Build
↓
User Container Deploy
전체 서비스 재배포가 필요 없습니다.
Docker Compose Microservice Monitoring
Service가 많아질수록 Monitoring이 중요합니다.
확인:
- Service 상태
- API Latency
- Error Rate
- Container Resource
구조:
Microservice
↓
Metrics
↓
Monitoring
↓
Alert
Docker Compose Microservice Logging
각 Service Log를 중앙 관리해야 합니다.
구조:
User Log
Order Log
Payment Log
↓
Central Logging
장점:
- 장애 분석
- 검색 가능
- 문제 추적
Docker Compose Microservice 보안
Service 간 통신 보호:
필요:
- 인증
- 권한 관리
- Secret 관리
- Network 분리
구조:
External Network
↓
API Gateway
↓
Private Service Network
Docker Compose Microservice 장애 대응
장애 발생:
Payment Service 오류
Microservice:
Payment만 영향
↓
다른 Service 유지
Monolithic:
전체 Application 영향
Docker Compose Microservice 운영 구조
Production:
User
↓
Load Balancer
↓
API Gateway
↓
Microservices
User Service
Order Service
Payment Service
Product Service
↓
Database
↓
Monitoring
Docker Compose Microservice Best Practice
추천:
- Service 역할 명확화
- 독립 Database 고려
- API Gateway 사용
- Network 분리
- CI/CD 자동화
- 중앙 Logging 구축
- Monitoring 적용
자주 묻는 질문
작은 서비스도 Microservice가 좋은가요?
아닙니다.
서비스 규모와 팀 구조에 따라 선택해야 합니다.
Microservice의 가장 큰 장점은 무엇인가요?
독립적인 배포와 확장입니다.
Docker Compose로 Microservice 운영이 가능한가요?
가능합니다.
소규모부터 중간 규모 환경에서 활용할 수 있습니다.
Microservice에서 가장 어려운 부분은 무엇인가요?
Container 실행보다 Service 간 통신, 데이터 관리, Monitoring 설계가 중요합니다.
마무리
Docker Compose Microservice 아키텍처는 서비스 규모가 성장했을 때 확장성과 안정성을 높이는 핵심 구조입니다.
최종 구조:
User
↓
API Gateway
↓
Microservice Cluster
↓
Database
↓
Monitoring
↓
CI/CD
Microservice 구조를 제대로 설계하면 특정 기능만 확장하고 장애 영향을 줄이며 대규모 서비스 운영 기반을 만들 수 있습니다.
다음 글에서는 실제 운영 환경에서 Docker Compose 기반 서비스를 Kubernetes로 이전하는 Docker Compose Kubernetes Migration 실전 방법을 알아보겠습니다.