
Infra
0. 들어가며
최근 여자친구와 카페를 갔다가 서로의 당근 판매 물품을 구경하던 도중 조금 재밌는 사실을 발견했습니다.


그것은 바로 같은 최신 버전의 당근 마켓 어플에서 동네를 변경하는 탭이 서로 다른 모습을 보이고 있다는 점이었습니다. 최근에 우연히 인프런에서 배포 관련한 무료 강의를 들었어서 그런 지 정말 이 현상이 재밌게 느껴졌습니다. 역시 같은 것을 보더라도 많이 알고 있으면 더 많은 것을 볼 수 있나 봅니다 ㅎㅎㅎ. 그래서 저도 보자마자 "아 이게 카나리 배포를 통해서 A/B 테스트하고 있는 것 같은데 ?"라는 생각을 하게 됐습니다. 다른 사람의 당근 어플을 볼 기회가 없어서 몰랐는데, 정말 우연히 발견하여 뭔가 신기했습니다.
그래서 이번 글에서는 이 경험을 바탕으로 여러 배포 전략에 알아보는 시간을 가져보려고 합니다! 배포 전략에는 정말 여러가지가 있지만, 이번 시간에는 다음과 같은 배포 전략에 대해서 알아보고, 정리해보려고 합니다.
- 롤링(Rolling) 배포
- 블루/그린(Blue/Green) 배포
- 카나리(Canary) 배포
- A/B 테스트
그럼 차근차근 알아보도록 하겠습니다! 렛츠고 ~
1. 내용 정리
1.1 롤링 배포
롤링 배포는 전체 시스템을 중단하지 않고, 새로운 버전을 점진적으로 배포하고 업데이트 하는 배포 전략입니다. 즉, 한 번에 전체를 업데이트하는 것이 아니라, 10개의 서버가 있다면 1개씩 업데이트를 진행하는 것이죠. 그림으로 한번 이해해 보도록 하겠습니다.

위 이미지와 같이 3개의 버전 V1인 서버들을 하나씩 버전 V2 서버로 업데이트하는 것이죠. 이 방식은 그럼 왜 사용하는 걸까요? 아무리 새로운 버전의 기능들을 테스트하고, 검증했다고 해도 유저의 예상치 못한 동작들에 버그가 발생할 수 있습니다. 그런데, 모든 서버를 이미 버전업을 해버리게 되면 다시 전체 시스템을 롤백해야 하는 상황에 놓이게 되는 것이죠. 그래서 하나씩 버전업을 하면서 테스트를 해보고, 문제가 없다면 서버 하나를 더 버전업하고, 문제가 더 이상 발생하지 않으면 남은 서버들도 버전업 하면 크리티컬한 문제들을 사전에 방지할 수 있게 된다는 장점이 있습니다.
그런데, 위에서 말한 내용을 읽어보면 모든 서버에 새로운 버전을 적용시키는 과정까지가 시간이 많이 걸린다는 것을 눈치챌 수 있습니다. 또한, 누군가는 새로운 버전의 기능들을 활용할 수 있고, 누군가는 이전 버전의 기능들을 사용하고 있는 유저 경험에도 좋지 않을 수 있습니다. 위 내용을 정리해보자면 다음과 같습니다.
[ 장점 ]
- 전체 시스템의 처리 능력을 대부분 유지할 수 있다.
- 점진적인 적용을 통해 리스크를 최소화할 수 있다.
[ 단점 ]
- 배포 속도가 느리다. 즉, 전체에 적용하기까지 오래 걸린다.
- 동시에 서로 다른 버전으로 서비스를 해야하므로 유저 경험에 좋지 않을 수 있다.
1.2 블루/그린 배포
블루/그린 배포는 이름에서도 뭔가 2가지로 나눠서 배포한다는 뉘앙스를 풍기고 있습니다. 맞습니다. "블루"라는 현재 운영 중인 서비스 환경과 "그린"이라는 새롭게 배포할 환경으로 구분합니다. 여기서 저도 살짝 헷갈렸는데, "그럼 배포 후에 블루와 그린이 뒤바뀌는 건가요?"라고 묻는다면 뒤바뀌는 것이 맞습니다. 즉, 블루와 그린은 운영 환경 2개를 번갈아 쓰는 구조이지, 블루는 운영, 그린은 개발 환경으로 고정되는 것이 아닙니다.

