멱등성이란?

멱등성은 수학에서 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 뜻합니다.
수학의 절댓값 함수는 한 번 적용하는 것과 여러번 적용하는 것의 결과가 동일한데, 이것은 멱등성의 대표적 예입니다.

컴퓨터 과학에서는 동일한 작업을 여러 번 실행하더라도, 그 작업이 의도한 효과가 한 번 실행했을 때와 같다면 그 작업을 멱등하다고 합니다. 예를 들어, 어떤 서버는 첫 번째 DELETE 요청에 204를 반환하고, 이후 같은 요청에는 404를 반환할 수 있습니다. 응답은 달라졌지만, DELETE 요청의 의도된 효과는 동일하게 적용되었습니다.
HTTP 메서드의 멱등성은 응답값이 아니라, 사용자가 요청한 작업이 서버에 미치는 의도된 효과에 초점을 둡니다. 만약 응답까지 동일하게 제공하고자 한다면, 서버에서 이전 처리 결과를 저장했다가 다시 반환할 것입니다.

시스템 관점에서 본다면, 멱등성이란, 특정 명령을 수십 번 실행하더라도, 그 명령이 의도하는 대상의 상태가 한 번 실행했을 때와 동일한 성질입니다. pip install numpy를 한다고 치면, 이 명령을 수십 번 실행한다고 하더라도, numpy가 수십번 깔리지 않고, 처음 실행했을 때와 동일한 패키지의 상태를 유지하게 됩니다.
출력하는 메시지는 다르더라도 시스템의 관점에서 본다면, 저 명령어는 멱등합니다.

비즈니스 로직과 멱등성

시스템에서는 네트워크 재시도나 메시지 중복 전달 등으로 동일한 작업이 여러 번 실행될 수 있습니다.
예를 들어 결제 시스템이라면, 동일한 의도를 가진 작업임에도 여러 번 실행하는 것은 치명적입니다.
멱등키를 통해 동일한 의도를 가진 작업임을 명시하여, 동일한 의도를 가진 작업이라면 새로운 결제를 발생하지 않게 합니다.

여러 번 전송된 결제 요청이 동일한 결제 의도에서 발생하였음을 시스템이 감지정확히는 멱등키를 근거로 동일한 결제 요청임을 식별하여, 그것을 하나의 결제로 취급하여 새로운 결제가 발생하지 않도록 보장하는 것입니다. 멱등성을 통해 동일한 논리적 작업의 반복이 추가적인 비즈니스 효과를 만들지 않도록하는 것입니다.

정리

  1. 의도된 효과에 초점을 둔다.
  2. 여러 요청을 하나의 동일한 작업으로 취급하고 싶을 때
  3. 여러 요청의 결과를 바뀌지 않게 하기 위해서
  4. 멱등 키는 비멱등 작업을 멱등성을 보장하기 위해 사용한다.