AI Briefing

배포 시간을 줄인 블루-그린 배포 도입기

·2025.11.05 00:00

롤링 업데이트의 불안정성과 긴 배포 시간을 해결하기 위해 블루-그린 배포로 전환했다.

기존 배포는 HAProxy 기반 롤링 업데이트 방식이었다. 서버를 절반씩 로드밸런서에서 제외했다가 다시 연결하는 과정에서 간헐적인 에러가 발생했고, 배포 실패 시에는 전체 서버가 다운되는 위험도 있었다. 서버 수가 늘수록 제외와 재연결에 걸리는 시간도 길어져 배포 효율이 떨어졌다.

이 문제를 해결하기 위해 블루-그린 배포를 도입했다. 운영 중인 환경을 Blue, 새 버전을 올리는 환경을 Green으로 나누고, 두 개의 고정 포트 중 사용하지 않는 포트에 먼저 배포한 뒤 검증이 끝나면 트래픽만 전환하는 방식이다. 전환은 Nginx 프록시 포트를 바꾸는 것으로 구현했다.

구현은 다음 흐름으로 진행됐다.

  • 실행 중인 포트를 확인해 현재 사용 중인 포트와 미사용 포트를 구분
  • 미사용 포트에 Spring Boot JAR를 배포하고 기동
  • /actuator/health를 이용해 최대 60초 동안 헬스 체크
  • sedNginx 설정의 프록시 포트를 새 포트로 변경
  • nginx -t로 문법 검증 후 nginx -s reload
  • 기존 포트의 서비스를 정지

배포 스크립트는 ./gradlew --build-cache :api:bootJar로 JAR를 만들고, scpsystemctl restart를 이용해 새 포트를 기동한 뒤 전환을 수행했다. 장애가 나면 정지된 기존 포트를 다시 기동하고 Nginx 포트를 되돌리면 즉시 롤백할 수 있다.

성과도 분명했다. 배포 시간은 변경 전 13분 30초 수준에서 변경 후 1분 54초로 줄어들었고, 약 5분의 1 수준으로 단축됐다. 또한 Jmeter로 60 threads, period 1, loop count 20 조건에서 총 1,200회 호출 테스트를 진행했을 때 에러율 **0%**를 확인했고, 단일 서버 환경에서도 무중단 호출이 유지됐다.

복잡한 신규 도구를 도입하지 않고도 기존 Nginx 설정만으로 안정성과 속도를 동시에 개선했다는 점이 핵심이다. 이후에는 신규 서비스뿐 아니라 기존 서비스에도 블루-그린 전략을 점진적으로 적용할 계획이다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.