현재 모모의 인프라 아키텍처는 가용 영역(AZ) A와 B마다 WAS 인스턴스가 하나씩 존재하는 구조입니다.

로드밸런서(ELB: Elastic Load Balencer)가 라운드 로빈 방식으로 요청을 처리할 가용 영역을 선택하여 트래픽을 라우팅합니다.

이 설정을 활용할 수 있는 무중단 배포 방식을 찾아보았습니다.

롤링(Rolling)

롤링 배포는 인스턴스를 점진적으로 구 버전에서 신 버전으로 옮기는 방식입니다. 적은 양의 서버로 배포가 가능하지만, 인스턴스 삭제 권한 부재와 구·신 버전 공존에 따른 API 호환성 문제로 배제하였습니다.

카나리(Canary)

카나리 배포는 롤링 배포와 유사하나 소수의 인스턴스에 먼저 배포 후 성능을 모니터링하여 문제가 없으면 전체로 확장 배포하는 방식입니다. 문제 발생시 빠른 롤백과 영향을 받는 사용자가 적으나, 여전히 구·신 버전 공존에 따른 API 호환성 문제가 있으며 구·신 버전의 모니터링의 필요성을 찾지 못하여 배제하였습니다.

블루그린(Blue Green)

블루 그린 배포는 신 버전을 배포한 그린(Green) 환경을 준비하고 트래픽을 구 버전인 블루(Blue)에서 전환하는 방식입니다. 문제가 발생하면 블루 환경으로 트래픽을 빠르게 돌려 롤백할 수 있습니다.

세 가지 배포 방식 중 API 호환성 문제의 영향력이 현저히 적어 블루 그린 배포 방식을 선택하였습니다.

그러나 블루 그린 또한 배포 과정에서 서버 비용이 2배로 발생과 aws cli를 통한 ELB 접근 권한 부재로 다른 방안을 찾아야 했습니다.

블루그린 적용 방안

Code Deploy

Code Deploy에 대한 러닝 커브와 CSP 기능에 대한 의존성으로 인해 배제하였습니다.

Nginx와 CI/CD

Nginx 를 이용하여 단일 인스턴스 서버 내 포트를 활용하여 블루 그린 방식을 재현하였습니다.

프로세스

  1. 블루 - WAS: 8080 포트, Actuator: 9997 포트(실제와 다름)로 운용 중
  2. 그린 - WAS: 8081 포트, Actuator: 9998 포트(실제와 다름)로 배포
  3. 그린 WAS에 헬스체크를 통해 서버 배포가 완료된 것을 확인