위 그림처럼 처음에는 블루 환경에서 운영을 하고 있다가 새로운 기능이 추가된 그린 환경으로 한 순간에 변환을 하는 배포 전략이 바로 블루/그린 배포 전략입니다. 롤링 배포에서는 하나씩 점진적으로 새로운 버전의 서버를 늘려나가는 단점을 블루/그린 배포 방식에서는 극복을 한 것이죠. Nginx 단에서 그냥 한 순간에 트래픽을 그린으로 옮기는 것이기 때문에 모든 사용자가 새로운 기능들을 경험할 수 있다는 점도 롤링 배포의 단점을 해결한 것이라고 할 수 있습니다.
그러나, 항상 trade-off가 존재하듯이 블루/그린 배포 방식도 단점이 있습니다. 그것은 바로 똑같은 운영 환경을 2개를 둬야 한다는 점입니다. 즉, 리소스 사용량이 많고, 그만큼 비용 또한 2배로 나갈 것입니다. 또한, 롤링 배포보다는 복잡한 설정과 관리가 필요합니다. 내용을 정리해 보면 다음과 같습니다.
[ 장점 ]
- 즉각적인 전환과 오류 발생 시, 롤백이 가능하다.
- 새로운 버전을 실제 환경과 동일한 조건에서 테스트 가능하고, 유저 경험이 동일하다.
[ 단점 ]
- 리소스 사용량이 많고, 비용도 더 많이 나온다.
- 복잡한 설정과 관리를 해줘야 한다.
1.3 카나리 배포
카나리 배포는 무엇일까요? 뭔가 이름에서도 감이 오지 않습니다. 카나리 배포는 "카나리아"라는 새로부터 유래되었다고 합니다. 과거 광부들이 탄광에서 유독 가스를 감지하기 위해 가스에 민감한 새를 먼저 들여보낸 것에서 유래한 배포 전략입니다. 즉, 새로운 버전의 환경을 일부 사용자들에게만 먼저 보여주면서 반응을 확인하는 것이죠.

위 이미지와 같이 로드 밸런서를 통해서 일정 비율의 유저만큼만 V2 버전의 운영환경으로 트래픽을 보내는 것을 확인할 수 있습니다. 즉, 일부 서버, 일부 사용자에게만 우선적으로 수정된 내용을 반영하는 것으로 롤링 배포 전략과 유사한 방법을 취하고 있습니다. 다만, 롤링 배포 전략과 큰 차이점은 카나리 배포는 사용자 트래픽을 조절하는 것이고, 롤링 배포 전략은 서버(인스턴스)를 기준으로 순차 교체 한다는 것입니다.
카나리 배포는 사용자를 기준으로 배포 대상을 지정할 수 있다고 합니다. 사용자가 가지는 특정 속성을 활용하는 방법으로 예를 들면, 식별자 Id, 지역, 연령대 등으로 조절해서 넓혀나갈 수 있을 것 같습니다. 요청마다 무작위로 고를거라면 로드밸런서에 의해서 자동으로 처리하게끔 구현할 수 있을 것 같습니다. 롤링 배포 전략과 비슷하기 때문에 얻는 이점도 비슷합니다. 5% -> 10% -> 20% -> 50% -> 100% 등으로 점진적으로 배포를 진행하여 안정성과 성능 지표 모니터링을 취할 수 있습니다. 그러나, 트래픽 비율 제어, 로드 밸런서 활용 등과 같이 설정과 관리가 어렵고 복잡하다는 단점이 있죠. 또한, 점진적 배포이기 때문에 사용자 경험이 일관되지 않을 수도 있습니다. 처음에 보여드린 당근마켓 이미지처럼요.
[ 장점 ]
- 점진적 배포를 통해서 리스크를 감소시킬 수 있다.
- 안정적인 배포와 성능 지표를 모니터링 할 수 있다.
[ 단점 ]
- 설정 및 관리가 어렵고, 복잡하다.
- 사용자 경험이 일관되지 않다.
1.4 A/B 테스트
A/B 테스트는 새로운 버전의 배포가 목적이 아니라, 특정 버전의 소프트웨어가 사용자 경험에 어떤 영향을 미치는지 비교해 보기 위한 목적으로 시도하는 테스트의 일종입니다. 기능 A와 기능 B에 대해서 어떤 기능을 썼을 때, 사용자 경험이 좋은지, 클릭률, 잔류 시간 등이 더 좋은지 확인하는 것이죠. 그렇기 때문에 별도의 배포 전략이라기보다는 카나리 배포와 같은 일정 트래픽을 분리하는 배포 전략을 통해서 A/B 테스트를 진행한다고 보는 게 맞는 것 같습니다.

