HTTP 상태코드

기운찬곰·2020년 9월 21일
0

WEB 이론

목록 보기
2/2
post-thumbnail

시작하기에 앞서서...

이번 시간에는 HTTP 상태코드에 대해 정리하겠다. 여기서는 모든 상태코드를 정리하는 대신에 자주쓰는 상태코드 위주로 정리하였다.


HTTP 상태코드란?

HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려준다. 응답은 5개의 그룹으로 나누어진다.

  • 100번대 : 정보를 제공하는 응답
  • 200번대 : 성공적인 응답
  • 300번대 : 리다이렉트
  • 400번대 : 클라이언트 에러
  • 500번대 : 서버 에러

💻 참고. 상태 코드는 section 10 of RFC 2616에 정의되어 있다.

400 Bad Request

이 상태코드는 클라이언트에서 보낸 값을 서버에서 유효성 검사를 했더니 유효하지 않은 값이라고 판단하고 다시 넘겨줄때 쓰인다.

예를들어, 페이지번호가 1부터 시작하는데 1미만에 값이 넘어왔다던가 게시글을 등록할때 title, body, tags 정보가 형식에 맞게 넘어와야 하는데 하나라도 빠졌거나 타입이 다르다면 400을 발생시키면 된다.

401 Unauthorized

비록 HTTP 표준에서는 "미승인(unauthorized)"를 명확히 하고 있지만, 의미상 이 응답은 "비인증(unauthenticated)"을 의미한다. 클라이언트는 요청한 응답을 받기 위해서는 반드시 스스로를 인증해야 한다.

예를들어, 클라이언트가 로그인을 시도하는데 서버에서 확인했더니 id, password가 정확히 일치하지 않는 경우가 발생시키면 된다.

403 Forbidden

클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않다. 예를들어 그들은 미승인이어서 서버는 거절을 위한 적절한 응답을 보낸다. 401과 다른 점은 서버가 클라이언트가 누구인지는 알고 있을 때 쓰인다.

이 경우는 예를들어, 로그인은 했지만 내가 작성한 게시글이 아닌 다른 사람의 게시글을 수정하거나 삭제하려고 할때 발생시키는 상태코드이다.

404 Not Found

서버는 요청받은 리소스를 찾을 수 없다. 브라우저에서는 알려지지 않은 URL을 의미한다. 이것은 API에서 종점은 적절하지만 리소스 자체는 존재하지 않음을 의미할 수도 있다. 일반적으로는 없는 URL을 요청했을때 자동으로 404 에러가 뜨게 되는 것을 본적이 있을 것이다.

예를들어, GET /posts/:id 으로 해서 특정 post를 요청했다고 했을때 그 post가 없는 경우에 404 Not Found를 의도적으로 발생시킬 수도 있습니다. 이거 안해줘도 자동으로 발생은 하겠지만 따로 메시지를 전달하고 싶을때나 아니면 내가 만든 404 not found 디자인을 보여주고 싶은 경우 사용할 수 있다.

res.status(404).json({
  message: "해당 포스트는 존재하지 않습니다.",
});

409 Conflict

이 응답은 요청이 현재 서버의 상태와 충돌될 때 보낸다.

예를들어 회원가입을 하려고 할때 DB를 조사해서 이미 존재하는 id가 있다면 충돌이 발생하는데 이때 넘겨주는 상태코드가 되겠다.

res.status(409).json({
  message: "동일한 ID가 존재합니다.",
});

500 Interanl Server Error

서버가 처리 방법을 모르는 상황이 발생했다. 서버는 아직 처리 방법을 알 수 없다.

export const delete = async (req, res) => {
  try {
    // 동작 로직구현
  } catch (e) {
    res.status(500).json({
      message: "삭제하는데 실패했습니다.",
    });
  }
};

보통은 위와 같은 구문에서 catch 이후에 동작에서 쓰인다. 즉, try에서 삭제하는 로직을 처리하는데 문제가 발생하는 경우라면 catch로 넘어가게 된다. 그리고 여기서 클라이언트에게 500 상태코드와 에러메시지를 날려주는 된다.

서버에 에러가 발생한다면 500으로 넘겨주는게 일반적이다.

200 OK

서버가 요청을 제대로 처리했다는 뜻이다. 이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰인다.

예를들어, GET /posts 를 해서 제대로 post 목록을 반환하면 이 상태코드를 쓴다.

res.status(200).json({
  posts
});

201 Created

요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었다. 이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라온다.

200과 비슷하지만 201은 주로 POST /posts해서 포스트가 제대로 작성될때 쓰이는 상태코드이다.

204 No Content

요청에 대해서 보내줄 수 있는 콘텐츠가 없지만 헤더는 의미있을 수 있다. 사용자-에이전트는 리소스가 캐시된 헤더를 새로운 것으로 업데이트 할 수 있다.

res.status(204).send();

예를 들어 특정 포스트를 제거하는 동작이 성공적으로 수행되었다면 딱히 메시지를 보내줄 필요가 없이 No Content를 의미하는 204를 전달해주면 될 것이다.


마침

백엔드를 개발하면서 클라이언트한테 어떨때는 어떤 상태코드를 넘겨줘야 하나 헷갈릴때가 많았기 때문에 이 기회에 한번 정리하는 시간을 가져봤다.

Hits

profile
배움을 좋아합니다. 새로운 것을 좋아합니다.

0개의 댓글