HTTP 상태 코드: 웹 통신의 핵심 신호 🌐
HTTP 상태 코드는 클라이언트(예: 웹 브라우저)가 서버에 요청을 보냈을 때, 서버가 그 요청을 어떻게 처리했는지를 알려주는 세 자리 숫자 코드입니다. 이 코드를 통해 개발자와 사용자는 웹 페이지나 애플리케이션이 정상적으로 작동하는지, 혹은 어떤 문제가 발생했는지 신속하게 파악할 수 있습니다.
HTTP 상태 코드는 크게 다섯 가지 클래스로 나뉩니다. 각 클래스는 코드의 첫 번째 숫자로 구분되며, 저마다 다른 종류의 응답을 의미합니다.
HTTP 상태 코드란?
쉽게 말해, 우리가 브라우저(클라이언트)를 통해 웹사이트(서버)에 "이 페이지 보여줘!"라고 요청을 보냈을 때, 서버가 "알겠어, 여기!", "어? 그런 페이지는 없는데?", "지금은 바쁘니 나중에 다시 와!" 와 같이 요청 처리 결과를 알려주는 세 자리 숫자 약속입니다.
이 코드는 크게 다섯 가지 그룹으로 나뉘는데, 맨 앞자리 숫자가 그룹을 의미합니다.
- 1xx (Informational): 요청을 받았고, 처리 중이야.
- 2xx (Success): 네 요청, 성공적으로 처리했어! ✅
- 3xx (Redirection): 요청한 페이지는 다른 곳으로 갔어. 그쪽으로 다시 안내해줄게. ↪️
- 4xx (Client Error): 네 요청이 뭔가 잘못된 것 같아. 🚫
- 5xx (Server Error): 미안, 지금 서버에 문제가 생겨서 처리할 수가 없어. 💣
# 1xx: 정보 제공 (Informational)
요청이 서버에 전달되어 처리 중이라는 것을 알려주는 임시 응답입니다. 최종 결과가 아니기 때문에 일반 사용자가 볼 일은 거의 없습니다.
자주 사용되는 코드
- 100 Continue: 요청의 시작은 이상 없으니, 나머지 부분도 계속 보내라는 의미입니다.
1xx 전체 코드 표
코드 | 이름 | 설명 |
100 | Continue(계속) | 요청의 일부를 받았으며, 클라이언트는 나머지 요청을 계속해야 함 |
101 | Switching Protocols(프로토콜 전환) | 클라이언트의 프로토콜 전환 요청을 서버가 승인했음 |
102 | Processing(처리중) | 서버가 요청을 수신하여 처리 중이지만 아직 응답할 수 없음 (WebDAV) |
그 외 | none | 할당 되지 않은 상태 코드 |
# 2xx: 성공 (Success) ✅
클라이언트의 요청이 성공적으로 처리되었을 때 받는 응답입니다!
자주 사용되는 코드
- 200 OK: 요청이 성공적으로 완료되었음을 의미하는 가장 일반적인 성공 코드입니다. 웹페이지가 정상적으로 보인다면 대부분 이 응답을 받은 것입니다.
- 201 Created: 요청이 성공해서 새로운 리소스(예: 게시글, 회원 정보)가 성공적으로 생성되었을 때 사용됩니다.
- 204 No Content: 요청은 성공했지만, 본문에 보낼 데이터가 없음을 의미합니다. 예를 들어, '삭제' 버튼을 눌러 콘텐츠를 성공적으로 삭제하고 페이지 이동이 필요 없을 때 사용됩니다.
2xx 전체 코드 표
코드 | 이름 | 설명 |
200 | OK(성공) | 요청이 성공적으로 처리됨 |
201 | Created(생성됨) | 요청이 성공하여 새로운 리소스가 생성됨 |
202 | Accepted(접수됨) | 요청이 접수되었으나 처리가 아직 완료되지 않았음 |
204 | No Content(콘텐츠 없음) | 요청은 성공했지만 응답 본문에 보낼 콘텐츠가 없음 |
206 | Partial Content(일부 콘텐츠) | 요청의 일부만 성공적으로 처리됨 |
그 외 | none | 할당 되지 않은 상태 코드 |
# 3xx: 리디렉션 (Redirection) ↪️
요청을 완료하려면 다른 페이지로 이동하는 등 추가적인 조치가 필요하다는 의미입니다. 웹사이트 주소를 옮겼을 때 주로 사용됩니다.
자주 사용되는 코드
- 301 Moved Permanently: 요청한 페이지의 주소가 영구적으로 변경되었을 때 사용됩니다. 브라우저는 앞으로 새로운 주소로 접속하며, 검색 엔진도 이 정보를 수집해 검색 결과를 갱신합니다. (SEO에 매우 중요!)
- 302 Found: 요청한 페이지가 일시적으로 다른 주소로 이동했을 때 사용됩니다. 브라우저는 이번만 다른 주소로 접속하고, 다음에는 원래 주소로 시도합니다.
- 304 Not Modified: 이전에 방문했던 페이지라 변경된 내용이 없을 때 사용됩니다. 브라우저는 캐시(임시 저장된 데이터)를 그대로 사용하여 로딩 속도를 높입니다.
3xx 전체 코드 표
코드 | 이름 | 설명 |
301 | Moved Permanently(영구 이동) | 요청한 리소스가 영구적으로 새로운 URI로 이동했음 |
302 | Found(찾음) | 요청한 리소스가 일시적으로 다른 URI에 있음 |
303 | See Other(다른 위치 보기) | 요청한 리소스를 다른 URI에서 GET 요청으로 가져와야 함 |
304 | Not Modified(수정되지 않음) | 리소스가 변경되지 않았으므로 캐시된 버전을 사용해도 됨 |
307 | Temporary Redirect(임시 리디렉션) | 302와 유사하며, 요청 메소드를 변경하지 않고 리디렉션해야 함 |
308 | Permanent Redirect(영구 리디렉션) | 301과 유사하며, 요청 메소드를 변경하지 않고 리디렉션해야 함 |
그 외 | none | 할당 되지 않은 상태 코드 |
## 4xx: 클라이언트 오류 (Client Error) 🚫
가장 자주 보게 되는 오류 코드로, 요청한 쪽(클라이언트)에 문제가 있다는 뜻입니다. 주소를 잘못 입력했거나, 접근 권한이 없는 경우가 대부분이죠.
자주 사용되는 코드
- 400 Bad Request: 요청 자체가 문법적으로 잘못되어 서버가 이해할 수 없다는 의미입니다.
- 401 Unauthorized: 인증(Authentication)이 필요한 페이지에 인증 없이 접근했을 때 발생합니다. 쉽게 말해 '로그인이 필요합니다'라는 뜻입니다.
- 403 Forbidden: 서버는 요청을 이해했지만, 접근 권한(Authorization)이 없어서 거부하는 것입니다. 로그인 여부와 상관없이 당신은 이 페이지를 볼 수 없다는 뜻이죠.
- 404 Not Found: 가장 유명한 오류 코드. 요청한 주소의 페이지를 서버에서 찾을 수 없다는 의미입니다. 주소를 잘못 입력했거나 페이지가 삭제된 경우에 발생합니다.
4xx 전체 코드 표
코드 | 이름 | 설명 |
400 | Bad Request(잘못된 요청) | 클라이언트의 잘못된 요청으로 서버가 요청을 처리할 수 없음 |
401 | Unauthorized(인증 실패) | 인증되지 않은 사용자의 요청 |
403 | Forbidden(권한 없음) | 서버가 요청을 이해했지만 접근 권한이 없어 승인을 거부함 |
404 | Not Found(찾을 수 없음) | 요청한 리소스를 서버에서 찾을 수 없음 |
405 | Method Not Allowed(허용되지 않는 메소드) | 요청한 메소드(GET, POST 등)가 해당 리소스에서 허용되지 않음 |
408 | Request Timeout(요청 시간 초과) | 요청 시간이 초과됨 |
429 | Too Many Requests(너무 많은 요청) | 일정 시간 동안 너무 많은 요청을 보냄 |
그 외 | none | 할당 되지 않은 상태 코드 |
## 5xx: 서버 오류 (Server Error) 💣
클라이언트의 요청은 정상이지만, 서버 쪽에서 문제가 발생해 요청을 처리할 수 없는 상황입니다. 개발자들이 가장 긴장하는 순간이죠.
자주 사용되는 코드
- 500 Internal Server Error: 서버 내부에 알 수 없는 오류가 발생했음을 의미하는 가장 일반적인 서버 오류 코드입니다. 코드에 버그가 있거나 서버 설정이 잘못된 경우에 발생합니다.
- 502 Bad Gateway: 게이트웨이 또는 프록시 서버가 상위 서버로부터 잘못된 응답을 받았을 때 발생합니다.
- 503 Service Unavailable: 서버가 일시적인 과부하 또는 점검 중이어서 지금 당장 요청을 처리할 수 없다는 의미입니다. 보통 "사이트 점검 중입니다" 안내 페이지가 뜹니다.
5xx 전체 코드 표
코드 | 이름 | 설명 |
500 | Internal Server Error(내부 서버 오류) | 서버 내부에 오류가 발생하여 요청을 수행할 수 없음 |
501 | Not Implemented(구현되지 않음) | 요청한 기능을 서버가 지원하지 않음 |
502 | Bad Gateway(불량 게이트웨이) | 게이트웨이가 상위 서버로부터 잘못된 응답을 받음 |
503 | Service Unavailable(서비스를 사용할 수 없음) | 서버가 일시적인 과부하 또는 점검으로 인해 요청을 처리할 수 없음 |
504 | Gateway Timeout(게이트웨이 시간 초과) | 게이트웨이가 상위 서버로부터 응답을 시간 내에 받지 못함 |
그 외 | none | 할당 되지 않은 상태 코드 |
마치며
웹 개발시 위 상태코드를 통해 더욱 원활한 디버깅 작업이 가능하니 꼭 기억해 두세요.