
2XX Success
2xx 번대 상태 코드들은 서버가 클라이언트의 요청 처리했다는 의미이다.
200 Ok
- 클라이언트의 요청이 서버에 정상적으로 처리됨.
모든 성공에 대한 상태코드를 200으로 줘도 상관은 없다. 그러나 세부적으로 나눠서 적절한 상태코드를 갖게 하는 것이 바람직하다.
201 Created
- Post, Put 요청에 대한 응답에 주로 사용된다. 의미는 200과 비슷하나, 성공과 동시에 새로운 리소스가 생성되었다는 의미를 내포한다.
202 Accepted
- 클라이언트의 요청은 정상적이나, 서버가 아직 요청을 완료하지 못함을 뜻한다.
- 클라이언트의 요청이 정상적이면 서버에서 작업의 성공과 실패를 응답으로 내놓는 것이 일반적이나, 작업 완료를 위한 일련의 작업들이 오래 걸리기 때문에 나중에 알려주겠다는 의미이다.
🖤 클라이언트가 요청의 완료 여부를 확인할 수 있는 2가지 방법
1. Callback
서버 작업이 완료 되면 클라이언트에게 알려주는 것.
2. Polling
클라이언트가 주기적으로 해당 작업의 상태를 조회하는 것.
204 No Content
- 클라이언트의 요청은 정상적이나, 컨텐츠를 제공하지 않는다.
- 204 상태 코드는 자원의 삭제 요청에 응답할 수 있다.
4XX Client Errors
4xx의 상태들은 클라이언트의 요청이 유효하지 않아 서버가 해당 요청을 수행하지 않았다는 의미이다.
400 Bad Request
- 클라이언트의 요청이 유효하지 않아 더 이상 작업을 진행하지 않는 경우
Api 서버는 클라이언트의 요청이 들어오면 바로 작업 하지 않고, 요청이 서버가 정의한 유효성에 맞는지 사전 유효성을 검증한 뒤에 작업을 진행할 수 있다.
(유효성 검증 없이 진행하게 되면 5xx의 서버 오류가 발생할 수 있기 때문에 대부분 사전에 막는 로직을 추가한다.)
그러나 400 상태코드로 응답하는 것만으로는 부족하다. 오류 발생 시,
파라미터의 위치(path, query, body), 사용자 입력 값, 에러 이유를 꼭 명시하는 것이 좋다.
401 Unauthorized (un + authorized : 인정받은, 권한을 부여 받은) / authenticated : 인증
- 클라이언트가 권한이 없기 때문에 작업을 진행할 수 없는 경우.
401은 비인증. 즉, 인증이 안되어서 자원을 이용할 수 없는 상태.
403 Forbidden (forbidden : 금지된) / authorized : 승인
- 클라이언트가 권한이 없기 때문에 작업을 진행할 수 없는 경우
403은 권한에 대한 내용.
404 Not Found
- 경로가 존재하지 않음.
대부분 api 프레임워크에서는 경로(라우팅)에 대한 에러 처리를 해준다.
- 자원이 존재하지 않음.
그러나 자원의 경우는 개발자가 처리해줘야한다.
405 Method Not Allowed
- 클라이언트의 요청이 허용되지 않는 메소드인 경우. (메소드(method) = post, get, put, delete등 http method를 말한다.)
즉, 자원(URI)은 존재하지만, 해당 자원이 지원하지 않는 메소드일 때 응답하는 상태코드이다.
405 상태코드는 options 메소드와 http header 의 allow와 연관되어있다.
options는 api가 허용하는 메소드가 어떤 것들이 있는지 확인하는 메소드이다. (405에러를 사전에 방지하기 위한 용도로 주로 쓰인다.) 이 때, 응답 http header의 allow에 지원하는 메소드를 나열하여 응답한다.
409 Conflict
- 클라이언트의 요청이 서버의 상태와 충돌이 발생한 경우.(중복)
앞서 나열한 상태코드에 속하기 어려운 애매한 오류들의 상황을 409로 응답한다.
429 Too Many Requests
- 클라이언트가 일정 시간 동안 너무 많은 요청을 보낸 경우.
비정상적인 (DoS attack, Brute-force attack)방법으로 자원을 요청하는 경우 응답한다.
서버가 감당하기 힘든 요청이 지속적으로 들어오면, 서버는 해당 요청을 처리하기 위해 다른 작업을 처리하지 못할 수 있다.
429 상태 코드는 이러한 경우 일정 시간 뒤 요청할 것을 나타내는 것이다. 따라서 다음과 같이 Retry-After를 이용한다.
http/1.1 429 Too Many Requests
Retry-After:3600
클라이언트는 3600초 후에 다시 해당 자원에 대한 작업을 요청할 수 있다.
5XX Server errors
5xx상태코드들은 서버 오류로 인해 요청을 수행할 수 없다는 의미이다.