PUT과 PATCH에 대한 고찰

최근에 팀안에 다른 개발자와

업데이트 API를 설계하면서 PUT을 사용하냐 PATCH를 사용하냐로 논쟁을 벌인적이 있다.


 CRUD라고 함은,

Create -> POST
Retrieve -> GET
Update -> PUT
Delete -> DELETE

위와 같이 각각 메소드에 해당한다.

보통 업데이트는 PUT을 사용해야한다고 배웠고, 사용을 해오고 있었다.


Django Rest Framework를 사용하다보면,

Viewset의 경우,

PUT method의 request가 들어오면 해당하는 serializer의 모든 field가 있어야하고,

PATCH method의 request가 들어오면 해당하는 serializer의 field중 일부분만 있어도 가능하다 (partial=True)

또한, 아래 stack overflow의 링크를 보면
https://stackoverflow.com/questions/28459418/use-of-put-vs-patch-methods-in-rest-api-real-life-scenarios

put은 좀더 replace에 가까운 느낌이고,

patch야 말로 진정한 update에 가까운 느낌으로 설명하고 있다.


REST API의 특성상 

해당 instance에서 업데이트가 일어난다고하면, 들어오는 request마다, 포함되는 body field마다 다른 endpoint와 serializer를 만드는 일은 매우 수고롭고 유지보수에도 상당한 리소스가 드는 일이다.

하나의 endpoint에서 어떤 필드가 들어오더라도 자연스래 update를 하기위해선 put 대신 patch를 사용하는게 훨씬 효과적이라고 생각한다.

물론, 프론트엔드를 설계할때 다양한 화면에서 instance를 수정하는 일은 드물겠지만, 나중에 확장성을 위해서라도 patch를 사용한다면 훨씬 편리한 확장이 가능할 것이다.

No comments:

Post a Comment