[Mongoose REST API] PUT, PATCH : 업데이트 & {overwrite: true}란?

2020. 5. 15. 16:26컴퓨터언어/Database

728x90
반응형
  PUT PATCH
용도 선택된 항목(URL)에 해당하는 {} 객체를 통째로 업데이트하기 선택된 항목(URL)에 해당하는 {} 객체 내 특정 필드를 업데이트하기
방법
모델이름.update(
  {조건필드이름:그값},
  {overwrite:true},
  에러처리콜백함수
)
모델이름.update(
  {조건필드이름:그값},
  {$set: {바꿀필드이름:바꾼후값}, ... },
  에러처리콜백함수
)
주의

PUT에서는 overwrite 인자를 사용해야 한다.

PATCH에서는 set 인자를 사용해야 한다.

PATCH는 원래 존재목적 자체가 원하는 특정 필드만을 골라서 업데이트하기 때문에, {$set: {}} 인자가 필요한 것이 이해가 된다.

그런데 PUT에서 {overwrite: true} 인자는 왜 필요할까?

 

이 인자가 없는 상태에서 클라이언트가 PUT 요청을 한다고 가정해보자.

이때 클라이언트가 업데이트 하면서 실수 또는 고의로 원래 존재했던 필드들을 개수 맞춰 그대로 입력하지 않게 된다면,

입력하지 않은 필드들은 null 값을 가지게 된다.

 

 

하지만 Mongoose가 제공하는 {overwrite: true} 인자를 사용하게 되면,

클라이언트가 null을 원할리가 없다고 여겨, 해당 필드를 null로 저장해주는 대신에 그 필드 자체를 지워준다.

이는 참 좋은 시스템이지만, 레코드 간 통일성이 없게 되고 안정적이지 못하다고 볼 수 있다.

 

그래서 PATCH를 사용하는 것이 자료관리에 더 유연하고 안정적이라고 볼 수 있다.

728x90
반응형