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은 클라이언트가 무엇을 했든 서버 쪽에서 실패한 경우.