본문 바로가기
네트워크2

클라이언트 오류 코드 :: 4xx

by 로맨틱스터디 2025. 10. 7.
728x90
반응형

4xx 클라이언트 오류 코드

의미:

  • 클라이언트가 잘못된 요청을 보냈거나 권한이 없는 요청을 했을 때 서버가 반환
  • 기본적으로 **“클라이언트가 문제”**라는 뜻이에요.

주요 4xx 코드

  1. 400 Bad Request
    • 클라이언트의 요청 문법이 잘못되었을 때
    • 예: JSON 형식 오류, 잘못된 쿼리 파라미터
  2. 401 Unauthorized
    • 인증이 필요한 리소스에 인증 없이 접근했을 때
    • 예: 로그인 안 한 상태에서 프로필 조회
    • WWW-Authenticate 헤더로 인증 방법 안내 가능
  3. 403 Forbidden
    • 인증은 되었지만 권한이 없어 접근 금지
    • 예: 일반 사용자가 관리자 페이지 접근
  4. 404 Not Found
    • 요청한 리소스가 서버에 존재하지 않을 때
    • 예: 잘못된 URL, 삭제된 페이지
  5. 405 Method Not Allowed
    • 요청한 HTTP 메서드가 허용되지 않을 때
    • 예: GET만 허용되는 URL에 POST 요청
  6. 406 Not Acceptable
    • 클라이언트가 요청한 Accept 헤더에 맞는 콘텐츠가 없을 때
    • 예: 클라이언트가 Accept: application/xml 요청했는데 서버가 XML 미지원
  7. 408 Request Timeout
    • 클라이언트가 요청을 보내는 동안 시간이 너무 오래 걸렸을 때
  8. 409 Conflict
    • 요청이 현재 서버 상태와 충돌할 때
    • 예: 버전 관리 중인 리소스에 중복 업데이트 시도
  9. 410 Gone
    • 요청한 리소스가 영구적으로 삭제되어 더 이상 존재하지 않을 때
  10. 429 Too Many Requests
    • 클라이언트가 너무 많은 요청을 보내서 서버가 제한할 때
    • 흔히 Rate Limiting 적용 시 사용

💡 정리 포인트

  • 4xx = 클라이언트 문제
  • 요청 자체가 잘못되었거나 권한 부족, 요청한 리소스가 없음
  • 흔히 웹 브라우저에서 보는 “404 Not Found” 같은 오류가 포함됨
728x90

 

“URL을 정확히 입력했고, 페이지도 삭제되지 않았다” 상황에서 404 Not Found가 뜬다면,

문제는 조금 더 내부적이거나 서버 설정과 관련된 경우일 가능성이 높아요.

차근차근 이유를 정리해드릴게요.


1. 서버 라우팅 문제

  • 서버가 요청 URL해당 리소스와 연결하지 못할 때 404 발생
  • 예시:
    • 프레임워크에서 라우트(route)가 잘못 설정됨
    • URL이 /users/123인데 서버 라우트/user/123만 처리하도록 되어 있음
    • 서버 재시작라우트 로딩 문제

2. 웹서버 설정 문제

  • Nginx, Apache 같은 웹서버가 URL을 올바르게 전달하지 못하는 경우
  • 예시:
    • 정적 파일 경로 설정 오류
    • 특정 URL 패턴다른 곳으로 리다이렉트해야 하는데 못 함

3. 캐시 문제

  • 브라우저, CDN, 프록시 서버오래된 404 응답을 캐싱하고 있을 수 있음
  • 예시:
    • 페이지 존재하지만 브라우저가 이전 404 응답을 저장 → 계속 404 표시

4. 파일 시스템 문제 (정적 페이지인 경우)

  • 서버에는 파일이 있지만 권한 문제실제 경로 문제로 404 발생
  • 예시:
    • 서버 경로가 /var/www/html/page.html인데 요청 URL이 /page.html로 연결되지 않음
    • 파일 권한이 없어 웹서버가 접근 불가

5. URL 인코딩/대소문자 문제

  • URL이 정확히 보여도 내부적으로 인코딩 문제다른 경로로 해석될 수 있음
  • 예시:
    • 공백, 특수문자 → %20, %3F 등으로 인코딩 필요
    • 서버 OS에 따라 대소문자 구분 → /Page.html ≠ /page.html

