진행중인 프로젝트에서 ResponseEntity를 사용하는 중 HttpStatus가 알고 있던 것보다 더 많은 걸 알았다.
그래서 서버로부터 Request 결과를 전달하는 상태 코드에 대해 공부하려고 한다.

상태 코드

클라이언트가 서버에 request를 보낼 때 그 결과의 상태를 알려주는 것상태 코드의 역할이다.
서버가 클라이언트의 request를 정상적으로 처리 했는지, 에러였는지 알 수 있다.

image.png

상태 코드는 3자리 수로 나타내는데, 가장 앞자리 수는 response의 클래스를 의미한다.

response class

상태 클래스 의미
1xx Infomational 요청을 받고 처리중
2xx Success 요청을 정상적으로 처리함
3xx Redirection 요청을 완료하기 위해 추가 동작 필요
4xx Client Error 서버가 요청 이해 불가능
5xx Server Error 서버가 요청 처리 실패

이제 자주 사용되는 상태 코드들에 대해 자세히 알아보자.

1xx : 조건부 응답(Infomational)

  • 1xx 응답은 요청을 받았으며, 작업을 계속 함을 의미
상태코드 상태 설명
100 Continue 클라이언트는 request를 계속 해야함. 서버는 나머지 요청의 나머지 부분을 기다리는 상태
101 Switching Protocols 클라이언트가 서버에 프로토콜 전환 요청, 서버는 승인 중인 상태

2xx : 성공(Success)

  • 2xx 응답은 요청이 정상적으로 처리되었음을 의미
상태코드 상태 설명
200 Ok 서버가 요청을 정상 처리
204 No Content 서버가 요청을 정상 처리 했지만, response에 엔티티 바디를 포함하지 않음. 클라이언트에 새로운 정보를 보낼 필요가 없는 경우 사용됨.
206 Partial Content 범위가 지정된 요청에 의해서 서버가 부분적 GET 요청을 받았음을 나타냄. response에 지정된 범위의 엔티티가 포함

3xx : 리다이렉트(Redirection)

  • 3xx 응답은 서버가 요청을 마치기 위해 클라이언트에서 추가 동작을 해야함을 의미
상태코드 상태 설명
301 Moved Permanently 요청된 리소스에 새로운 URI가 부여되어 있어서, 이후로는 그 리소스를 참조하는 URI를 사용해야 함. 영구적인 이동
302 Found 요청된 리소스에 새로운 URI가 할당되어 있어서, 그 URI를 참조해야 함. 일시적인 이동
303 See Other 요청에 대한 리소스는 다른 URI에 있어서 GET 메서드를 사용해서 얻어야 함. 302 Found와 같은 기능이지만, 리다이렉트 장소를 GET 메서드로 얻어야 하는 것이 다름.
304 Not Modified 클라이언트가 조건부 요청을 했을 때 리소스에 대한 접근은 허용하지만, 조건이 충족되지 않았음을 의미. 304는 3xx에 분류되어 있지만 리다이렉트와는 관계가 없음
307 Temporary Redirect 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 함

4xx : 클라이언트 에러(Client Error)

  • 4xx 응답은 클라이언트의 원인으로 에러가 발생했음을 의미
상태코드 상태 설명
400 Bad Request 요청 구문이 잘못되었음을 나타냄. 브라우저는 이것을 200 OK와 같이 취급함
401 Unauthorized 송신한 응답에 HTTP 인증 정보가 필요하다는 것을 나타냄. 이미 1번의 요청이 이루어진 경우에는 유저 인증에 실패했음을 의미
403 Forbidden 요청된 리소스의 액세스가 거부되었음을 의미. 401과 비슷하지만 403의 경우에는 요청에 Authroization 헤더가 존재하지 않는다.
404 Not Found 요청한 리소스가 서버상에 없다는 것을 의미

5xx 서버 에러(Server Error)

  • 5xx 응답은 서버 원인으로 에러가 발생하고 있음을 의미
상태코드 상태 설명
500 Internal Server Error 서버에서 요청을 처리하는 도중에 에러가 발생하였음을 나타냄
503 Service Unavailable 일시작으로 서버가 과부하 상태이거나 점검중이기 때문에 현재 요청을 처리할 수 없음을 나타냄

참고 자료