HTTP

[HTTP 완전 정복 시리즈] 7편 - HTTP 상태코드 완벽 정리

dev-nadan 2025. 7. 22. 16:44

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와 안정성 모두 향상된다