멱등성(Idempotency)이란? API 설계에서 왜 중요한가

멱등성이란 무엇인가

멱등성(Idempotency)은 동일한 요청을 한 번 보내든 여러 번 보내든 결과가 동일하게 유지되는 성질을 의미합니다. 즉, 같은 연산을 반복해도 시스템의 상태가 최초 한 번 실행했을 때와 똑같이 유지된다는 뜻입니다. 이는 수학에서 유래한 개념이지만, API 설계와 분산 시스템에서 특히 중요하게 다뤄집니다. 네트워크는 언제든 끊기거나 타임아웃이 발생할 수 있기 때문에, 클라이언트가 같은 요청을 재전송하는 상황이 빈번하게 발생하기 때문입니다.

쉬운 비유를 들어보면, 엘리베이터 버튼을 생각할 수 있습니다. 엘리베이터 버튼을 한 번 누르든 다섯 번 누르든 결과는 ‘해당 층으로 엘리베이터가 온다’는 동일한 결과입니다. 버튼을 누른 횟수만큼 엘리베이터가 여러 대 오지 않죠. 이것이 바로 멱등성의 핵심 개념입니다.

HTTP 메서드와 멱등성 예시

HTTP 프로토콜에서는 메서드별로 멱등성 여부가 명확히 정의되어 있습니다.

  • GET: 데이터를 조회만 하므로 여러 번 호출해도 상태 변화가 없어 멱등합니다.
  • PUT: 특정 리소스를 지정한 값으로 완전히 교체하는 방식이라, 여러 번 실행해도 최종 상태는 동일하므로 멱등합니다.
  • DELETE: 이미 삭제된 리소스를 다시 삭제 요청해도 결과적으로 ‘리소스가 없는 상태’는 동일하므로 멱등하다고 봅니다.
  • POST: 일반적으로 새로운 리소스를 생성하는 데 사용되며, 호출할 때마다 새로운 데이터가 생성되므로 멱등하지 않습니다.

예를 들어 결제 API를 POST로 설계했는데 네트워크 오류로 클라이언트가 같은 요청을 두 번 보낸다면, 사용자는 의도치 않게 두 번 결제될 수 있습니다. 이런 문제를 막기 위해 실무에서는 요청마다 고유한 Idempotency-Key를 헤더에 담아 서버가 이미 처리한 요청인지 확인하는 방식을 사용합니다.

실무에서 멱등성이 중요한 이유

분산 시스템에서는 네트워크 재시도, 중복 메시지 전달, 클라이언트의 재요청 등이 필연적으로 발생합니다. 이때 API가 멱등하게 설계되어 있지 않다면 중복 주문, 중복 결제, 데이터 정합성 오류 같은 심각한 문제로 이어질 수 있습니다. 반대로 멱등성이 보장된 API는 재시도 로직을 안심하고 적용할 수 있어 시스템의 안정성과 신뢰성을 크게 높여줍니다.

따라서 API를 설계할 때는 각 엔드포인트가 멱등해야 하는지 명확히 판단하고, 필요하다면 고유 키 기반의 중복 방지 로직을 함께 구현하는 것이 좋습니다. 이는 장애 상황에서도 안전하게 재시도할 수 있는 견고한 시스템을 만드는 핵심 원칙입니다.

댓글 남기기