"빌드가 실패했습니다." 한동안 '빌드'가 하나의 단계라는 사실조차 몰랐어요. 코드를 쓰면 그냥 실행되는 줄 알았거든요.
그렇지 않아요. 코드는 사람이 읽을 수 있도록 작성돼요. 컴퓨터는 그 버전을 직접 실행하지 않고요. 사람이 읽는 코드를 기계가 실제로 실행하는 형태로 변환하는 중간 단계가 있어요. 그 단계가 빌드예요. 코드를 컴퓨터의 고유 언어로 번역하는 과정을 특별히 컴파일이라고 부르는데요, 같은 계열의 말이지만 조금 더 기술적인 표현이에요.
원고에서 인쇄된 책으로. 원고를 쓰더라도 서점 고객에게 수정 메모가 가득한 초고 뭉치를 그대로 건네지는 않잖아요. 인쇄소로 가서 조판하고 제본해 실제 책을 만들죠. 빌드가 바로 그 인쇄 공정이에요. 코드는 원고이고, 빌드는 컴퓨터가 읽을 수 있는 완성된 책을 만들어내요.
그 한 번의 과정에서 놀랍도록 많은 일이 일어나요.
- 코드를 기계가 실행할 수 있는 형태로 번역해요.
- 프로젝트가 의존하는 외부 라이브러리(부품들)를 모두 함께 묶어요.
- 각 부품의 명세가 맞는지 검사해요(타입 오류가 여기서 드러나요).
- 빠르게 로드될 수 있도록 전체를 압축하고 최적화해요.
"빌드 실패"는 인쇄 공정이 책을 완성하기 전에 멈췄다는 뜻이에요. 어딘가가 맞지 않은 거죠. 타입 불일치, 누락된 부품, 번역기가 처리하지 못한 오타. 그리고 중요한 건 이거예요. 아무것도 배포되지 않았다는 거요. 실패는 인쇄소 안에서, 독자가 보기 전에 일어났으니까요. 빌드 실패는 문제를 잡아낼 수 있는 가장 저렴한 지점이에요.
배포 흐름에서 어느 위치에 있는지 보면 돼요. 빌드가 성공하면 그다음에 배포하고 극장 문을 열어요. 빌드는 관객이 도착하기 전의 검문소인 거예요. 그래서 "빌드가 초록불"이라는 말이 배포 직전의 작은 안도감을 뜻해요. 책이 깨끗하게 인쇄됐으니 이제 서가에 올릴 수 있다는 거죠.
비개발자가 이걸 알아두면 좋은 이유가 있어요. 에이전트가 "빌드를 실행해 볼게요"라고 하고 잠시 후 "빌드 실패"라고 하면, 막힌 것도 아니고 끝난 것도 아니에요. 가장 평범한 검문소에 서 있는 거예요. 에이전트가 출력하는 오류 메시지는 판결이 아니라 단서예요. 스택 트레이스 전체를 그대로 붙여넣어 주면 돼요. 그리고 개발자가 "빌드에 20분 걸린다"고 말할 때 왜 아무도 좋아하지 않는지, 이제 이해가 되죠. 책 한 권을 인쇄하는 일이 순식간에 끝나지는 않으니까요.
코드는 원고, 빌드는 인쇄 공정이에요. "빌드 실패"는 인쇄소에서 멈췄다는 뜻이고, 그게 바로 멈춰야 할 곳이에요.