배포

개발 완료된 소프트웨어를 사용자가 실제 환경에서 이용할 수 있도록 배치하고 활성화하는 프로세스.

— 소프트웨어 공학 개론 및 DevOps 표준 매뉴얼

"내 컴퓨터에선 아주 잘 되는데요?"가 절대로 통하지 않는 최종 심판대. 배포 버튼을 누르는 순간만큼은 무교론자도 신을 찾게 된다.

1. 개요

개발자가 로컬 개발 환경에서 지지고 볶으며 짜낸 소스 코드를 컴파일, 빌드, 패키징하여 실제 엔드 유저들이 접속할 수 있는 운영 서버(호스팅 인프라)에 안착시키는 일련의 시스템적 행위다. 영문 명칭은 Deployment. 과거의 무지성 수동 복사 수가다에서 현대의 자동화된 CI/CD 인프라로의 진화가 이루어졌지만, 여전히 장애 발생률이 가장 높은 마의 구간이다.(...)

2. 무중단 배포라는 고상한 유토피아

라떼 시절에는 서비스 고도화나 업데이트를 하려면 공지사항에 '새벽 2시부터 5시까지 정기 점검으로 서비스가 중단됩니다'라고 때려 박은 뒤, 서버를 내리고 FTP로 소스를 덮어씌운 다음 기도하는 마음으로 전원을 켰다. 하지만 현대 모던 웹 생태계는 24시간 잠들지 않으므로 서비스 중단은 곧 매출 타격이자 유저 탈출이다. 이를 해결하기 위해 서버를 복수로 두고 순차적으로 버전을 올리는 롤링(Rolling) 배포, 똑같은 인프라를 신/구 버전 세트로 구성해 라우터 스위칭만 싹 바꾸는 블루-그린(Blue-Green) 배포, 소수 유저에게만 신버전을 흘려보는 카나리(Canary) 배포 등의 고도의 무중단 배포 기법이 상식으로 자리 잡았다.1 당연히 이를 수동으로 조율하면 사람이 미쳐버리므로 GitHub Actions나 Jenkins 같은 도구를 빌려 코드를 git push 하기만 하면 빌드, 테스트, 배포까지 한 큐에 완료되는 파이프라인 구축에 목을 맨다.(...)

3. 관련 밈 및 드립

3.1. 금요일 배포 금지 (Friday Deployment Forbidden)

전 세계 개발 업계의 절대적인 불문율이자 십계명 제1조다. 금요일 오후 4시쯤에 '사소한 수정이니까 핫픽스로 대충 밀면 되겠지' 하고 배포 버튼을 눌렀다가 예상치 못한 사이드 이펙트로 프로덕션 서버가 폭발하면, 주말 내내 사무실에 갇혀 피자 박스를 쌓아두고 밤샘 장애 복구 릴레이를 뛰어야 하는 대참사가 벌어지기 때문이다. 진짜 용자는 금요일 오후 5시 59분에 배포하고 슬랙 알림을 끈 채 퇴근하는 사람이라는 소문이 있다.

3.2. 내 컴에선 되는데요 (It works on my machine)

배포 후 서버가 터졌을 때 주니어 개발자들이 반사적으로 내뱉는 방어 기제용 명대사다. 로컬 컴퓨터의 OS 환경, 노드 버전, 숨겨진 환경 변수 설정 등 온갖 궁합 덕분에 본인 모니터에서는 잘 돌아갔으나, 가혹하고 차가운 리눅스 실운영 서버로 올라가는 순간 여지없이 크래시를 뿜어내는 촌극을 풍자한다. 이 대사를 하도 남발하다 보니 아예 '그럼 니 컴퓨터를 통째로 포장해서 사용자한테 배포해라'라는 비아냥이 나왔고, 이는 훗날 도커 컨테이너 기술이 탄생하는 계기(...)가 되었다.

4. 여담

  • 환경 변수의 늪: 로컬의 localhost:3000 주소를 그대로 둔 채 운영 서버에 배포했다가 결제나 연동 API가 전부 외부 샌드박스로 튀어 버리는 배달 사고가 아주 흔하다. .env 파일 관리는 배포의 핵심이다.
  • 롤백(Rollback) 능력: 진정한 고수 엔지니어는 배포를 신속하게 하는 사람이 아니라, 장애가 터졌을 때 30초 만에 이전 안정 버전으로 되돌리는 역마이그레이션 시스템을 정교하게 짜둔 사람이다.
  • 코드 동결 (Code Freeze): 대규모 커머스나 트래픽이 몰리는 시즌(예: 블프, 수강신청) 직전에는 아예 배포 시스템 자체를 잠가버리는 코드 동결을 선언한다. 버그 고치려다 서버 통째로 날리는 리스크를 막기 위함이다.

5. 관련 문서

각주

  1. 코드는 무중단으로 깔끔하게 배포했는데, 정작 데이터베이스 스키마 마이그레이션 처리를 어설프게 해서 구버전 코드가 신버전 테이블 구조를 건드렸다가 데이터가 싹 다 증발하는 연쇄 폭발이 실무에서 흔하게 터진다.(...)