도커 로드밸런서 (Docker Load Balancer) 노트 정리
1️⃣ 로드밸런서란 무엇인가
1) 개념
- 여러 서버에 들어오는 요청을 나눠주는 역할
- 한 서버에만 요청이 몰리는 것을 방지
2) 왜 필요한가
- 트래픽 증가 시 서버 하나로는 감당 불가
- 장애 발생 시 서비스 중단 방지
- 응답 속도 개선 (분산 처리)
2️⃣ 도커에서 로드밸런싱이 필요한 이유
1) 컨테이너 특성
- 도커는 같은 앱을 여러 개 띄우기 쉬움
- 예:
app 컨테이너 3개
2) 문제 상황
- 클라이언트 → 어느 컨테이너로 갈지 모름
- 특정 컨테이너에만 요청이 몰릴 수 있음
➡️ 그래서 중간에 로드밸런서가 필요
3️⃣ 전체 구조 (핵심 흐름)
1) 흐름
사용자 요청 ↓ 로드밸런서 (Nginx 등) ↓ 여러 개의 컨테이너 (app1, app2, app3)
2) 역할 분리
구성 | 역할 |
클라이언트 | 요청 보내는 사용자 |
로드밸런서 | 요청 분배 |
컨테이너들 | 실제 처리 |
4️⃣ 대표적인 방식 (중요)
1) Reverse Proxy 방식 (가장 많이 사용)
- 로드밸런서가 모든 요청을 대신 받음
- 내부 서버로 전달
- 대표 도구
- Nginx
- HAProxy
➡️ 실무에서 거의 이 구조
2) Round Robin 방식
- 요청을 순서대로 분배
요청1 → app1 요청2 → app2 요청3 → app3 요청4 → app1
➡️ 가장 단순한 알고리즘
3) 기타 방식 (참고)
- Least Connections (연결 적은 서버로)
- IP Hash (같은 사용자 → 같은 서버)
5️⃣ Docker + Nginx 로드밸런서 구성 개념
1) 핵심 아이디어
- Nginx도 컨테이너로 띄운다
- 내부 네트워크로 app 컨테이너 연결
2) 구조
[nginx container] ← 외부 접속 (포트 80)
↓
[app container 1]
[app container 2]
[app container 3]3) 핵심 설정 (개념 수준)
upstream backend {
server app1:8080;
server app2:8080;
server app3:8080;
}
server {
location / {
proxy_pass http://backend;
}
}➡️
upstream이 로드밸런싱 대상6️⃣ Docker Compose에서의 구성
1) 핵심 포인트
- 같은 네트워크에 묶으면
- 컨테이너 이름으로 통신 가능
2) 예시 구조
services:
nginx:
image: nginx
ports:
- "80:80"
app1:
build: .
app2:
build: .
app3:
build: .➡️ nginx → app1/app2/app3로 분배
7️⃣ 장점 vs 한계
장점
- 확장 쉬움 (컨테이너만 추가)
- 장애 대응 가능
- 트래픽 분산
한계
- 설정 복잡 (초반 진입장벽 있음)
- 상태 관리 어려움 (세션 문제)
8️⃣ 중요한 실무 포인트 (이건 반드시 이해)
1) Stateless 설계 필요
- 서버마다 상태가 다르면 문제 발생
- 해결:
- DB 사용
- Redis 세션 저장
2) Health Check
- 죽은 컨테이너로 요청 보내면 안됨
- Nginx / HAProxy에서 체크 가능
3) 스케일링
- 컨테이너 개수 늘리면 자동 확장 효과
9️⃣ 한 줄 핵심 정리
도커 로드밸런서는여러 컨테이너로 요청을 분산시켜 안정성과 성능을 확보하는 구조다.
🔥 주의할 점
❌ “도커만 쓰면 자동으로 로드밸런싱 된다”
➡️ 직접 Nginx 같은 걸 붙여야 한다
❌ “컨테이너 여러 개 띄우면 끝”
➡️ 트래픽 분배 없으면 의미 없음
❌ “로컬에서만 해보면 된다”
→ 위험한 생각
➡️ 실제는 네트워크, 세션, 장애 대응 → 이게 핵심
Share article