[CS] HTTP

박원준·2026년 2월 10일

HTTP(HyperText Transfer Protocol)란?

HTTP는 클라이언트와 서버가 데이터를 주고받기 위한 통신 규약(Protocol) 중 하나이다.
매우 범용적인 형식을 가지고 있어, 현재 전 세계에서 가장 널리 사용되는 웹 통신 규약이다.

여기서 말하는 통신 규약이란

컴퓨터끼리 데이터를 주고받을 때 미리 정해둔 약속
을 의미한다.


통신 규약이 왜 필요할까?

사람 간의 대화를 예로 들어보자.

우리가 한국어로 대화하면 자연스럽게 의사소통이 가능하지만,
갑자기 상대방이 중국어나 프랑스어로 말한다면 이해하기 어렵다.

컴퓨터도 마찬가지다.
서로 정해진 규칙 없이 각자 다른 방식으로 데이터를 주고받는다면
정상적인 통신은 불가능하다.

이러한 문제를 해결하기 위해
웹에서는 HTTP라는 공통 규칙을 기반으로 데이터를 주고받는다.

모든 웹 브라우저는 HTTP를 기본적으로 지원하기 때문에
우리는 매일 HTTP를 사용하고 있다고 볼 수 있다.


우리는 어떻게 HTTP로 데이터를 주고받을까?

HTTP 통신에는 항상 Request(요청)Response(응답) 가 존재한다.

동작 흐름

  1. 브라우저(클라이언트)는 서버에 원하는 자원(URL 등)을 요청(Request)한다.
  2. 서버는 요청을 처리한 뒤 결과를 응답(Response)으로 반환한다.
  3. 브라우저는 전달받은 응답 데이터를 기반으로 화면을 렌더링한다.

이때 주고받는 데이터의 종류에는 제한이 없다.

  • HTML
  • JSON
  • 이미지
  • 파일 등

브라우저에서 HTTP 동작 직접 확인해보기

1️⃣ 개발자 도구 & Network 탭 열기

  • 브라우저에서 아무 웹 페이지나 접속
  • F12 → 개발자 도구 실행
  • Network 탭 클릭 후 새로고침

👉 브라우저가 서버로부터 받아온 모든 HTTP 요청/응답 목록을 확인할 수 있다.


2️⃣ 요청 하나 클릭 후 Headers 탭 확인

Headers 탭에서는 요청(Request)과 응답(Response)의 메타 정보를 확인할 수 있다.

Status Code

  • 200 OK : 요청 성공

HTTP 상태 코드는 요청 처리 결과를 숫자로 표현한다.

분류의미
1xxInformational
2xxSuccessful
3xxRedirection
4xxClient Error
5xxServer Error

3️⃣ Response 탭 확인

Response 탭에서는
서버가 실제로 반환한 데이터(Payload) 를 확인할 수 있다.

이 데이터가 HTML이라면 웹 페이지로 렌더링되고,
JSON이라면 API 응답 데이터로 사용된다.


HTTP의 구성 요소

HTTP 메시지는 크게 다음과 같은 요소로 구성된다.


🔹 Method (요청 방식)

클라이언트가 무엇을 하려는지를 나타낸다.

Method역할
GET리소스 조회
POST데이터 생성
PUT전체 수정
PATCH부분 수정
DELETE삭제

🔹 Header (메타 데이터)

요청과 응답에 대한 부가 정보를 담고 있다.

예시:

  • 요청/응답 데이터 형식 (Content-Type)
  • 인증 정보 (Authorization)
  • 브라우저 정보 (User-Agent)
  • 캐시 관련 정보

🔹 Payload (Body, 실제 데이터)

요청 또는 응답에서 실제로 전달되는 데이터이다.

{
  "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=1
  • size=10

이러한 방식은 조회 조건, 필터, 정렬 기준과 같이
리소스를 조회하기 위한 부가 정보를 전달할 때 주로 사용된다.


GET 요청에서 Payload를 사용하지 않는 이유

HTTP 명세상 GET 요청에 Body를 포함하는 것이 완전히 금지된 것은 아니다.
하지만 실제 웹 환경에서는 다음과 같은 이유로 사용하지 않는다.

  1. 의미적인 이유
    GET은 서버의 상태를 변경하지 않고 단순히 리소스를 조회하기 위한 요청이다.
    이러한 요청에 복잡한 데이터를 Body로 전달하는 것은 HTTP Method의 의도와 맞지 않는다.

  2. 호환성 문제
    많은 서버, 프록시, 브라우저는 GET 요청의 Body를 무시하거나 처리하지 않는다.
    따라서 Body를 사용해도 서버에 정상적으로 전달되지 않을 수 있다.

  3. 캐싱(Cache)과의 관계
    GET 요청은 URL을 기준으로 캐싱된다.
    Body에 데이터가 포함될 경우 캐시 키를 구성하기 어려워 캐싱 전략이 깨질 수 있다.

이러한 이유로 GET 요청은
Query String을 통해 데이터를 전달하는 것이 표준적인 방식이다.


HTTP 정리

HTTP는 웹 통신의 기본 규약이다.

요청(Request)과 응답(Response) 구조로 동작한다.

Method, Header, Payload로 메시지가 구성된다.

Spring과 REST API의 기반이 되는 핵심 개념이다.


마무리

HTTP는 단순한 통신 규칙이 아니라
웹 애플리케이션의 구조와 동작 방식을 결정하는 핵심 개념이다.

Spring에서 Controller, API, JSON 응답을 이해하기 위해서는
HTTP에 대한 이해가 필수적이다.

0개의 댓글