서비스 사용자가 증가하면 하나의 Container만으로 모든 요청을 처리하기 어렵습니다.
이때 여러 Application Container를 실행하고 요청을 적절하게 분배하는 구조가 필요합니다.
이 역할을 담당하는 것이 Load Balancer입니다.
기본 구조:
사용자
↓
Load Balancer
↓
Application Container 1
Application Container 2
Application Container 3
Load Balancer는 다음 기능을 제공합니다.
- Traffic 분산
- 장애 Container 제외
- 서비스 안정성 향상
- Scaling 지원
- 무중단 배포 지원
이번 글에서는 Docker Compose 환경에서 Nginx Load Balancer 구성 방법부터 Container 분산 처리, Healthcheck 연동, Production 운영 구조까지 알아보겠습니다.
Load Balancer란 무엇인가?
Load Balancer는 여러 서버 또는 Container로 들어오는 요청을 분산하는 시스템입니다.
기존 구조:
사용자
↓
Application 1개
↓
처리
문제:
Traffic 증가
↓
부하 증가
↓
서비스 지연
Load Balancer 적용:
사용자
↓
Load Balancer
↓
Container 여러 개
결과:
- 요청 분산
- 성능 향상
- 장애 대응 가능
Docker Compose Load Balancer 구조
일반적인 Production 구조:
Internet
↓
Nginx Load Balancer
↓
App Container 1
App Container 2
App Container 3
↓
Database
역할:
Nginx:
Traffic 관리
Application:
실제 서비스 처리
Database:
데이터 저장
Docker Compose Nginx Load Balancer 구성
docker-compose.yml:
services:
nginx:
image: nginx:latest
ports:
- "80:80"
app:
image: my-app
expose:
- "3000"
구조:
외부
↓
Nginx 80 Port
↓
App 3000 Port
Docker Compose Nginx upstream 설정
nginx.conf:
upstream backend {
server app:3000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
동작:
사용자 요청
↓
Nginx
↓
App Container
Docker Compose 여러 Container Traffic 분산
Scaling 적용:
docker compose up -d --scale app=3
결과:
app-1
app-2
app-3
Nginx:
upstream backend {
server app:3000;
}
Docker DNS가 여러 Container IP를 찾아 요청을 분산합니다.
Docker Compose Load Balancer 알고리즘
대표 방식:
Round Robin
가장 기본 방식
구조:
요청1 → Server1
요청2 → Server2
요청3 → Server3
Least Connections
연결이 적은 Server로 전달
구조:
현재 연결 수 확인
↓
부하 낮은 Container 선택
IP Hash
사용자 IP 기준 분배
장점:
같은 사용자가 같은 Server 접근 가능
Docker Compose Healthcheck와 Load Balancer 연결
운영 환경에서는 장애 Container를 제외해야 합니다.
구조:
Container
↓
Healthcheck
↓
정상
↓
Traffic 전달
장애:
unhealthy
↓
Traffic 제거
예:
healthcheck:
test:
- CMD
- curl
- localhost:3000
interval: 10s
retries: 3
Docker Compose Nginx 장애 처리
Application Container 장애:
기존:
App1 정상
App2 오류
App3 정상
Load Balancer:
App1 사용
App3 사용
App2 제외
서비스 유지 가능
Docker Compose SSL HTTPS Load Balancer
Production에서는 HTTPS 적용이 필수입니다.
구조:
사용자
↓
HTTPS
↓
Nginx
↓
Application
Nginx 역할:
- SSL 인증서 관리
- HTTPS 종료
- 내부 HTTP 전달
Docker Compose Reverse Proxy 구조
Nginx는 Reverse Proxy 역할도 수행합니다.
구조:
Client
↓
Nginx
↓
Private Container Network
↓
Application
장점:
- Container Port 숨김
- 보안 강화
- Traffic 제어
Docker Compose Load Balancer와 Blue Green 배포
Load Balancer는 무중단 배포에서도 중요합니다.
구조:
Nginx
↓
Blue Version
Green Version
전환:
Blue
↓
Green
Traffic만 변경하면 됩니다.
Docker Compose Load Balancer와 Canary 배포
Canary도 Traffic 비율 조절이 가능합니다.
예:
upstream app {
server app-old:3000 weight=9;
server app-new:3000 weight=1;
}
결과:
기존 90%
새 Version 10%
Docker Compose Production Load Balancer 구조
실제 서버:
사용자
↓
Cloud Load Balancer
↓
Nginx
↓
Application Container 여러 개
↓
Redis
↓
Database
↓
Backup
Docker Compose Load Balancer 보안 설정
권장:
- Application Port 외부 공개 금지
- HTTPS 사용
- Firewall 설정
- Access Log 관리
- Rate Limit 적용
구조:
Internet
↓
80/443
↓
Nginx
↓
Private Network
Docker Compose Load Balancer 성능 최적화
설정:
Worker 증가:
worker_processes auto;
Connection 제한:
worker_connections 1024;
Keep Alive:
keepalive_timeout 65;
효과:
- 동시 접속 증가
- 응답 속도 개선
Docker Compose Load Balancer Monitoring
확인:
Traffic:
- Request 수
- Response Time
Container:
- CPU
- Memory
Nginx:
- Error Rate
- Connection
구조:
Traffic
↓
Load Balancer
↓
Monitoring
↓
Alert
Docker Compose Load Balancer Best Practice
운영 추천:
- Nginx Reverse Proxy 사용
- Healthcheck 적용
- HTTPS 적용
- Application Port 비공개
- Scaling 구성
- Monitoring 연결
최종 구조:
User
↓
Nginx Load Balancer
↓
App Container x N
↓
Database
↓
Backup
↓
Monitoring
자주 묻는 질문
Docker Compose에서도 Load Balancer 사용이 가능한가요?
가능합니다.
Nginx, Traefik 같은 Reverse Proxy를 연결하면 구현할 수 있습니다.
Container를 여러 개 실행하면 자동 분산되나요?
Load Balancer 설정이 필요합니다.
Nginx와 Cloud Load Balancer 차이는 무엇인가요?
Cloud Load Balancer는 외부 Traffic 관리, Nginx는 내부 Application Traffic 관리에 많이 사용됩니다.
작은 서버에서도 필요한가요?
서비스 안정성이 중요하다면 작은 규모에서도 활용할 수 있습니다.
마무리
Docker Compose Load Balancer 구성은 여러 Container를 안정적으로 운영하기 위한 핵심 기술입니다.
최종 구조:
사용자
↓
Load Balancer
↓
Container 여러 개
↓
Database
↓
Monitoring
Scaling, Blue Green, Canary, 무중단 배포 모두 Load Balancer 구조와 함께 사용할 수 있습니다.
다음 글에서는 장애 발생 시에도 서비스를 유지하는 Docker Compose 고가용성(HA) 구성 방법을 알아보겠습니다.