HTTP Status Code 와 Express

HY·2022년 5월 2일
3

issue-handling

목록 보기
1/2
post-thumbnail

발단

현재 참여 중인 코드스테이츠 블록체인 부트캠프에서 section 2의 HA 과제를 수행하던 중에 발생했다. 문제가 발생했던 과제는 다음과 같다.
유저가 클라이언트에서 로그아웃 버튼을 클릭하면 /users/signout 로 GET 리퀘스트가 날아가고, 서버에서는 쿠키에 저장한 토큰을 무효화 한 뒤 205 코드와 함께 ok 메시지를 날려야 한다.

처음에 다른 과제에서 로그인 실패, 성공의 결과를 리턴할 때 하단의 코드를 추가하여 정상적으로 처리하였다.

res.status(404).send('invalid user'); // 아이디, 패스워드 불일치 시 
res.status(200).json({'message':'ok'}); // 로그인 성공

이슈 발생

이를 기반으로 당연히 205 코드와 ok 메시지를 넣으면 해결되는 문제라 생각했다.

res.status(205).send('ok');

그러자 유저가 logout 요청을 날렸을 때 응답으로 205 는 받아오지만 결과 메세지인 ok 는 받아오지 못했다.

원인

해당 이슈의 발생 원인은 http status에 대한 이해 부족이 원인이었다. 205 코드는 사용한 적이 없어 몰랐는데, 정확한 의미는 서버에서 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않으니 유저가 문서 보기를 재설정하기를 요구하는 코드였다.

이는 곧 서버에서 응답값을 보내지 않는다는 의미로, status를 205로 설정했을 때 ok 메세지를 추가할 수 없었다.

해결

이를 해결하기 위해 Express의 res.send(), res.json(), res.end() 의 차이를 공부했다.

  • res.send() : send()에 전해진 argument에 따라 Content-type 이 자동적으로 만들어진다.

  • res.json() : JSON이 아닌 것도 JSON 형식으로 바꾸어서 리턴한다. Content-type 헤더를 application/JSON 으로 고정한다. 하지만 마지막엔 send() 를 호출한다.

  • res.end() : 보내줄 데이터가 없어도 response를 끝내고 싶을 때 사용한다.

위와 같은 Express의 특징에 따라 응답할 데이터가 없는 205 코드에 ok 메시지를 추가하기 위해 end() 를 사용하여 과제를 해결했다.

res.status(205).end('ok'); 

평가

HA 스프린트 과제를 제출한 다음날 담당 크루님이 해당 이슈는 마이너 릴리즈 시 발생한 이슈로 로그아웃 시 상태 코드는 200 를 리턴하도록 수정해야 된다고 전달해주셨다.
사실 잘못된 문제를 해결하긴 했지만 이번 기회로 Express의 response 처리에 대해 공부할 수 있었다.

참고문헌

https://developer.mozilla.org/ko/docs/Web/HTTP/Status/205
https://www.webfx.com/web-development/glossary/http-status-codes/what-is-a-205-status-code/
https://yohanpro.com/posts/nodejs/express-response

profile
사실은 공부를 비밀스럽게 하고 싶었다

1개의 댓글

comment-user-thumbnail
2022년 7월 16일

저도 205에 메세지 날려보내고 싶어서 헤매던 중이었는데 많은 도움이 되었습니다. 감사합니다!! :D

답글 달기