📌HTTP 응답코드란?
웹 서버가 클라이언트(브라우저 등) 요청에 대한 결과를 나타내는 3자리 숫자로 특정 HTTP 요청이 성공적으로 완료되었는지 알려줍니다. 각 코드는 특정 의미를 가지며, 주로 5개의 그룹으로 나누어집니다.
👂1XX 정보응답
요청이 수신되었고 처리가 진행 중임을 나타냅니다.
- 100 Continue
- 클라이언트로부터 일부 요청을 받았고 나머지 요청을 받을 준비가 됐음을 나타냅니다.
- 101 Switching Protocol
- 102 Processing
- 103 Early Hints
👌2XX 성공 응답
요청이 성공적으로 처리되었음을 나타냅니다.
- 200 OK
- 요청이 성공적으로 되었음을 나타냅니다.
- 성공의 의미는 HTTP 메소드에 따라 달라집니다.
- GET : 리소스를 불러와서 메시지 바디에 전송되었습니다.
- HEAD: 개체 해더가 메시지 바디에 있습니다.
- PUT 또는 POST: 수행 결과에 대한 리소스가 메시지 바디에 전송되었습니다.
- TRACE: 메시지 바디는 서버에서 수신한 요청 메시지를 포함하고 있습니다.
- 201 Created
- 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다.
- 이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라옵니다.
- 202 Accepted
- 203 Non-Authoritative Information
- 204 No Content
- 요청에 대해서 보내줄 수 있는 콘텐츠가 없지만, 헤더는 의미있을 수 있습니다.
- 사용자-에이전트는 리소스가 캐시된 헤더를 새로운 것으로 업데이트 할 수 있습니다.
- 205 Reset Content
- 206 Partial Content
👈3XX 리다이렉션 메시지
클라이언트가 요청한 리소스의 위치가 변경되었음을 나타냅니다.
- 300 Multiple Choice
- 301 Moved Permanently
- 요청한 리소스의 URI가 변경되었음을 의미합니다.
- 302 Found
- 요청한 리소스의 URI가 일시적으로 변경되었음을 의미합니다.
- 303 See Other
- 304 Not Modified
🙅♂️4XX 클라이언트 오류
요청에 오류가 있음을 나타냅니다.
- 400 Bad Request
- 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미합니다.
- 401 Unauthorized
- 지정한 리소스에 대한 액세스 권한이 없음을 의미합니다.
- 응답 헤더
WWW-Authenticate에 필요한 인증 방식을 지정합니다.
- 403 Forbidden
- 클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않습니다.
- 서버는 거절을 위한 적절한 응답을 보냅니다.
- 404 Not Found
- 서버는 요청받은 리소스를 찾을 수 없습니다.
- 브라우저에서는 알려지지 않은 URL을 의미합니다.
- 인증받지 않은 클라이언트로부터 리소스를 숨기기 위해 403 대신에 전송할 수도 있습니다.
- 405 Method Not Allowed
- 408 Request Timeout
👩💻5XX 서버 오류
서버에서 처리 중 오류가 발생했음을 나타냅니다.
- 500 Internal Server Error
- 서버에서 예상치 못한 오류가 발생했습니다.
- 클라이언트가 모르는 5XX 계열의 응답 코드가 반환된 경우에도 클라이언트는 500과 동일하게 처리하도록 규정하고 있습니다.
- 501 Not Implemented
- 502 Bad Gateway
- 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안 잘못된 응답을 수신했음을 의미합니다.
- 503 Service Unavailabe
- 504 Gateway Timeout
- 서버가 게이트웨이 역할을 하고 있으며 적시에 응답을 받을 수 없을 때 주어집니다.
📌401(Unauthorized)와 403(Forbidden)의 차이
HTTP 응답 코드 401 Unauthorized와 403 Forbidden은 모두 요청이 거부되었음을 나타내지만, 그 이유와 상황이 다릅니다.
401 Unauthorized
- 의미 : 요청한 리소스에 접근하기 위해 인증이 필요하며, 클라이언트가 아직 인증되지 않았거나 잘못된 인증 정보를 제공했을 때 사용됩니다.
- 사용 예시 : 클라이언트가 인증되지 않은 상태에서 인증이 필요한 페이지에 접근하려고 할 때 발생. 예를 들어, 로그인이 필요한 페이지에 비로그인 상태로 접근 시 반환됩니다.
- 특징 : 서버는 클라이언트가 인증할 수 있는 방법을 명시할 수 있습니다. 예를 들어,
WWW-Authenticate 헤더를 통해 인증 방식을 제시할 수 있습니다.
403 Forbidden
- 의미 : 클라이언트의 인증 여부와 상관없이, 요청이 허가되지 않았으며 클라이언트에게 접근 권한이 없음을 나타냅니다.
- 사용 예시 : 클라이언트가 인증되었더라도, 특정 리소스에 접근할 권한이 없을 때 발생. 예를 들어, 로그인한 사용자가 관리자 권한이 필요한 페이지에 접근하려 할 때 반환됩니다.
- 특징 : 추가적인 인증이나 권한 부여를 시도해도 접근이 불가능함을 의미합니다.
정리
401 Unauthorized와 다르게 403 Forbidden에서는 서버가 클라이언트가 누구인지 알고 있다는 차이가 있습니다.

