TL;DR — 항목별 실패 메시지를 자유 문자열로 저장했는데, 외부 API 예외 메시지에 업스트림 응답 본문이 통째로 들어 있었다. 이 값이 인증 없는 조회 응답에 그대로 실렸다. 규칙을 문서로 적는 대신, 위반이 컴파일과 테스트에서 실패하도록 타입과 검사로 강제했다.

배경

문제 (증상)

원인 분석

해결

오류를 enum으로만 정의하고, 각 코드에 노출 등급(응답 노출 / 로그 전용)을 부여했다. 그리고 세 겹으로 강제한다.

  1. 실패 기록 API가 문자열을 아예 받지 않는다 — enum만 받으므로 임의 문구를 넣을 수가 없다
  2. 로그 전용 코드로는 예외를 만들 수 없다 — 응답으로 나갈 경로에서 원천 차단
  3. 테스트가 문구를 검사한다 — 응답 노출 코드의 메시지에 경로·호스트 패턴이 없는지, HTTP 상태가 붙은 코드가 제대로 등급이 붙었는지 확인

결과