572 words
3 minutes
[DE Design Pattern]04-1. Idempotency 멱등성 기초

1. 멱등성(Idempotency)#

핵심 개념#

  • 멱등성은 같은 연산을 몇 번 실행하든 결과가 동일한 성질

멱등성의 목표#

멱등한 파이프라인이란 결국 두 가지 중 하나를 보장하는 것

  • 중복 없는 출력 — 몇 번을 재실행해도 output 테이블에 같은 row가 한 번만 존재.
  • 식별 가능한 중복 — 메시징 시스템처럼 트랜잭셔널 프로듀서를 지원하지 않는 환경에서는 중복이 불가피. Consumer 단계에서는 해당 레코드를 중복으로 식별할 수 있어야함
# 멱등한 함수: 몇 번을 호출해도 결과 동일
def idempotent_write(table: dict, key: str, value: str):
"""key 기반 덮어쓰기 — 항상 같은 결과"""
table[key] = value
store = {}
idempotent_write(store, "user_1", "alice")
idempotent_write(store, "user_1", "alice") # 재시도
idempotent_write(store, "user_1", "alice") # 또 재시도
print(store) # {'user_1': 'alice'} — 항상 1건
# 비멱등한 함수: 호출할수록 중복 누적
def non_idempotent_write(table: list, value: str):
"""append 기반 — 재시도마다 중복 발생"""
table.append(value)
store = []
non_idempotent_write(store, "alice")
non_idempotent_write(store, "alice") # 재시도 → 중복!
non_idempotent_write(store, "alice") # 또 중복!
print(store) # ['alice', 'alice', 'alice'] — 3건

멱등성 패턴#

  • Overwriting — 전체 데이터를 지우고 다시 쓰는 방식으로, 메타데이터 연산(TRUNCATE/DROP)이나 물리적 Overwriting.
  • Updates — 증분 데이터셋에 MERGE를 적용하여 변경분만 병합.
  • Database — 키 기반 저장소나 트랜잭션 기능을 활용해 DB 레벨에서 멱등성을 보장
  • Immutable Dataset — 데이터를 한 번만 쓰고, 프록시(뷰)를 통해 최신 버전만 노출

Concept

  • 멱등성(Idempotency) : 동일 연산을 여러 번 수행해도 결과가 변하지 않는 성질. f(x) == f(f(f(x)))
  • 재시도(Retry)와 중복 : 에러 복구를 위한 자동 재시도가 이미 성공한 쓰기를 반복 실행하여 데이터 중복을 유발하는 문제
  • 식별 가능한 중복(Identifiable Duplicates) : 중복 제거가 불가능한 환경에서, 소비자가 중복 레코드를 구분할 수 있도록 보장하는 전략
  • 멱등성 범위(Idempotency Scope) : 멱등성이 보장되는 단위(전체 데이터셋, 파티션, 단일 트랜잭션 등)에 따라 패턴 선택이 달라짐

[DE Design Pattern]04-1. Idempotency 멱등성 기초
https://yjinheon.netlify.app/posts/02de/de-design-pattern/04-idempotency/04-01-idempotency-basics/
Author
Datamind
Published at
2025-03-06
License
CC BY-NC-SA 4.0