멱등하다 Idempotent

searchortype·2023년 3월 11일
2
post-thumbnail

멱등하다 : (수학)연산을 여러 번 적용하더라도 결괏값이 달라지지 않는 일.

수학에서의 멱등하다

어떤 집합 S에서 자신으로 가는 함수의 멱등성은 S의 모든 원소 x에 대해 가 성립한다는 성질이다.

이 것의 예로는 아래 사진을 들 수 있는데 1은 몇번을 곱해도 1이라는 결과가 나온다. 이러한 특징을 멱등하다고 말할 수 있다.


멱등성(Idempotent) in Rest

그렇다면 Rest에서 말하는 멱등성(Idempotent)의 의미는 어떤 것일까? RFC 7231 spec 문서에 따르면 아래와 같이 정의하고 있다.

특정 메서드를 사용하는 여러 번의 동일한 요청이 서버에 미치는 의도된 효과가 단일 요청에 대한 효과와 동일한 경우 요청 메서드는 "멱등"하다고 한다. 번역을 해서 말이 조금 어려운데 간단하게 말하면

멱등하다 : 한번 호출하든 여러번 호출하든 리소스의 결과가 같다

그렇다면 Http 메소드 중 어떤 메소드가 멱등할까?
일단 모든 안전한 함수(safe method)는 멱등하다고 할 수 있다. 여기서 잠시 안전한 함수(safe method)에 대해서 알아보고 가자.

안전한 함수 in REST

안전한 함수: 안전한 함수라는 것은 읽기 전용 요청인 경우, target resource에 safe함수를 적용했을 때 origin server에 어떠한 변화를 발생시키지 않는 기능의 함수를 말한다.

안전한 함수 GET, HEAD, OPTIONS, TRACE

GET, HEAD, OPTIONS

GET, HEAD, OPTIONS는 모두 data를 데이터를 읽어오는 기능의 함수들이다. 생성, 업데이트, 삭제 하지 않는다.

TRACE
cli - server 사이에 문제 발생시 loop-back 테스트를 잘 할 수 있게 한다. 어떤 부분이 문제인지 trace할 수 있게 해주는 함수이다. 때문에 매번 request 를 보내도 문제지점에 대한 같은 응답이 오기 때문에 멱등하다.

안전하지 않지만 멱등한 PUT, DELETE

put은 변경이 있을 때 수정을 하고 delete는 삭제를 하기 때문에 안전하지 않다. (상태 변경)

PUT
put의 경우 변경이 발생되었을때만 update되는 함수이기 때문에 동일한 요청을 여러번 보냈을때 변경이 발생되지 않기 때문에 동일한 리소스의 결과를 보장한다. 때문에 멱등하다.
DELETE
삭제 이후 서버의 상태를 변경시기지 않기 때문에 멱등하다.

POST, PATCH는 멱등하지 않다

POST
Post의 경우 생성(create)을 할때 쓰기로 약속된 메서드이다.post의 경우 자원을 생성하는 용도의 메소드이기 때문에 멱등하지 않다.

PATCH
PATCH의 경우 갖고 있는 자원의 일부를 바꾸는 (수정하는) 기능의 메소드이기 때문에 멱등을 보장할 수 없다.

근데 왜 멱등한 함수인지 아닌지 알아야하는 걸까

멱등성에서의 핵심은 여러번 요청해도 서버에 미치는 의도된 효과가 매번 동일한지이다.
만약 멱등하지 않은 함수를 이용해 서버에 request를 보냈다가 중간에 실패하고 retry할 경우 동일한 resource 결과를 보장하지 못한다. 반면 멱등한 함수의 경우 동일한 resource에 대한 결과를 보장할 수 있기 때문에 상황에 따라 고려해서 멱등함수를 사용해야한다.


reference
https://medium.com/nerd-for-tech/what-is-idempotency-in-rest-apis-and-why-should-you-care-8c0a550e345f
https://ko.wikipedia.org/wiki/%EB%A9%B1%EB%93%B1%EB%B2%95%EC%B9%99

0개의 댓글