웹 서버 실습을 하다 보면 403, 404, 500 같은 HTTP 응답 코드를 자주 마주치게 된다.
이 글에서는 HTTP가 무엇인지, 요청과 응답은 어떻게 오가는지, 그리고 자주 발생하는 HTTP 응답 코드의 의미를 정리한다.
HTTP(HyperText Transfer Protocol)란?
HTTP는 클라이언트와 서버가 데이터를 주고받기 위해 사용하는 통신 규약(Protocol)이다.
웹 브라우저(클라이언트)가 요청(Request)을 보내면, 웹 서버가 응답(Response)을 반환하는 구조로 동작한다.
HTTP는 다음과 같은 특징을 가진다.
- Stateless(무상태): 이전 요청의 상태를 기억하지 않음
- Request / Response 구조
- 텍스트 기반 프로토콜
HTTP 요청 방식 (Method)
GET
- 데이터를 URL에 포함하여 서버에 요청
- 주로 조회(Read) 목적
- 캐싱 가능, 브라우저 주소창에 노출됨
Get /posts?id=10 HTTP/1.1
POST
- 데이터를 HTTP Body에 포함
- 주로 생성(Create), 로그인, 회원가입 등에 사용
- URL에 데이터가 노출되지 않음
POST /login HTTP/1.1
(Content-Length, Content-Type 등 헤더 포함)
HTTP 요청을 직접 보내보는 실습
브라우저 없이도 HTTP 요청을 직접 보내볼 수 있다.
apt install ncat
# 네이버 서버의 80번 포트(HTTP)에 직접 연결
nc www.naver.com 80
연결 후 아래와 같이 입력한다.
GET / HTTP/1.1
Host: www.naver.com
위 두 줄을 입력한 뒤 엔터를 두 번 누르면 요청이 전송되고, 네이버 서버가 HTML 형태의 HTTP 응답을 반환한다.
이를 통해 HTTP가 단순한 텍스트 기반 통신이라는 것을 직접 확인할 수 있다.
HTTP 응답 코드(Response Status Code)
HTTP 응답 코드는 서버가 요청을 어떻게 처리했는지 상태를 숫자로 표현한 것이다.
첫 번째 숫자에 따라 의미가 구분된다.
1xx: 정보 응답
요청을 받았고 처리 중(일반적으로 잘 사용되지 않음)
2xx: 성공
요청이 정상적으로 처리됨
- 200 OK: 요청 성공
- 201 Created: 리소스 생성 성공
3xx: 리다이렉션
다른 위치로 이동 필요
- 301 Moved Permanently
- 302 Found
4xx / 5xx 오류 코드
4xx: 클라이언트 오류
요청 자체에 문제가 있는 경우
- 403 Forbidden
- 클라이언트가 서버에 접근할 권한이 없을 때
- 예: 인증되지 않은 사용자가 보호된 페이지 접근
- 404 Not Found
- 요청한 URL에 해당하는 리소스가 서버에 존재하지 않을 때
- 예: 잘못된 경로, 파일 삭제
- 400 Bad Request
- 요청 형식 자체가 잘못된
5xx: 서버 오류
요청은 정상이나 서버 내부 처리 중 오류 발생
- 500 Internal Server Error
- 서버 내부 로직 오류, 설정 오류, 코드 예외 발생
- 예: JSP 오류, NullPointerException
- 503 Service Unavailable
- 서버가 요청을 처리할 수 없는 상태
- 예: 최대 세션 수 초과, 서버 과부하, 점검 중
정리
- HTTP는 웹 통신의 기본이 되는 프로토콜
- 클라이언트는 Request, 서버는 Response 구조로 통신
- 응답 코드는 문제의 위치(클라이언트 vs 서버)를 빠르게 판단하는 핵심 단서