실무나 공부를 하다보면 GET, POST, PUT, PATCH 와 같은 용어들을 많이 들어봤을 텐데
모두 의미와 활용방법은 알지만 정확히 짚고 넘어갈 필요를 느꼈다.
HTTP Method
중에 가장 많이 쓰이는 방식일 것이다.
이 둘의 차이점은 크게 '눈'에 보인다와 보이지 않는다의 차이로 알고 있을수도 있지만
활용방법의 차이부터 알맞은 방식까지 눈에 보이는 것과는 조금 더 다르다.
HTML form
을 활용해 서버로 요청이 전송되며 크게 Header
와 Body
로 나눠질 수 있다.Get
방식과 달리 길이제한이 없고 외부적으로 데이터를 볼 수도 없어서 용량이 큰 데이터를 보내거나 보안이 필요할때 사용된다.위 GET
, POST
방식의 가장 큰 차이점은 Idempotent(멱등성)이라고 할 수 있다.
멱등성이란 어떠한 연산을 여러번 수행하더라도 결과값이 달라지지 않는 성질을 의미하는데
GET
은 다른 곳에서 어떠한 수정이 일어나는 예외가 없는 한 몇번을 조회해도 결과는 같지만
POST
는 생성/수정에 적합한 메소드이기 때문에 POST요청이 전달 되었다면
결과가 달라질 수 있기 떄문에 Idempotent하다고 볼 수 없다.
HTTP Method
중에서 둘다 어떠한 리소스를 UPDATE하는 용도로 사용되기 때문에 크게 구분하지 않고 사용하는 사람들이 있다. 하지만 엄연히 다른 메소드이기 때문에 각각의 메소드의 정의, 약속을 지키며 기능구현이 필요하다.
PUT
메소드를 활용해 UPDATE한다고 하면 해당 리소스의 '이름'은 NULL
값이 들어가게된다.PUT
을 활용해 기존 리소스의 일부 수정'하고 싶다면 리소스의 전체 데이터 또한 서버에 넘겨줘야한다.PUT
메소드와는 다르게 어떠한 리소스의 부분수정을 적용시킨다.PUT
의 예시를 PATCH
메소드로 바꾸고 정의대로 구현되어 있다면, 이름에 NULL
값이 들어가지 않는다. 당연히 PATCH
될 데이터중 요청한 주민번호(ID)가 없다면 에러를 발생시켜야 할 것이다.결론부터 말하자면 PUT 메소드는 멱등성을 가지지만 PATCH 메소드는 가질수도, 아닐수도 있다.
PUT은 위에 서술된 대로 생성/대체의 쉽게 '덮어씌우는' 의미를 가지기 때문에 멱등성이 보장된다고 말할 수 있다. 여러번 요청된다 하더라도 데이터가 계속 같은 데이터로 덮어씌워진다고 생각하면 이해가 빠를 것이다.
(ex. 000101-1122334의 '주소' 데이터를 '미국'으로 변경)
하지만 PATCH의 경우 멱등성이 보장되지 않는 이유는 데이터 수정 요청에 따라 다르기 때문이다.
기존의 리소스에서 일부만 수정하기 때문에 연산과 같은 과정이 들어갈 수도 있기 때문이다.
(ex. 000101-1122334의 '나이' 데이터를 +1)
PUT과 PATCH 둘다 같은 HTTP Method 이고 어떻게 활용하는지에 대해서는 개발자의 자유지만, 서버와 클라이언트 사이의 통신간 혼란을 피하기 위해서는 의미와 정의에 맞는 기능구현이 필요할 것이다.