본문 바로가기

infra

[CI/CD] 가장 안전한 배포, 블루-그린(Blue-Green) 배포

 

[infra] - [CI/CD] 가장 기본적인 무중단 배포, 롤링 업데이트(Rooling Update)

 

롤링 업데이트는 간단하고 효율적이지만, 배포 중 버전이 섞이는 문제와 장애 발생 시 롤백이 느리다는 명확한 한계가 있었다. 

배포로 인한 장애 위험을 극도로 줄이고, 문제가 생겼을 때 1초 만에 이전 버전으로 되돌리기 위해서는
안정성에 모든 것을 건 블루-그린 배포 전략을 고려할 수 있다!

 

블루-그린 배포란?

 

똑같은 구성의 운영 환경을 두 세트 준비하여, 서비스 중단 없이 안전하게 배포를 완료하는 전략

  • 블루(Blue) 환경 : 현재 운영되어 사용자들이 접속하고 있는 실 서비스 환경 (구버전)
  • 그린(Green) 환경 : 새로 배포할 버전이 담길, 사용자에게는 노출되지 않은 환경 (신버전)

이 두 환경에 대한 트래픽을 라우터(Load Balancer 등)를 이용해 한 번에 전환하는 것이 핵심

 

 

블루-그린 배포의 동작 방식

 

  1. 초기 상태 : 모든 사용자 트래픽은 현재 운영 중인 블루 환경(v1)으로 향하고 있음
  2. 신버전 배포 : 그린 환경에 신버전(v2)을 배포. 이 과정은 실제 사용자 트래픽에 아무런 영향을 주지 않으므로, 여유롭게 진행할 수 있음
  3. 그린 환경 테스트 : 그린 환경이 실제 운영 환경과 완전히 동일하기 때문에, 이곳에서 신뢰도 높은 최종 테스트 수행 가능
  4. 트래픽 전환 (Routing Switch) : 모든 테스트가 완료되면, 라우터가 트래픽을 블루 환경에서 그린 환경으로 한 번에 전환. 이 전환은 거의 즉시 이루어짐
  5. 배포 완료 : 이제 모든 사용자는 신버전(v2)이 배포된 그린 환경에 접속하게 됨. 기존 블루 환경은 혹시 모를 상황을 대비한 스페어로 대기 상태가 됨

 

 

블루-그린 배포의 장점

 

블루-그린 배포는 롤링 업데이트의 단점을 명쾌하게 해결한다.

  • 즉각적인 롤백 가능
    • 신규 버전(그린)에서 심각한 오류가 발견되면, 라우터가 가리키는 방향을 다시 블루 환경으로 되돌리기만 하면 됨
    • 롤백이 단 몇 초만에 완료되므로 장애에 매우 빠르고 안전하게 대처 가능
  • 신뢰도 높은 최종 테스트
    • 실제 운영 환경과 100% 동일한 환경에서 신규 버전을 테스트할 수 있음
    • 사용자에게 영향을 주지 않으면서도, 배포 전에 발생할 수 있는 대부분의 문제를 미리 발견하고 해결 가능
  • 버전 공존 문제 해결
    • 배포 중 트래픽이 신버전과 구버전으로 분산되는 롤링 업데이트와 달리, 트래픽 전환 시점에 모든 사용자가 일괄적으로 신버전으로 넘어감
    • 버전 충돌로 인한 호환성 문제를 원천적으로 방지
여기서 '커넥션 풀(Connection Pool)이란?
: 데이터 베이스 연결(Connection)을 미리 여러 개 만들어 pool에 저장해 놓고, 필요할 때마다 빌려 쓰고 반납하는 데이터베이스 연결 관리 기술

애플리케이션이 데이터베이스에 데이터를 요청하려면, 먼저 데이터베이스와 '연결'하는 과정이 필요
이 연결을 새로 만드는 작업은 생각보다 비용이 비싸고 시간이 걸리는 작업이므로, 사용자 요청마다 연결 작업을 새로하면 서비스 전체의 성능이 크게 떨어지게 됨

→ 블루(Blue) 환경은 계속 운영 중이었으므로, 커넥션 풀에 사용 가능한 연결이 충분히 준비된 상태
→ 그린(Green) 환경은 커넥션 풀이 비어있거나 최소한의 연결만 가진 상태일 수 있음
그린 환경에 갑자기 모든 트래픽을 보내면 한꺼번에 여러 개의 연결을 만들어야 하고, 병목 현상 발생 및 성능 저하로 이어짐
웜업(Warm-up)
: 위와 같은 병목 현상을 막기 위해, 그린 환경에 미리 약간의 요청을 보내 커넥션 풀을 충분히 채워두는 과정

 

 

블루-그린 배포의 단점 및 고려사항

 

몇 가지 단점과 현실적인 제약이 존재한다.

  • 리소스 비용 2배
    • 가장 큰 단점
    • 동일한 규모의 환경을 2세트 유지해야 하므로 서버, 데이터베이스 등 인프라 자원이 정확히 2배로 필요
  • 데이터베이스 호환성 문제
    • 두 환경을 운영하는 동안 데이터베이스 관리가 까다로움
    • 신버전에서 데이터베이스 스키마 변경이 필요한 경우, 구버전과 신버전이 동시에 해당 데이터베이스를 바라볼 때 문제 발생 가능
    • 이를 해결하기 위해, 스키마가 구/신버전 모두와 호환되도록 설계하거나 별도의 데이터 마이그레이션 전략을 세워야 함
  • 준비 시간(Warm-up) 필요성
    • 그린 환경으로 갑자기 모든 트래픽이 몰리면 서버의 캐시가 비어있거나 커넥션 풀이 준비되지 않아 일시적인 성능 저하 발생 가능
    • 트래픽 전환 전 충분한 '웜업' 과정이 필요할 수 있음

 

 

 

안정성이 무엇보다 중요하다면, 비용이라는 확실한 단점을 무릅쓰더라도 블루-그린 배포가 적합한 전략이 될 수 있다.

 

하지만 블루-그린 배포 역시 트래픽을 '전부' 전환하는 올인 방식,
"전체 사용자가 아닌 극소수의 사용자에게만 신규 버전을 먼저 보여주고 반응을 살피기 위해서는?"

카나리(Canary) 배포 전략 선택 가능!

포스팅 보러가기 >