얼마 전, REST로 데이터를 받아 DB에 저장시키고 화면에 보여주는 대시보드를 개발했다.
데이터가 잘 들어갈 땐 잘 들어가고, 아닐 땐 또 잘 안들어가서 로그를 보니 415에러가 떠있었다.
415 에러가 뭘 뜻하는지 찾아볼 겸 해서 HTTP 상태코드에 오늘은 좀 더 알아보려고 한다.
HTTP 상태코드?
HTTP 상태코드는 클라이언트의 요청에 대한 서버의 응답을 나타내는 세 자리 숫자 코드이다. 이 코드는 요청이 성공적으로 처리되었는지, 리소스를 찾지 못했는지, 서버에 문제가 있는지를 알려준다. HTTP 상태코드는 다섯 가지 주요 클래스(1xx, 2xx, 3xx, 4xx, 5xx)로 나뉜다.
100번대: 정보 응답 (Informational Responses)
100번대 상태 코드는 클라이언트가 요청을 계속 진행할 수 있도록 하는 임시 응답을 의미한다. 이 코드는 주로 클라이언트와 서버 간의 초기 통신을 설정하는 데 사용된다.
100 Continue
이 코드는 클라이언트가 요청의 처음 부분을 서버에 보내고, 서버가 나머지 요청을 계속 보내도록 허용할 때 사용된다. 서버는 이 응답을 통해 클라이언트가 보낸 헤더를 확인하고, 요청 본문을 보내도 된다는 신호를 보낸다.
101 Switching Protocols
클라이언트가 서버에 프로토콜 변경을 요청하고, 서버가 이를 수락할 때 사용되는 코드다. 이는 주로 웹소켓 연결을 설정할 때 사용된다.
102 Processing (WebDAV)
이 코드는 서버가 요청을 수신했으며 현재 처리 중임을 나타낸다. 서버가 복잡한 요청을 처리하는 데 시간이 걸릴 때 클라이언트에게 대기 상태를 알리는 데 유용하다.
200번대: 성공 응답 (Successful Responses)
200번대 상태 코드는 클라이언트의 요청이 성공적으로 처리되었음을 나타낸다. 이는 가장 흔히 볼 수 있는 상태 코드이며, 정상적인 웹 페이지 로딩 시 주로 나타난다.
200 OK
가장 흔한 상태 코드로, 요청이 성공적으로 처리되었음을 의미한다. 웹 페이지를 정상적으로 로드하거나, 데이터베이스에서 데이터를 성공적으로 가져올 때 이 코드가 반환된다.
201 Created
클라이언트가 요청한 리소스가 성공적으로 생성되었음을 나타낸다. 예를 들어, 사용자가 새로운 계정을 생성할 때 이 코드가 반환된다.
202 Accepted
서버가 요청을 수락했지만 아직 처리하지 않았음을 나타낸다. 이 코드는 비동기 작업을 시작할 때 유용하다.
203 Non-Authoritative Information
서버가 요청을 성공적으로 처리했지만, 다른 소스에서 수집한 정보를 반환했음을 나타낸다. 이는 캐시된 데이터나 제3자 API의 데이터를 사용할 때 유용하다.
204 No Content
서버가 요청을 성공적으로 처리했지만, 반환할 콘텐츠가 없음을 나타낸다. 주로 데이터 삭제 요청에 사용된다.
205 Reset Content
서버가 요청을 성공적으로 처리했으며, 클라이언트가 현재 보고 있는 문서를 리셋해야 함을 나타낸다. 폼을 초기화할 때 유용하다.
206 Partial Content
서버가 요청한 리소스의 일부만을 반환했음을 나타낸다. 대용량 파일을 부분적으로 다운로드할 때 주로 사용된다.
300번대: 리다이렉션 (Redirection)
300번대 상태 코드는 클라이언트가 요청한 리소스를 다른 위치에서 찾을 수 있음을 나타낸다. 이는 주로 URL 변경이나 새로운 리소스 위치를 알릴 때 사용된다.
300 Multiple Choices
서버가 여러 가지 옵션을 제공할 때 사용된다. 클라이언트는 자신이 원하는 리소스를 선택할 수 있다.
301 Moved Permanently
요청한 리소스가 영구적으로 이동했음을 나타낸다. 이는 URL이 변경되었을 때 사용되며, 클라이언트는 새로운 URL로 요청을 보내야 한다.
302 Found
요청한 리소스가 임시로 다른 위치에 있음을 나타낸다. 이는 주로 임시 리다이렉션에 사용된다.
303 See Other
서버가 클라이언트를 다른 URI로 리다이렉트할 때 사용된다. POST 요청 이후에 GET 요청을 통해 데이터를 가져올 때 유용하다.
304 Not Modified
클라이언트가 요청한 리소스가 수정되지 않았음을 나타낸다. 이는 캐시된 버전을 사용할 수 있음을 의미한다.
307 Temporary Redirect
요청한 리소스가 임시로 다른 위치에 있음을 나타낸다. 302 Found와 비슷하지만, 원래 요청 메서드를 유지한다.
308 Permanent Redirect
요청한 리소스가 영구적으로 이동했음을 나타낸다. 301 Moved Permanently와 비슷하지만, 클라이언트가 원래 요청 메서드를 유지한다.
400번대: 클라이언트 오류 (Client Errors)
400번대 상태 코드는 클라이언트의 잘못된 요청으로 인해 서버가 요청을 처리할 수 없음을 나타낸다. 이는 주로 잘못된 요청 형식이나 인증 문제로 발생한다.
400 Bad Request
서버가 요청을 이해할 수 없거나 잘못된 구문으로 인해 요청을 처리할 수 없음을 나타낸다. 잘못된 JSON 형식이나 유효하지 않은 파라미터가 포함된 요청에서 주로 발생한다.
401 Unauthorized
클라이언트가 인증되지 않았음을 나타낸다. 보호된 리소스에 접근하려면 유효한 인증 정보가 필요하다.
402 Payment Required
초기적으로 디지털 결제를 위해 예약된 코드로, 현재는 거의 사용되지 않는다.
403 Forbidden
서버가 요청을 이해했지만, 권한 문제로 인해 요청을 처리할 수 없음을 나타낸다. 클라이언트는 해당 리소스에 접근할 권한이 없다.
404 Not Found
서버가 요청한 리소스를 찾을 수 없음을 나타낸다. 이는 가장 흔히 볼 수 있는 오류 코드로, 잘못된 URL을 요청할 때 발생한다.
405 Method Not Allowed
서버가 요청된 메서드를 지원하지 않음을 나타낸다. 예를 들어, POST 메서드가 허용되지 않은 리소스에 대해 POST 요청을 보낼 때 이 코드가 반환된다.
406 Not Acceptable
서버가 클라이언트가 요청한 콘텐츠 형식을 제공할 수 없음을 나타낸다. 클라이언트의 요청 헤더에 지정된 Accept 조건을 충족하지 못할 때 발생한다.
407 Proxy Authentication Required
클라이언트가 프록시 서버를 통해 인증을 받아야 함을 나타낸다. 이는 프록시 서버를 사용하는 네트워크 환경에서 주로 발생한다.
408 Request Timeout
서버가 클라이언트의 요청을 기다리다가 시간 초과가 발생했음을 나타낸다. 이는 서버가 너무 오래 기다리거나 클라이언트가 요청을 완료하지 못했을 때 발생한다.
409 Conflict
서버가 요청을 처리하는 동안 충돌이 발생했음을 나타낸다. 주로 리소스 상태가 요청과 일치하지 않을 때 발생한다.
410 Gone
요청한 리소스가 더 이상 서버에 존재하지 않음을 나타낸다. 이는 404 Not Found와 비슷하지만, 리소스가 영구적으로 사라졌음을 의미한다.
411 Length Required
서버가 요청을 처리하려면 Content-Length 헤더가 필요함을 나타낸다. 클라이언트가 이 헤더를 포함하지 않은 요청을 보낼 때 발생한다.
412 Precondition Failed
클라이언트의 조건부 요청이 실패했음을 나타낸다. 이는 요청 헤더의 조건이 충족되지 않을 때 발생한다.
413 Payload Too Large
서버가 요청한 엔터티의 크기가 너무 커서 처리할 수 없음을 나타낸다. 주로 클라이언트가 너무 큰 파일을 업로드하려 할 때 발생한다.
414 URI Too Long
서버가 요청한 URI의 길이가 너무 길어서 처리할 수 없음을 나타낸다. 이는 주로 클라이언트가 너무 긴 쿼리 문자열을 포함한 요청을 보낼 때 발생한다.
415 Unsupported Media Type
서버가 요청한 미디어 타입을 지원하지 않음을 나타낸다. 주로 클라이언트가 서버가 이해할 수 없는 형식의 데이터를 보낼 때 발생한다.
* ContentType, Content Encoding 타입을 확인해볼 필요가 있다.
416 Range Not Satisfiable
클라이언트가 요청한 범위를 서버가 충족할 수 없음을 나타낸다. 이는 주로 파일 다운로드 시 발생하며, 요청한 범위가 파일의 끝을 넘어서거나 잘못된 범위일 때 발생한다.
417 Expectation Failed
서버가 클라이언트의 Expect 헤더 필드 요구를 충족할 수 없음을 나타낸다. 이는 주로 클라이언트가 서버의 행동을 미리 예상할 때 발생한다.
500번대: 서버 오류 (Server Errors)
500번대 상태 코드는 서버에서 요청을 처리하는 동안 오류가 발생했음을 나타낸다. 이는 주로 서버 측의 문제로 인해 발생하며, 클라이언트는 별다른 조치를 취할 수 없다.
500 Internal Server Error
서버가 요청을 처리하는 동안 일반적인 오류가 발생했음을 나타낸다. 이는 다양한 원인으로 발생할 수 있으며, 서버의 로그를 확인해 자세한 원인을 파악해야 한다.
501 Not Implemented
서버가 요청된 기능을 지원하지 않음을 나타낸다. 이는 서버가 특정 메서드를 구현하지 않았거나 지원하지 않을 때 발생한다.
502 Bad Gateway
서버가 게이트웨이 또는 프록시 역할을 수행하는 동안 잘못된 응답을 수신했음을 나타낸다. 이는 주로 서버 간의 통신 문제로 발생한다.
503 Service Unavailable
서버가 일시적으로 요청을 처리할 수 없음을 나타낸다. 이는 서버가 과부하 상태이거나 유지 보수 중일 때 발생한다.
504 Gateway Timeout
서버가 게이트웨이 또는 프록시 역할을 수행하는 동안 시간 초과가 발생했음을 나타낸다. 이는 주로 서버 간의 통신 지연으로 발생한다.
505 HTTP Version Not Supported
서버가 요청에서 사용된 HTTP 버전을 지원하지 않음을 나타낸다. 이는 클라이언트가 서버에서 지원하지 않는 HTTP 버전을 사용할 때 발생한다.
506 Variant Also Negotiates
서버가 내부적으로 변형 협상을 시도했으나 실패했음을 나타낸다. 이는 주로 서버 구성 문제로 인해 발생한다.
507 Insufficient Storage (WebDAV)
서버가 요청을 처리하는 데 필요한 저장 공간이 부족함을 나타낸다. 이는 주로 서버의 디스크 공간이 부족할 때 발생한다.
508 Loop Detected (WebDAV)
서버가 무한 루프를 감지했음을 나타낸다. 이는 주로 리소스 간의 순환 참조로 인해 발생한다.
510 Not Extended
서버가 요청을 처리하기 위해 더 많은 확장이 필요함을 나타낸다. 이는 주로 추가적인 요구 사항이 필요할 때 발생한다.
511 Network Authentication Required
클라이언트가 네트워크에 접속하기 위해 인증이 필요함을 나타낸다. 이는 주로 공공 Wi-Fi 네트워크에서 발생한다.
HTTP 상태 코드는 웹 개발자라면 빈번히 만나는 코드다.
당연한 말이지만, 각 코드의 의미와 용도를 이해하면서 개발하면 더 나은 웹서비스를 만드는데 도움이 되겠지,,
종종 찾아서 봐야겠다.
오늘도 조금 더 성장했다.
끝.
'프로그래밍 > 네트워크' 카테고리의 다른 글
REST, RESTful (0) | 2025.02.23 |
---|---|
Proxy 이해하기 - Forward Proxy, Reverse Proxy (0) | 2025.02.18 |
IPv4를 조금 더 자세히 알아보자 (0) | 2024.06.26 |
[네트워크] 미뤄왔던 네트워크 공부하기 (0) | 2024.06.10 |
[Network] HSTS(HTTP Strict Transport Security) 알아보기 (2) | 2024.04.30 |