처음 보여드린 여자친구와 저의 당근마켓 동네 탭이 서로 다르게 나타나는 것도 A/B 테스트 배포를 했기 때문에 나타난 현상이라고 생각합니다. A/B 테스트 배포인 건 확실한 것이 몇 시간 뒤에 다시 여자친구 핸드폰으로 당근마켓을 다시 들어가보니 제 화면과 일치한 화면이 나오는 것을 확인했습니다. 블루/그린 배포는 확실히 아닌 것 같고, 제 생각에는 A/B 테스트를 해보기 위해서 "카나리 배포"를 진행하고 있는 것이 아닌가 싶습니다. 그 이유는 기능이 크게 다르지 않고, 대표 동네를 한번 누르고, 드롭박스에서 한번 더 눌러서 동네를 선택하는 UI이냐, 아니면 동네들을 일렬로 보여주고 선택하는 UI이냐의 차이만 존재하기 때문이다. 어떤 배포전략을 취하고 있는지 궁금하여 검색을 해봤는데, 확실한 답이 담긴 글들을 찾지 못해서 아쉬웠습니다...ㅠ.
2. 정리하며
지금까지 3개의 배포 전략과 A/B 테스트에 대해서 알아보았습니다. 배포전략에 대해서 들어는 봤지만, 구체적인 동작 방식에 대해서는 몰랐습니다. 그러던 중, 인프런에서 배포와 관련된 무료강의가 듣고 지식을 쌓았고, 데이트 하던 도중에 당근마켓 어플 UI가 서로 다른 것을 보고, 이렇게 정리하는 시간까지 올 수 있었던 것 같습니다.
이번 경험을 통해서 더 많이 배우고 싶고, 소프트웨어 기법들에 대해서도 더 공부하고 싶은 마음이 커진 것 같습니다. 모르고 보는 것과 알고 보는 것의 차이를 크게 느꼈던 것 같습니다. 개발을 꿈꾸는 여러분들도 일상 속에서 마주하는 사소한 경험들에서 숨겨진 소프트웨어의 기법들을 찾아내는 재미를 느껴보셨으면 좋겠습니다! 무료 강의는 아래 래퍼런스에 남겨놓도록 하겠습니다. 그럼 남은 3월도 화이팅입니다!
3. Reference
'Developer > Infra' 카테고리의 다른 글
| [Infra] CDN에 대해서 (with. AWS CloudFront) (0) | 2026.03.25 |
|---|---|
| [Docker] 가득찬 EC2 서버로 인한 API 응답 오류 해결하기 (0) | 2025.12.10 |
| [Nginx] Reverse Proxy 개념 및 흐름 완벽 이해하기 (1) | 2025.12.09 |
