[개념]
- 클라이언트 요청에 따른 서버의 return 코드
- RFC2616 (1999년), RFC7230~7235(2014년) 정의
- 클라이언트(브라우저)가 수신할 상태 코드의 의미에 따라 요청 처리 로직, 응답 본문 구성, 캐싱 정책, 리다이렉션 처리, 에러 핸들링 등을 명확히 정의할 수 있음
- 서버 아키텍처와 API 설계에서 일관된 동작 지침을 수립할 수 있음
HTTP Status Code
1xx (Informational) – 요청 진행 중
2xx (Success) – 성공
3xx (Redirection) – 리다이렉션
4xx (Client Error) – 클라이언트 잘못
| 코드 | 설명 | 예시 상황 |
| 400 Bad Request | 잘못된 요청 | 잘못된 JSON |
| 401 Unauthorized | 인증 필요 | 로그인 필요 |
| 402 Payment Required (예약됨) | 결제 필요 (미사용) | |
| 403 Forbidden | 권한 없음 | 관리자 페이지 접근 차단 |
| 404 Not Found | 리소스 없음 | 없는 페이지 요청 |
| 405 Method Not Allowed | 지원 안 하는 메서드 | POST /status 허용 안 함 |
| 406 Not Acceptable | 요청한 응답 형식 불가 | Accept: application/xml인데 XML 미지원 |
| 407 Proxy Authentication Required | 프록시 인증 필요 | |
| 408 Request Timeout | 요청 시간 초과 | 클라이언트 응답 없음 |
| 409 Conflict | 자원 충돌 | 동시에 같은 파일 수정 |
| 410 Gone | 리소스 영구 삭제됨 | 삭제된 게시글 |
| 411 Length Required | Content-Length 헤더 필요 | |
| 412 Precondition Failed | 조건 헤더 불일치 | If-Match 실패 |
| 413 Payload Too Large | 요청 본문이 너무 큼 | 업로드 용량 초과 |
| 414 URI Too Long | URL이 너무 김 | |
| 415 Unsupported Media Type | 지원하지 않는 타입 | Content-Type: text/csv 미지원 |
| 416 Range Not Satisfiable | 요청한 범위 불가능 | |
| 417 Expectation Failed | Expect 헤더 조건 불일치 | |
| 418 I’m a teapot (개그 코드) | 에이프릴 풀 RFC | |
| 421 Misdirected Request | 잘못된 서버로 요청 전달 | |
| 422 Unprocessable Entity (WebDAV) | 의미적 오류 | JSON 필드 유효성 실패 |
| 423 Locked (WebDAV) | 리소스 잠김 | |
| 424 Failed Dependency (WebDAV) | 의존 요청 실패 | |
| 425 Too Early | 너무 이른 재시도 방지 | |
| 426 Upgrade Required | 프로토콜 업그레이드 필요 | |
| 428 Precondition Required | 조건부 요청 필요 | |
| 429 Too Many Requests | 요청 과다 (Rate limit) | |
| 431 Request Header Fields Too Large | 헤더 너무 큼 | |
| 451 Unavailable For Legal Reasons | 법적 이유로 차단됨 | DMCA, 정부 검열 |
5xx (Server Error) – 서버 잘못
| 코드 | 설명 | 예시 상황 |
| 500 Internal Server Error | 서버 내부 오류 | NullPointerException |
| 501 Not Implemented | 미구현 기능 | 지원 안 하는 메서드 |
| 502 Bad Gateway | 게이트웨이/프록시 오류 | Nginx → 백엔드 다운 |
| 503 Service Unavailable | 서버 과부하/점검 중 | 트래픽 폭주 |
| 504 Gateway Timeout | 게이트웨이 응답 시간 초과 | |
| 505 HTTP Version Not Supported | 지원 안 하는 HTTP 버전 | |
| 506 Variant Also Negotiates | 협상 오류 | |
| 507 Insufficient Storage (WebDAV) | 저장 공간 부족 | |
| 508 Loop Detected (WebDAV) | 무한 루프 감지 | |
| 510 Not Extended | 추가 확장 필요 | |
| 511 Network Authentication Required | 네트워크 인증 필요 | 호텔 와이파이 로그인 페이지 |
- 500: 서버 자체 오류
- 502: 프록시/게이트웨이가 백엔드 잘못된 응답 받음
- 503: 서버/백엔드 일시적으로 요청 처리 불가(과부하 등)
- 504: 백엔드 지연 → 타임아웃
📌 잘 안 쓰이는 HTTP Status Code의 공통적 이유
- 구식 표준 → 초기 HTTP/1.0~1.1에서 정의됐지만 현대 웹/REST API에서는 의미가 맞지 않음 (예: 305, 306).
- 특수한 프로토콜 전용 → WebDAV 등 제한적 환경에서만 필요 (207, 422, 507 등).
- 클라이언트/브라우저 지원 부족 → 대부분의 브라우저, 프록시, API 클라이언트가 무시함 (205, 417, 103).
- 실무 대체 코드 존재 → 의미가 겹치거나 유사한 더 단순한 코드로 대체됨 (예: 402 대신 403, 451 대신 403).
- 운영상 불편 → 코드가 너무 세분화되어 오히려 에러 처리/모니터링 복잡성 증가 (예: 203, 406).
- 실제 적용 사례 부족 → 결제, 법적 제한 등 특정 도메인에서만 쓰이도록 정의됐으나 표준화된 사용례가 없음 (402, 451).
- 보안 문제 → 사용하면 공격에 악용될 가능성이 있어 폐기되거나 권장 안 됨 (305 Use Proxy).
- 실무에서 굳이 필요 없음 → REST API, 웹 애플리케이션 운영에 있어 반드시 구분할 필요가 없음 (예: 409/422/424 중 하나만으로 충분).
문제 1
사용자가 상품 결제를 시도했다.
- 요청 경로: 클라이언트 → 프록시 → 백엔드 결제 API → DB
- DB 연결은 정상, 백엔드 로직에서 NullPointerException 발생
- 프록시는 오류를 감지하고 클라이언트에 전달
클라이언트가 받을 상태 코드는?
A. 500 Internal Server Error
B. 502 Bad Gateway
C. 503 Service Unavailable
D. 504 Gateway Timeout
E. 200 OK
정답
정답 : A
- 서버(백엔드)가 자체 로직 오류로 요청을 처리할 수 없음
- 클라이언트는 500 상태 코드로 오류 확인
문제2.
사용자가 동영상 스트리밍을 요청했다.
- 요청 경로: 클라이언트 → Nginx 프록시 → 백엔드 미디어 서버 → CDN
- 미디어 서버가 순간 과부하로 요청을 처리할 수 없는 상태
- 프록시는 백엔드가 일시적으로 처리 불가하다는 것을 감지
클라이언트가 받을 상태 코드는?
A. 500 Internal Server Error
B. 502 Bad Gateway
C. 503 Service Unavailable
D. 504 Gateway Timeout
E. 408 Request Timeout
정답
정답 : C
- 백엔드가 일시적으로 요청을 처리할 수 없음 → 503
- 502가 아닌 이유: 백엔드가 잘못된 응답을 준 것이 아니라 요청 처리 불가
문제 3
사용자가 로그인 후 프로필 조회를 시도했다.
- 요청 경로: 클라이언트 → 프록시 → 백엔드 인증 서버
- 백엔드는 정상적으로 200 OK를 반환했지만, 응답 헤더가 잘못 구성되어 프록시에서 정규화 실패
- 클라이언트는 정상 데이터 대신 에러 페이지를 받음
클라이언트가 받을 상태 코드는?
A. 500 Internal Server Error
B. 502 Bad Gateway
C. 503 Service Unavailable
D. 504 Gateway Timeout
E. 200 OK
정답
정답 : B
- 프록시는 정상인데, 백엔드 응답이 규격에 맞지 않아 처리 실패
- 클라이언트 입장에서 게이트웨이 오류 → 502
'기타' 카테고리의 다른 글
| 42. service mesh & Istio (2) | 2025.08.29 |
|---|---|
| 41. 온프레미스 -> Azure 전환 / 비용산정 (0) | 2025.08.29 |
| 24. 3-Tier 아키텍처 (1) | 2025.08.29 |
| 32. Backup(외장 스토리지, 백업 테이프 라이브러리 설명) (1) | 2025.08.29 |
| 31. Backup(VTL) (0) | 2025.08.29 |