Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- web server
- CS
- 자바
- ORM
- Container
- 웹 서버
- JPA
- mysql
- 데이터베이스
- computer science
- vm
- 스프링 시큐리티
- CI/CD
- 도커
- 스프링
- Spring Security
- spring boot
- spring cloud
- 가상화
- Java
- 컨테이너
- 백엔드
- Spring
- spring batch
- virtualization
- 배포
- 스프링 부트
- HTTP
- 영속성 컨텍스트
- 스프링 배치
Archives
- Today
- Total
개발 일기
[HTTP] HTTP METHOD PUT과 PATCH 차이 본문
RESTful한 API 설계를 위해 무작정 POST가 아니라 PUT과 PATCH를 통해 Update를 구현해야되겠다는 생각이들었다.
그런데 막상 사용하려다 보니까 CRUD 중 Update를 처리하기 위해 PUT, PATCH 이렇게 두가지가 있는데 어떤 경우에 쓰는건지 명확하게 와닿지가 않아서 정리하게 됐다.
PUT Request
리소스의 모든 정보를 업데이트한다.
다음과 같은 리소스가 있었다고 하자.
{
"id": 123,
"name": "Jane Doe",
"email": "jane.doe@example.com",
"address": "456 Oak St, Othertown, USA"
}
위 내용을 담아 PUT 요청을 보내야만 아래와 같이 수정된다.
그러나
{
"address": "456 Oak St, Othertown, USA"
}
이렇게 보내게 되면?
이런식으로 요청에 포함되지 않은 필드들은 빈 값 또는 기본값으로 대체될 수 있다.
PATCH Request
PATCH 요청은 리소스의 일부를 업데이트한다.
똑같이 이러한 리소스가 있다고 하자
{
"email": "new.email@example.com",
"address": "789 Pine St, Newcity, USA"
}
이런식으로 PATCH Request를 보내면 제공한 필드의 값만 쏙 바뀌게 되고
위와 같이 의도한대로 수정되게 된다.
만약 PUT 요청을 보냈다면 email, address 필드를 제외한 id, name은 기본값 또는 null 값이 됐을 것이다.
그래서 뭔 차이인데?
PUT은 리소스를 전체적으로 대체해야지만 PATCH는 리소스의 일부를 수정할때 사용된다.
사실 리소스를 전체적으로 대체하는 경우도 그렇고 리소스를 일부 수정해야하는 경우 모두 각각 PUT, PATCH 둘다 써서 구현은 가능하다.
그러나 어떠한 실무자의 글을 봤더니 PATCH로만 처리하는 경우와 더 세세하게 PUT과 PATCH로 나누는 경우 이렇게 두가지가 있다고 한다. Member Entity에 원래는 nickname만 있었고 PUT로 처리하다가 요구사항의 변경으로 age도 추가됐다고 생각해보자. 후자의 경우에서 기존 PUT 요청의 경우 nickname만 처리했지만 그대로 사용하게 되면 age도 추가해야하는 상황이다. 그러한 경우에 그 API는 모든 필드를 수정하고 있찌 않고 nickname만 수정하게 되니까 age는 빈값이 된다. 그래서 API의 Method를 변경해야하는데 버전 관리가 세밀한 경우와 꽤 높은 비율의 사용자가 신규 앱 버전으로 업데이트 하지 않는 이상 호환성 문제로 인해서 기존 API코드를 제거할 수도 없기 때문에 유지 비용이 증가하게 된다.
그래서 나는 PATCH를 최대한 활용하고자 한다.
그러나 실제로는 정답은 없고 같이 작업하는 사람들과의 Convention으로 정하는 것이라고 한다.
'Computer Science > Computer Network' 카테고리의 다른 글
[Computer Network] NAT & CIDR (0) | 2024.07.07 |
---|---|
[Computer Network] 서브넷, 서브넷 마스크, 서브네팅 (0) | 2024.06.28 |
[Computer Network] Public IP와 Private IP (0) | 2024.06.25 |
[Computer Network] IPv4와 IPv6 (0) | 2024.06.25 |
[HTTP] REST API란? (0) | 2024.05.30 |