HTTP 상태 코드 response
HTTP 상태 코드의 의미와 분류를 찾아봅니다. 자주 마주치는 오류 코드의 원인도 함께 정리했습니다.
이 도구가 하는 일
HTTP 상태 코드는 서버가 요청 처리 결과를 세 자리 숫자로 알려주는 값입니다. 첫 자리가 분류를 나타냅니다. 2xx는 성공, 3xx는 리다이렉션, 4xx는 클라이언트 쪽 문제, 5xx는 서버 쪽 문제입니다. 이 구분만 알아도 장애 원인을 어디서 찾아야 할지 절반은 좁혀집니다.
4xx가 나오면 요청 자체에 문제가 있다는 뜻입니다. 주소가 잘못되었거나(404), 인증이 없거나(401), 권한이 부족하거나(403), 요청 형식이 잘못된(400) 경우입니다. 반면 5xx는 요청은 정상적으로 도착했지만 서버가 처리하지 못한 상황입니다. 애플리케이션 오류(500), 게이트웨이 뒤의 서버가 잘못된 응답을 준 경우(502), 서버가 과부하이거나 점검 중인 경우(503), 응답이 시간 안에 오지 않은 경우(504)가 대표적입니다.
401과 403을 혼동하기 쉬운데, 401은 인증 정보가 없거나 잘못된 상태이고 403은 인증은 되었지만 권한이 없는 상태입니다.
언제 사용하나요
장애 대응 중에 오류 코드의 의미를 빠르게 확인할 때, API 응답 코드를 설계하면서 적절한 값을 고를 때, 모니터링 알림에 찍힌 코드의 원인을 좁힐 때, 문서에 응답 규격을 정리할 때 사용합니다.
입력과 출력 예시
404
Not Found — 요청한 리소스를 찾을 수 없음 (4xx 클라이언트 오류)
주소 오타, 삭제된 리소스, 라우팅 설정 누락이 흔한 원인입니다.
502
Bad Gateway — 게이트웨이가 상위 서버로부터 잘못된 응답을 받음 (5xx 서버 오류)
애플리케이션 프로세스가 죽었거나 프록시 설정이 잘못된 경우가 많습니다.
401 vs 403
401은 인증 필요, 403은 인증은 됐지만 권한 없음
로그인하면 해결되는지(401), 계정 권한을 올려야 하는지(403)로 구분합니다.
주의사항
실제 서비스에서는 상태 코드가 규격대로 사용되지 않는 경우가 많습니다. 오류인데도 200을 반환하면서 본문에 오류 내용을 담는 API가 흔하고, 보안상의 이유로 404와 403을 의도적으로 구분하지 않는 경우도 있습니다. 코드만 보고 판단하지 말고 응답 본문과 서버 로그를 함께 확인하십시오. 502와 504는 애플리케이션이 아니라 그 앞단의 리버스 프록시나 로드밸런서에서 발생하는 경우가 많다는 점도 기억할 필요가 있습니다.
자주 묻는 질문
401과 403의 차이가 무엇인가요?
401은 인증 정보가 없거나 잘못되어 누구인지 확인할 수 없는 상태이고, 403은 누구인지는 확인했지만 해당 리소스에 접근할 권한이 없는 상태입니다.
502와 504는 어떻게 다른가요?
502는 상위 서버가 잘못된 응답을 준 경우이고, 504는 정해진 시간 안에 응답이 오지 않은 경우입니다. 502는 프로세스 다운, 504는 처리 지연을 먼저 의심합니다.
301과 302 중 무엇을 써야 하나요?
주소가 영구적으로 바뀌었다면 301, 일시적인 이동이라면 302를 사용합니다. 301은 브라우저와 검색엔진이 캐시하므로 되돌리기 어렵다는 점에 주의하십시오.