GET vs POST, PUT vs PATCH 각각의 차이 간단하게 알아보기

rvlwldev·2023년 2월 1일
0

CS

목록 보기
2/12

실무나 공부를 하다보면 GET, POST, PUT, PATCH 와 같은 용어들을 많이 들어봤을 텐데
모두 의미와 활용방법은 알지만 정확히 짚고 넘어갈 필요를 느꼈다.

1. GET vs POST

HTTP Method 중에 가장 많이 쓰이는 방식일 것이다.
이 둘의 차이점은 크게 '눈'에 보인다와 보이지 않는다의 차이로 알고 있을수도 있지만
활용방법의 차이부터 알맞은 방식까지 눈에 보이는 것과는 조금 더 다르다.

1-1. GET

  • 보통 클라이언트에서 서버의 어떠한 리소스의 정보를 요청하기 위해 사용되며
    URL의 Query String으로 파라미터를 활용해 요청하게 된다.
  • 보통 정보를 조회하기 위해 사용되기 때문에 캐시가 가능하다.
  • 브라우저마다 길이제한이 있으며 요청정보가 URL에서 모두 노출되기 때문에
    중요한 정보는 다루지 않는다.

1-2. POST

  • 보통 클라이언트에서 서버의 리소스를 생성하거나 수정하기 위해 사용되는 메소드
  • 보통 HTML form을 활용해 서버로 요청이 전송되며 크게 HeaderBody로 나눠질 수 있다.
    Body에 데이터를 담고, 타입은 Header의 Content-Type에 의해서 결정된다.
  • Get방식과 달리 길이제한이 없고 외부적으로 데이터를 볼 수도 없어서 용량이 큰 데이터를 보내거나 보안이 필요할때 사용된다.
    (물론 따로 암호화를 하지 않는다면 확인할 수 있다.)

1-3. Idempotent (멱등성)

GET, POST 방식의 가장 큰 차이점은 Idempotent(멱등성)이라고 할 수 있다.

멱등성이란 어떠한 연산을 여러번 수행하더라도 결과값이 달라지지 않는 성질을 의미하는데
GET은 다른 곳에서 어떠한 수정이 일어나는 예외가 없는 한 몇번을 조회해도 결과는 같지만
POST는 생성/수정에 적합한 메소드이기 때문에 POST요청이 전달 되었다면
결과가 달라질 수 있기 떄문에 Idempotent하다고 볼 수 없다.

2. PUT vs PATCH

HTTP Method 중에서 둘다 어떠한 리소스를 UPDATE하는 용도로 사용되기 때문에 크게 구분하지 않고 사용하는 사람들이 있다. 하지만 엄연히 다른 메소드이기 때문에 각각의 메소드의 정의, 약속을 지키며 기능구현이 필요하다.

2-1. PUT

  • 이 문서에 따르면 새로운 리소스를 생성하거나 타겟이 되는 리소스를 대체(Replace)한다고 설명하고 있다.
    즉, 이미 존재하는 리소스의 일부를 수정하는 것이 아닌 리소스 전체를 생성/수정한다고 할 수 있다.
  • 예시로 주민번호-이름-주소로 이루어진 엔티티가 있다고 가정해볼때
    000101-1122334의 고유한 주민번호를 가진 리소스의 '주소'를 PUT메소드를 활용해 UPDATE한다고 하면 해당 리소스의 '이름'은 NULL값이 들어가게된다.
  • 따라서 'PUT을 활용해 기존 리소스의 일부 수정'하고 싶다면 리소스의 전체 데이터 또한 서버에 넘겨줘야한다.

2-2. PATCH

  • 리소스 전체의 정보를 UPDATE하는 PUT메소드와는 다르게 어떠한 리소스의 부분수정을 적용시킨다.
  • PUT의 예시를 PATCH 메소드로 바꾸고 정의대로 구현되어 있다면, 이름에 NULL값이 들어가지 않는다. 당연히 PATCH될 데이터중 요청한 주민번호(ID)가 없다면 에러를 발생시켜야 할 것이다.

2-3. Idempotent (멱등성)

결론부터 말하자면 PUT 메소드는 멱등성을 가지지만 PATCH 메소드는 가질수도, 아닐수도 있다.

PUT은 위에 서술된 대로 생성/대체의 쉽게 '덮어씌우는' 의미를 가지기 때문에 멱등성이 보장된다고 말할 수 있다. 여러번 요청된다 하더라도 데이터가 계속 같은 데이터로 덮어씌워진다고 생각하면 이해가 빠를 것이다.
(ex. 000101-1122334의 '주소' 데이터를 '미국'으로 변경)

하지만 PATCH의 경우 멱등성이 보장되지 않는 이유는 데이터 수정 요청에 따라 다르기 때문이다.
기존의 리소스에서 일부만 수정하기 때문에 연산과 같은 과정이 들어갈 수도 있기 때문이다.
(ex. 000101-1122334의 '나이' 데이터를 +1)

PUT과 PATCH 둘다 같은 HTTP Method 이고 어떻게 활용하는지에 대해서는 개발자의 자유지만, 서버와 클라이언트 사이의 통신간 혼란을 피하기 위해서는 의미와 정의에 맞는 기능구현이 필요할 것이다.

0개의 댓글