자주 사용하는 HTTP 상태 코드

띠지·2021년 10월 24일
1

SOPT 서버파트 3차 세미나 내용 복습

Status Code

Status Code는 사용자가 웹 서버에 요청을 보냈을 때, 응답으로 보내주는 숫자 코드이다.

각 숫자는 미리 약속된 특정한 의미를 포함하고 있다.

따라서 클라이언트는 응답으로 온 숫자를 통해 보낸 요청이 성공적으로 진행되었는지, 앞으로 어떻게 해야할지 결정하는데 도움을 받을 수 있다.


2XX Success

200번대의 응답코드는 성공을 의미한다.

200 OK

대표적인 성공코드로, 에러 없이 요청이 성공적으로 진행되었다는 것을 의미한다.

(서버가 요청받은 페이지를 성공적으로 제공)

대부분의 경우 성공에 대한 응답을 200으로 통일하는 경우가 많다.

200번대의 코드들을 조금 더 세분화해서 사용한다면, 200번은 주로 GET 요청에 대한 응답으로 사용되게 된다.

201 Created

요청이 성공적으로 처리 되어, 서버가 새로운 리소스를 생성했을 때 사용하는 코드이다.

POST, PUT등의 요청에 대한 응답으로 주로 사용된다.

204 No Content

서버에 대한 요청이 성공적으로 처리되었고, 제공 해줄 응답 데이터가 없을 때 204를 사용한다.

예를들어 PUT으로 수정 요청을 받았는데 수정할 사항이 없는 경우,

사용자의 요청은 받아들여졌으니 200번대 코드를 사용하지만 응답할 데이터도 없으므로 204를 사용한다.

또한 DELETE 요청을 받을 경우에도, 요청이 받아들여져 데이터가 삭제되었을 때, 제공해줄 데이터가 없으므로 204를 사용한다.


3XX Redirection

300번대의 응답코드는 리다이렉션을 의미한다.

이는 요청이 완수되기 위해서는 추가적인 행동이 필요하다는 의미이다.

301 Moved Permanently

요청한 리소스가 응답 헤더의 Location에 주어진 URL로 완전히 옮겨졌음을 의미한다.

예를들어 주소창에 http://naver.com/을 입력하면, 301을 리턴하는데,

응답 헤더의 Location을 확인해보면 http://www.naver.com/으로 리다이렉션 된다.

웹브라우저는 이 코드를 받고, 해당하는 URL로 리다이렉트한다.

302 Found

301과 비슷하게 사용된다. 차이가 있다면 301의 경우는 영구적으로 이동하는 것이고, 302의 경우, 일시적으로 이동한다는 것이다.


예를들어, kart.nexon.com 같은 게임페이지에 접속할 때, 메인 홈페이지가 아닌 현재 진행중인 이벤트를 보여주는 홈페이지로 일시적으로 이동시킨다.

위 예시의 경우 kart.nexon.com > kart.nexon.com/redirector.aspx > kart.nexon.com/events/~ 의 절차를 통해 이벤트 페이지로 이동하게 된다.

304 Not modified

캐시목적으로 사용된다. 요청 후 수정된 사항이 없을 때 사용된다.

이 경우 캐시에 저장되어 있는 데이터를 그대로 보여주게 된다.

HTTP 304 Not Modified의 이해 및 예제(with. spring)


4XX Client Error

400번대의 코드들은 클라이언트의 요청이 유효하지 않을 때 사용한다.

400 Bad Request

API에 정의되지 않은 방식으로 요청을 하는 등, 클라이언트가 잘못된 요청을 했을 때 사용한다.

예를들어, 로그인할 때 id만 보내고 password를 보내지 않았을 때, 400 을 사용할 수 있다.

401 Unauthorized / 403 Forbidden

두 경우 모두 클라이언트가 권한이 없어서 요청을 받아들일 수 없을 때 사용한다.

두 코드의 차이점은

  • 401의 경우는 인증이 되지 않은 경우이다. 예를 들어 로그인이 필요한 기능을 로그인 하지 않은 상태로 요청하면 401이 적절하다.
  • 403의 경우는 권한이 없는 경우이다. 예를 들어 어떤 카페에서 로그인은 되어있는 상태이지만 등급이 낮아 접속 권한이 없을 때는 403이 적절하다.

404 Not Found

서버에 클라이언트가 요청한 리소스를 찾을 수 없을 때 사용한다.

실생활에서 자주 접할 수 있는 에러인데, 링크를 잘못입력하거나, 예전 링크여서 사라진 위치를 참조하고 있을 때 등 많은 이유로 404 에러를 만나게 된다.

이런 이유로 많은 사이트에서 404 Not Found 페이지를 꾸며 놓는데,

사이트 주소 뒤에 /asdfasdfasdfjfjfjfjfj 같은 없을 법한 주소를 입력해서 확인할 수 있다.

깃허브의 404 페이지

💡 418 I'm a teapot

IETF에서 만우절 장난으로 만든 응답코드

HTTP 418 에러의 의미를 아시나요? I'm a teapot!


5XX Server Error

500번대의 코드들은 400번대와 반대로, 클라이언트 측이 아닌 서버측에 오류가 있을 때 사용된다.

500 Internal Server Error

200 OK와 비슷하게 서버 오류에 대해서 포괄적으로 사용되는 코드이다.

클라이언트의 요청을 처리하는 과정에서 DB에서 오류가 발생하는 등 요청이 잘못된 것이 아니라 서버측에서 문제가 생겼을 때 사용한다.

예를들어, 회원가입을 하는 로직에서,

  1. 유저가 이미 존재하는 이메일을 통해 회원가입을 시도
  2. 이것을 중간에 검사하지 않고 DB에 회원을 추가적으로 가입시키려 시도
  3. 유일성 문제 등에 의해 DB 에러, 즉 서버 에러가 발생하게 된다

개발자들은 이런 상황을 미연에 방지할 수 있는 로직을 구현해야 한다.

(만약 사용자가 중복된 이메일을 사용하려고 할 때, 무작정 Create 하지 않고 DB에서 이미 존재하는지 확인 후 작업을 진행)

503 Service Unavailable

서버의 과부하, 점검 등의 이유로 일시적으로 서버에 접근이 불가능할 때 사용한다.

profile
백엔드 개발자(지망생!)

0개의 댓글