204 NO_CONTENT에 대해 아시나요?

Server The SOPT·2022년 7월 22일
3

작성자: 최승빈

HTTP상태코드는 종류가 많습니다.

그 중에서도 2XX인 상태코드는 성공을 뜻하며 저희를 기분좋게 합니다.
하지만 204는 뭘까요?

검색하면 아래와 같은 결과가 뜹니다.

204 No Content

이것은 성공했는데 그 안에 내용이 없다는 것일까요?
아래에 제가 작성한 코드를 보겠습니다.

if (err instanceof NullDataException) {
      return res
        .status(statusCode.NO_CONTENT)
        .send(util.fail(statusCode.NO_CONTENT, err.message));
    }
if (!data) {
      throw new NullDataException('데이터가 없습니다.');
    }

저는 이 코드를 작성하면서 전달하는 내용이 없을 경우에 데이터가 없다는 에러를 반환해야겠다고 생각했습니다.

하지만 나온 결과는

정상적인 입력시 나오는 결과

아무것도 없습니다! 그냥 아무것도 없습니다. 저는 분명히 에러를 반환해야겠다고 생각했는데 흐음... 뭘까요?

코드를 살짝 수정해보겠습니다.

if (err instanceof NullDataException) {
      return res
        .status(statusCode.BAD_REQUEST)
        .send(util.fail(statusCode.NO_CONTENT, err.message));
    }

이렇게 수정하면 나오는 결과는?

오류가 잘 나옵니다. 사실 BAD_REQUEST가 아닌 다른 단어를 넣어도 오류가 잘 나옵니다.

참조블로그

이 블로그를 참조하면 express에서 자동으로 204상태코드에 대해 리스폰스바디를 보여주지 않고 넘어간다고 합니다.

204 상태코드의 의미

https://developer.mozilla.org/ko/docs/Web/HTTP/Status/204

204 상태코드가 가지는 의미는 좀 더 상세히 보자면 204 No Content 클라이언트의 요청은 정상적이다. 하지만 컨텐츠를 제공하지 않습니다.
200으로 응답하고 응답 body에 null, false 등으로 응답하는 것과 다르다는 것입니다.
204의 경우 HTTP Response body가 아예 존재하지 않는 경우다.

보통 쓰이는 경우가 많이 없지만 있다면

삭제 요청으로 자원을 삭제하여 더 이상 존재하지 않고 그 자원을 참조하는 모든 자원도 삭제되어 더 이상 HTTP body를 응답하는 것이 무의미해졌을 때 사용한다고 합니다.!!

204는 사용하는 데 주의가 많이 필요할 것 같습니다.
실제로 MDN문서에서도 이렇게 말하고 있습니다.

호환성 참고사항 - 204 No Content는 본문 없는 응답을 위한 상태 코드이지만, 서버에서 잘못되게 본문을 포함한 응답을 전달하는 경우가 존재할 수 있습니다. HTTP는 이런 경우를 사용자 에이전트 자의적으로, 서로 다르게 처리하는 것을 허용하고 있습니다. 이에 대한 토론은 여기서 확인할 수 있습니다. 보통 지속 연결에서 볼 수 있는 문제로, 잘못 포함된 본문이 이후 요청에 대한 별도의 응답을 담고 있을 수 있습니다.

이 부분에 대해 더 알고싶으신 분은 아래의 이슈를 참조하세요
httpwg/http-core

결론

express는 204상태코드에 대해 response body를 보여주지 않고 넘어간다.!!

profile
대학생연합 IT벤처창업 동아리 SOPT 30기 SERVER 파트 기술 블로그입니다.

0개의 댓글