HTTP 통신에서 클라이언트와 서버는 요청과 응답 메시지를 주고받는다.
이때 서버는 응답 메시지에 상태코드(Status Code)를 담아,
요청이 성공했는지 실패했는지, 추가 동작이 필요한지를 알려준다.
이번 글에서는 HTTP 상태코드 체계와 실무에서 자주 쓰이는 코드를 정리해본다.
상태코드란?
- 서버가 요청을 처리한 결과를 숫자 코드로 표현한 것
- 항상 응답 메시지의 첫 줄(상태 라인)에 포함된다
- 상태코드는 100 ~ 599번대로 구성되며, 첫 자리 숫자로 의미를 구분한다
코드의미예시
1xx | 처리 중 | 100 Continue |
2xx | 성공 | 200 OK, 201 Created |
3xx | 리다이렉션 | 301 Moved Permanently |
4xx | 클라이언트 오류 | 400 Bad Request, 404 Not Found |
5xx | 서버 오류 | 500 Internal Server Error |
1xx: 처리 중 (Informational)
- 요청을 받았고, 계속 처리 중이라는 의미
- 실무에서는 거의 사용되지 않음
2xx: 요청 성공 (Successful)
요청이 정상적으로 처리되었음을 의미한다.
주로 아래 상태코드가 사용된다.
코드의미
200 OK | 일반적인 요청 성공 |
201 Created | 새로운 리소스가 생성됨 (POST 응답 시 사용) |
204 No Content | 응답 본문 없이 성공 (예: 저장 후 새로고침 필요 없음) |
→ 204는 응답에 바디가 없다는 점에서 JS로 처리하는 Form 응답 등에 유용하다
3xx: 리다이렉션 (Redirection)
요청한 리소스가 다른 URI로 이동되었음을 의미한다.
코드의미
301 Moved Permanently | 영구 이동 (브라우저는 캐시함) |
302 Found | 임시 이동 (기존에는 POST → GET으로 바뀌는 문제가 있음) |
303 See Other | POST 이후 GET으로 리다이렉션 (PRG 패턴에 사용) |
307 Temporary Redirect | 메서드 유지한 채 리다이렉션 (POST → POST 유지) |
304 Not Modified | 캐시된 리소스를 그대로 사용하라는 의미 (응답 본문 없음) |
→ Location 헤더에 새 주소를 포함하여 브라우저가 자동으로 재요청
PRG 패턴 (Post-Redirect-Get)
- POST 요청 후, 결과 페이지를 GET으로 리다이렉트하는 방식
- 새로고침 시 중복 제출 방지
- 303 See Other 또는 302 Found가 자주 사용됨
4xx: 클라이언트 오류 (Client Error)
클라이언트의 요청에 문제가 있는 경우
코드의미
400 Bad Request | 잘못된 문법 또는 파라미터 |
401 Unauthorized | 인증 필요 또는 실패 (로그인 안 됨) |
403 Forbidden | 권한 없음 (인증은 되었지만 접근 불가) |
404 Not Found | 존재하지 않는 리소스 요청 |
→ 클라이언트가 잘못한 것이므로 요청을 수정해야 해결 가능
5xx: 서버 오류 (Server Error)
서버 내부에서 문제가 발생한 경우
코드의미
500 Internal Server Error | 서버 내부 문제 (NPE, DB 오류 등) |
503 Service Unavailable | 일시적 서버 불가 (서버 점검 등) |
→ 서버가 수정되면 같은 요청으로 성공할 수 있음
실무 팁: 4xx vs 5xx 구분 기준
항목4xx5xx
주체 | 클라이언트 | 서버 |
해결 방법 | 요청 수정 | 서버 문제 해결 |
재시도 | 의미 없음 | 복구 후 재시도 가능 |
캐시와 304 Not Modified
- 클라이언트가 If-Modified-Since 헤더로 요청을 보낼 때
- 서버 리소스가 수정되지 않았으면 304 응답을 보냄
- 브라우저는 캐시된 리소스를 그대로 사용
→ 트래픽 감소, 빠른 렌더링에 유리
요약
- 상태코드는 클라이언트-서버 통신 결과를 표현하는 숫자 체계이다
- 200, 201, 204는 성공
- 301, 302, 304는 리다이렉션
- 400, 401, 403, 404는 클라이언트 오류
- 500, 503은 서버 오류
- PRG 패턴, 캐시 등 상태코드를 이해하면 UX와 안정성 모두 향상된다
'HTTP' 카테고리의 다른 글
[HTTP 완전 정복 시리즈] 9편 - HTTP 헤더2: 캐시와 조건부 요청 (0) | 2025.07.23 |
---|---|
[HTTP 완전 정복 시리즈] 8편 - HTTP 헤더1: 일반 헤더 (4) | 2025.07.23 |
[HTTP 완전 정복 시리즈] 6편 - HTTP 메서드 활용법과 설계 전략 (5) | 2025.07.22 |
[HTTP 완전 정복 시리즈] 5편 - HTTP 메서드와 상태코드 제대로 이해하기 (0) | 2025.07.22 |
[HTTP 완전 정복 시리즈] 4편 - HTTP의 동작 원리와 메시지 구조 (0) | 2025.07.21 |