HTTP 상태코드 정리
HTTP 상태코드를 카테고리별로 정리하고 설명합니다.
41개 상태코드
1xx — 정보 (Informational)
| 코드 | 이름 | 설명 |
|---|---|---|
100 | Continue | 요청의 첫 부분이 수신되었으며 나머지를 계속 보내도 됩니다. |
101 | Switching Protocols | 서버가 프로토콜 전환 요청을 수락했습니다. (예: HTTP → WebSocket) |
102 | Processing | 서버가 요청을 수신하여 처리 중이지만 아직 응답이 없습니다. (WebDAV) |
103 | Early Hints | 최종 응답 전에 Link 헤더 등 일부 응답 헤더를 미리 보냅니다. |
2xx — 성공 (Success)
| 코드 | 이름 | 설명 |
|---|---|---|
200 | OK | 요청이 성공적으로 처리되었습니다. GET/PUT/PATCH 응답에 주로 사용. |
201 | Created | 요청이 성공하여 새 리소스가 생성되었습니다. POST 응답에 주로 사용. |
202 | Accepted | 요청이 수락되었지만 아직 처리되지 않았습니다. 비동기 처리에 사용. |
204 | No Content | 요청이 성공했지만 응답 본문이 없습니다. DELETE 응답에 주로 사용. |
206 | Partial Content | Range 헤더에 의해 부분적 콘텐츠가 반환되었습니다. 파일 다운로드 재개 등. |
207 | Multi-Status | 여러 리소스에 대한 상태를 XML로 반환합니다. (WebDAV) |
3xx — 리다이렉션 (Redirection)
| 코드 | 이름 | 설명 |
|---|---|---|
300 | Multiple Choices | 요청에 대해 여러 응답이 가능합니다. 클라이언트가 선택해야 합니다. |
301 | Moved Permanently | 리소스가 영구적으로 이동했습니다. 검색 엔진이 새 URL을 인덱싱합니다. |
302 | Found | 리소스가 임시로 다른 URL에 있습니다. 원래 URL을 계속 사용합니다. |
303 | See Other | 다른 URL에서 GET으로 리소스를 가져와야 합니다. POST 후 리다이렉트에 사용. |
304 | Not Modified | 리소스가 변경되지 않았습니다. 캐시된 버전을 사용하세요. |
307 | Temporary Redirect | 임시 리다이렉트. 원래 요청 메서드(POST 등)를 유지합니다. |
308 | Permanent Redirect | 영구 리다이렉트. 원래 요청 메서드를 유지합니다. (301의 메서드 보존 버전) |
4xx — 클라이언트 오류 (Client Error)
| 코드 | 이름 | 설명 |
|---|---|---|
400 | Bad Request | 잘못된 요청 구문, 유효하지 않은 파라미터, 잘못된 JSON 형식 등. |
401 | Unauthorized | 인증이 필요합니다. 토큰이 없거나 만료된 경우. (WWW-Authenticate 헤더 포함) |
403 | Forbidden | 인증은 되었지만 해당 리소스에 대한 접근 권한이 없습니다. |
404 | Not Found | 요청한 리소스를 찾을 수 없습니다. 잘못된 URL이거나 삭제된 리소스. |
405 | Method Not Allowed | 요청한 HTTP 메서드(GET, POST 등)가 해당 엔드포인트에서 허용되지 않습니다. |
406 | Not Acceptable | 요청의 Accept 헤더에 맞는 콘텐츠 타입을 생성할 수 없습니다. |
407 | Proxy Authentication Required | 프록시 서버의 인증이 필요합니다. |
408 | Request Timeout | 서버가 요청을 기다리다 타임아웃되었습니다. 클라이언트가 너무 느린 경우. |
409 | Conflict | 요청이 현재 리소스 상태와 충돌합니다. 동시 수정, 중복 생성 등. |
410 | Gone | 리소스가 영구적으로 삭제되어 더 이상 이용할 수 없습니다. 404와 달리 의도적 삭제. |
411 | Length Required | Content-Length 헤더가 필요합니다. |
412 | Precondition Failed | 요청 헤더의 전제 조건(If-Match 등)이 충족되지 않았습니다. |
413 | Payload Too Large | 요청 본문이 서버의 허용 크기를 초과했습니다. |
414 | URI Too Long | 요청 URI가 서버가 처리할 수 있는 길이를 초과했습니다. |
415 | Unsupported Media Type | 지원하지 않는 Content-Type입니다. (예: XML만 지원하는데 JSON 전송) |
422 | Unprocessable Entity | 요청 구문은 올바르지만 의미적으로 처리할 수 없습니다. 유효성 검증 실패. |
429 | Too Many Requests | 너무 많은 요청을 보냈습니다. Rate limiting 적용. Retry-After 헤더 확인. |
451 | Unavailable For Legal Reasons | 법적 사유로 접근이 차단된 리소스입니다. |
5xx — 서버 오류 (Server Error)
| 코드 | 이름 | 설명 |
|---|---|---|
500 | Internal Server Error | 서버 내부에서 예상치 못한 오류가 발생했습니다. 가장 일반적인 서버 오류. |
501 | Not Implemented | 서버가 요청된 HTTP 메서드나 기능을 아직 구현하지 않았습니다. |
502 | Bad Gateway | 게이트웨이/프록시(Nginx 등)가 상위 서버에서 잘못된 응답을 받았습니다. |
503 | Service Unavailable | 서버가 일시적으로 요청을 처리할 수 없습니다. 과부하, 유지보수, 배포 중. |
504 | Gateway Timeout | 게이트웨이/프록시가 상위 서버 응답을 기다리다 타임아웃되었습니다. |
505 | HTTP Version Not Supported | 서버가 요청에 사용된 HTTP 버전을 지원하지 않습니다. |
자주 묻는 질문
HTTP 상태코드란 무엇인가요?↓
HTTP 상태코드는 클라이언트의 요청에 대한 서버의 응답 상태를 나타내는 3자리 숫자 코드입니다. 1xx(정보), 2xx(성공), 3xx(리다이렉션), 4xx(클라이언트 오류), 5xx(서버 오류)의 5개 카테고리로 분류됩니다.
301과 302 리다이렉트의 차이는 무엇인가요?↓
301(Moved Permanently)은 영구 리다이렉트로 검색 엔진이 새 URL을 인덱싱합니다. 302(Found)는 임시 리다이렉트로 원래 URL이 검색 엔진에 유지됩니다. SEO에서 중요한 차이입니다.
401과 403의 차이는 무엇인가요?↓
401(Unauthorized)은 인증이 필요하거나 인증에 실패한 경우입니다. 로그인하면 해결됩니다. 403(Forbidden)은 인증은 되었지만 해당 리소스에 대한 권한이 없는 경우입니다. 관리자 페이지에 일반 사용자가 접근하는 경우 등.
404와 410의 차이는 무엇인가요?↓
404(Not Found)는 리소스를 찾을 수 없다는 일반적인 상태입니다. 410(Gone)은 리소스가 의도적으로 영구 삭제되었음을 명시합니다. 검색 엔진은 410을 받으면 더 빨리 인덱스에서 제거합니다.
429 Too Many Requests는 어떻게 처리하나요?↓
서버의 Rate Limiting에 걸린 상태입니다. Retry-After 헤더를 확인하고 해당 시간 후 재시도하세요. API 클라이언트에서는 지수 백오프(Exponential Backoff) 전략을 구현하는 것이 좋습니다.
502와 503의 차이는 무엇인가요?↓
502(Bad Gateway)는 프록시/로드밸런서가 상위 서버에서 잘못된 응답을 받은 경우입니다. 503(Service Unavailable)은 서버가 과부하, 유지보수 등으로 일시적으로 요청을 처리할 수 없는 상태입니다.
REST API에서 가장 많이 사용하는 상태코드는 무엇인가요?↓
GET 성공: 200, POST 생성 성공: 201, DELETE 성공: 204, 잘못된 요청: 400, 인증 실패: 401, 권한 없음: 403, 리소스 없음: 404, 유효성 검증 실패: 422, 서버 오류: 500이 가장 자주 사용됩니다.