Server

[Server] HTTP 상태 코드

허몽구 2023. 4. 22. 23:52

백엔드를 공부하는 사람이라면 HTTP 상태코드는 무조건 필수로 알고 있어야 한다.

이번에 리팩토링을 하면서 오류가 났을 때 어떤 상태코드가 발생할지 헷갈리는 경우가 많았어서 정리해보려고 한다.

 

상태코드는 3자리 숫자로 이루어지며 첫 번째 자리는 1 ~ 5까지의 숫자로 구성되어 있다.

1xx (정보) : 요청을 받았으며 프로세스를 계속 진행한다.
2xx (성공) : 요청을 성공적으로 받았고 수용했다.
3xx (리다이렉션) : 요청을 완료하기 위해 추가적으로 작업을 진행해야 한다.
4xx (클라이언트 오류) : 요청의 문법이 잘못되었거나 처리할 수 없다.
5x (서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못 했다.

 

1. 1xx (Informational, 정보성 상태 코드)

클라이언트의 요청이 계속 진행 중임을 나타낸다.

 

100 (Continue) : 클라이언트가 요청을 계속 진행해도 되는지 나타낸다. 서버는 이 상태 코드를 사용하여 요청의 일부를 성공적으로 수신했으며, 클라이언트가 나머지 요청을 계속 보낼 수 있다는 것을 알려준다.

 

101 (Switching Protocols) : 클라이언트 요청에 대해 서버가 프로토콜 전환이 필요함을 알려준다. 이를 통해 서버가 요청된 프로토콜로 전환하고자 할 때 사용될 수 있다.

 

102 (Processing) : 서버는 요청을 수신하였지만 아직 요청에 대한 처리가 완료되지 않았음을 나타낸다. 이 상태 코드는 장기간 실행되는 요청의 중간 상태를 표시하기 위해 사용될 수 있다.

 

103 (Early Hints) : 서버는 응답에 대한 일부 정보를 보내어 클라이언트가 미리 처리할 수 있도록 알려준다. 이를 통해 클라이언트는 미리 리소스를 가져올 수 있고, 대기 시간을 줄일 수 있다.

 

2. 2xx (Successful, 성공 상태 코드)

"Success" 상태 코드로, 클라이언트의 요청이 성공적으로 처리되었음을 나타낸다.

 

200 (OK) : 클라이언트의 요청이 성공적으로 처리되었음을 나타낸다. 이 상태 코드는 주로 GET 요청에 대한 성공 응답으로 사용된다.

 

201 (Created) : 클라이언트의 요청이 성공적으로 처리되어 새로운 리소스가 생성되었음을 나타낸다. 주로 POST 요청에 사용되며, 응답에는 생성된 리소스의 위치나 상세 정보가 포함될 수 있다.

 

202 (Accepted) : 클라이언트의 요청이 수신되었으며, 아직 처리되지 않았음을 나타낸다. 실제 처리는 나중에 완료될 수 있다.

 

204 (No Content) : 클라이언트의 요청은 성공적으로 처리되었지만, 응답 본문에는 컨텐츠가 없음을 나타낸다. 주로 DELETE 요청에 사용될 수 있다.

 

205 (Reset Content) : 클라이언트는 요청을 완료한 후에 현재 페이지를 재설정해야 함을 나타낸다. 주로 폼을 제출한 후에 폼의 내용을 지우는 데 사용될 수 있다.

 

206 (Partial Content) : 서버는 요청의 일부만 성공적으로 반환하였음을 나타낸다. 주로 대용량 파일을 다운로드할 때 요청 범위에 따라 파일의 일부분만 응답으로 받을 수 있는 경우에 사용된다.

 

207 (Multi-Status) : 클라이언트의 요청에 대한 여러 상태가 있음을 나타낸다. 주로 WebDAV(Distributed Authoring and Versioning) 프로토콜에서 사용되며, 여러 리소스의 상태를 동시에 반환할 때 사용될 수 있다.

 

208 (Already Reported) : 해당 리소스는 이미 이전 요청에 대한 상태 보고를 받았음을 나타낸다. 주로 WebDAV 프로토콜에서 사용되며, 중복된 보고를 방지하기 위해 사용될 수 있다.

 

226 (IM Used) : 서버는 요청에 대해 IM (Instance Manipulation) 사용을 완료하였음을 나타낸다. IM은 HTTP 확장 프로토콜로서, 리소스의 인스턴스를 조작하는 데 사용될 수 있다.

 

3. 3xx (Redirection, 리다이렉션 상태 코드)

"Redirection" 상태 코드로, 클라이언트의 요청을 완료하기 위해 추가 동작이 필요함을 나타낸다.

 

300 (Multiple Choices) : 클라이언트의 요청에 대해 여러 선택지가 있음을 나타낸다. 주로 GET 요청에서 사용되며, 응답에는 리다이렉션할 수 있는 대안 리소스의 목록이 포함될 수 있다.

 

301 (Moved Permanently) : 요청한 리소스가 영구적으로 새로운 URL로 이동되었음을 나타낸다. 클라이언트는 이후에는 새로운 URL을 사용하여 요청해야 한다.

 

302 (Found) : 요청한 리소스가 일시적으로 다른 URL로 이동되었음을 나타낸다. 클라이언트는 이후에도 원래 URL을 사용하여 요청할 수 있다.

 

303 (See Other) : 요청에 대한 응답이 다른 URL을 참조하고 있음을 나타낸다. 클라이언트는 GET 메서드를 사용하여 새로운 URL로 요청을 보내야 한다.

 

304 (Not Modified) : 클라이언트의 요청에 대한 리소스가 수정되지 않았음을 나타낸다. 이는 주로 캐시된 버전을 사용하여 리소스를 제공할 수 있음을 의미한다.

 

307 (Temporary Redirect) : 요청한 리소스가 일시적으로 다른 URL로 이동되었음을 나타낸다. 클라이언트는 이후에도 원래 URL을 사용하여 요청해야 하지만, 리다이렉트된 요청은 유지된다.

 

- 308 (Permanent Redirect) : 요청한 리소스가 영구적으로 새로운 URL로 이동되었음을 나타낸다. 클라이언트는 이후에도 새로운 URL을 사용하여 요청해야 한다.

 

4. 4xx (Client Error, 클라이언트 오류 상태 코드)

"Client Error" 상태 코드로, 클라이언트의 요청에 오류가 있음을 나타낸다. 

 

- 400 (Bad Request) : 서버가 요청을 이해할 수 없거나 잘못된 구문으로 작성되었음을 나타낸다.

 

401 (Unauthorized) : 클라이언트가 인증되지 않았거나 인증 정보가 유효하지 않음을 나타낸다. 보통은 로그인이 필요한 리소스에 대한 접근 시 발생한다.

 

403 (Forbidden) : 클라이언트가 요청한 리소스에 대한 접근 권한이 없음을 나타낸다. 서버가 클라이언트의 요청을 이해했지만, 요청을 거부한다.

 

- 404 (Not Found) : 요청한 리소스를 서버에서 찾을 수 없음을 나타낸다. 클라이언트가 잘못된 URL을 요청하거나 서버에 해당 리소스가 없는 경우에 발생한다.

 

405 (Method Not Allowed) : 클라이언트가 요청한 HTTP 메서드가 서버에서 허용되지 않음을 나타낸다. 예를 들어, GET 요청이 허용되지 않는 리소스에 대해 전송된 경우에 발생할 수 있다.

 

408 (Request Timeout) : 클라이언트의 요청이 서버에서 허용된 시간 내에 완료되지 않았음을 나타낸다. 일반적으로 서버와의 연결이 불안정하거나 요청 처리 시간이 오래 걸릴 때 발생한다.

 

409 (Conflict) : 클라이언트의 요청이 서버의 현재 상태와 충돌함을 나타낸다. 예를 들어, 동시에 발생한 요청이 서로 상충하여 처리할 수 없는 경우에 발생할 수 있다.

 

410 (Gone) : 요청한 리소스가 영구적으로 이용할 수 없음을 나타낸다. 일반적으로 이전에 존재하던 리소스가 삭제되거나 이동된 경우에 발생한다.

 

5. 5xx (Server Error, 서버 오류 상태 코드)

"Server Error" 상태 코드로 서버에서 오류가 발생하여 요청을 처리할 수 없음을 나타낸다.

 

500 (Internal Server Error) : 서버 내부에서 오류가 발생했음을 나타낸다. 정확한 오류 원인은 클라이언트에게 제공되지 않으며, 일반적으로 서버 측 코드의 버그나 예기치 않은 예외 발생 등이 원인일 수 있다.

 

501 (Not Implemented) : 서버가 요청된 기능이나 메서드를 지원하지 않음을 나타낸다. 클라이언트가 요청한 기능을 서버가 구현하지 않은 경우에 발생할 수 있다.

 

502 (Bad Gateway) : 서버가 게이트웨이나 프록시 역할을 하고 있으며, 상위 서버로부터 유효하지 않은 응답을 수신했음을 나타낸다.

 

503 (Service Unavailable) : 서버가 현재 일시적으로 요청을 처리할 수 없음을 나타낸다. 일반적으로 서버가 과부하 상태이거나 유지 보수 작업 등으로 인해 일시적으로 사용할 수 없는 경우에 발생한다.

 

504 (Gateway Timeout) : 서버가 게이트웨이나 프록시 역할을 하고 있으며, 상위 서버로부터 응답을 수신하는데 제한 시간이 초과되었음을 나타낸다.

 

505 (HTTP Version Not Supported) : 서버가 클라이언트의 요청에 포함된 HTTP 프로토콜 버전을 지원하지 않음을 나타낸다.

 

 

이번에 ApiResonsDTO를 알게 되면서, Success코드에 상태코드를 나타내야하는 경우가 있는데 헷갈려서 적어봤다. 

형광펜 표시는 정말 많이 쓰이는 상태코드이므로 꼭 기억해두시길!!