[INFRA-03] deploy.sh / rollback.sh 배포·롤백 스크립트
작업 내용 (설계 의도)
변경 사항
근거 TDD: ../TDD.md “인터페이스 시그니처 — 배포/롤백 스크립트 계약”, “실패 경로·동시성·멱등”. ADR-004. dev/prod 워크플로가 공통으로 호출할 배포 로직을 스크립트로 추출해 중복을 제거하고, 워크플로(INFRA-06/07)는 이 계약만 호출한다.
scripts/deploy.sh <env> <image_tag>:.env.<env>의DOCKER_TAG를image_tag로 치환 →docker compose -p sports-<env> -f docker-compose.yml -f docker-compose.<env>.yml up -d→/actuator/health폴링(최대 5분, 5s 간격) UP이면 exit 0, 아니면 exit 1.scripts/rollback.sh <env> <previous_image_tag>: 이전 태그로DOCKER_TAG치환 →up -d→ health 폴링. 목표 5분 내 복구(NFR).- 멱등: 같은 tag 재실행 시
up -dno-op 수렴. env 인자 검증(dev|prod 외 거부). - 스크립트는 override 파일명을 계약(
docker-compose.<env>.yml)으로만 참조 — 파일 존재는 런타임 요건.
롤백: 스크립트 자체는 무상태. 잘못 배포 시 rollback.sh <env> <prev>로 즉시 복구.
의존
- INFRA-02 (compose 커맨드 형태·프로젝트명 규약 확정)
다이어그램
처리 흐름
sequenceDiagram participant Wf as 워크플로 participant Sh as deploy.sh participant Co as docker compose Wf->>Sh: deploy.sh prod <sha> Sh->>Sh: .env.prod DOCKER_TAG 치환 Sh->>Co: -p sports-prod ... up -d Sh->>Sh: /actuator/health 폴링 5분 Sh-->>Wf: UP → exit 0 / 실패 → exit 1
테스트 케이스
deploy.sh dev latest가 dev 스택을 기동하고 health UP 시 exit 0을 반환한다- health가 5분 내 UP이 아니면 exit 1을 반환한다
deploy.sh xxx tag처럼 잘못된 env 인자를 거부한다(exit≠0)- 같은 tag로 재실행 시 no-op으로 멱등 수렴한다
rollback.sh prod <prev>가 이전 태그로 재배포하고 health UP을 확인한다.env.<env>의DOCKER_TAG만 치환하고 다른 키는 보존한다