수학적으로 멱등성이란
어떤 집합이 연산 A에 대해 닫혀있을때, 연산 A를 여러번 적용해도 달라지지 않는 성질을 뜻한다.
네트워크 HTTP 에서 멱등성이란
동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고,
서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말한다.
다만 서버가 REST API를 잘 따랐다는 전제하에 멱등성 제약이 보장된다.
(ex : 서버가 get으로 CRUD 전체를 다 처리한다던가 restful하지 않게 구현되어 있다면 멱등성 보장 X)
멱등성이 성립하는 기준
멱등성은 요청의 효과를 보고 판단한다.
같은 행위를 여러번 반복하더라도 같은 효과를 가져야한다.
많이 쓰이는 http method중 POST를 제외한 GET, PUT, DELETE 가 멱등성이 보장되고,
그외 method로는 OPTIONS, HEAD 등이 있다.
예를 들어 PUT의 경우
PUT /user/4
라는 요청이 간다면 4번째 유저가 없다면 생성되고, 있다면 update 되는 형식으로 동작할것이다.
그런데 PUT 요청을 여러번 보내더라도 항상 4번 유저는 요청된 값과 똑같은 값으로 갱신하니
같은 상태일 것이다.
DELETE도 비슷한 방식으로 동작하고, GET, OPTIONS, HEAD 같은 경우는 조회(read) 동작만 하므로
항상 서버의 상태는 동일하다고 기대할 수 있다.
다만 PATCH(리소스의 일부만 수정)의 경우 멱등성이 보장이 되지 않는다.
예를 들어
PATCH users/1
{
$increase: 'age',
value: 1,
}
같이 increase하고 싶은 변수 이름과 값을 보낸다고 해보자.
그럼 PATCH를 보낼때마다 상태가 변경되니 멱등성을 기대할 수 없다고 볼 수 있다.
안전한 메소드
그럼 안전한 메소드란?
서버의 상태를 아예 변경시키지 않는 메소드를 말한다.
해당 메소드로는 GET, OPTIONS, HEAD 등 read 메소드들이 있다
https://oen-blog.tistory.com/211
https://developer.mozilla.org/ko/docs/Glossary/Idempotent
'CS > 네트워크' 카테고리의 다른 글
AnyCast란? (0) | 2022.04.11 |
---|---|
URL & URI & URN (0) | 2022.02.27 |
[TCP] 3-way handshake와 4-way handshake (0) | 2022.01.23 |
Pooling, Long Pooling, Streaming (0) | 2022.01.23 |