hswork.win

커밋하면 알아서 배포되게 만들기

2026-07-06 · 인프라 · CI/CD

처음에는 코드를 고칠 때마다 서버에 원격 접속해서 파일을 올리고, 빌드하고, 컨테이너를 다시 띄웠습니다. 몇 번은 할 만하지만 반복되면 손이 무거워집니다. 고쳐야 할 게 보여도 "나중에 몰아서 하자"가 됩니다. 결국 배포가 번거로우면 개선이 느려진다는 걸 체감하고 자동화를 붙였습니다.

흐름은 단순하게

목표는 하나였습니다. 내 PC에서 커밋하면, 그 다음은 알아서. 흐름은 이렇습니다. 형상관리 서버에 커밋이 들어오면, 저장소에 걸어둔 훅이 빌드 서버를 호출합니다. 빌드 서버는 최신 소스를 내려받아 배포 경로에 복사하고, 컨테이너 이미지를 다시 만들어 기존 컨테이너와 교체합니다. 제가 하는 일은 커밋 버튼을 누르는 것뿐입니다.

자동 빌드가 안 걸리던 이유

처음에는 커밋을 해도 빌드가 시작되지 않았습니다. 수동으로 실행하면 잘 되는데 자동만 안 됐습니다. 로그를 열어보니 일정 시각 이후로 변경 감지가 아예 멈춰 있었습니다. 빌드 서버 컨테이너를 새로 만들면서 주기적으로 저장소를 확인하는 설정이 다시 등록되지 않은 게 원인이었습니다.

그래서 "주기적으로 확인"에 의존하지 않고, 커밋 순간에 곧바로 빌드 서버를 호출하는 방식으로 바꿨습니다. 저장소의 커밋 후 훅에서 빌드 URL을 한 번 호출하게 하는 아주 단순한 스크립트입니다. 이걸 붙이고 나서는 커밋과 거의 동시에 빌드가 시작됩니다. 여기서도 사소한 함정이 있었습니다. 호출 대상 작업 이름을 실제와 다르게 적어두는 바람에 한동안 엉뚱한 곳을 부르고 있었습니다.

"성공"인데 반영이 안 되는 배포

가장 헷갈렸던 건 빌드는 성공이라고 뜨는데 사이트에는 아무 변화가 없던 경우였습니다. 로그를 끝까지 내려보니 배포 명령이 실행되지 못하고 조용히 넘어가 있었습니다. 빌드 서버 컨테이너 안에 배포에 필요한 명령어가 설치돼 있지 않았던 겁니다. 스크립트가 중간에 실패해도 멈추지 않고 끝까지 진행한 뒤 "완료"를 찍고 있었습니다.

두 가지를 고쳤습니다. 첫째, 필요한 도구를 이미지 자체에 포함시켜 컨테이너를 새로 만들어도 사라지지 않게 했습니다. 둘째, 배포 스크립트가 중간에 실패하면 즉시 멈추고 실패로 표시되게 했습니다. 성공이라고 적힌 초록불을 믿을 수 없다면 자동화의 의미가 없으니까요.

남은 교훈

자동 배포를 붙이고 나서 확실히 달라진 건 고치는 속도였습니다. 오타 하나도 부담 없이 바로 고쳐 올립니다. 대신 배포가 쉬워진 만큼 잘못된 변경도 순식간에 반영되므로, 빌드가 통과하는지 먼저 확인하는 습관이 더 중요해졌습니다. 자동화는 손을 덜어주는 것이지, 확인을 대신해 주지는 않았습니다.

← 개발 기록 목록