[Spring] HTTP (1)

이연우·2025년 7월 21일

TIL

목록 보기
12/100

🌐 HTTP(HyperText Transfer Protocol)란?

  • 클라이언트와 서버가 HTML, 이미지, JSON, 파일 등을 주고받을 수 있게 해주는 애플리케이션 계층 프로토콜
    • 클라이언트-서버 구조
    • 무상태(Stateless)
    • 비연결(Connectionless)
    • 텍스트 기반의 요청-응답 모델
    • 기본 버전: HTTP/1.1 (→ HTTP/2, HTTP/3로 발전 중)

🔁 HTTP 동작 순서

  1. 클라이언트가 서버에 Request 전송
  2. 서버가 처리 후, Response 반환
  3. 이 과정은 TCP 기반(HTTP/1.1)에서 이루어짐

⚙️ HTTP의 구조적 특징
1. 클라이언트와 서버 구조

  • 클라이언트는 UI(User Interface)에 중점을 두도록
  • 서버는 데이터, 비지니스 로직을 담당하도록 제작

2. 무상태(Stateless)

  • 서버는 이전 요청의 상태를 저장하지 않음
  • 수평 확장(Scale-Out)에 유리
  • 로그인 등 상태 유지 필요 시 쿠키, 세션, 토큰 등 별도 메커니즘 사용

3. 비연결(Connectionless)

  • 요청/응답 후 연결 종료
  • 자원을 아끼지만 매 요청마다 재연결 필요
    → 해결책: Persistent Connection (지속 연결)
    → 여러 요청을 한 연결로 처리 ⇢ 속도 개선

📨 HTTP 메시지 구조

✅ HTTP 요청 메시지 (Request Message)

Start Line
Headers
Empty Line
Body

Start Line

  • Method (GET, POST, PUT, DELETE 등)
  • Request Target (경로 /api/posts)
  • HTTP Version (HTTP/1.1)

Header

  • 요청 정보 (브라우저, 인증, 콘텐츠 타입 등)

Body

  • POST, PUT 등에서 JSON, HTML 등 데이터 포함 가능

✅ HTTP 응답 메세지(Response Message)

Start Line
Headers
Empty Line
Body

Start Line

  • HTTP Version
  • Status Code (200, 404, 500 등)
  • Status Text

Header

  • 응답 관련 정보 (Content-Type, Length 등)

Body

  • 실제 응답 데이터 (HTML, JSON 등)

🔧 주요 HTTP 메서드 (Method)

- GET : 리소스 조회

1. Query String 미포함하는 경우

→ GET의 경우 Message Body가 지원되지 않는 경우가 많아 권장하지 않음

2. Query String 포함하는 경우

→ 서버에 추가적인 데이터 전송을 해야 한다면, Message Body가 아닌 Query String(Query Parameter)를 사용함

- PUT : 리소스 덮어쓰기: 리소스 덮어쓰기

  • POST와 다르게 클라이언트 측에서 리소스를 식별하여 URI를 지정함

1. 기존 리소스가 존재하는 경우

→ 리소스 전체 수정

2. 기존 리소스가 존재하고 일부만 변경하는 경우 ★

→ 기존 리소스가 존재하면 완전히 덮어쓰기가 됨

3. 기존 리소스가 없는 경우

→ 리소스가 없으면 생성됨

- PATCH : 리소스 부분 수정

- DELETE : 리소스 삭제

Method용도특징
GET리소스 조회Body 없음, Query String 사용
POST리소스 생성Body에 데이터 포함 (Form, JSON 등)
PUT리소스 전체 수정/생성자원 URI를 클라이언트가 지정
PATCH리소스 부분 수정필요한 필드만 수정
DELETE리소스 삭제요청 Body 거의 사용 안 함

> 기타 메서드

  • HEAD: GET과 동일하지만 Body 제외
  • OPTIONS: 지원하는 메서드 목록 제공
  • CONNECT, TRACE: 거의 사용하지 않음

0개의 댓글