HTTP 상태 코드는 서버가 응답 맨 앞에 붙여 보내는 세 자리 숫자로, 요청이 어떻게 처리됐는지를 한마디로 요약해 줍니다. 브라우저, 클라이언트, 프록시, CDN 등이 캐시할지, 리다이렉트할지, 재시도할지, 아니면 사용자에게 에러를 보여줄지를 이 숫자를 보고 결정합니다.
모든 상태 코드는 첫 번째 숫자에 따라 다섯 가지 클래스로 나뉩니다. 1xx은 정보 전달, 2xx은 성공, 3xx은 리다이렉션, 4xx은 클라이언트 에러, 5xx은 서버 에러죠. 클래스만 알아도 구체적인 코드를 찾아보기 전에 대략적인 의미는 짐작할 수 있습니다.
실제 서비스에서 자주 쓰는 코드는 200, 201, 204, 301, 302, 304, 400, 401, 403, 404, 409, 422, 429, 500, 502, 503 정도로 많지 않습니다. 각 코드가 *진짜로* 무엇을 의미하는지, 그리고 401 Unauthorized와 403 Forbidden, 301 Moved Permanently와 302 Found처럼 헷갈리는 짝의 차이를 정확히 아는 것 - 이게 백엔드/API 개발자의 내공입니다.
이 레퍼런스를 보면서 익히게 될 것들
첫 번째 숫자가 곧 클래스: 1xx 정보, 2xx 성공, 3xx 리다이렉트, 4xx 클라이언트 에러, 5xx 서버 에러.
상태 코드는 API가 제공하는 *계약(contract)의 일부*입니다. 클라이언트는 응답 본문의 에러 메시지를 파싱하지 말고 상태 코드로 분기해야 합니다.
4xx은 클라이언트가 뭔가 잘못한 경우(잘못된 입력, 인증 누락, 존재하지 않는 리소스). 5xx은 클라이언트가 무엇을 했든 서버 쪽에서 실패한 경우.
묘하게 헷갈리는 코드들이 있습니다: 401 vs 403, 301 vs 308, 200 vs 204 - 이 차이는 캐싱과 재시도 동작에 실제로 영향을 줍니다.