Community

데이터가 없을 때 200인가 404인가?

HTML 프로토콜의 명세 중에는 요청에 대한 응답의 형태를 구분할 수 있는 HttpStatusCode가 있습니다. 이를 보고 클라이언트는 어떤 응답을 받게 되는지 판단을 할 수 있게 되죠. 이때, 없는 데이터를 요청한 경우에 대해서 응답의 HttpStatusCode를 무엇으로 전달해야 할지에 대한 글이 있어 저의 생각과 함게 공유하려 합니다. 사실 이 글을 보기 전 비슷한 시점에 스터디 하고 있는 분들과 동일한 이야기가 나왔었는데 거기서 나온 이야기도 잠깐 첨언하고요. 여기서 이야기하는 명제는 "데이터가 없을 때"였습니다. 2xx는 정상, 3xx는 리다이렉트, 4xx는 클라이언트의 잘못된 요청, 5xx는 서버의 에러 응답을 이야기하는데 "데이터가 없다"라는 어느 범주에 속하게 될까요? 마침 스터디방에서 "Get 이면 404, Find 면 204"라는 꽤 인사이트가 있는 말씀을 해주셨는데요. 거기에 "200 OK로 내려주게 되면 사용하는 쪽에서 예상하기 어려운 부분이 있다."라는 말과 함께요. 저의 생각도 동일합니다. 있어야 할 데이터를 요청한 건지, 있을지 없을지 모르는 상황에서 요청을 한 건지에 따라 결정이 될 것 같습니다. 그렇게 되면 클라이언트는 HttpStatusCode만을 가지고 처리할 수 있게 되죠. 이를 다른 측면으로 이야기하면 응답 값(body)에 대한 처리 의존성이 줄어드는 효과도 있어 보입니다. (반대로, HttpStatusCode에만 의존하게 되는) 그래서 위의 물음에는 "204"가 되야 한다고 생각합니다. 물론, 이러한 부분은 정답이 없는 부분입니다. 그래서 팀 내에서 적당한 타협(협의)을 하고 결정해야 할 문제이죠. 응답을 받고 처리하는 클라이언트 입장과, 해당 요청을 받고 응답을 내려주는 서버 입장은 '닭이 먼저냐 계란이 먼저냐' 급의 각 입장 차이가 있기 때문입니다. 그리고 무엇보다 중요한 건 그러한 컨벤션을 정했으면 앞으로의 개발은 당연하게도 정해진 방향대로 되고 이미 개발된 부분들에 대해서도 점진적으로 고쳐져야 한다는 점을 명심해야 합니다. https://techblog.yogiyo.co.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B0%80-%EC%97%86%EC%9D%84-%EB%95%8C-200%EC%9D%B8%EA%B0%80-404%EC%9D%B8%EA%B0%80-f1c8c39ca9df

알림

알림이 없습니다