← 블로그 목록

Developer Knowledge

개발자가 알아야 할 지식: 카나리 배포, 배포는 스위치가 아니라 관찰 가능한 실험이다

카나리 배포를 작은 트래픽, 자동 중단 기준, 관측 가능성, 롤백 전략 관점에서 정리합니다.

Google SRE
  • 개발자가 알아야 할 지식
  • Deployment
  • Reliability
  • Operations

배포는 코드를 서버에 올리는 순간으로 보이지만, 운영 관점에서는 새 버전이 실제 사용자 앞에서 어떤 행동을 하는지 확인하는 과정입니다.

왜 개발자가 알아야 하나

카나리 배포는 새 버전을 모든 사용자에게 한 번에 열지 않고, 작은 비율의 트래픽이나 제한된 사용자군에 먼저 노출하는 방식입니다. 목표는 “문제가 없기를 바라는 것”이 아니라 문제가 있을 때 피해 범위를 작게 유지하면서 빨리 발견하는 것입니다.

개발자가 이 개념을 알아야 하는 이유는 많은 장애가 코드 자체보다 배포 방식에서 커지기 때문입니다. 기능은 테스트를 통과했더라도 실제 데이터, 실제 브라우저, 실제 네트워크, 실제 사용 패턴에서 다른 결과를 낼 수 있습니다.

좋은 카나리 배포는 릴리즈를 감으로 진행하지 않습니다. 어떤 지표가 나빠지면 멈출지, 얼마나 기다릴지, 어떤 경로로 되돌릴지, 이전 버전과 데이터가 호환되는지까지 함께 설계합니다.

핵심 개념

첫 번째는 노출 범위입니다. 전체 트래픽의 1%, 내부 사용자, 특정 지역, 특정 API 경로처럼 위험을 작게 자를 수 있어야 합니다. 노출 범위가 작지 않으면 카나리라는 이름만 붙은 전체 배포가 됩니다.

두 번째는 판정 기준입니다. 에러율, 지연 시간, 결제 실패율, 주요 전환율, 로그 경고처럼 새 버전의 건강 상태를 보여주는 지표가 있어야 합니다. 단순히 서버가 살아 있다는 신호만으로는 부족합니다.

세 번째는 되돌리기입니다. 카나리는 실패를 전제로 합니다. 이전 버전으로 돌아갈 수 있는지, 데이터 마이그레이션이 되돌릴 수 없는 변경을 만들었는지, 클라이언트가 새 응답을 캐시했는지 확인해야 합니다.

작은 예시 또는 체크리스트

예를 들어 결제 API의 새 검증 로직을 배포한다고 합시다. 전체 사용자를 한 번에 바꾸는 대신 내부 계정과 1% 트래픽에 먼저 적용하고, 승인 성공률과 외부 결제사 오류 코드를 비교합니다. 실패율이 기준을 넘으면 자동으로 이전 버전으로 돌리고, 문제 요청의 payload와 trace를 남겨 원인을 확인합니다.

  • 카나리 대상이 전체 사용자 피해를 충분히 줄일 만큼 작은가?
  • 새 버전과 이전 버전을 비교할 핵심 지표가 정해져 있는가?
  • 지표가 나빠졌을 때 자동 중단이나 빠른 롤백 경로가 있는가?
  • DB 스키마, 캐시, 메시지 이벤트가 이전 버전과 함께 동작하는가?
  • 카나리 기간이 너무 짧아 지연된 오류를 놓치고 있지 않은가?
  • 성공 판정과 확대 기준이 배포 전에 문서화되어 있는가?

실무에서 자주 생기는 오해

  • “소수 사용자에게만 열면 카나리다”라는 오해가 있습니다. 관측 지표와 중단 기준이 없으면 단순한 부분 배포일 뿐입니다.

  • “카나리는 프론트엔드 기능 플래그와 같다”도 부족합니다. 서버 배포, 데이터 변경, 외부 연동, 운영 알림까지 함께 봐야 합니다.

  • “문제가 나면 롤백하면 된다”는 말도 조심해야 합니다. 데이터가 이미 변했거나 클라이언트 계약이 바뀌면 롤백이 생각보다 어렵습니다.

  • “테스트가 충분하면 카나리가 필요 없다”도 현실적이지 않습니다. 테스트는 알려진 조건을 확인하고, 카나리는 실제 환경의 차이를 확인합니다.

오늘 바로 적용해보기

다음 배포 하나를 골라 어떤 지표가 나빠지면 멈출지 먼저 적어보세요.

배포 전 체크리스트에 이전 버전과의 데이터 호환성 항목을 추가하세요.

카나리 실패 로그를 나중에 재현할 수 있도록 release version, user group, trace id를 함께 남기세요.

더 알아보기

오늘의 takeaway

카나리 배포는 천천히 배포하는 예절이 아니라, 실패를 작게 만들고 배움을 빠르게 얻는 운영 장치입니다.