이 글은 보초님 깃허브 레포를 참고해서 공부한 글입니다
클라이언트-서버 구조에서 요청과 응답 데이터를 전송하는 방식을 의미한다.
쉽게 말하면 클라이언트의 요청을 서버가 어떻게 수행해야 할지를 알려주는 것이다.
대표적으로 GET, POST, PUT, PATCH, DELETE 가 있다.
멱등의 사전적 정의는 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
이 의미를 생각하고 HTTP Method 의 멱등성을 설명해보면 여러번 동일한 요청을 보냈을 때, 서버에 미치는 결과가 달라지지 않는 것을 의미한다.
여기서 생각해야할 점은 멱등성은 리소스 관점에서 생각하는 것이다.
HTTP 메서드 | 멱등성 | 이유 |
---|---|---|
GET | O | 같은 요청을 N번 해도 같은 결과가 조회된다. |
POST | X | 같은 요청을 N번 하면 새로운 리소스가 생성되거나 리소스의 상태가 달라져 결과가 달라질 수 있다. |
PUT | O | 같은 요청을 N번 해도 항상 요청 대상 리소스를 수정하여 동일한 상태로 만든다. |
PATCH | X | 기존 리소스에 응답을 추가하는 경우에도 PATCH 가 사용될 수 있으며, 이때 호출 결과가 달라질 수 있다. |
DELETE | O | 같은 요청을 N번 해도 항상 리소스가 없는 동일한 상태이다. |
시간 초과나 기타 일시적인 오류로 인해 정상적인 응답이 수신되지 않는 경우에서 판단을 위한 중요한 근거가 되기 때문이다.
- 사용 목적
- GET : 데이터를 요청할 때
- POST : 데이터를 생성할 때
- 요청 방법
- GET : URL 을 기반으로 한다.
- POST : HTTP message body 을 기반으로 한다.
- 멱등성
- GET : 멱등이다
- POST : 멱등이 아니다
POST는 주로 새 리소스를 생성할 때, PUT은 리소스의 전체를 업데이트하거나 새로 생성할 때, PATCH는 리소스의 일부만을 업데이트할 때 사용됩니다.
PUT과 PATCH의 주된 차이점은 PUT이 대상 리소스의 전체를 교체하는 반면, PATCH는 일부분만 수정한다는 점입니다.
GET 요청을 브라우저 기록에 남기 때문에 body 에 민감한 데이터가 포함될 경우 보안의 문제가 생길 수 있다.
그리고 body 는 일반적으로 서버로 전송되어 처리될 데이터와 관련이 있기 때문에 의미의 명확성을 위해서 POST 나 PUT 요청의 의미와 더 잘 일치한다.