Appearance
HTTP status code
HTTP 상태 코드는 요청 처리 결과를 표준화해서 전달하는 방법이다.
API를 설계할 때는 "성공/실패"만 나누는 것이 아니라, 왜 그런 결과가 나왔는지를 상태 코드와 응답 본문으로 함께 표현하는 것이 중요하다.
1xx: 정보 응답2xx: 성공3xx: 리다이렉션4xx: 클라이언트 오류5xx: 서버 오류
자주 쓰는 2xx
| 상태코드 | 이름 | 의미 |
|---|---|---|
| 200 | OK | 요청 성공 |
| 201 | Created | 새 리소스 생성 성공 |
| 202 | Accepted | 요청은 수락했지만 처리는 아직 끝나지 않음 |
| 204 | No Content | 요청은 성공했지만 응답 본문이 없음 |
자주 쓰는 3xx
| 상태코드 | 이름 | 의미 |
|---|---|---|
| 301 | Moved Permanently | 리소스가 영구적으로 다른 URI로 이동 |
| 302 | Found | 일시적으로 다른 URI 사용 |
| 304 | Not Modified | 조건부 요청 결과, 캐시된 표현을 그대로 사용 가능 |
자주 쓰는 4xx
| 상태코드 | 이름 | 의미 |
|---|---|---|
| 400 | Bad Request | 요청 형식이나 값이 잘못됨 |
| 401 | Unauthorized | 인증 정보가 없거나 유효하지 않음 |
| 403 | Forbidden | 인증 여부와 별개로 접근이 허용되지 않음 |
| 404 | Not Found | 대상 리소스를 찾을 수 없음 |
| 405 | Method Not Allowed | 해당 리소스가 그 메서드를 지원하지 않음 |
| 406 | Not Acceptable | 클라이언트가 요구한 표현 형식으로 응답할 수 없음 |
| 408 | Request Timeout | 요청 대기 시간이 초과됨 |
| 409 | Conflict | 현재 리소스 상태와 충돌함 |
| 422 | Unprocessable Content | 형식은 맞지만 의미적으로 처리할 수 없음 |
| 429 | Too Many Requests | 허용량을 초과해 요청함 |
401과 403은 특히 자주 혼동한다.
401: 아직 인증되지 않았거나 인증이 실패한 상태403: 인증은 되었더라도 권한이 부족하거나 서버가 거부하는 상태
자주 쓰는 5xx
| 상태코드 | 이름 | 의미 |
|---|---|---|
| 500 | Internal Server Error | 서버 내부 오류 |
| 502 | Bad Gateway | 게이트웨이/프록시가 상위 서버에서 잘못된 응답을 받음 |
| 503 | Service Unavailable | 서버가 일시적으로 요청을 처리할 수 없음 |
| 504 | Gateway Timeout | 게이트웨이/프록시가 상위 서버 응답을 제시간에 받지 못함 |