HTTP 상태코드 401 403 차이 한눈에 구분하기

API를 호출하거나 웹사이트에 접속했을 때 401이나 403 같은 오류 코드만 보고 정확히 뭐가 문제인지 판단하기 어려운 경우가 많습니다. 두 코드 모두 "접근이 거부됐다"는 결과는 같지만, HTTP 표준이 정의한 원인은 서로 다릅니다.

이 글은 상태 코드 앞자리 숫자로 성격을 먼저 구분하는 법과, 401·403, 400·404, 502·503·504처럼 실무에서 자주 헷갈리는 코드 쌍이 각각 어떤 상황에서 발생하는지를 정리합니다.

요약 ① HTTP 상태 코드는 앞자리 숫자로 성격이 갈립니다 — 1xx 정보, 2xx 성공, 3xx 리다이렉션, 4xx 클라이언트 오류, 5xx 서버 오류 ② 401은 인증(신원 확인) 실패, 403은 신원은 확인됐지만 권한이 없는 경우로 발생 조건 자체가 다릅니다 ③ 정확한 뜻은 추측하지 않고 번호·제목·설명을 검색해서 바로 확인하는 방법이 가장 확실합니다

왜 헷갈리는가 — 개발자 도구 네트워크 탭에서 자주 겪는 상황

백엔드 API를 연동하다 보면 브라우저 개발자 도구의 네트워크 탭에 401이나 403이 찍히는 걸 자주 보게 됩니다. 화면에는 둘 다 비슷하게 "요청 실패"로만 보이지만, 정의가 다른 두 코드를 같은 원인으로 취급하면 로그를 볼 때 엉뚱한 부분을 의심하게 됩니다.

예를 들어 로그인 세션이 만료된 사용자가 API를 호출하면 서버는 401을 반환하고, 로그인은 되어 있지만 관리자 권한이 없는 사용자가 관리자 전용 API를 호출하면 403을 반환합니다. 코드 번호만 다른 게 아니라 애초에 발생 조건 자체가 다릅니다.

마찬가지로 웹사이트에서 존재하지 않는 페이지에 접속했을 때와 요청 자체가 잘못됐을 때는 각각 404와 400으로 갈리고, 서버가 응답하지 못할 때도 원인에 따라 502·503·504 중 다른 코드가 표시됩니다.

코드가 20개 가까이 되고 앞자리 카테고리와 세부 번호가 뒤섞여 있다 보니, 실제로 어떤 코드가 어떤 상황을 가리키는지 매번 찾아봐야 하는 경우가 많습니다.

표준 문서에서 직접 확인하는 방법

HTTP 상태 코드는 임의로 정해진 목록이 아니라 IETF가 발행하는 RFC 문서가 정의하고, IANA가 이를 공식 레지스트리(HTTP Status Code Registry)로 관리합니다. 도구 없이 직접 확인하려면 이 두 자료를 보는 것이 가장 정확한 방법입니다.

1단계 — 앞자리로 카테고리부터 구분하기

상태 코드는 세 자리 숫자이고, 첫 자리가 응답의 성격을 나타냅니다.

  • 1xx (Informational): 요청을 받았고 처리를 계속 진행 중이라는 정보성 응답
  • 2xx (Success): 요청이 성공적으로 처리됨
  • 3xx (Redirection): 요청을 완료하려면 추가 동작(다른 주소로 이동 등)이 필요함
  • 4xx (Client Error): 요청 자체에 문제가 있어 서버가 처리할 수 없음
  • 5xx (Server Error): 요청은 정상이었지만 서버 쪽 처리에 실패함

2단계 — IANA 레지스트리에서 번호 찾기

이 앞자리만 봐도 문제가 클라이언트 쪽(4xx)인지 서버 쪽(5xx)인지는 우선 구분됩니다. iana.org가 운영하는 HTTP 상태 코드 레지스트리에는 등록된 모든 상태 코드와, 각 코드를 정의한 RFC 문서로 연결되는 참조가 정리되어 있습니다.

현재 HTTP 상태 코드의 기본 정의는 RFC 9110(HTTP Semantics) 문서에 담겨 있습니다.

3단계 — RFC 문서에서 정의 문장 읽기

레지스트리에서 연결된 RFC 문서를 열면 코드별 공식 정의가 나옵니다. 예를 들어 401은 요청에 사용자 인증 자격 증명이 필요하다는 뜻으로, 403은 서버가 요청은 이해했지만 승인을 거부한다는 뜻으로 정의되어 있습니다.

이 문장의 차이가 401과 403을 가르는 기준입니다. 이 방법은 정확하지만 영문 RFC 원문을 코드별로 찾아 읽어야 해서 시간이 걸립니다.

코드 번호나 한국어 키워드로 바로 검색해 같은 내용을 확인할 수도 있습니다. 저희 도구로 확인하기.

HTTP 상태 코드 조회기

코드 번호나 이름을 검색하면 100번대부터 500번대까지 상태 코드의 설명과 실제 예시를 바로 보여줍니다

