HTTP 상태 코드 완전 해설: 200부터 503까지
브라우저가 웹 서버에 무언가를 요청할 때마다, 서버는 HTML, 이미지, JSON을 보내기 전에 세 자리 숫자를 먼저 응답합니다. 이것이 HTTP 상태 코드이며, "페이지가 여기 있습니다", "이동했습니다", "접근이 허용되지 않습니다", "서버 쪽에서 문제가 생겼습니다"와 같이 서버가 무슨 일이 일어났는지를 간결하게 알려주는 방식입니다. 대부분의 경우 모든 것이 정상 작동하면 페이지가 그냥 로드되므로 이 코드를 볼 일이 없습니다. 하지만 사이트가 오작동하는 순간, 상태 코드가 가장 먼저 살펴봐야 할 단서가 됩니다.
이 숫자들은 무작위가 아닙니다. 첫 번째 숫자가 모든 응답을 다섯 가지 범주 중 하나로 분류하므로, 처음 보는 코드라도 앞자리 숫자만 보면 무엇이 잘못되었는지 대략 알 수 있습니다. 다섯 가지 범주를 익히면 거의 모든 응답을 한눈에 파악할 수 있습니다.

다섯 가지 분류
1xx 정보 응답. 서버가 요청을 받아 아직 처리 중입니다. 일상적인 브라우징에서는 드물며 브라우저와 서버 사이에서 조용히 처리됩니다. 100 Continue가 대표적인 예로, 클라이언트에게 나머지 큰 요청 본문을 보내도 된다고 알려줍니다.
2xx 성공. 요청이 성공했습니다. 200 OK는 하루 종일 보고 싶은 코드로, 리소스를 찾아 응답 중임을 의미합니다. 201 Created는 새로운 것을 만드는 폼이나 API 호출 후 나타나며, 204 No Content는 작업은 성공했지만 표시할 내용이 없음을 의미합니다.
3xx 리다이렉트. 요청한 것이 다른 곳에 있어 브라우저가 보통 자동으로 이동합니다. 리다이렉트는 오래된 링크를 유지하며 검색 순위에 중요한 영향을 미칩니다.
4xx 클라이언트 오류. 요청 자체에 문제가 있습니다. 잘못된 URL, 누락된 로그인, 또는 존재하지 않는 리소스가 원인입니다. 서버는 정상이며, 다만 전송받은 요청을 처리할 수 없는 것입니다.
5xx 서버 오류. 요청은 정상이었지만 서버가 처리하는 과정에서 문제가 생겼습니다. 이것은 사이트 인프라의 문제이지 사용자 잘못이 아닙니다.
사람들이 실제로 찾아보는 특정 코드
200 OK는 단순한 성공입니다. 페이지나 데이터가 정상적으로 로드되었습니다.
301 Moved Permanently는 브라우저와 검색 엔진에 페이지가 새로운 영구 주소로 이동했음을 알립니다. SEO 친화적인 리다이렉트로, 이전 URL의 순위 신호를 새 URL로 전달합니다. URL을 영구적으로 변경할 때 사용하세요.
302 Found는 임시 리다이렉트입니다. 원래 URL이 여전히 실제 주소이므로 검색 엔진은 목적지 대신 원래 URL을 색인합니다. 계절 랜딩 페이지로 사용자를 라우팅하는 것처럼 이동이 정말 단기적일 때만 사용하세요.
304 Not Modified는 빠른 브라우징의 조용한 영웅입니다. 브라우저 캐시에 이미 있는 복사본이 최신임을 알려주므로, 서버가 파일을 다시 보내는 것을 건너뜁니다. 데이터가 줄고 페이지가 빨라집니다.
400 Bad Request는 서버가 요청을 이해조차 할 수 없음을 의미합니다. 잘못된 문법이나 유효하지 않은 매개변수가 원인인 경우가 많습니다.
401 Unauthorized는 "당신이 누구인지 모르겠으니 인증해 주세요"라는 의미입니다. 유효한 자격 증명이 없습니다.
403 Forbidden은 다릅니다. 서버가 누구인지 알지만 여전히 거부합니다. 권한이 없으며, 다시 로그인해도 해결되지 않습니다.
404 Not Found는 가장 유명한 코드입니다. 서버는 살아있어 응답했지만, 해당 주소에 아무것도 없습니다. 보통 잘못 입력된 링크이거나 리다이렉트 없이 삭제되거나 이동된 페이지에서 발생합니다.
429 Too Many Requests는 요청 한도가 초과되었다는 의미입니다. 너무 짧은 시간에 너무 많은 요청을 보냈으며, 서버가 속도를 줄여달라고 요청하고 있습니다. API에서 매우 자주 사용됩니다.
500 Internal Server Error는 일반적인 "무언가 고장났음" 응답입니다. 서버가 예상치 못한 상황에 처해 처리를 포기했지만, 무엇이 문제인지는 알려주지 않습니다. 서버 로그를 확인하세요.
502 Bad Gateway는 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒤의 업스트림 서버로부터 유효하지 않은 응답을 받았을 때 나타납니다. 백엔드 앱이 충돌하거나 접근 불가능하다는 신호인 경우가 많습니다.
503 Service Unavailable은 서버가 일시적으로 과부하되었거나 유지 관리 중임을 의미합니다. 500과 달리, 문제가 단기적이며 사이트가 곧 복구될 것임을 암시합니다.

