--- kind: PROJECT_DECISION slug: a-new-route-ships-frontend-first title: 새 라우트는 프론트엔드를 먼저 배포한다 topic: addresses-frozen-at-publish-time topicName: 주소가 만들어지고 굳어지는 곳 project: TechLog status: 게시 전 decisionStatus: ADOPTED decidedOn: 2026-09-01 sourceRevision: tech-log@2026-09-02 source: - final/document.md#§9.1 --- # 새 라우트는 프론트엔드를 먼저 배포한다 새 라우트를 여는 변경은 프론트엔드를 먼저 배포한다. nginx 설정이 라우트 계약에서 생성되므로, 프론트가 배포되기 전까지 그 경로는 엣지에서 404 다. 백엔드를 먼저 배포하면 서버는 이미 그 주소를 내보내고 사용자는 전부 404 인 화면을 본다. ## 근거 - **축 링크가 자기 자신을 가리켰고, 고친 뒤에는 백엔드를 먼저 배포했다** 이 순서를 정하게 된 사건이다. 반대 순서로 배포해 사용자가 네 링크 전부 404 인 화면을 봤다. - **nginx 가 모르는 라우트는 새로고침에서 404 다** 엣지가 왜 그 경로를 모르는지가 그 기록에 있다. - **catch-all 라우트는 nginx 패턴으로 번역하지 않는다** 이 순서가 필요해진 이유가 그 결정에 있다. ## 결정문 새 공개 라우트를 여는 변경은 프론트엔드를 먼저 배포하고, 그 주소를 내보내는 백엔드 변경을 다음 배포에 넣는다. ## 판단 이유 nginx 설정은 라우트 계약에서 생성된다. 프론트 이미지가 배포되기 전까지 그 경로는 서빙 패턴에 없고, 엣지에서 404 로 끝난다. 백엔드를 먼저 배포하면 서버는 이미 그 주소를 링크로 내보낸다. 방문자는 화면에 그려진 링크를 누르고 404 를 만난다. 축 화면을 만들 때 실제로 그렇게 배포했고 사용자가 네 링크 전부 404 인 화면을 봤다. catch-all 을 서빙 패턴으로 번역하지 않기로 했으므로 이 구간이 soft 200 으로 덮이지 않는다. 그 결정과 이 순서는 함께 간다. ## 영향 새 주소를 내보내는 백엔드 변경이 한 배포 늦게 나간다. 두 저장소를 한 번에 배포하고 싶은 변경에서 그 사이가 벌어진다. 프론트를 먼저 배포한 뒤에는 그 경로가 열려 있지만 서버가 아직 그 주소를 내보내지 않는다. 이 구간에서는 화면에 링크가 그려지지 않으므로 방문자에게 보이는 문제가 없다. 배포 순서를 사람이 기억해야 한다. 이 순서를 강제하는 검사는 없다.