자주 헷갈리는 코드 쌍 비교

401과 403, 400과 404 — 4xx 안에서 구분하기

이름만 보면 401(Unauthorized)이 "권한 없음"처럼 들려 403과 헷갈리기 쉽습니다. 하지만 정의상 401은 인증(요청자가 누구인지 증명하는 절차)에 대한 응답이고, 403은 인가(그 신원으로 이 리소스에 접근할 수 있는지)에 대한 응답입니다.

401은 자격 증명이 없거나 잘못됐을 때, 403은 자격 증명은 맞았지만 권한이 없을 때 발생합니다.

400과 404도 둘 다 4xx이지만 오류가 발생하는 시점이 다릅니다. 400은 서버가 요청의 형식 자체를 이해하지 못했을 때, 404는 요청 형식은 정상이지만 그 주소에 해당하는 리소스가 없을 때 반환됩니다.

502, 503, 504 — 5xx 안에서 구분하기

502·503·504는 모두 5xx 서버 오류지만 원인이 갈립니다. 502와 504는 게이트웨이·프록시가 뒤에 있는 업스트림(백엔드) 서버와 통신하다 발생한다는 공통점이 있습니다.

502는 업스트림이 응답은 했지만 그 응답 자체가 잘못됐을 때, 504는 업스트림이 정해진 시간 안에 아예 응답하지 않았을 때 발생합니다.

503은 업스트림 통신과 무관하게 서버 자신이 일시적으로 과부하 상태이거나 점검 중이라 요청을 처리하지 못할 때 발생합니다.

코드이름핵심 구분발생 예시
401Unauthorized인증 자격 증명이 없거나 유효하지 않음Authorization 헤더 누락, 만료된 토큰
403Forbidden신원은 확인됐지만 접근 권한이 없음일반 사용자가 관리자 전용 페이지 접근 시도
400Bad Request요청 자체의 구문·형식 오류필수 파라미터 누락, 잘못된 JSON
404Not Found요청 형식은 정상이나 리소스가 없음존재하지 않는 URL 주소 접속
502Bad Gateway업스트림의 응답 자체가 잘못됨백엔드 프로세스 다운으로 잘못된 응답
503Service Unavailable서버 자신이 일시적으로 처리 불가점검 중 안내, 트래픽 급증으로 과부하
504Gateway Timeout업스트림 응답이 시간 내에 오지 않음백엔드 쿼리 지연으로 연결 종료

정리

  • 코드 앞자리(1~5)로 먼저 성격을 구분합니다 — 정보 / 성공 / 리다이렉션 / 클라이언트 오류 / 서버 오류
  • 401은 인증 실패, 403은 신원 확인 후 권한 부족입니다. 이름과 달리 401 쪽이 "인증"에 관한 코드입니다
  • 400은 요청 형식 오류, 404는 리소스 부재입니다. 오류가 발생하는 시점이 다릅니다
  • 502·503·504는 모두 5xx이지만 502는 업스트림 응답 자체의 오류, 503은 서버 자신의 일시적 처리 불가, 504는 업스트림 응답 시간 초과로 구분됩니다
  • 정확한 뜻은 추측 대신 번호·제목·설명으로 검색해서 확인하는 방법이 가장 확실합니다
HTTP 상태 코드 조회기

코드 번호나 이름을 검색하면 100번대부터 500번대까지 상태 코드의 설명과 실제 예시를 바로 보여줍니다

자주 묻는 질문

401과 403 중 어느 쪽이 더 심각한 오류인가요?

HTTP 표준은 코드별로 심각도 등급을 정해두지 않았습니다. 둘 다 4xx 클라이언트 오류로 분류될 뿐이고, 원인이 인증 문제인지 권한 문제인지가 다를 뿐입니다.

404와 400의 차이는 정확히 무엇인가요?

400은 서버가 요청의 구문이나 형식 자체를 이해하지 못했을 때 반환됩니다. 404는 요청 형식은 정상적으로 처리했지만 요청한 주소에 해당하는 리소스를 찾지 못했을 때 반환됩니다. 즉 문제가 요청 자체에 있는지, 요청은 정상인데 대상이 없는지의 차이입니다.

502, 503, 504는 모두 서버 쪽 문제인데 뭐가 다른가요?

셋 다 5xx로 분류되지만 원인이 다릅니다. 502는 게이트웨이·프록시가 업스트림 서버로부터 받은 응답 자체가 잘못됐을 때, 504는 업스트림 서버가 시간 안에 응답하지 않았을 때 발생합니다.

503은 업스트림과 무관하게 서버 자신이 과부하이거나 점검 중이라 요청을 처리하지 못할 때 발생합니다.

HTTP 상태 코드는 누가 정하나요?

IETF가 발행하는 RFC 문서가 정의하고, IANA가 HTTP Status Code Registry라는 공식 목록으로 관리합니다. 새로운 코드가 추가되거나 정의가 갱신되면 이 레지스트리에 반영됩니다.

가격 보기카톡 무료 상담