본문 바로가기
IT 개발 이야기/WebService

HTTP 상태(응답) 코드: 웹 통신의 핵심 이해하기

by 개발자 Aiden 2023. 2. 27.
반응형

HTTP 상태(응답) 코드 정보와 그 중요성

HTTP 상태 코드는 클라이언트와 서버 간의 웹 서비스 통신에서 반환되는 응답 상태를 나타내는 중요한 지표입니다. 이 코드를 통해, 요청이 성공적으로 처리되었는지, 추가적인 작업이 필요한지, 혹은 오류가 발생했는지와 같은 다양한 상황을 쉽게 파악할 수 있습니다. 특히 실무에서는 이러한 상태 코드를 통해 서비스의 상태를 정확하게 이해하고, 문제 발생 시 적절한 조치를 취하는 데 큰 도움이 됩니다.

HTTP 상태(응답) 코드 정보


HTTP 상태 코드 분류

HTTP 상태 코드는 크게 다섯 가지 카테고리로 분류됩니다.

  • 1xx (정보 응답) : 클라이언트의 요청이 서버에 정상적으로 도착했음을 알리는 코드입니다.
  • 2xx (성공) : 클라이언트의 요청이 성공적으로 처리되었음을 나타내는 코드입니다.
  • 3xx (리다이렉션) : 클라이언트에게 다른 URL로의 리다이렉션을 요청하는 코드입니다.
  • 4xx (클라이언트 오류) : 클라이언트의 요청에 오류가 있음을 나타내는 코드입니다. 예를 들면, 잘못된 URL 요청, 권한 없는 페이지 접근 등이 있습니다.
  • 5xx (서버 오류) : 서버 내부에서 오류가 발생했음을 나타내는 코드입니다. 서버의 오류로 인해 요청을 처리할 수 없는 경우에 반환됩니다.


실무에서의 HTTP 상태 코드 활용 사례

실무에서는 다양한 상황에서 HTTP 상태 코드를 활용합니다. 몇 가지 예시를 들어보겠습니다.

1xx (정보 응답): 클라이언트의 요청 진행 상태 표현

클라이언트의 요청이 서버에 정상적으로 도착했으며, 처리가 계속 진행 중임을 나타냅니다.
※ HTTP/1.0 표준은 1xx 상태 코드를 정의하지 않음

  • 101 Switching Protocol(프로토콜 전환)
    클라이언트의 요청에 따라 서버가 현재의 프로토콜에서 다른 프로토콜로 전환하는 경우에 반환됩니다. 이 상태 코드는 HTTP/1.1에서 도입되었으며, 주로 WebSockets 연결을 초기화하는 데 사용됩니다. 클라이언트가 Upgrade 헤더를 포함한 요청을 보내면, 서버는 이 상태 코드와 함께 응답하여 프로토콜 전환을 알립니다.
반응형

 

2xx (성공): 클라이언트의 요청이 성공적으로 처리됨

클라이언트의 요청이 서버에 성공적으로 도착하고, 그 요청이 올바르게 처리되었음을 나타냅니다.

  • 200 OK
    성공적인 HTTP 요청에 대한 표준 응답 코드입니다.
  • 201 Created
    요청이 정상 처리되어 새로운 자원이 생성된 경우에 사용됩니다.
    ex ) 신규 게시물 저장 요청 시 정상 처리 후 생성된 자원 정보는 "Content-Location" 헤더 필드를 통해 전달합니다.
HTTP/1.1 201 Created
Content-Type: application/json
Content-Location: /post/5879
{
  "no" : 5879,
  "title" : "[Web] HTTP 상태(응답) 코드 정보 사용하기"
}
  • 204 No Content
    요청이 정상 처리되었으나 반환될 콘텐츠가 없는 경우로 실무에서는 대부분 "200 OK" 코드로 사용됩니다.

 

3xx (리다이렉션): 클라이언트의 추가 작업이 필요함

클라이언트의 요청이 추가적인 동작을 필요로 할 때 반환됩니다.

  • 301 Moved Permanently
    요청한 리소스의 URL이 영구적으로 변경되었을 때 사용됩니다.
  • 302 Found
    HTTP/1.0 사양에서 "Moved Temporarily" 명칭으로 제공되었고,
    HTTP/1.1에서 동작 유형별로 303, 307 코드가 추가되어 사용됩니다.
    ※ 브라우저 호환성 유지를 위해 여전히 URL 리다이렉션 목적으로 사용되고 있음

    ex ) 모바일에서 PC용 도메인으로 접근 시 모바일용 도메인으로 Location 이동시켜 줍니다.

