없을 수도 있는 리소스의 경우, 404 Not Found? 200 OK? (Status Code)

후투티·2025년 5월 4일

잊지마!

목록 보기
18/20

진행중인 프로젝트에서
사용자가 인증샷을 업로드하는 기능이 있다.
또한 사용자는 자신이 업로드한 인증샷을 조회할 수 있게 하는 기능도 제공한다.


그런데 이 인증샷은 필수가 아니라 사용자가 선택적으로 업로드해도 되는 것이다.

그러면 인증샷을 올리지 않은 사용자가
GET /api/certifications/me로 자신의 인증샷을 조회하는 요청을 보내면
기존에는 요청받은 리소스가 존재하지 않으니 404(Not Found) 에러를 내보냈다.

BE 관점에서는 요청한 리소스가 존재하지 않기 때문에 당연히 404가 맞다고 생각했다.
FE 개발자는 에러 코드가 있으니 예상 가능한 에러이면 올바른 에러 페이지로 보내는 처리를 해야 한다.

그런데! 인증샷 업로드는 선택사항이므로 없을 수도 있는 리소스인데 이게 존재하지 않는다고 해서 비정상인 것까지는 아니지 않는가...!


그래서 다음과 같은 흐름으로 가는 건 어떨지 의견을 주셔서 응답을 변경했다.

  • 인증샷을 올린 사용자의 요청

    ➡️ 200 OK + 인증샷 데이터 반환
  • 인증샷을 안 올린 사용자의 요청

    ➡️ 200 OK + {"인증샷url": null, "status": "NONE"}과 같은 빈 값 반환

즉, 에러 대신 정상 응답을 반환하고, 이와 함께 null 데이터를 보내는 방식으로 변경한 것이다.
이런 식으로 반환을 받은 FE 개발자는 인증샷이 아직 업로드 되지 않았다는 것을 인지하고
조건 분기(예를 들어, 업로드 폼 띄우기)를 깔끔하게 처리할 수 있게 된다.

결론

없을 수도 있는 리소스라면

404로 내보내는 것도 좋지만,
각 서비스의 환경에 맞게 200 OK + 빈 응답으로 처리하는 것도 좋은 방법이다.

profile
모르는 건 모른다고 하는 사람

0개의 댓글