일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- aws
- MySQL
- kotlin spring
- kotlin
- 오블완
- CloudWatch
- APM
- 코틀린 코루틴의 정석
- kotlin coroutine
- minikube
- Spring
- 정보처리기사 실기
- Kubernetes
- Java
- Elasticsearch
- kotlin querydsl
- Linux
- PETERICA
- 정보처리기사 실기 기출문제
- mysql 튜닝
- 기록으로 실력을 쌓자
- Pinpoint
- CKA
- AWS EKS
- 정보처리기사실기 기출문제
- CKA 기출문제
- 티스토리챌린지
- AI
- 공부
- IntelliJ
- Today
- Total
피터의 개발이야기
REST API에서 PATCH와 PUT의 차이점 본문
ㅁ 들어가며
ㅇ SOAP과 REST 비교에 대한 글을 작성하였다.
ㅇ Restful는 웹 서비스와 모바일 애플리케이션 경량화의 필요에 맞춘 아키텍처 원칙 세트이다.
ㅇ 기존에 업데이트를 위한 PUT 메서드만 알고 있었는데, 더욱 경량화된 PATCH메서드를 알게 되었다.
ㅇ PATCH와 PUT의 차이점을 알아보고 멱등성의 보장 여부에 대해서 정리하였다.
ㅁ REST API에서 PATCH와 PUT의 차이점
ㅇ REST API에서 자원을 업데이트할 때 사용하는 두 가지 일반적인 HTTP 메서드는 PATCH와 PUT가 있다.
ㅇ 두 메서드 모두 기존 자원을 변경하는 데 사용되지만, 변경 범위와 방식에 있어 중요한 차이점을 가지고 있다.
ㅁ PUT 변경 범위
ㅇ PUT 메서드는 전체 자원을 수정한다.
ㅇ 요청 시 전달된 모든 데이터가 기존 데이터를 덮어쓴다.
ㅇ PUT 요청을 보낼 때는 반드시 변경하려는 모든 데이터를 포함해야 한다.
ㅁ PATCH 변경 범위
ㅇ PATCH 메서드는 부분적인 자원을 업데이트한다.
ㅇ 요청 본문에 포함된 일부 필드만 변경하고 나머지 필드는 기존 값을 유지한다.
ㅇ PATCH 요청을 보낼 때는 변경하려는 필드만 명시하면 된다.
ㅇ 불필요한 데이터의 전송 시 발생하는 오버헤드를 감소시키는 장점이 있다.
ㅁ 변경 방식, 멱등성(idempotence)의 차이
ㅇ PUT 메서드는 멱등성(idempotence)을 보장한다.
ㄴ 즉, 동일한 PUT 요청을 여러 번 전송해도 자원의 상태는 한 번만 변경된다.
ㅇ PATCH 메서드는 일반적으로 멱등성을 보장하지 않는다.
ㄴ 즉, 동일한 PATCH 요청을 여러 번 전송하면 자원의 상태가 여러 번 변경될 수 있다.
ㄴ 단, 요청 본문에 적절한 조건을 명시하면 멱등성을 보장하도록 구현할 수도 있다.
ㅁ 사용 방식
ㅇ PUT과 PATCH의 멱등성(idempotence)의 차이로 인해 사용 방식에도 차이가 있다.
- PUT: 다음과 같은 경우 PUT 메서드를 사용하는 것이 좋다.
- 자원을 새로운 상태로 완전히 변경해야 하는 경우
- 자원의 모든 데이터를 정확하게 파악하고 있는 경우
- 멱등성이 중요한 경우
- PATCH: 다음과 같은 경우 PATCH 메서드를 사용하는 것이 좋다.
- 자원의 일부 필드만 변경해야 하는 경우
- 자원의 모든 데이터를 파악하지 못하거나 파악하기 어려운 경우
- 멱등성이 중요하지 않거나 명확하게 정의되지 않은 경우
ㅁ 예시
- 사용자 정보 업데이트:
- PUT 요청: 사용자의 모든 정보 (이름, 이메일, 주소 등)를 변경하려는 경우 PUT 요청을 사용한다.
- 요청 본문에는 변경하려는 모든 정보를 포함된다.
{ "name": "홍길동 개선", "email": "hong@example.com", "address": "서울특별시 강남구" }
- PATCH 요청: 사용자의 이름과 이메일만 변경하려는 경우 PATCH 요청을 사용한다.
- 요청 본문에는 변경하려는 필드만 포함하면 된다.
{ "name": "홍길동 개선", "email": "hong@example.com" }
- 상품 정보 업데이트:
- PUT 요청: 상품의 가격, 재고, 설명 등 모든 정보를 변경하려는 경우 PUT 요청을 사용한다.
- 요청 본문에는 변경하려는 모든 정보를 포함해야 한다.
- PATCH 요청: 상품의 가격만 변경하려는 경우 PATCH 요청을 사용한다.
- 요청 본문에는 변경하려는 필드만 포함하면 된다.
- PUT 요청: 상품의 가격, 재고, 설명 등 모든 정보를 변경하려는 경우 PUT 요청을 사용한다.
ㅁ 마무리
PATCH와 PUT은 모두 REST API에서 자원을 업데이트하는 데 사용되는 유용한 메서드이지만, 변경 범위, 방식, 사용 시나리오에 따라 적절한 메서드를 선택해야 한다.
- 전체 자원을 대체하고 멱등성이 중요한 경우 PUT 메서드를 사용한다.
- 부분적인 자원 업데이트 또는 멱등성이 중요하지 않은 경우 PATCH 메서드를 사용한다.
- 일부 API는 자체적인 규칙을 정의하여 PATCH와 PUT의 사용 방식을 명시적으로 제한할 수 있다.
- 개발 팀 내에서 일관된 방식으로 PATCH와 PUT을 사용하도록 약속하여 불필요한 데이터의 전송 오버헤드를 줄일 수 있다.
요약표
HTTP 메소드 | 요청 Body | 응답 Body | 안전 | 멱등성 | 캐시 가능 |
GET | 선택 사항 | 예 | 예 | 예 | 예 |
HEAD | 선택 사항 | 아니요 | 예 | 예 | 예 |
POST | 예 | 예 | 아니요 | 아니요 | 예 |
PUT | 예 | 예 | 아니요 | 예 | 아니요 |
DELETE | 선택 사항 | 예 | 아니요 | 예 | 아니요 |
CONNECT | 선택 사항 | 예 | 아니요 | 아니요 | 아니요 |
OPTIONS | 선택 사항 | 예 | 예 | 예 | 아니요 |
TRACE | 아니요 | 예 | 예 | 예 | 아니요 |
PATCH | 예 | 예 | 아니요 | 아니요 | 아아니요니요 |
ㅇ wikipedia HTTP에 수록된 메서드별 메소드에 대한 도표이다.
ㅇ PATCH 뿐만 아니라 다른 선택적 메소드가 존재한다.
'Programming > Spring' 카테고리의 다른 글
[Spring] 패치조인(fetchJoin)이란? (0) | 2024.06.23 |
---|---|
[Spring] Ktlint란, 코딩 컨벤션 (0) | 2024.06.22 |
[Spring] JDBC와 MyBatis와 JPA 비교, 시대적 흐름에서 장단점 분석 (2) | 2024.06.11 |
[Spring]Testcontainers란 무엇입니까? (2) | 2024.01.23 |
[Spring] Hateoas(헤이티오스)란 (0) | 2023.08.08 |