당신의 API는 버그가 없습니다. 대문자를 싫어할 뿐입니다.
Source: Dev.to
문제
아름다운 게 뭔지 아세요?
인증 헤더, 페이로드 검증, 미들웨어 디버깅에 세 시간을 쏟고… 결국 누군가가 /V1/users 를 /v1/users 대신 입력했다는 걸 발견했을 때. 대문자 하나. 반나절이 사라졌습니다. 멋지죠.
도메인과 달리 URL 경로는 보통 대소문자를 구분하므로 /v1 과 /V1 은 기술적으로 다른 리소스입니다. 그 자체는 괜찮습니다. 문제가 되는 건 API가 다음과 같이 응답할 때입니다:
400 Bad Request403 Forbidden500 Internal Server Error
이 응답들은 실제 상황을 말해주지 못합니다: “이 리소스는 존재하지 않습니다.” 대신 개발자를 다음과 같은 미궁으로 끌어들입니다:
- 헤더 비교
- 토큰 재검증
- 페이로드 비난
- 인프라 의심
- 슬랙에서 논쟁
모두 대문자 하나 때문에 발생한 일입니다.
Rentgen이 하는 일
Rentgen은 유효한 요청을 받아 하나만 변형합니다: 전체 경로를 대문자로 변환합니다. 그게 전부입니다. 그런 다음 다음을 확인합니다:
- 경로가 엄격하면 →
404 Not Found반환 - 경로가 정규화되어 있으면 →
2xx응답 반환 - 그 외 → 오해를 일으키는 동작
간단합니다. 결정적입니다. 가혹합니다.
왜 중요한가
이것은 이색적인 보안 결함이 아니라 시간 흡혈귀입니다.
- 프로덕션을 다운시키지는 않습니다.
- 알림을 트리거하지도 않습니다.
- 모두가 “내 환경에서는 동작한다”고 외치는 사이에 조용히 엔지니어링 시간을 소모합니다.
API는 복잡한 엣지 케이스 때문에만 실패하는 것이 아닙니다. 때때로 Caps Lock이 켜져 있었기 때문에 실패합니다. API가 대문자 경로를 예측 가능하게 처리한다면, 전혀 의미 없는 디버깅을 완전히 없앨 수 있습니다. 그리고 그 가치는 겉보이는 것보다 훨씬 큽니다.