서비스 운영 전략 실습 목록

실습 환경

  • 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 완료 - 헬스체크 자동 제거