HTTP 상태 코드란?
HTTP 상태 코드는 웹 서버가 브라우저나 앱의 요청에 응답하면서 함께 보내는 세 자리 숫자입니다. 요청이 성공했는지, 다른 주소로 옮겨졌는지, 또는 오류가 났는지를 알려 줍니다. 첫 번째 숫자에 따라 다섯 가지로 분류됩니다.
분류별 의미
1xx (정보) — 요청을 받았고 처리를 계속 진행 중임을 알리는 임시 응답입니다.
2xx (성공) — 요청이 정상적으로 처리되었습니다. 가장 흔한 200 OK가 여기에 속합니다.
3xx (리다이렉트) — 요청을 완료하려면 다른 위치로 이동하거나 추가 동작이 필요합니다. 301·302 등이 있습니다.
4xx (클라이언트 오류) — 요청 자체에 문제가 있습니다. 잘못된 주소(404)나 권한 부족(403) 등이 해당합니다.
5xx (서버 오류) — 서버가 요청을 처리하다 문제가 발생했습니다. 500 내부 서버 오류가 대표적입니다.
자주 만나는 코드
실무에서 특히 자주 보게 되는 코드는 다음과 같습니다.
- 200 OK — 요청이 정상 처리된 가장 흔한 응답입니다.
- 301 / 302 — 주소 이동. 301은 영구, 302는 임시 이동입니다.
- 304 Not Modified — 캐시된 내용이 그대로 유효하니 다시 받지 않아도 된다는 응답입니다.
- 401 / 403 — 401은 인증이 필요(로그인 안 됨), 403은 인증은 됐지만 권한이 없어 거부된 상태입니다.
- 404 Not Found — 요청한 리소스를 찾을 수 없습니다.
- 429 Too Many Requests — 짧은 시간에 요청이 몰려 요청 제한(Rate Limit)에 걸린 상태입니다.
- 500 / 502 / 503 / 504 — 서버 측 오류. 각각 내부 오류, 게이트웨이 오류, 서비스 불가, 게이트웨이 타임아웃을 뜻합니다.
비슷해 보이는 코드 구분
헷갈리기 쉬운 코드들이 있습니다. 401 vs 403 — 401은 "당신이 누구인지 모르겠다(인증 필요)", 403은 "누구인지는 알지만 접근 권한이 없다"입니다. 404 vs 410 — 404는 단순히 찾을 수 없음, 410 Gone은 의도적으로 영구 삭제되었음을 명시합니다. 301 vs 302 — 301은 영구 이동이라 검색엔진도 새 주소를 기억하지만, 302는 임시라 기존 주소를 유지합니다. 502 vs 504 — 502는 상위 서버가 잘못된 응답을 준 경우, 504는 상위 서버가 제때 응답하지 못한 경우입니다.
실무 팁
브라우저 개발자 도구의 네트워크(Network) 탭에서 각 요청의 상태 코드를 확인할 수 있습니다. 4xx가 뜨면 요청(주소·파라미터·인증)을, 5xx가 뜨면 서버 로그를 먼저 살펴보는 것이 문제 해결의 지름길입니다. 위 검색창에 코드 번호나 인증, redirect 같은 키워드를 넣으면 해당 코드만 골라 볼 수 있고, 각 항목의 MDN 문서 링크에서 더 자세한 설명을 확인할 수 있습니다.
자주 묻는 질문
HTTP 상태 코드란 무엇인가요?
웹 서버가 클라이언트의 요청에 응답할 때 함께 보내는 세 자리 숫자입니다. 요청 성공·이동·오류 여부를 나타내며, 첫 자리에 따라 1xx~5xx로 분류됩니다.
404 에러는 무슨 뜻인가요?
404 Not Found는 요청한 페이지나 리소스를 찾을 수 없다는 의미입니다. URL이 잘못되었거나 페이지가 삭제·이동되었을 때 발생하는 클라이언트 측 오류입니다.
500 에러와 404 에러는 어떻게 다른가요?
404는 요청한 리소스가 없는 클라이언트 측 오류이고, 500 Internal Server Error는 서버 내부 처리 중 발생한 서버 측 오류입니다.
401과 403은 무엇이 다른가요?
401 Unauthorized는 인증이 필요한(로그인하지 않았거나 인증 정보가 유효하지 않은) 상태이고, 403 Forbidden은 인증은 되었으나 접근 권한이 없어 거부된 상태입니다.
502와 504는 어떻게 다른가요?
502 Bad Gateway는 게이트웨이나 프록시가 상위 서버로부터 잘못된 응답을 받은 경우이고, 504 Gateway Timeout은 상위 서버의 응답을 제때 받지 못한 경우입니다.
301과 302 리다이렉트는 무엇이 다른가요?
301은 영구 이동으로, 검색엔진과 브라우저가 새 주소를 영구적으로 기억합니다. 302는 임시 이동으로, 원래 주소가 유효하다고 보아 기존 주소를 유지합니다.