Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions 챕터_24/상범.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 챕터 24 지속적 배포

기술환경이 빠르게 변하고 변화의 방향도 예측하기 어려운 상황속에서 제품이 경쟁력을 갖추기 위해서는 시장에 신속하게 출시할 수 있는 능력이 중요하다

출시 후에는 지속적인 배포를 통해 업데이트해야 한다. 빠르게!

코드의 가치는 서브밋 시점이 아니라 고객이 그 기능을 이용할 때 실현된다!

## 지속적 배포 이디엄 @구글

지속적 배포 그리고 애자일 방법론의 핵심 교리는 **작은 변경들을 자주 배포할수록 품질이 높아진다는 것**이다. '빠를수록 안전하다'(faster is safer)라는 말이다

처음에는 신버전 소프트웨어를 자주 출시하는게 위험해보일 수 있지만 오히려 변경사항이 더 많거나 새로운 코드가 많아서 모두 철저하게 테스트 하기 어려울 수 있다. 두 릴리스 사이의 변경이 적을수록 문제를 해결하기 쉽다

## 속도는 팀 스포츠다: 배포를 관리 가능한 조각으로 나누기

유튜브는 거대한 모놀리식 파이썬 애플리케이션 이였고, 릴리스 한번 하려면 모두가 고통 분담해야됐음. 원격 QA팀은 수작업으로 진행하는 50시간짜리 회귀테스트도 거쳐야 한다고 함 ㄷ ㄷ ㄷ

릴리스 비용이 늘고 위험이 커지면 '본능적'으로 릴리스 주기를 늦춰 안정성을 확보할 기간을 늘리려 한다.

하지만 이렇게 해서 얻는 안도감은 짧은 기간만 유지될 뿐, 멀리 보면 팀의 속도가 느려지고 팀과 고객 모두 좌절시키는 선택임. 답은 비용을 줄이고 규율을 강화하고, 위험에 점진적으로 대응하는 것이다.

당장의 안정을 위한 프로세스 수정에 저항하고 장기적인 아키텍처 개선에 투자해야 하는게 핵심이라고 함. 이유는 눈 앞의 안정만 추구한다면 낡은 개발 프로세스로 회귀하고 쉽다고 함

> 눈 앞의 안정만 보고 프로세스를 무겁게 하면, 결국 예전 낡은 방식(느린 배포, 비효율적인 협업)으로 되돌아가기 쉽다라는 말 같네요. 긴 수명으로 보고 따졌을 때 득이 더 많다~

## 변경을 격리해 평가하자: 기능 플래그로 보호하기

제곧내

## 기민해지기 위한 분투: 릴리스 열차 갖추기

릴리스 주기를 예측할 수 있도록 두가지 프로세스를 녹여냈다

1. '완벽한 바이너리는 없음'을 인정하기. 소프트웨어는 본디 복잡할 수 밖에 없음을 인정하자
> 필리핀의 한 섬에서만 사용하는 독특한 방언 때문에 검색 결과 대신 빈페이지를 보여주는 버그를 수정하는 게 중요한 신기능 출시를 미룰 만큼의 가치가 있는지를 판단해야 했던 구글만이 경험할 수 있는 재밌는 일화를 설명해준게 기억에 남았음
2. '릴리스 열차 시간에 늦으면 기다리지 않고 출발할 것'이니 릴리스 시한을 지켜라
> 열차 라는 비유가 찰떡이였음. 릴리스 열차를 놓친 엔지니어는 몇 시간 후 출발 할 다음 열차를 타면 된다~

## 품질과 사용자에 집중: 사용할 기능만 배포하자

코드 모듈화를 통해 우리는 동적으로 설정 가능한 배포 전략을 구사할 수 있음

동적 배포를 활용하면 각 고객에게 의미 있는 코드만 작게 구성한 바이너리 배포 가능, A/B 테스트도 가능~

## 팀 문화 바꾸기: 배포 규율 세우기

'늘 배포하라' 정책은 여러 측면에서 개발자 속도를 높여준주고 개발 프로젝트에 도움이 된다

릴리스 열차가 자주 오면 이전의 '좋은' 상태와의 차이가 적어서 문제가 생겨도 살펴봐야 할 범위가 좁혀지니까~~

> 원점 회귀 쪽 읽다가 생각난건데, 혹시 다들 배포 버전 단위 롤백 정책이 있으신가요? 있다면 어떤식으로 하시고 계시나요~?
Copy link
Contributor Author

@sangbooom sangbooom Aug 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제 이전 회사에선 Next.js 서비스를 컨테이너로 빌드해서 Artifact Registry에 저장하고, Google Cloud Run에서 리비전 단위로 배포했어요
새 버전은 새 리비전으로 배포한 뒤에 서비스의 트래픽 스플리팅으로 점진 전환하고, 문제가 발견되면 직전 정상 리비전으로 트래픽을 100% 되돌렸슴다
이미지는 환경변수 설정까지 리비전으로 함께 롤백했구요
DB 변경은.. 따로 해줬던 거 같고
콜드 롤백 방지로 이전 리비전에 최소 인스턴스 1대 미리 띄워놨던거 같아요

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저는 그렇게 고도화된 플랫폼을 조작, 이용해본 경험이 없어요 😮 😭