CS

[HTTP - 1 ] HTTP란? : PUT과 PATCH의 역할과 차이점

옥돔이와 연근이 2025. 2. 20. 13:56
반응형
↘️ 관련 글 보기

[HTTP - 2 ] URL 입력에서 웹 페이지 출력까지: HTTP 요청과 응답 과정 이해하기

[HTTP - 3 ] HTTP의 특징:쿠키(Cookie)와 세션(Session)의 차이점



 


 

 

HTTP

📍 HTTP란?

HTTP(HyperText Transfer Protocol)는 웹 상에서 정보를 전송하기 위한 통신 프로토콜로, HTML 같은 문서를 전송하는 데 사용된다. HTTP는 클라이언트가 요청(request)을 서버에 보내면, 서버는 응답(response)을 클라이언트에게 전달하는 구조이다.


▹  HTTP 메시지 구조

  1. Request Message:
    • Start Line: 요청의 시작을 알리고 메소드, URL, HTTP 버전 정보를 포함.
    • Header: 요청과 관련된 추가 정보(예: User-Agent, Host 등)를 전달.
    • Body: 요청과 함께 전송되는 데이터(선택적).
  2. Response Message:
    • Status Line: 응답의 상태를 나타내는 정보(예: 200 OK, 404 Not Found 등)를 포함.
    • Header: 응답과 관련된 부가 정보를 전달.
    • Body: 응답 데이터(예: HTML, JSON 등).

 HTTP 특징

  1. Connectionless:
    • 클라이언트와 서버가 요청과 응답이 끝난 후 연결을 끊는 방식.
    • 동시 접속 수를 줄여 많은 요청을 처리 가능.
  2. Stateless:
    • 서버가 클라이언트의 이전 상태를 기억하지 않음.
    • 로그인 상태 등 클라이언트 정보를 유지하기 위해 Cookie, Session, JWT 등이 사용됨.

 HTTPS란?

HTTP에 암호화를 추가한 프로토콜로, SSL/TLS를 통해 데이터를 안전하게 전송한다.


📍 HTTP Request Method

HTTP에서 클라이언트가 서버와 통신하는 방식은 여러 메소드를 통해 이루어진다. 주요 메소드는 다음과 같다.

1. GET

  • 리소스를 요청하는 메소드.
  • 데이터가 URL의 Query String 형태로 포함되어 전송됨.
  • 특징:
    • 브라우저 히스토리에 남음.
    • 캐시가 가능.
    • 민감한 정보 전송에는 적합하지 않음.

2. POST

  • 데이터를 서버에 전달하고 처리 요청을 하는 메소드.
  • 데이터가 HTTP Body에 포함되어 전송됨.
  • 특징:
    • 브라우저 히스토리에 남지 않음.
    • 캐시 불가능.
    • 보안에 유리.

3. PUT

  • 리소스를 대체하거나 리소스가 없으면 새로 생성하는 메소드.

4. PATCH

  • 리소스의 일부만 수정하는 메소드.

💡 GET vs POST

구분 GET POST
역할 리소스 요청 데이터 처리 요청
데이터 전송 URL의 Query String HTTP Body
보안 낮음 (URL에 데이터 노출) 높음 (Body에 데이터 포함)
캐시 가능 불가능
히스토리 브라우저 히스토리에 기록됨 기록되지 않음

 


💡 PUT vs PATCH

구분 PUT PATCH
역할 리소스 전체를 대체 리소스의 일부를 수정
특징 리소스가 없으면 새로 생성 기존 리소스가 반드시 존재해야 함

 


💡예시 코드

► PUT의 경우, name(Noname -> Nossi)을 변경하면 리소스를 새로 생성

// Server resource
// Before 

user/10
{
	name: Noname,
	language: C++
}

// Request
PUT user/10 
{
	name: Nossi,
}

// After
user/10 
{
	name: Nossi,
}

 

► PATCH의 경우, name(Noname -> Nossi)을 변경하면 기존 리소스에서 이름만 변경 

//Server resource
//Before

user/10
{
	name: Noname,
	language: C++
}

// Request
PATCH user/10 
{
	name: Nossi
}

// After
PATCH user/10 
{
	name: Nossi,
	language: C++
}

 

 

 

 

반응형