네트워크/HTTP

HTTP 메서드: PATCH

shimdh 2025. 3. 3. 10:36
728x90

PATCH 메서드는 클라이언트와 서버 간의 통신에서 리소스의 일부만을 수정할 때 사용하는 HTTP 메서드입니다.
이는 전체 데이터를 다시 전송하지 않고도 필요한 부분만 업데이트할 수 있어 효율적이며, 특히 대용량 데이터 구조에서 유용하게 활용됩니다.

이번 글에서는 PATCH 메서드의 개념, 주요 특징, 요청 구조 및 실용적인 활용 사례를 심층적으로 살펴보겠습니다.


1. PATCH 메서드란?

PATCH 메서드는 기존 리소스의 일부를 수정하기 위한 HTTP 요청 방식입니다.
일반적으로 RESTful API에서 리소스 전체를 대체하는 PUT 메서드와 달리, 변경하고자 하는 속성만 전송하여 부분 업데이트를 수행합니다.

📌 PATCH 요청의 기본 형식:

PATCH /resource/123 HTTP/1.1
Host: www.example.com
Content-Type: application/json

{
  "field": "new value"
}
  • /resource/123 → 수정할 리소스의 URI.
  • Content-Type: application/json → 요청 본문의 데이터 형식(JSON)을 지정.
  • 요청 본문에는 변경할 필드만 포함됨.

💡 PATCH 메서드의 핵심 개념:

  • 리소스의 전체 데이터를 전송하지 않고 필요한 부분만 수정 가능.
  • 대역폭 절약 및 성능 최적화 효과.
  • 데이터 충돌 관리 필요(여러 클라이언트가 동시에 수정하는 경우).

2. PATCH 메서드의 주요 특징

1️⃣ 부분 업데이트(Partial Update) 가능

📌 PATCH 메서드는 리소스의 특정 속성만 변경할 때 사용.

  • 기존 데이터 구조를 유지하면서 필요한 값만 변경 가능.
  • 대량의 데이터를 매번 업데이트하는 대신, 변경 사항만 반영하여 서버와의 트래픽을 최소화함.

📌 예제 (사용자 이메일 변경 – REST API 활용)

PATCH /users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
  "email": "new_hong@example.com"
}

📌 서버 응답 (수정 완료, 200 OK 또는 204 No Content 반환)

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 123,
  "name": "홍길동",
  "email": "new_hong@example.com",
  "age": 30
}
  • PATCH /users/123 요청을 통해 이메일 주소만 변경됨.
  • 기존 name, age 등의 정보는 변경되지 않고 유지됨.

💡 PUT 메서드와 다르게 기존 데이터를 모두 전송할 필요 없이 수정할 값만 전송하여 네트워크 비용 절감 가능.


2️⃣ 데이터 전송량 절감 (Bandwidth Efficiency)

📌 PATCH는 변경할 데이터만 전송하므로, PUT보다 네트워크 리소스를 절약할 수 있음.

  • 대용량 데이터 구조를 수정할 때 전체 리소스를 재전송하는 PUT 방식보다 효율적.
  • API 성능 최적화 및 응답 속도 향상 효과.

📌 예제 (상품 가격 변경 – 불필요한 데이터 전송 방지)

PATCH /products/456 HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
  "price": 1300
}

📌 서버 응답 (200 OK 또는 204 No Content 반환)

HTTP/1.1 204 No Content
  • 서버는 해당 상품의 가격(price)만 변경하고 나머지 데이터는 유지.
  • PUT을 사용하면 전체 상품 정보를 다시 보내야 하지만, PATCH를 사용하면 필요한 값만 전송 가능.

💡 이 방식은 특히 대량의 데이터를 다루는 경우 유용하며, 모바일 환경에서도 효과적.


3️⃣ 멱등성(Idempotency) 비보장

📌 PATCH는 멱등성을 보장하지 않음 → 동일한 요청을 여러 번 보내도 항상 같은 결과를 보장하지 않을 수 있음.

  • PUT 메서드는 같은 요청을 여러 번 보내도 결과가 동일하지만,
  • PATCH는 요청마다 다른 값으로 변경될 수 있음.

📌 예제 (PATCH 요청이 멱등성을 보장하지 않는 경우)

PATCH /users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
  "age": 31
}
  • 첫 번째 요청을 보내면 나이가 31로 변경됨.
  • 두 번째 요청을 보내면 또다시 31로 변경되지만, 일부 구현에서는 나이가 계속 증가할 수도 있음.

💡 PATCH 요청이 어떻게 처리되는지 서버의 구현 방식에 따라 동작이 다를 수 있음 → 데이터 무결성을 유지하는 로직 필요.


3. PATCH 요청의 실제 활용 예시

1️⃣ 사용자 프로필 일부 수정

PATCH /users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
  "nickname": "길동이"
}

📌 서버 응답 (변경된 닉네임 반환)

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 123,
  "name": "홍길동",
  "nickname": "길동이",
  "email": "hong@example.com"
}
  • 기존 데이터는 유지하면서 nickname 속성만 변경됨.

2️⃣ 주문 상태 업데이트

PATCH /orders/987 HTTP/1.1
Host: api.example.com
Content-Type: application/json

{
  "status": "shipped"
}

📌 서버 응답 (주문 상태 변경 완료)

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 987,
  "status": "shipped",
  "total": 35000
}
  • 기존 주문 데이터를 유지하면서 상태(status) 값만 변경됨.

4. PATCH vs. 다른 HTTP 메서드 비교

메서드 목적 데이터 전송 방식 멱등성 전체 리소스 변경 여부
GET 데이터 조회 ❌ 본문 없음
POST 데이터 생성 ✅ 본문 포함
PUT 리소스 수정 ✅ 전체 데이터 전송
PATCH 부분 수정 ✅ 변경할 데이터만 전송

💡 PATCH는 PUT보다 가벼운 요청이며, 부분 수정에 최적화된 방식.


5. PATCH 요청 시 보안 고려 사항

PATCH 요청은 기존 데이터를 수정하는 작업이므로 보안적으로 신중하게 다뤄야 함.

1️⃣ 인증(Authentication) 및 권한(Authorization) 확인

  • 클라이언트가 특정 리소스를 수정할 권한이 있는지 확인해야 함.
  • OAuth, JWT 토큰 등을 활용한 인증 필요.

📌 예제 (인증 토큰을 포함한 PATCH 요청)

PATCH /users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer someaccesstoken
Content-Type: application/json

{
  "email": "secure_hong@example.com"
}

6. 결론

🔹 PATCH 메서드는 리소스의 일부만 수정할 때 사용하는 HTTP 메서드이며, PUT과 다르게 전체 데이터를 전송할 필요가 없습니다.
🔹 데이터 전송량을 최소화하여 네트워크 성능을 최적화할 수 있으며, 특히 RESTful API에서 부분 업데이트에 효과적입니다.
🔹 하지만 멱등성을 보장하지 않으며, 인증 및 데이터 충돌 관리가 필요합니다. 🚀

PATCH 메서드를 효과적으로 활용하면 더 효율적인 API 설계와 네트워크 자원 절약이 가능합니다!

728x90

'네트워크 > HTTP' 카테고리의 다른 글

HTTP 상태 코드: 2xx (성공 응답)  (0) 2025.03.03
HTTP 상태 코드: 1xx (정보 응답)  (2) 2025.03.03
HTTP 메서드: OPTIONS  (0) 2025.03.03
HTTP 메서드: HEAD  (0) 2025.03.03
HTTP 메서드: DELETE  (0) 2025.03.03