망가진 버전을 배포하는 게 재앙이 아니에요. 되돌리지 못하는 것이 재앙이에요. 롤백은 라이브 앱의 실행 취소 버튼입니다.
배포는 문이 열리고 관객이 입장하는 순간이에요. 때로는 개막 첫날이 엉망이 되기도 해요. 새 버전이 망가졌는데 실제 사람들이 바로 지금 그것을 쓰고 있는 상황이에요. 허겁지겁 라이브 환경에서 고치려다 모두가 지켜보는 앞에서 식은땀을 흘리는 건 충동적인 선택이에요. 어젯밤까지 잘 작동하던 버전으로 즉시 되돌린 뒤, 망가진 버전은 조용히 수정하는 것이 프로다운 방식이에요.
어젯밤 메뉴판을 다시 꺼내는 것. 레스토랑은 매일 저녁 새 메뉴판을 인쇄해요. 오늘 밤 것에는 오타가 있어요. 가격이 틀렸고, 존재하지 않는 요리가 올라 있어서 모든 테이블이 혼란스러워요. 손님들이 기다리는 동안 홀을 멈추고 메뉴판을 처음부터 다시 쓰지는 않잖아요. 보관해 둔 어젯밤 메뉴판을 꺼내 30초 안에 다시 나눠드리면 돼요. 영업은 계속되고, 오늘 밤 버전은 마감 후 차분하게 고치면 됩니다.
롤백이 바로 이거예요. 라이브 앱을 이전에 잘 작동하던 버전으로 즉시 전환하는 것이에요. 재구축이 아니라 빠른 전환이 가능한 이유는 Git과 커밋 덕분이에요. 모든 버전이 이미 저장되어 있거든요. 어젯밤 메뉴판을 새로 만드는 게 아니에요. 이미 가지고 있던 걸 다시 꺼낼 뿐이에요.
한 가지 꼭 기억해 두면 좋은 점이 있어요. Git 되감기처럼 들리지만 다르답니다. Git 되감기는 작업실에서 일어나요. 코드를 빌드하는 동안 이전 스냅샷으로 되돌아가는 거예요. 롤백은 매장 앞에서 일어나요. 공개된 서비스가 현재 가리키는 버전을 마지막으로 잘 작동하던 버전으로 바꾸는 거예요. 같은 본능(모든 버전이 저장되어 있으니 좋은 버전으로 되돌아간다)이지만 무대가 달라요. 하나는 만드는 곳이고, 하나는 고객이 사용하는 곳이에요.
그리고 이게 바로 숨죽이지 않고 배포할 수 있는 이유예요. 실행 취소가 버튼 하나에 달려 있으면 배포가 두렵지 않아져요. 새 버전이 완벽하다고 약속할 필요가 없어요. 만약 완벽하지 않더라도, 관객이 문제를 보는 시간은 60초에 불과하고 곧바로 좋은 공연이 다시 올라온다고 약속하면 되니까요. Vercel을 비롯한 대부분의 플랫폼은 최근 배포본을 복원 대기 상태로 유지하고, 일부는 새 버전에서 오류가 발생하면 자동으로 되돌아가기도 해요.
배포가 용감한 행위인 건 확신이 있어서가 아니에요. 롤백이 나쁜 버전을 60초짜리 문제로 만들어주기 때문이에요.