서비스 운영 전략 실습 목록
실습 환경
- Docker / Docker Compose
- Nginx (로드밸런서)
- 간단한 Python Flask or Node.js 앱
실습 1 - Nginx 로드밸런싱
목표: 두 개의 앱 컨테이너를 Nginx로 로드밸런싱
# docker-compose.yml
services:
app1:
image: myapp:v1
container_name: app1
app2:
image: myapp:v1
container_name: app2
nginx:
image: nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf# nginx.conf
upstream backend {
server app1:8000;
server app2:8000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}확인: curl http://localhost 반복 → 두 컨테이너에 번갈아 요청 가는지 확인
실습 2 - Rolling 배포 시뮬레이션
목표: 컨테이너 하나씩 v1 → v2로 교체하며 서비스 유지 확인
# v2 이미지 빌드 후
docker-compose up -d --no-deps --build app1
# 잠시 후
docker-compose up -d --no-deps --build app2확인: 배포 중 while true; do curl http://localhost; sleep 0.5; done 실행 → 서비스 끊김 없는지 확인
실습 3 - Blue-Green 배포
목표: Blue(v1) → Green(v2) 전환 후 Nginx upstream 변경
# Green 환경 시작
docker-compose -f docker-compose.green.yml up -d
# Nginx upstream 전환
sed -i 's/blue/green/' nginx.conf
nginx -s reload확인: 전환 전후 응답 버전 확인
실습 4 - 헬스체크 + 자동 제거
목표: 컨테이너 하나를 강제로 죽였을 때 Nginx가 자동으로 제외하는지 확인
upstream backend {
server app1:8000 fail_timeout=5s max_fails=2;
server app2:8000 fail_timeout=5s max_fails=2;
}# app1 강제 종료
docker stop app1
# 요청 확인 - app2로만 가야 함
curl http://localhost체크리스트
- 실습 1 완료 - Nginx 로드밸런싱
- 실습 2 완료 - Rolling 배포
- 실습 3 완료 - Blue-Green 배포
- 실습 4 완료 - 헬스체크 자동 제거