400과 404의 차이에 대해 구글링하던 결과에 대해 정리해 보고자 한다.
자세한 사항은 표준문서 RFC 2616(https://tools.ietf.org/html/rfc2616#section-10.4)을 참고하자.
RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
[Docs] [txt|pdf] [draft-ietf-http...] [Tracker] [Diff1] [Diff2] [Errata] Obsoleted by: 7230, 7231, 7232, 7233, 7234, 7235 DRAFT STANDARD Updated by: 2817, 5785, 6266, 6585 Errata Exist Network Working Group R. Fielding Request for Comments: 2616 UC Irvine
tools.ietf.org
결론 부터 보자면
400 : 클라이언트(요청자)의 파라미터를 서버에서 이해를 못하는 경우
404 : 서버에 매핑되는 uri가 존재하지 않는 경우
라고 정의되어 있다.
에러 내용으로는 400은 Bad Request고 404는 Not Found이니 비지니스에서 요청에 의한 결과를 못 찾으면 404를 반환 해야할 것 같지만 정답은 400 인 것이다.
표준 문서를 들여다보는 습관은 해답을 빠르게 찾게 해주는 것 같다.
Resource의 중복 처리에 대해서는 400 보다는 409 (Conflict)가 어울리는 것 같다.
https://stackoverflow.com/questions/3825990/http-response-code-for-post-when-resource-already-exists
HTTP response code for POST when resource already exists
I'm building a server that allows clients to store objects. Those objects are fully constructed at client side, complete with object IDs that are permanent for the whole lifetime of the object. I...
stackoverflow.com
400은 서버에서 이해를 못하는 경우인데 리소스의 중복은 서버 입장에서는 클라이언트의 요청을 이해를 하지만 이미 존재하여 충돌이 생긴거니 409 Conflict가 정확하다고 본다.
400 : 클라이언트(요청자)의 파라미터를 서버에서 이해를 못하는 경우
404 : 서버에 매핑되는 uri가 존재하지 않는 경우
409 : 자원의 현재 상태와 충돌하여 요청을 처리할 수 없는 경우
'프로그래밍' 카테고리의 다른 글
헥사고날 아키텍쳐 - 애플리케이션 헥사곤 (0) | 2024.08.04 |
---|---|
헥사고날 아키텍쳐 - 도메인 헥사곤 (0) | 2024.08.04 |
헥사고날 아키텍쳐 (0) | 2024.08.04 |
Git reset hard 취소하기, 되돌리기, 복원하기 (0) | 2021.05.04 |
Mysql Server Timezone 설정방법 (0) | 2020.11.16 |