HTTP Status 302 Found

  • 303 See Other
    리다이렉션 시킬 때 HTTP Method를 GET으로 변경하여 URL 전달해야 합니다.
  • 304 Not Modified
    요청된 자원 버전이 서버와 동일하여 캐시 된 자원으로 암묵적인 리다이렉션을 합니다.
  • 307 Temporary Redirect
    리다이렉션 시킬 때 HTTP Method 포함 기존 요청 유형을 그대로 유지하며 전달합니다.

 

4xx (클라이언트 오류): 클라이언트의 잘못된 요청

클라이언트의 요청에 문제가 있을 때 반환됩니다.

  • 400 Bad Request
    명백한 클라이언트 요청 오류로 문법상 오류가 있거나 전송 패킷 크기가 서버 제한을 초과한 경우 발생합니다.
  • 401 Unauthorized
    요청 자원에 접근 가능한 인증 정보가 부족한 경우에 발생합니다.
    ex ) 사용자 인증 토큰( JWT 등 ) 없이 개인정보 조회를 요청하는 경우
  • 403 Forbidden
    요청 자원에 사용 권한이 없는 경우에 발생합니다.
    ex ) 사용자 인증 후 정상 접근했으나 대상 자원에 대한 사용 권한이 없는 경우
  • 404 Not Found
    요청한 자원이 존재하지 않거나 접근 URL 경로가 존재하지 않은 경우발생합니다.
  • 405 Method Not Allowed
    서버에서 정의한 허용 Method( 애플리케이션 포함 )가 아닌 경우 발생합니다.
    ex ) REST API 설계에 따라 사용자 계정 등록 시 POST, PUT Method 만 허용되고 GET 은 불가한 경우
# Client GET Method 요청
GET /user HTTP/1.1
Host: aday7.tistory.com

# GET Method로 요청받은 경우 서버 응답 예시
HTTP/1.1 405 Method Not Allowed
Allow: POST, PUT



5xx (서버 오류): 서버의 문제로 인한 오류

서버에서 문제가 발생하여 요청을 처리할 수 없을 때 반환됩니다.

  • 500 Internal Server Error
    애플리케이션 Exception 처리 등 예상치 못한 조건으로 오류가 발생한 경우에 제공되는 일반적인 서버 오류 메시지로 NullPointerException, Request Timeout 등 대표적인 에러 케이스로 접할 수 있습니다.
  • 502 Bad Gateway
    서버가 다른 서버로부터 잘못된 응답을 받았을 때 반환됩니다. DNS 문제, 방화벽 문제, 과도한 트래픽 등 서버의 과부하로 인해 발생할 수 있습니다. 대부분의 경우 페이지를 새로고침 하면 문제가 해결될 수 있습니다.
  • 503 Service Unavailable
    서버가 요청을 처리할 준비가 되지 않았을 때 반환됩니다.
    ex ) 웹 서비스 포트로 접근했지만 WAS 서비스가 다운되었거나 방화벽에 의해 연결이 차단된 경우에 발생

    ※ 503 Error 대응 방법:
    1. WAS(애플리케이션) 기동 상태 확인 - 서비스가 다운된 경우 서비스를 다시 시작합니다.
    2. WEB -> WAS 연결 상태 확인 - 웹 서버의 오류 로그를 통해 WAS로의 Proxy 통신 시 발생하는 오류 내용을 확인합니다.

  • 504 Gateway Timeout
    게이트웨이 서버(예: Nginx)에 설정된 시간 제한을 초과하여 응답하지 못했을 때 반환됩니다. 대부분의 경우 백엔드 서버의 응답 지연으로 인해 발생하며, 실무에서는 애플리케이션의 시간제한 설정으로 인해 500 오류가 먼저 발생할 수 있습니다.

 

HTTP 상태 코드와 서비스 응답 코드의 구분

HTTP 상태 코드는 웹 표준에 따라 정의된 것으로, 클라이언트와 서버 간의 기본 통신 상태를 나타냅니다. 반면, 실무에서는 특정 서비스의 상황에 따라 별도의 응답 코드를 정의할 필요가 있습니다. 이 두 코드는 서로 다른 목적을 가지므로 분리하여 관리하는 것이 바람직하다는 것을 명심해야 합니다. 서비스의 특성과 요구 사항에 따라 적절한 응답 코드 정책을 결정하고, 이를 철저히 관리하는 것이 중요합니다.


※ HTTP Header의 구조와 주요 정보: 웹 서비스 이해하기

 

[Web] HTTP Header 구조( Request header/Response header )

HTTP Header 구조를 이해하고 요청/응답 정보를 활용해 보자. HTTP( HyperText Transfer Protocol )는 HTML과 같은 하이퍼텍스트 문서를 전송하기 위해 사용되는 프로토콜로 쉽게 말해 Client와 Server 사이에서 메

aday7.tistory.com

반응형

댓글


loading