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/