HTTP 상태 코드 완벽 정리 — 200, 301, 404, 500의 의미와 해결법
HTTP 상태 코드란?
웹 브라우저에서 사이트를 열거나 API를 호출할 때, 서버는 요청 결과를 숫자 코드로 알려줍니다. 이것이 **HTTP 상태 코드(HTTP Status Code)**입니다. 3자리 숫자로 이루어진 이 코드는 요청이 성공했는지, 실패했는지, 다른 곳으로 이동해야 하는지를 나타냅니다.
상태 코드는 첫 번째 자리에 따라 5개의 범주로 나뉩니다.
| 범주 | 의미 |
|---|---|
| 1xx | 정보 — 요청을 받아 처리 중 |
| 2xx | 성공 — 요청이 정상적으로 완료됨 |
| 3xx | 리다이렉션 — 요청 완료를 위해 추가 조치 필요 |
| 4xx | 클라이언트 오류 — 요청 자체에 문제 있음 |
| 5xx | 서버 오류 — 서버 측에서 문제 발생 |
2xx — 성공 코드
200 OK
가장 기본적인 성공 응답입니다. 요청이 정상적으로 처리되었고, 서버가 요청한 데이터를 반환합니다. 웹 페이지가 정상적으로 열리거나, API 호출이 성공했을 때 받는 코드입니다.
201 Created
POST 요청으로 새 리소스가 성공적으로 생성되었을 때 반환됩니다. 회원가입, 새 글 작성, 새 주문 생성 등의 상황에서 볼 수 있습니다.
204 No Content
요청은 성공했지만 반환할 데이터가 없을 때 사용됩니다. DELETE 요청으로 항목을 삭제한 후 또는 수정 완료 후 별도의 응답 데이터가 필요 없을 때 흔히 사용합니다.
3xx — 리다이렉션 코드
301 Moved Permanently (영구 이동)
요청한 리소스가 영구적으로 새 URL로 이동했음을 알립니다. 브라우저는 이후 같은 URL에 접근할 때 자동으로 새 주소로 이동합니다. SEO에서 매우 중요한 코드입니다.
실전 상황: 도메인을 변경하거나 (example.com → www.example.com), 페이지 URL 구조를 바꿀 때 301 리다이렉트를 설정합니다. 검색 엔진은 301을 통해 기존 페이지의 SEO 점수를 새 URL로 이전합니다.
302 Found (임시 이동)
리소스가 임시로 다른 URL에 있다는 의미입니다. 301과 달리 영구적이지 않으므로 검색 엔진은 원래 URL을 계속 인덱싱합니다.
실전 상황: 로그인하지 않은 사용자를 로그인 페이지로 보낼 때, 또는 A/B 테스트를 위해 일부 사용자를 다른 페이지로 보낼 때 사용합니다.
304 Not Modified
브라우저가 캐시에 저장된 페이지가 아직 유효한지 서버에 확인했고, 서버가 “변경 사항 없음”이라고 응답할 때 사용됩니다. 브라우저는 캐시에서 콘텐츠를 불러오므로 로딩 속도가 빨라집니다.
4xx — 클라이언트 오류 코드
400 Bad Request (잘못된 요청)
서버가 요청을 이해하지 못했습니다. 주로 잘못된 형식의 데이터를 보냈을 때 발생합니다.
해결 방법: API를 사용한다면 요청 본문(body)의 형식, 필수 파라미터 누락, JSON 문법 오류 등을 확인하세요.
401 Unauthorized (인증 필요)
인증 정보가 없거나 잘못되었습니다. 로그인이 필요한 페이지에 비로그인 상태로 접근하거나, 만료된 토큰으로 API를 호출할 때 발생합니다.
해결 방법: 다시 로그인하거나, API 키 또는 액세스 토큰을 갱신하세요.
403 Forbidden (접근 금지)
인증은 되었지만 해당 리소스에 접근할 권한이 없습니다. 401과 혼동하기 쉽지만, 401은 “누구세요?”이고 403은 “당신은 여기 들어올 수 없어요”입니다.
해결 방법: 관리자에게 권한을 요청하거나, 서버의 파일 권한(chmod) 설정을 확인하세요.
404 Not Found (찾을 수 없음)
가장 유명한 HTTP 오류 코드입니다. 요청한 리소스가 서버에 존재하지 않습니다. URL을 잘못 입력했거나, 페이지가 삭제된 경우 발생합니다.
해결 방법:
- URL 철자를 다시 확인하세요.
- 사이트 내 검색 기능이나 사이트맵을 이용해 찾으려는 콘텐츠를 검색하세요.
- 웹마스터라면 삭제된 페이지에 301 리다이렉트를 설정하거나 사용자 친화적인 404 페이지를 만드세요.
405 Method Not Allowed (허용되지 않는 메서드)
요청한 HTTP 메서드(GET, POST, PUT, DELETE 등)가 해당 URL에서 허용되지 않습니다.
해결 방법: API 문서를 확인해 올바른 메서드를 사용하세요.
429 Too Many Requests (요청 횟수 초과)
API의 속도 제한(rate limit)을 초과했을 때 발생합니다. 너무 짧은 시간에 너무 많은 요청을 보낸 경우입니다.
해결 방법: 잠시 기다린 후 다시 시도하거나, 요청 간격에 지연(delay)을 추가하세요. 상업용 API라면 플랜 업그레이드를 고려하세요.
5xx — 서버 오류 코드
500 Internal Server Error (서버 내부 오류)
서버에서 알 수 없는 오류가 발생했습니다. 원인을 특정할 수 없을 때 사용하는 일반적인 서버 오류 코드입니다.
해결 방법 (사용자): 잠시 후 다시 시도하세요. 문제가 지속된다면 사이트 관리자에게 신고하세요.
해결 방법 (개발자): 서버 로그를 확인해 오류 메시지를 찾고, PHP/Python/Node 오류, 데이터베이스 연결 실패, 코드 버그 등을 점검하세요.
502 Bad Gateway (잘못된 게이트웨이)
프록시 서버나 게이트웨이가 업스트림 서버로부터 유효하지 않은 응답을 받았습니다. 로드 밸런서나 Nginx/Apache가 백엔드 서버와 통신하지 못할 때 발생합니다.
해결 방법: 잠시 후 재시도하거나, 서버 상태 페이지를 확인하세요.
503 Service Unavailable (서비스 이용 불가)
서버가 현재 요청을 처리할 수 없는 상태입니다. 주로 서버 과부하나 점검 중일 때 발생합니다.
해결 방법: 잠시 기다린 후 재시도하세요. 정기 점검 일정이 있다면 해당 시간을 피하세요.
504 Gateway Timeout (게이트웨이 시간 초과)
게이트웨이 서버가 업스트림 서버로부터 제한 시간 내에 응답을 받지 못했습니다.
해결 방법: 네트워크 연결을 확인하고 재시도하세요. 개발자라면 서버 응답 시간을 최적화하거나 타임아웃 설정을 조정하세요.
상태 코드 암기 꿀팁
상태 코드가 너무 많아 헷갈린다면, 이렇게 기억하세요.
- 2로 시작 → 성공 (2 = “이이, 잘됐다!”)
- 3로 시작 → 다른 곳으로 가 (리다이렉트)
- 4로 시작 → 네 잘못 (클라이언트 오류)
- 5로 시작 → 내 잘못 (서버 오류)
마무리
HTTP 상태 코드는 웹 개발자뿐만 아니라 일반 사용자에게도 알아두면 유용한 지식입니다. 404를 보면 URL을 다시 확인하고, 503을 보면 잠시 기다리면 된다는 것을 알면 당황하지 않을 수 있습니다.
더 많은 상태 코드와 각 코드의 상세 설명이 필요하다면, HTTP 상태 코드 레퍼런스를 확인해보세요.