[Network] HTTP 상태코드 400 Bad Request vs 404 Not Found

0-x-14·2024년 9월 16일
0

최근 진행하였던 프로젝트에서 팀원의 코드를 리뷰하던 중, “유효하지 않는 사용자”를 나는 404 에러로 처리한 것과 달리 팀원은 400 에러로 처리한 것을 발견하였다.
나는 존재하지 않는 사용자이므로 404 Not Found로 처리하였는데, 팀원의 코드를 보고 400 Bad Request에 대해 찾아보니 400도 적절한 것 같아서 혼란스러워졌다 🫨
이 글에서는 400 Bad Request와 404 Not Found에 대해 정리하고, 둘의 차이에 대해 다뤄보려 한다.




400 Bad Request

  • 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
  • 요청 구문, 메세지 등의 오류
  • 클라이언트는 요청 내용을 다시 검토하고, 보내야 함❗️
  • ex) 요청 파라미터가 잘못되거나, API 스펙이 맞지 않을 때



404 Not Found

  • 요청 리소스를 찾을 수 없음. 즉, 요청한 리소스가 서버에 없음
  • 또는 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때




무슨 차이일까?

나는 “요청 리소스를 찾을 수 없다”는 말을 DB에서 자원을 찾을 수 없다는 말로 해석해서 404도 적절하다고 생각했는데, 조금 더 찾아보니 404 Not Found는 API URI를 조회하지 못했다는 의미가 더 강하다고 한다.

404 Not Found 코드는 해당 리소스가 존재하지 않음을 나타낸다. 이와 달리 400 Bad Request의 경우에는 리소스가 아니라 설정 값을 나타내는 것이다.

만약 게시글에 대한 400 Bad Request가 발생할 경우 클라이언트에게 “게시글을 먼저 작성해주세요”라는 메시지를 반환하여 오류가 발생한 원인을 더욱 명확하게 알릴 수 있다.




정리

  • 400 Bad Request
    • 클라이언트가 전송한 데이터가 부적절하거나, 요청 자체가 유효하지 않은 경우
    • 클라이언트가 요청을 수정하고 다시 시도하도록 유도하면 됨
  • 404 Not Found
    • 클라이언트가 잘못된 URI를 시도했거나, 해당 리소스가 삭제되었을 가능성이 있음
    • 오류가 발생한 원인을 확인해야 함




결론!

  • 즉, 클라이언트의 행동을 유도해야 하는지에서 핵심적인 차이가 있다❗️❗️
    • 만약 클라이언트의 행동을 교정해서 올바른 요청으로 만들 수 있다면 400이 좋은 선택이다.









참고 링크

0개의 댓글

관련 채용 정보