bluegreen_before 브랜치
블루그린 무중단 배포 전략 도입 전 환경을 구축합니다.
cd-bluegreen.yml
파일을 통해 JAR 파일을 업로드하고, 이전 프로세스를 죽이고 JAR 파일을 8081포트에서 실행합니다. 이 과정에서 다운 타임이 발생하게 됩니다.
bluegreen_after 브랜치
블루그린 전략 도입하여 무중단 배포를 실행합니다.
cd-bluegreen.yml
파일을 통해 deploy.sh
파일을 실행합니다.
- 현재 실행 중인 Spring Boot 애플리케이션 포트 식별
- 현재 실행 중인 Spring Boot 애플리케이션의 포트를 찾기 위해
ss
명령어를 사용하여 Java 프로세스를 필터링합니다.
- 새 포트 선택
- 현재 실행 중인 포트에 따라 새 애플리케이션을 배포할 포트를 선택합니다. 현재 포트가 8081이면 8082에 배포하고, 반대의 경우 8081에 배포합니다.
- 기존 JAR 파일 백업
- 기존에 실행 중이던
app-<포트>.jar
파일을 타임스탬프와 함께 old_build
폴더로 이동하여 백업합니다.
- 새 JAR 파일 배포
- 새로 빌드된 JAR 파일을
app-<새 포트>.jar
로 이름을 변경한 후 그린 포트에서 실행합니다.
- 헬스 체크
- 배포된 새 애플리케이션이 정상적으로 동작하는지
/actuator/health
엔드포인트를 통해 확인합니다. 10번의 시도 후에도 응답이 없으면 배포가 실패한 것으로 간주하고 롤백합니다.
- 헬스 체크 실패 시 롤백
- 헬스 체크 실패 시 새로 실행된 프로세스를 종료하고, 새로 배포된 JAR 파일을
old_build
폴더로 이동합니다. 이전에 백업된 JAR 파일을 다시 복원하여 원래의 애플리케이션을 복원합니다.
- Nginx 설정 업데이트
- Nginx 설정 파일에서 proxy_pass를 새 포트로 변경하여 새로운 애플리케이션으로 트래픽을 라우팅합니다.
- Nginx reload
- 변경된 설정이 적용되도록 Nginx를 reload합니다. 실패 시 배포를 중단합니다.
- 이전 애플리케이션 종료
- 기존 포트에서 실행 중이던 애플리케이션의 프로세스를 안전하게 종료합니다. 종료가 실패하면 강제로 종료합니다.
- 블루 그린 배포 완료
- 배포가 성공적으로 완료되었음을 출력하고, Nginx가 새로운 포트로 트래픽을 라우팅하게 됩니다.
6.1. 환경 셋팅
먼저 Termius 를 이용하여 EC2 서버에 SSH 원격 접속합니다.
6.1.1. Nginx 설정파일 수정
아래 명령어를 입력하여 Nginx 설정 파일을 수정합니다.
sudo nano /etc/nginx/sites-available/default