지금까지 무중단 배포 개념과 전략, 배포에 필요한 기술 스택을 학습했습니다.

본격적으로 프로젝트를 생성하여 환경 설정 후 블루그린, 롤링, 카나리 배포 전략 실습을 진행하겠습니다.

GitHub Repository의 script 디렉토리를 통해 각 배포 전략에 맞는 deploy.sh 파일을 확인하실 수 있습니다.

<aside> <img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/cb6212cb-2898-430e-808a-a921b31f12b9/485153d5-648a-4b6a-8b25-5dd81eb03638/252314.png" alt="https://prod-files-secure.s3.us-west-2.amazonaws.com/cb6212cb-2898-430e-808a-a921b31f12b9/485153d5-648a-4b6a-8b25-5dd81eb03638/252314.png" width="40px" />

https://github.com/ZeroDowntimeHub/zero-downtime-deployment/tree/main/script

</aside>

5.1. 브랜치 전략

제목을-입력해주세요_-001 (7).png

  1. 프로젝트를 생성하고, main 브랜치에 기본 셋팅을 합니다.
  2. main 브랜치를 본떠 bluegreen, rolling, canary 브랜치를 생성합니다. Github Actions 배포 파일에 bluegreen, rolling, canary 브랜치 push 트리거를 설정합니다.
  3. 각 배포 전략의 before, after 브랜치 내용을 push하여 자동 배포가 실행되게 합니다. 전략이름_before 브랜치는 해당 배포 전략 도입 전 셋팅을, 배포전략_after 브랜치는 해당 배포 전략을 도입하여 무중단 배포를 수행하는 브랜치입니다.
  4. before 브랜치는 빌드 결과물인 JAR 파일을 서버의 cicd 디렉토리로 옮깁니다. 이전 프로세스를 종료 시킨 후 구 버전의 JAR 파일을 old_build 디렉토리로 옮기고, 신 버전의 JAR 파일을 실행 시킵니다. 이전 프로세스를 종료시키고, 신 버전의 프로세스가 서비스되기까지 다운타임이 발생하게 됩니다.
  5. after 브랜치는 deploy.sh 파일을 실행하게 됩니다. 쉘 스크립트를 통해 구 버전의 JAR 파일은 old_build 디렉토리로 옮기고, 신 버전의 애플리케이션을 실행시킵니다. 헬스 체크를 통과하면 Nginx 설정파일을 동적으로 바꿔 로드 밸런싱할 포트를 변경합니다. 헬스 체크가 통과하지 않는다면 롤백 합니다. 마지막으로 구 버전의 애플리케이션을 안정적으로 종료합니다.

5.2. EC2 서버 환경 설정

5.2.1. Java와 Nginx 설치하기

먼저 Termius 를 이용하여 EC2 Ubuntu 서버에 SSH 원격 접속합니다.

1. 로컬 패키지 업데이트

sudo apt update

sudo apt update ****를 통해 로컬 패키지 목록을 최신 상태로 업데이트합니다. 즉, 패키지 목록을 새로 가져와 설치 가능한 최신 버전을 확인하는 과정입니다.

2. Java 17 설치하기