...
5XX Server Error
5XX 번대의 상태 코드들은 서버 오류를 의미한다.
4XX 상태코드와 5XX 상태코드 모두 오류를 반환하는 응답 코드이지만, 4XX는 클라이언트의 요청에 문제가 있는 것이기에 요청 메세지를 검토하여 수정한 뒤 재전송하면 해결이 가능하지만, 5XX 는 서버에 문제가 있는 것이기 때문에 서버 자체의 상태를 보아야 하는 차이가 있다.
즉, 클라이언트가 유효한 요청을 보냈음에도, 5XX 가 발생하면 즉시 서버 상태를 확인하여 서버 복구를 진행해야 한다는 것이다. 그래서 서버가 복구되면 같은 요청 메시지를 재전송면 요청이 성공할 가능성이 있다.
또는 클라이언트와 원 서버 모두 정상이지만 중간 프록시 서버나 게이트웨이와 같은 서버의 보조 구성 요소에서도 문제가 생길때 5XX 응답 코드를 내뱉는다. 따라서 만일 외부 호스팅 제공업체를 사용하는 경우 오류가 뜨면, 외부 호스팅 제공업체에 문의하여 살펴볼 수 있도록 해야 한다.
500 Internal Server Error
- Internal Server Error ⇢ 서버 내부 문제 발생
- 서버 사용량의 폭주로 인해 서비스가 일시적으로 중단되거나, 백엔드 스크립트의 오류 등 원인은 다양하다.
- 서버 내부의 문제라는 것은 되게 범위가 추상적이기 마련이다. 그래서 백엔드에서는 애매한 서버 문제들에 대하여 500 응답으로 퉁친다고 보면 된다.
- 즉, 웹 서버에 문제가 있음을 의미하지만, 정확한 문제에 대해 더 구체적으로 설명할 수 없을때 내뱉는 응답 코드이다.
501 Not Implemented
- Not Implemented ⇢ 요청에 대해 구현되지 않아 수행하지 아니함
- 즉, 클라이언트가 서버의 능력을 넘은 요청을 했을 때, 서버가 기능을 지원하지 않음을 나타내는 것이다.
- 다만 앞으로 영원히 기능을 지원하지 않는 다는 의미보다는, 추후에 기능이 개발되면 지원한다는 의미가 더 크다.
🆚 405 vs 501 상태 코드 차이
단순히 앞자리 숫자 차이로 클라이언트 오류냐 서버 오류냐를 물어보는 것이 아니다.
405 와 501 둘다 클라이언트의 HTTP 메서드 요청으로부터 서버에서 지원하지 않아 요청을 반려한다는 점에서 유사점을 지닌다. 다만 어떠한 기준으로 클라이언트 오류로서 반려하였는지 서버 오류로서 반려하였는지 명확한 구분점이 존재한다.
405 Method Not Allowed 는 클라이언트가 지원되지 않는 기능을 요청했다는 점에서 구체적이다. 즉, 서버는 클라이언트가 요청한 해당 기능에 대해서 뭔지는 알고있지만 기능을 제한/금지 함으로써, 메소드가 실제로 클라이언트에 의해 호출되지 않아야 함을 강조한다.
반면 501 Not Implemented 는 그냥 해당 메소드 요청에 대해 모른다는 것을 암시한다. 즉, 서버에서 개발이 덜 된것이다. 따라서 아직 구현되지는 않았지만 가까운 미래에 구현되어 지원 될수도 있고, 아니면 아예 확실하게 제한함으로서 405로 처리할 수도 있다.
502 Bad Gateway
- Bad Gateway ⇢ 게이트웨이가 잘못되어, 서버가 잘못된 응답을 수신함을 의미한다.
- 서로 다른 프로토콜을 연결해주는 장치가 잘못된 프로토콜을 연결하거나 어느 쪽에 문제가 있어 통신이 제대로 되지 않을 때 발생된다.
- 보통은 접속이 폭주하는 등의 원인으로 서버에서 어떤 이유로 통신장애가 발생하였을 경우에 발생된다.
- 인터넷상의 서버가 다른 서버로부터 유효하지 않은 응답을 받은 경우에도 발생된다.
- 혹은 사용자 브라우저에 이상이 있거나, 잘못된 네트워크 연결 혹은 설정 등을 했을 때도 발생된다.
502 Bad Gateway 상태 코드는 검색 봇 및 기타 크롤러가 사이트를 방문 하는 속도에 영향을 줄 수 있다. 그래서 클라이언트에 502 상태 코드를 반환하는 동안 서버가 오랫동안 다운된 상태라면사이트의 검색 순위에 영향을 줄 수 있다. 따라서 사이트가 일시적으로 다운된 경우에는 502 대신 503 Service Unavailable 상태 코드를 반환하는 것이 좋다.
503 Service Unavailable
- Service Unavailable ⇢ 서비스 이용 불가 (일시적)
- 지금 서버가 요청을 처리해 줄 수 없지만, 나중에 가능함을 의미하고자 할때 응답된다.
- 이 응답의 일반적인 원인으로는, 갑작스러운 트래픽 급증으로 서버가 과부하되거나, 특정 시간대에 서버 패치 및 업데이트 등 다양한 작업을 수행하기 위해 서버 다운을 시켰거나, 서버가 재부팅되거나, 방화벽 설정에 잘못된 구성이 있거나 등 다양하다.
- 서버가 언제 그 리소스를 사용할 수 있게 될지 알고 있다면, 서버는
Retry-After헤더를 응답에 포함시켜 언제 그 리소스를 사용할 수 있는지에 대한 안내를 클라이언트에게 해줄 수 있다. - 502 Bad Gateway 상태 코드와 달리 웹 크롤러의 검색 순위에 영향을 미치지 않는다.
위에서 언급하듯이, 502 상태 코드와 달리 503 상태 코드는 똑같이 서버 문제임에도 웹페이지의 검색 순위에 영향을 미치지 않는다. 웹 크롤러 봇이 503 Service Unavailable 상태 코드를 받으면 서버에 일시적인 문제가 있다고 메모하기 때문이다.
그런데 만일 사이트가 장기간(예: 며칠 이상) 다운되고 이 기간 동안 503 서비스를 사용할 수 없음 상태 코드를 반환하는 경우 검색 엔진은 사이트가 영구적으로 오프라인 상태인 것으로 간주하고 사이트가 복구되기 전까지 모든 검색 순위를 사라지게 할 수도 있다. 사이트가 복구되면 다시 크롤링하여 순위를 복구한다.
📍 503 상태코드 흐름 예시
1. 클라이언트는 서버에게 리소를 요청한다.
2. 그런데 서버는 갑작스러운 트래픽 급증으로 서버가 과부하 되서 일시적인 문제로 인해 리소스를 일시적으로 처리할 수 없어, Retry-After 헤더와 함께 1800초 뒤에 요청하라고 안내한다.
504 Gateway Timeout
- Gateway Timeout ⇢ 게이트웨이 시간 초과로, 서버에서 요청을 처리하지 아니하고 연결을 닫음
- 408 Request Timeout 과 비슷해 보이지만, 다른 서버에게 요청을 보내고 응답을 기다리다 타임아웃이 발생한 게이트웨이나 프록시 서버에서 온 응답이라는 점이 다르다.
505 HTTP Version Not Supported
- HTTP Version Not Supported ⇢ 서버에서 지원되지 않는 HTTP 버전이라 처리 불가
- 현업에 쓰이는 HTTP 버전은 HTTP/1.0 , HTTP/1.1, HTTP/2 , HTTP/3 이 있는데, 이중 서버에서 지원하지 않는 버전의 프로토콜로 된 요청을 받았을 때 응답된다.
506 Variant Also Negotiates
- 콘텐츠 협상과 관련있는 상태 코드
- 실험적인 프로토콜이며 공식적으로 표준으로 채택하지 않은 응답 코드
507 Insufficient Storage
- Insufficient Storage ⇢ 스토리지 공간 부족
- 서버에 HTTP 요청을 수용할 충분한 공간이 없음을 나타내는 응답 코드
- WebDAV 요청에 대한 응답용 상태 코드
508 Loop Detected
- Loop Detected ⇢ 무한 루프를 감지
- 서버가 요청을 처리하는 동안 무한 루프를 감지한 경우 요청을 종료함
- WebDAV 요청에 대한 응답용 상태 코드
510 Not Extended
- Not Extended ⇢ 추가 확장이 필요
- 실험적인 프로토콜이며 공식적으로 표준으로 채택하지 않은 응답 코드
511 Network Authentication Required
- Network Authentication Required ⇢ 네트워크 인증 요구
- 클라이언트가 네트워크 액세스를 얻으려면 인증이 필요하다는 것을 나타낸다. 보통 네트워크에 엑세스할 때 로그인이 필요한 경우를 들 수 있다.
- 캡티브 포털에서 WiFi 네트워크에 연결한 후 일종의 로그인을 거쳐야 함을 컴퓨터에 알리는 데 사용된다.
- 이 응답 코드는 원 서버에서 생성되는 것이 아니라, 네트워크에 대한 액세스를 제어하는 프록시 서버에서 생성된다.
📍 511 상태코드 흐름 예시
일상생활에서 지하철이나 도서관에서 T WIFI ZONE으로 와이파이 네트워크를 연결하고 인터넷을 실행하면, 내가 요구하던 페이지가 아닌 뜬금없이 네트워크 로그인 페이지가 떴었던 경험을 한번쯤은 겪어봤을 것이다. 이것이 511 응답에 대한 상태 흐름이라고 보면 된다.
1. 클라이언트는 www.example.com 홈페이지에 접속하기 위해 원 서버에 요청한다.
2. 그런데 원 서버에 가기전에 중간 프록시 서버가 네트워크 인증을 먼저 요구한다. 그에 대한 응답으로 511 상태 코드를 반환하고, 어떤 경우에는 네트워크 로그인 페이지로 리다이렉트 시키기도 한다.
3. 클라이언트는 네트워크 로그인 페이지에서 인증을 진행하고 인터넷을 이용한다.
599 Network Connect Timeout Error
- Network Connect Timeout Error ⇢ 네트워크 연결 시간 초과 오류
- 일부 프록시에서 사용하는 비공식 HTTP 상태 코드
- 개발자는 이 상태 코드를 비공식적으로 사용하여, 로컬 네트워크를 찾을 수 없거나 로컬 네트워크에 대한 HTTP 연결 시간이 초과되어 코드에서 실행한 HTTP 요청이 실패했음을 나타낼 수 있다.
# 참고자료
모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
https://http.dev/status
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.