정리

  • 404 Not Found = “서버가 요청한 리소스를 찾을 수 없다”
  • URL과 페이지가 실제 존재해도:
    1. 서버 라우팅 문제
    2. 웹서버 설정 문제
    3. 캐시 문제
    4. 파일 시스템 경로/권한 문제
    5. URL 인코딩/대소문자 문제
      이런 이유로 404가 발생할 수 있음

 

HTTP 상태 코드 설계의 미묘한 부분이 있어요. 차근차근 설명할게요.


1. 4xx vs 5xx 기본 의미

범위 의미
4xx 클라이언트 문제 → 요청이 잘못되었거나 권한 없음 등
5xx 서버 문제 → 서버가 요청을 처리할 수 없는 상태

2. 왜 404는 여전히 4xx로 분류되는가?

핵심:

  • HTTP 상태 코드는 “요청 관점”에서 판단
  • 404 = 서버가 클라이언트가 요청한 URL해당하는 리소스 찾지 못했다는 의미
  • 중요한 점: 서버 내부 문제 때문이든 아니든, 클라이언트 입장에서는 요청한 URL이 잘못된 것으로 느껴짐
    • 즉, 클라이언트가 “이 URL은 존재하지 않는다”라고 이해하면 됨 → 4xx

예시:

  1. 클라이언트가 /page.html 요청
  2. 서버 라우팅 오류리소스를 찾지 못함
  3. 클라이언트 입장: “내가 요청한 URL이 없네” → 404
  • 서버 문제(라우팅, 웹서버 설정, 권한 문제) 때문에 발생해도, 클라이언트가 수정할 수 없는 서버 내부 문제라면 5xx가 더 직관적으로 느껴질 수도 있지만,
  • HTTP 설계 철학상 “클라이언트 요청 URL 기준으로 판단 → 없으면 404”

3. 실제 운영 관점

  • 개발자가 내부적으로 서버 설정 문제를 발견하면 로그를 통해 수정
  • 클라이언트에게는 여전히 404 Not Found 반환 → 사용자 입장에서 요청 URL이 없는 것처럼 보이므로 혼동을 줄이기 위해
  • 만약 서버가 리소스를 찾으려고 했는데 서버 자체가 오류로 처리 못했을 때 → 500 Internal Server Error, 502 Bad Gateway 같은 5xx 반환

정리

  • 404가 서버 설정/라우팅 문제로 발생할 수 있어도 → 클라이언트 관점에서 “리소스 없음” → 4xx
  • 5xx는 서버가 요청을 처리할 수 없는 상황, 내부 오류 발생 시 사용
  • 핵심 기준: “누구의 잘못으로 요청이 실패했는가?” → 클라이언트면 4xx, 서버면 5xx

 

“인증(Authentication)”과 “권한(Authorization)”은 비슷해 보이지만 완전히 다른 개념이에요.

이 차이를 명확히 이해하면 403 Forbidden도 직관적으로 이해됩니다.


1. 인증(Authentication)

  • 사용자가 누구인지 확인하는 과정
  • 쉽게 말해 “너 누구니?”
  • 예시:
    • 아이디/비밀번호로 로그인
    • 구글 계정으로 OAuth 로그인
    • JWT 토큰 확인
  • 인증 성공 = 사용자가 누구인지 확인

2. 권한(Authorization)

  • 인증된 사용자가 무엇을 할 수 있는지 확인하는 과정
  • 쉽게 말해 네가 뭘 할 수 있니?”
  • 예시:
    • 일반 사용자가 관리자 페이지 접근 시도 → 권한 없음
    • 글 작성 권한 없는 사용자가 글 삭제 시도 → 권한 없음
  • 권한 확인 실패 = 403 Forbidden

3. 차이를 한눈에 정리

구분 질문 결과 상태 코드
인증 “너 누구야?” 로그인 안 됨 → 인증 실패 401 Unauthorized
권한 “네가 이 행동 해도 되니?” 로그인 됐지만 권한 없음 403 Forbidden

4. 403 Forbidden 의미

  • 클라이언트는 누구인지 확인됨
  • 그러나 해당 리소스/행동을 수행할 권한이 없음
  • 즉, 서버가 요청을 거부한 것

💡 예시

  1. 관리자 페이지 /admin
    • 로그인 안 한 사람 → 401 Unauthorized
    • 일반 사용자 로그인 → 403 Forbidden
    • 관리자 로그인 → 200 OK
728x90
반응형