--- kind: REFERENCE slug: do-not-draw-a-link-that-does-not-resolve title: 서버가 준 주소는 라우트 표에 맞춰 보고, 맞는 라우트가 없으면 링크로 그리지 않는다 topic: addresses-frozen-at-publish-time topicName: 주소가 만들어지고 굳어지는 곳 project: TechLog status: 게시 전 verifiedOn: 2026-09-04 sourceRevision: tech-log@2026-09-02 source: - final/document.md#§9.2 --- # 서버가 준 주소는 라우트 표에 맞춰 보고, 맞는 라우트가 없으면 링크로 그리지 않는다 주소를 서버가 만들어 내보내고 화면이 그대로 링크로 그리면, 그 주소가 틀렸다는 것은 방문자만 안다. 화면 코드 어디에도 그 주소가 없기 때문이다. 만드는 쪽과 그리는 쪽 양쪽에서 라우트 표와 맞춘다. ## 관계 - **계약은 앵커라고 적었고 만드는 쪽은 경로를 만들었다** 이 기준의 근거 사건이다. - **catch-all 라우트는 nginx 패턴으로 번역하지 않는다** 엣지의 404 가 감사에 남아야 이 기준이 성립한다. - **라우트에 딸린 목록은 라우트 계약에서 유도하고, 유도할 수 없는 것은 대조 검사를 둔다** 라우트 표가 어디서 오는지가 그 기준에 있다. ## 목적 서버가 만든 주소가 열리지 않는 것을 방문자보다 먼저 잡는다. 이 부류는 화면 코드에 흔적이 없어 저장소 안의 링크 리터럴을 훑는 감사로는 잡히지 않는다. ## 규칙 **만드는 쪽에서 생성한 경로를 공개 라우트 패턴에 맞춘다** 종류마다 만들어 낸 주소가 실제 라우트에 걸리는지 백엔드 테스트가 본다. **그리는 쪽에서 서버가 준 주소를 라우트 표에 맞추고, 맞는 라우트가 없으면 링크로 그리지 않는다** 같은 부류가 또 생겨도 방문자가 404 를 만나지는 않는다. **주소를 고쳤으면 이미 저장된 행도 함께 고친다** 주소가 게시 시점에 굳어져 저장되면 코드만 고쳐도 기존 링크는 깨진 채 남는다. **배포 뒤 서버가 내보내는 주소를 전수로 훑는다** 저장소를 훑는 감사와 다른 것을 본다. 실제로 나가는 주소는 DB 에 있다. ## 적용 조건 주소를 서버가 만들어 내보내고 화면은 받은 문자열을 링크로 그리는 구조. 게시 시점에 주소가 굳어져 저장되면 특히 걸린다. ## 예외 외부 주소는 라우트 표에 없으므로 이 대조의 대상이 아니다. 그리는 쪽에만 가드를 두면 링크가 아예 그려지지 않는 것으로 끝나고 원인이 남는다. 만드는 쪽에도 같은 검사를 둔다. ## 예시 결정 링크가 404 였다. 계약은 앵커라고 적었고 만드는 두 곳이 경로를 만들었다. 배포 후 서버가 내보내는 주소 26개와 주제·축 9개를 더해 35개 전부 200 인 것을 확인했다. 저장소 안의 링크 리터럴을 훑는 감사로는 이 결함이 잡히지 않았다. 그 주소는 코드에 없다.