[INFRA-02] docker-compose.lb.yml + nginx LB — backend 다중 인스턴스
작업 내용 (설계 의도)
변경 사항
근거 TDD: ../TDD.md “nginx LB 설계”·“compose 파일 소유 경계”, ADR-003. FR-1. ⑦ 전용 파일만 생성 — base·override(⑧)·observability(⑤) 무수정, 추가 -f로 병합.
docker-compose.lb.yml(신규, ⑦ 소유) —backend서비스에deploy.replicas: 3, host 포트 미노출(내부 8080만),healthcheck: /actuator/health.nginx-lb서비스(80/443 노출,infra/nginx/lb.conf마운트,depends_on: backend).infra/nginx/lb.conf(신규, ⑦ 소유) —upstream sports_backend { server backend:8080; }(이름 재사용),resolver 127.0.0.11 valid=10s+ 변수 proxy_pass로 replica 매 요청 재해석(라운드로빈),proxy_next_upstream error timeout http_502 http_503로 비정상 replica 우회.mcp.conf무수정.
롤백: -f docker-compose.lb.yml 미적용(오버레이 OFF) → backend 직접 노출 복귀, nginx-lb down.
의존
- 없음 (wave 1 기반). 런타임 선행: ⑧의
backend서비스 정의(base compose)가 존재해야 병합 유효.
다이어그램
처리 흐름
sequenceDiagram participant C as k6/클라이언트 participant N as nginx-lb participant D as Docker DNS participant B as backend replica C->>N: HTTP 요청 N->>D: resolve backend D-->>N: replica IP 3종 N->>B: 라운드로빈 프록시 B-->>N: 200 (비정상 시 next_upstream) N-->>C: 응답
테스트 케이스
docker compose -f docker-compose.yml -f docker-compose.lb.yml config가 exit 0으로 병합된다.nginx -t가lb.conf를 오류 없이 검증한다.- 3 replica 기동 후 반복 요청이 3개 인스턴스에 분산된다(access log·host 태그로 확인).
- replica 1개를 내리면 nginx가 남은 인스턴스로 페일오버하고 5xx가 발생하지 않는다.
- 오버레이 미적용 시 기존 backend 단일 노출 흐름이 그대로 동작한다(롤백 안전).