어떠한 HTTP 요청을 수신하는 웹 서버든 HTTP 상태 코드로 응답을 보냅니다. 이 코드는 상황을 설명하는 서버의 짧은 메모입니다. 실제 사이트 콘텐츠는 포함되어 있지 않습니다. 대신 HTTP 요청을 받은 후 상황이 어떻게 진행되었는지에 대한 보고서입니다. 많은 상황에서 이러한 코드는 다양한 서버/클라이언트 문제를 진단하는 데 중요합니다.
이 코드는 세 자리 정수로, 각각 다양한 상태를 나타냅니다. 첫 번째 자릿수를 기준으로 HTTP 코드는 다섯 가지 범주로 나뉩니다:
-
정보 응답: 값의 범위는 100에서 199까지입니다. 요청을 수신하여 처리 중임을 나타냅니다.
-
성공 응답: 값의 범위는 200에서 299까지입니다. 요청한 작업이 성공적으로 수신, 이해 및 수락되었음을 나타냅니다.
-
리디렉션 메시지: 값의 범위는 300에서 399까지입니다. 요청을 완료하기 위해 추가 조치가 필요함을 의미합니다.
-
클라이언트 오류 응답: 값의 범위는 400에서 499까지입니다. 요청에 잘못된 구문이 포함되어 있거나 요청을 이행할 수 없음을 나타냅니다.
-
서버 오류 응답: 값의 범위는 500에서 599까지입니다. 서버가 유효한 요청을 처리하지 못했음을 의미합니다.
이 가이드에서는 시스템 관리자의 관점에서 누구나 접하게 되는 가장 일반적인 HTTP 오류 코드(4xx 및 5xx) 중 일부를 살펴보겠습니다. 웹 서버가 특정 코드로 응답하게 만드는 상황은 매우 다양합니다. 또한 이 튜토리얼에서는 잠재적인 원인과 해결 방법도 다룹니다.
클라이언트 오류 vs 서버 오류
오류 코드 400~499는 사용자 클라이언트(웹 브라우저 또는 임의의 HTTP 클라이언트)로 인해 발생합니다. 오류가 대부분 클라이언트와 관련되어 있지만, 사용자가 어떤 코드를 겪고 있는지 아는 것은 유용합니다. 이는 잠재적인 문제가 서버 측에서 조치될 수 있는지 판단하는 데 도움이 될 수 있습니다.
반면 서버 오류(HTTP 상태 코드 500~599)는 서버가 오류가 발생했음을 감지했거나 요청을 처리할 수 없을 때 발생합니다.
일반적인 문제 해결
오류의 종류에 관계없이, HTTP 오류 코드가 발생할 때마다 가장 먼저 테스트해야 할 몇 가지 일반적인 문제 해결 팁은 다음과 같습니다.
-
웹 브라우저를 사용하여 서버를 테스트할 때는 서버를 변경한 후 브라우저를 새로 고침하는 것이 좋습니다.
-
서버 로그에는 서버가 요청을 처리하는 방법에 대한 자세한 정보가 담겨 있습니다. 예를 들어 Apache 및 Nginx와 같이 대중적인 웹 서버는 access.log 및 error.log 파일을 생성합니다. 이 로그들을 확인하면 유용한 정보를 얻을 수 있습니다.
-
HTTP 오류 코드는 표준의 일부입니다. 프로그램은 요청을 처리하는 방식에 따라 이 표준을 구현합니다. 즉, 서버 소프트웨어가 특정 오류를 처리하는 방식에 따라 특정 상태 코드가 반환됩니다.
이 가이드는 문제의 원인을 파악하는 데 유용한 지침이 될 것입니다.
일반적인 HTTP 오류
-
일반적인 클라이언트 오류

오류 코드 400은 잘못된 요청(Bad Request)을 나타냅니다. 이는 서버로 전송된 HTTP 요청에 잘못된 구문이 포함되어 있음을 의미합니다. 잘못된 구문이 발생할 수 있는 잠재적인 원인을 살펴보겠습니다:
-
사이트 관련 쿠키가 손상되었을 수 있습니다. 브라우저 쿠키와 캐시를 삭제하면 문제가 해결될 수 있습니다.
-
요청을 보내는 웹 브라우저에 결함이나 버그가 있을 수 있습니다.
-
HTTP 요청을 수동으로 구성할 때 발생한 오류로 인한 잘못된 요청일 수 있습니다. 예를 들어 다음을 잘못 사용한 경우입니다. curl.

오류 코드 401(Unauthorized)은 인증되지 않았거나 올바르게 인증되지 않은 리소스에 액세스하려고 할 때 발생합니다. 이 문제를 해결하려면 사용자가 보호된 리소스에 액세스하는 데 필요한 자격 증명을 제공해야 합니다.
예를 들어 사용자가 HTTP 인증으로 보호된 리소스에 액세스하려고 하는 상황이 있습니다. 이러한 상황에서 유효한 사용자 이름과 비밀번호를 제공하지 않으면 사용자는 401 오류 코드를 받게 됩니다.

