배포한 줄 알았다 — Git 연결 누락과 무중단 배포의 교훈
새로 추가한 세금 계산기 기능의 테스트를 모두 통과시키고, 기분 좋게 코드를 커밋한 뒤 원격 저장소로 푸시했습니다. '이제 잠자리에 들면 밤새 배포 파이프라인이 돌아서 사이트에 반영되어 있겠지'라고 생각했습니다. 늘 하던 일이었고, 커밋 로그는 깔끔하게 최신 해시를 가리키고 있었습니다.
다음 날 아침, 설레는 마음으로 출근길 지하철에서 스마트폰으로 사이트를 열어 보았습니다. 그런데 어젯밤 심혈을 기울여 다듬었던 계산기 인터페이스가 온데간데없고, 이전 버전의 화면이 그대로 나타났습니다. 브라우저 캐시 문제인가 싶어 시크릿 모드로 접속하고 강제 새로고침을 해보아도 마찬가지였습니다.
배포 플랫폼인 Vercel 대시보드를 열어 확인해 보니 황당하게도 마지막 프로덕션 배포가 14시간 전으로 멈춰 있었습니다. 분명히 프로젝트 대시보드 메인에는 방금 올린 Git 커밋 번호와 브랜치 이름, 커밋 메시지까지 선명하게 찍혀 있었는데, 실제 프로덕션 빌드는 단 한 번도 실행되지 않았던 것입니다.
설정 탭의 Git 연동 메뉴를 자세히 열어보고 나서야 원인을 알 수 있었습니다. '이 프로젝트는 현재 Git 저장소에 연결되어 있지 않습니다'라는 안내 문구가 떠 있었습니다. 알고 보니 프로젝트 초기에 명령줄 CLI(npx vercel)로 수동 배포를 진행할 당시, 로컬 PC의 Git 메타데이터가 임시로 함께 업로드되어 화면에 표시되었을 뿐, 실제 GitHub 저장소와 Vercel 간의 웹훅(Webhook) 트리거가 끊어져 있었던 것입니다.
GitHub 저장소 연동을 다시 연결하고 테스트 커밋을 푸시하자, 불과 12초 만에 Vercel의 클라우드 빌드 러너가 작동하며 정적 페이지 생성과 엣지 배포가 일사천리로 끝났습니다. 화면에 그럴듯하게 적힌 메타데이터나 커밋 번호를 맹신해서는 안 된다는 것, 그리고 배포 파이프라인의 종단(End-to-End) 검증은 반드시 실제 HTTP 응답 코드와 브라우저 렌더링 결과물로 확인해야 한다는 기본적인 엔지니어링 원칙을 다시 한번 뼈저리게 되새긴 사건이었습니다.