📌200(OK)와 201(Created)의 차이
200 OK와 201 Created는 둘 다 요청이 성공적으로 처리되었음을 나타내지만, 주된 차이점은 처리된 결과의 성격에 있습니다.
200 OK
- 의미 : 요청이 성공적으로 처리되었고, 결과로 어떠한 리소스도 새로 생성되지 않았을 때 사용됩니다.
- 사용 예시 : GET 요청으로 데이터를 성공적으로 조회하거나, 기존 리소스를 성공적으로 업데이트했을 때 반환됩니다.
201 Created
- 의미 : 요청이 성공적으로 처리되었으며, 그 결과 새로운 리소스가 생성되었음을 나타냅니다.
- 사용 예시 : POST 요청으로 서버에 새로운 데이터를 생성하거나 파일 업로드 시 새로운 리소스가 생성되었을 때 반환됩니다.
- 특징 : 201 응답에는 새로 생성된 리소스의 URL을 포함하는
Location 헤더가 함께 반환될 수 있습니다.
정리
- 200 OK는 기존 리소스에 대한 성공적인 처리
- 201 Created는 새로운 리소스가 생성된 상황에서 사용됩니다.
📌응답코드를 직접 정의 할 수 있을까? YES!
HTTP 응답 코드는 기본적으로 표준화된 상태 코드를 사용하지만, 필요에 따라 사용자 정의 응답 코드를 만들 수 있습니다. 하지만 주의할 점은, 클라이언트와 서버 간의 통신에서 잘 알려진 표준 응답 코드를 사용하는 것이 상호 운용성과 예측 가능한 동작을 보장하기 때문에 권장됩니다.
그럼에도 불구하고, 웹 애플리케이션의 특정 요구사항에 맞춰 추가적인 의미를 전달해야 할 경우에는 표준 상태 코드의 범주 안에서 사용자 정의 코드를 사용하거나, 기존 상태 코드에 추가 메시지를 첨부하는 방식으로 응답을 처리할 수 있습니다.
사용자 정의 응답 코드를 사용하는 방법
-
기존 범주의 상태 코드를 확장 : 예를 들어, 4xx와 5xx는 각각 클라이언트와 서버 오류를 나타내는 범주이므로, 499와 같이 사용하지 않는 코드를 정의하여 특정 오류를 표현할 수 있습니다.
499 Client Closed Request : 일부 웹 서버(예: Nginx)에서 사용되는 코드로, 클라이언트가 서버 응답을 기다리지 않고 연결을 끊었을 때 사용됩니다.
-
상태 코드와 함께 추가 메시지 전달 : 새로운 상태 코드를 정의하지 않고, 기존 코드에 의미 있는 응답 메시지를 첨부하는 방식이 더 일반적입니다. 예를 들어, 400 Bad Request 코드를 사용하면서 상세한 오류 원인을 응답 바디나 헤더에 추가할 수 있습니다.
400 Bad Request + "Invalid API key"
-
REST API에서의 커스텀 상태 : RESTful API에서는 일반적으로 표준 HTTP 상태 코드를 사용하지만, 응답 바디에 특정 오류나 상태 메시지를 포함해 추가 정보를 전달하는 방식이 많이 쓰입니다.
400 Bad Request와 함께 {"error_code": 1234, "message": "Invalid input data"}와 같이 응답할 수 있습니다.
권장 사항
- 기존 상태 코드 사용 : 표준 코드의 의미를 벗어나지 않는 범위에서 사용하는 것이 좋습니다. 예를 들어,
400, 404, 500 등 이미 정의된 상태 코드를 최대한 활용하고, 세부 사항은 응답 바디에서 처리하는 방식으로 접근하는 것이 일반적입니다.
- 사용자 정의 코드의 주의점 : 표준화되지 않은 코드를 남발하면, 다른 클라이언트나 서비스와의 호환성 문제가 발생할 수 있습니다.
출처
https://hongong.hanbit.co.kr/http-%EC%83%81%ED%83%9C-%EC%BD%94%EB%93%9C-%ED%91%9C-1xx-5xx-%EC%A0%84%EC%B2%B4-%EC%9A%94%EC%95%BD-%EC%A0%95%EB%A6%AC/
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
https://mangkyu.tistory.com/146