SEO와 디버깅에서 상태 코드의 의미
검색 순위 측면에서 301과 302의 구분이 사람들을 가장 자주 혼란스럽게 합니다. 영구적인 이동에는 항상 301을 사용해야 새 페이지가 이전 페이지의 권위를 상속받습니다. 잘못된 위치에 302를 사용하면 검색 엔진이 목적지 URL이 아닌 원래 URL을 색인하고 신호가 분산될 수 있습니다. 한편 다수의 404 오류는 크롤 예산을 낭비하고 방문자를 좌절시키므로, 깨진 링크를 그대로 두기보다는 리다이렉트하거나 수정하는 것이 좋습니다.
디버깅 측면에서 범주가 어디를 살펴봐야 할지 알려줍니다. 4xx는 요청을 가리키므로 URL, 헤더, 자격 증명을 확인하세요. 5xx는 서버를 가리키므로 애플리케이션 로그, 업스트림 서비스, 그리고 배포가 방금 잘못되지는 않았는지 확인하세요. 502와 503이 연속으로 나타나면 코드 버그보다는 백엔드가 다운되거나 과부하 상태일 가능성이 높습니다. 사이트가 반환하는 정확한 상태를 저희 개발자 도구로 확인할 수 있으며, 5xx가 애플리케이션 오류가 아닌 연결 문제처럼 보인다면 빠른 DNS 조회로 도메인이 여전히 올바른 주소로 확인되는지 확인할 수 있습니다.
자주 묻는 질문
404 오류가 내 웹사이트에 나쁜가요?
몇 개의 404는 정상이며 무해합니다. 인기 있는 페이지가 404를 반환하거나 깨진 내부 링크가 쌓이면 크롤 예산을 낭비하고 방문자를 좌절시킵니다. 이동된 페이지는 리다이렉트하고 깨진 링크는 수정하세요.
301과 302 리다이렉트의 차이는 무엇인가요?
301은 영구적이며 순위 신호를 새 URL로 전달하므로, 페이지가 영구적으로 이동할 때 사용하세요. 302는 임시적이며 원래 URL이 색인된 상태로 유지되므로, 단기적인 이동에만 사용하세요.
401과 403의 차이는 무엇인가요?
401은 인증하지 않았다는 의미로, 로그인하면 해결될 수 있습니다. 403은 서버가 사용자를 인식하지만 권한이 없어 접근을 거부한다는 의미로, 다시 로그인해도 도움이 되지 않습니다.
500 오류란 무엇이며 어떻게 수정하나요?
500 Internal Server Error는 서버가 요청을 처리하는 중에 예상치 못한 오류가 발생했다는 의미입니다. 메시지는 의도적으로 일반적이므로, 수정은 보통 실제 원인을 찾기 위해 서버 로그를 읽는 것에서 시작합니다.
왜 429 상태 코드가 나오나요?
429 Too Many Requests는 요청을 너무 빠르게 보내 요청 한도가 초과되었다는 의미입니다. 속도를 줄이고, 서버가 반환하는 Retry-After 헤더를 준수하며, 스크립트와 API 클라이언트에 백오프를 추가하세요.
503 Service Unavailable은 무슨 의미인가요?
503은 서버가 일시적으로 요청을 처리할 수 없다는 의미로, 보통 과부하나 예정된 유지 관리 때문입니다. 단기적인 문제를 신호하므로 사이트가 곧 자체적으로 복구될 것입니다.
