
HTTP는 클라이언트와 서버가 데이터를 주고받기 위한 통신 규약(Protocol) 중 하나이다.
매우 범용적인 형식을 가지고 있어, 현재 전 세계에서 가장 널리 사용되는 웹 통신 규약이다.
여기서 말하는 통신 규약이란
컴퓨터끼리 데이터를 주고받을 때 미리 정해둔 약속
을 의미한다.
사람 간의 대화를 예로 들어보자.
우리가 한국어로 대화하면 자연스럽게 의사소통이 가능하지만,
갑자기 상대방이 중국어나 프랑스어로 말한다면 이해하기 어렵다.
컴퓨터도 마찬가지다.
서로 정해진 규칙 없이 각자 다른 방식으로 데이터를 주고받는다면
정상적인 통신은 불가능하다.
이러한 문제를 해결하기 위해
웹에서는 HTTP라는 공통 규칙을 기반으로 데이터를 주고받는다.
모든 웹 브라우저는 HTTP를 기본적으로 지원하기 때문에
우리는 매일 HTTP를 사용하고 있다고 볼 수 있다.
HTTP 통신에는 항상 Request(요청) 와 Response(응답) 가 존재한다.
이때 주고받는 데이터의 종류에는 제한이 없다.
F12 → 개발자 도구 실행👉 브라우저가 서버로부터 받아온 모든 HTTP 요청/응답 목록을 확인할 수 있다.
Headers 탭에서는 요청(Request)과 응답(Response)의 메타 정보를 확인할 수 있다.
200 OK : 요청 성공HTTP 상태 코드는 요청 처리 결과를 숫자로 표현한다.
| 분류 | 의미 |
|---|---|
| 1xx | Informational |
| 2xx | Successful |
| 3xx | Redirection |
| 4xx | Client Error |
| 5xx | Server Error |
Response 탭에서는
서버가 실제로 반환한 데이터(Payload) 를 확인할 수 있다.
이 데이터가 HTML이라면 웹 페이지로 렌더링되고,
JSON이라면 API 응답 데이터로 사용된다.
HTTP 메시지는 크게 다음과 같은 요소로 구성된다.
클라이언트가 무엇을 하려는지를 나타낸다.
| Method | 역할 |
|---|---|
| GET | 리소스 조회 |
| POST | 데이터 생성 |
| PUT | 전체 수정 |
| PATCH | 부분 수정 |
| DELETE | 삭제 |
요청과 응답에 대한 부가 정보를 담고 있다.
예시:
Content-Type)Authorization)User-Agent)요청 또는 응답에서 실제로 전달되는 데이터이다.
{
"name": "Robbie",
"age": 20
}
<!DOCTYPE html>
<html>
<body>Hello, Spring!</body>
</html>
일반적으로 POST, PUT, PATCH 요청에서 Payload를 사용한다.
그렇다면 GET 요청은 데이터를 어떻게 전달할까?
GET 요청은 Payload(Body)를 사용하지 않고,
URL의 Query String을 통해 데이터를 전달한다.
Query String은 URL 뒤에 ?를 붙여
key=value 형태로 데이터를 표현한다.
예를 들어, 사용자 목록을 페이지 단위로 조회하는 경우 다음과 같은 요청이 된다.
GET /users?page=1&size=10 HTTP/1.1
여기서 전달되는 데이터는 다음과 같다.
page=1size=10이러한 방식은 조회 조건, 필터, 정렬 기준과 같이
리소스를 조회하기 위한 부가 정보를 전달할 때 주로 사용된다.
HTTP 명세상 GET 요청에 Body를 포함하는 것이 완전히 금지된 것은 아니다.
하지만 실제 웹 환경에서는 다음과 같은 이유로 사용하지 않는다.
의미적인 이유
GET은 서버의 상태를 변경하지 않고 단순히 리소스를 조회하기 위한 요청이다.
이러한 요청에 복잡한 데이터를 Body로 전달하는 것은 HTTP Method의 의도와 맞지 않는다.
호환성 문제
많은 서버, 프록시, 브라우저는 GET 요청의 Body를 무시하거나 처리하지 않는다.
따라서 Body를 사용해도 서버에 정상적으로 전달되지 않을 수 있다.
캐싱(Cache)과의 관계
GET 요청은 URL을 기준으로 캐싱된다.
Body에 데이터가 포함될 경우 캐시 키를 구성하기 어려워 캐싱 전략이 깨질 수 있다.
이러한 이유로 GET 요청은
Query String을 통해 데이터를 전달하는 것이 표준적인 방식이다.
HTTP는 웹 통신의 기본 규약이다.
요청(Request)과 응답(Response) 구조로 동작한다.
Method, Header, Payload로 메시지가 구성된다.
Spring과 REST API의 기반이 되는 핵심 개념이다.
HTTP는 단순한 통신 규칙이 아니라
웹 애플리케이션의 구조와 동작 방식을 결정하는 핵심 개념이다.
Spring에서 Controller, API, JSON 응답을 이해하기 위해서는
HTTP에 대한 이해가 필수적이다.