오류 코드 403(Forbidden)은 사용자 요청은 유효하지만 서버가 요청 처리를 거부하는 상황을 나타냅니다. 이는 요청된 리소스에 액세스할 수 있는 권한이 부족하기 때문일 수 있습니다. 이 문제로 이어질 수 있는 몇 가지 시나리오는 다음과 같습니다:
-
파일 권한: 서버가 요청된 파일에 액세스할 수 있는 충분한 권한이 없는 경우 403 오류가 발생할 수 있습니다. 가능한 해결 방법으로는 서버가 웹 서버의 인덱스 파일에 액세스하려고 하는지, www-data 사용자가 소유한 워커 프로세스인지, 그리고 인덱스 파일이 올바른 위치에 있는지 확인하는 것입니다 (Nginx의 경우, /usr/share/nginx/html/index.html).
-
.htaccess: 웹 서버는 .htaccess 파일을 사용하여 특정 IP 주소 또는 대역을 필터링하는 등 다양한 보안 기능을 구현합니다. 가능한 해결 방법은 HTTP 요청이 들어오는 IP 주소가 차단되지 않았는지 확인하는 것입니다.
-
파일이 존재하지 않음: 요청이 기본 인덱스 파일이 없고 디렉터리 목록 표시가 활성화되어 있지 않은 위치에 액세스하려고 하면 서버는 403 오류를 반환합니다. 이러한 상황에서 가능한 해결 방법은 디렉터리 목록 표시를 허용하도록 서버 구성을 조정하는 것입니다.

오류 코드 404 (Not Found)는 사용자가 웹 서버에 성공적으로 연결할 수 있었지만 요청된 리소스를 찾을 수 없음을 의미합니다. 이 오류는 여러 상황에서 나타날 수 있습니다. 다음은 몇 가지 가능한 문제 해결 방법입니다:
-
사용자를 서버 리소스로 안내한 링크에 오타가 있는지 확인합니다.
-
사용자가 URL을 잘못 입력했을 수 있습니다. 이 경우인지 확인하고 필요한 경우 수정하십시오.
-
서버에 파일이 존재하는지 확인합니다. 서버에서 이동되었거나 삭제되었습니까?
-
서버가 잘못된 문서 루트 위치로 구성되어 있을 수 있습니다. 이를 확인하고 적절히 수정하십시오.
-
사용자 소유의 웹 서버 워커 프로세스에 요청된 파일을 탐색할 수 있는 권한이 있습니까? 디렉터리에 액세스하려면 읽기 및 실행 권한이 모두 필요합니다.
-
리소스가 심볼릭 링크입니까? 이 경우 서버가 심볼릭 링크를 따르도록 구성되어야 합니다.
-
일반적인 서버 오류

오류 코드 500 (Internal Server Error)은 알 수 없는 이유로 서버가 요청을 처리할 수 없을 때 발생합니다. 일부 상황에서는 더 구체적인 5xx 오류 코드가 적절함에도 불구하고 서버가 500 오류를 보고할 수 있습니다.
500 오류의 가장 흔한 원인 중 하나는 잘못 구성된 서버입니다. 예를 들어, 잘못된 형식의 .htaccess 파일이 있습니다. 또한 시스템에 PHP가 설치되어 있지 않은 상태에서 PHP 코드를 실행하려고 하는 등 누락된 패키지가 있는 경우에도 발생할 수 있습니다.

오류 코드 502 (Bad Gateway)는 서버가 프록시 또는 게이트웨이이며 백엔드 서버(실제 요청 처리를 담당함)로부터 유효한 응답을 받지 못했음을 나타냅니다. 서버가 역방향 프록시(예: 로드 밸런서)인 경우 확인해야 할 몇 가지 사항이 있습니다:
-
백엔드 서버가 정상 상태인지 확인합니다.
-
역방향 프록시가 올바르게 구성되었는지 확인합니다(적절한 백엔드 사양 포함).
-
역방향 프록시와 백엔드 서버 간의 연결이 정상적인지 확인합니다. 서버가 서로 다른 포트를 사용하여 통신할 수 있는 경우, 방화벽에서 해당 포트로의 연결을 허용해야 합니다.
-
웹 앱이 소켓을 사용하도록 구성된 경우, 소켓이 올바른 위치에 적절한 권한을 가지고 존재하는지 확인합니다.

오류 코드 503 (Service Unavailable)은 서버가 과부하 상태이거나 현재 유지보수 중임을 나타냅니다. 이는 어느 시점에는 서버를 사용할 수 있게 될 것임을 의미합니다.
서버가 유지보수 중이 아니라면, 들어오는 요청을 처리하는 데 필요한 하드웨어 리소스(처리 능력, 메모리 등)가 서버에 부족함을 나타냅니다. 이러한 경우 더 많은 사용자를 허용하거나 더 많은 리소스를 할당하도록 서버를 구성해야 합니다.
오류 코드 504 (Gateway Timeout)는 서버가 프록시 또는 게이트웨이 서버이며 허용된 시간 내에 백엔드로부터 응답을 받지 못했음을 나타냅니다. 이 문제로 이어질 수 있는 몇 가지 상황이 있습니다:
-
서버 간의 네트워크 연결 불량.
-
백엔드 서버가 너무 느리게 작동함(성능 문제로 인해).
-
게이트웨이/프록시 서버의 제한 시간이 너무 짧음.
마치며
이 가이드에서는 HTTP 오류 코드, 특히 가장 흔히 발생하는 몇 가지 오류 코드에 대해 설명합니다. 각 코드가 의미하는 바를 설명하고 잠재적인 문제 해결 조치를 제안합니다. 이 지식을 바탕으로 이제 웹 서버나 애플리케이션의 문제를 해결하기 위한 확실한 기반을 갖추게 되었습니다.
이것은 가장 인기 있는 HTTP 상태 코드의 간략한 목록일 뿐입니다. 모든 HTTP 상태 코드의 포괄적인 목록을 보려면 Wikipedia에서 HTTP 상태 코드를 확인해 보세요. 다음 튜토리얼도 확인해 보실 수 있습니다: Nginx HTTP 프록시, 로드 밸런싱, 버퍼링 및 캐싱: 개요.
즐거운 컴퓨팅 되세요!
댓글
아직 댓글이 없습니다. 첫 번째로 작성해 보세요.