설계할 때 알면 좋은 멱등성 Idempotence 에 대하여

김현웅·2022년 5월 5일
2
post-thumbnail

Idempotence (멱등성)

이 속성이 무엇이냐면 다음 수식으로 설명할 수 있다.

f(f(x)) = f(x)

즉 1000번 실행한 결과는 한번 실행한 결과와 같다는것이다.

다음 함수는 이메일의 bracket을 제거하는 Idempotent한 메소드이다.

idempotency 를 만족하는 함수는 사용자의 입장에서 안전하게 여러번 사용할 수 있는 안정성을 갖고있으며 이를 만드는 것은 어렵지 않다는 것을 느낄 수 있다.

idempotency 는 restAPI 개념에서 자주 언급된다.

rest api에서는 어플리케이션을 resouce 들로 구성하고, GET, POST, PUT, ,PATCH, DELETE 등으로 필요한 리소스들을 가져와 사용한다.

이중 POST 와 PATCH 를 제외하고는 Idempotent 해야한다. 그렇지 않으면 클라이언트에게 제공된 Response와 실제 서버 데이터가 다른 현상이 발생할 수 있다.

다음 시퀀스 다이어그램을 통해 왜 그래야하는지 생각해보자.

멱등성이 보장되지 않은 delete api 상황이다. 첫번째 response는 유실되었고, 두번째 response를 통해 Client는 삭제에 실패한 것으로 판단할 것이다. 실제로 해당 제품을 서버에서 이미 삭제했는데 말이다.
이처럼 클라이언트와 서버 사이의 소통문제가 발생할 수 있다.

PUT과 달리 PATCH가 멱등성을 지키지 못하는 이유?

put 은 DTO 객체가 엔티티의 모든컬럼을 지니고 있다. 따라서 몇번 실행해도 대상 적용 후 엔티티의 형태는 같다. (알다시피 PUT은 없으면 추가하고 있으면 고쳐준다.)
그러나 PATCH는 그렇지않다. 일부 컬럼을 수정하는 작업이기에, 작업과정에서 다른 클라이언트가 내가 다루고 있지 않은 컬럼을 수정할 수 있다. 이러한 특징이 멱등성이 없는 이유를 말해준다.

RestApi 이야기를 많이 했지만, 함수를 만들 때 멱등성을 지키는 함수라면 추후 활용하기 매우 편하다

참고링크1
참고링크2

profile
경험을 기록하는 블로그입니다.

0개의 댓글