JavaScript

GET vs POST / PUT vs PATCH

somedding 2024. 3. 19. 13:30

HTTP 메서드(method)

웹에서는 클라이언트와 서버가 데이터를 주고받으면서 상호작용한다.

데이터를 주고받는 과정에서 규칙이나 양식(프로토콜)이 HTTP인 것이다.

이 HTTP는 클라이언트와 서버 간의 통신을 위해 다양한 메서드를 정의하고 있는데, 그것을 HTTP 메서드(method)라고 한다.

HTTP 메서드는 웹 자원에 대한 다양한 작업(조회, 생성, 수정, 삭제 등)을 수행하는 데 사용된다.

 

 

HTTP 메서드 종류

HTTP 메서드에는 총 9가지가 있다.

 

주요 메서드

1. GET : 서버로부터 정보를 조회하기 위해 사용한다.

2. POST : 서버에 데이터를 전송해 새로운 자원을 생성하기 위해 사용한다.

3. PUT : 지정된 URI에 존재하는 자원을 요청된 데이터로 교체하기 위해 사용한다.

4. PATCH : 지정된 자원의 일부분만을 수정하기 위해 사용한다.

5. DELETE : 지정된 URI의 자원을 삭제하기 위해 사용한다.

 

기타 메서드

1. HEAD : GET 메서드와 비슷하지만, 응답 본문 없이 HTTP 헤더 정보만을 가져오기 위해 사용한다.

2. OPTIONS : 대상 리소스에 대한 통신 옵션을 설명하기 위해 사용한다.

3. CONNECT : 목적지 서버와 프록시 서버 간의 터널을 설정하기 위해 사용한다.

4. TRACE : 클라이언트의 요청을 그대로 받아 클라이언트에게 돌려보내는 테스트 용도로 사용한다.

 

 

GET과 POST의 차이

GET과 POST는 사용 목적에서부터 차이점이 존재하며, 이 외에도 여러 차이점이 존재한다.

 

1. 사용 목적

GET은 서버에서 자원을 조회하기 위해 사용한다.

POST는 서버에 자원을 새로 생성하거나 추가할 때 사용한다.

 

2. 데이터 전송 방식

GET 요청 시, 데이터를 URL에 포함시켜 전송한다. 쿼리 스트링을 통해 데이터를 전달하며, 길이에 제한이 있다.

POST 요청 시, 데이터를 요청 본문(body)에 포함시켜 전송한다. 크기 제한이 GET보다 덜 하며, 보안 측면에서 GET보다 낫다.

 

3. 안전성 및 멱등성

(멱등성 : 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미)

GET은 데이터를 조회하는 작업이기에 데이터를 조작하지 않는다. 그렇기 때문에 안전하다. 또한, 같은 GET 요청을 여러 번 해도 동일한 결과를 반환하기에 멱등하다.

POST는 데이터를 조작하는 작업이기에 안전하지 않다. 또한, 같은 POST 요청을 여러 번 하면 같은 작업이 여러 번 수행될 수 있고, 이는 다른 결과를 반환하기에 멱등하지 않다.

 

4. 캐싱

GET은 응답이 캐싱될 수 있다. 그렇기에 GET 요청은 브라우저 기록에 남으며, GET 요청 자체를 북마크에 추가할 수 있다.

POST는 일반적으로 응답이 캐싱되지 않는다. 그렇기에 POST 요청은 브라우저 기록에 남지 않으며, 마찬가지로 북마크에 추가할 수 없다.

 

 

PUT과 PATCH의 차이점

PUT과 PATCH는 서로 비슷한 역할을 하지만, 약간의 차이점이 존재한다.

 

1. 사용 목적

PUT은 대상 자원의 전체를 교체하기 위해 사용한다.

PATCH는 대상 자원의 일부를 수정하기 위해 사용한다.

 

2. 전체성 여부

PUT은 요청된 자원을 전체적으로 교체한다. 기존의 정보를 새로운 정보로 완전히 대체한다.

PATCH는 전체 자원 중 수정하고 싶은 부분만 전송하여 업데이트한다.

 

3. 멱등성

PUT은 전체적으로 교체하는 작업이기에 같은 PUT 요청을 여러 번 수행해도 같은 결과를 반환한다.

PATCH는 원칙적으로는 멱등하지만, 구현 방식에 따라 멱등하지 않을 수도 있다. 예를 들어, 사용자의 카운트를 10 증가시키는 요청인 경우에 같은 PATCH 요청을 여러 번 수행하면 다른 결과를 반환한다. 따라서 PATCH는 요청이 어떻게 이루어지는지에 따라 멱등성의 여부가 달라진다.

 

 

 

 

 

 

글 내용 중, 잘못됐거나 더 알아야 하는 지식이 있다면 댓글로 남겨주시면 감사하겠습니다!

모두 좋은 하루 보내세요:)