한 줄 정의

장기 실행 워크플로우(Long-running Workflow)에서 시스템 중단 및 예외가 발생했을 때, 각 트랜잭션 단계를 로컬로 독립 처리하고 실패 시 사전에 정의된 보상 트랜잭션(Compensating Transaction)을 기동하여 시스템의 일관성을 사후적으로 보장하는 설계 패턴.

핵심 요지

  • 에이전틱 AI 등 오랜 시간 지속되는 작업(Long-horizon Task)에서 중간에 발생하는 불가피한 실패 및 중단을 자연스러운 일상적 이벤트로 수용할 수 있게 만든다.
  • 단일의 거대한 분산 트랜잭션(2PC 등) 대신 로컬 트랜잭션의 연속으로 시스템 상태를 유지하며, 에러 발생 시 역방향으로 복구 작업을 수행하여 최종 일관성을 획득한다.

상세

  • 장기 실행의 취약성 극복: 며칠 혹은 몇 주 동안 구동되는 장기 실행 에이전트(LRA)는 프로세스 재시작, API 사용 한도 초과, 컨텍스트 윈도우 포화 등의 이유로 반드시 중단을 겪는다. 사가 패턴은 이를 해결하기 위해 전체 워크플로우를 독립적인 마이크로 태스크로 쪼개고, 각 단계마다 상태(Git 커밋 등)를 영구 저장소에 체크포인트로 커밋한다.
  • 보상 트랜잭션의 필요성: 워크플로우 중간 지점에서 영구 복구가 불가능한 치명적 실패가 발생하면, 사가 패턴의 조정자(Coordinator)는 이전에 이미 완료 처리된 단계들의 부작용을 원상복구(Compensating)하기 위해 취소 액션을 역순으로 수행한다. (예: git revert를 통해 실패가 시작된 특정 커밋들 이전 상태로 롤백하거나 스냅샷을 원복함)
  • 멱등성과 비대칭성: 각 액티비티(Activity)는 재시도나 재기동 시 동일한 결과를 내야 하므로 멱등성(Idempotency) 설계가 필수적이다. 또한 실패 판단과 복구 로직이 단순 재시도(Retry)로 해결되지 않을 경우 워크플로우의 실행 제어권을 안전 지대로 이관한다.

예시

  • 코드 생성 에이전트의 롤백 워크플로:
    1. 에이전트가 새로운 피처 브랜치에서 코드를 작성하고 유닛 테스트를 기동하는 액티비티를 순차 실행.
    2. 3단계 컴파일 테스트 실행 도중 치명적 에러 감지 및 복구 불능 상태 도달.
    3. 사가 패턴을 기반으로 하는 보상 트랜잭션 작동: 에이전트는 작성한 파일을 수동 수정하는 것이 아니라, git checkout -- . 또는 git revert 명령어를 통해 환경을 이전의 정상적인 체크포인트 시점으로 완전히 복원한 후 상태를 blocked로 기록하고, 제삼자인 리뷰어 에이전트에게 중재 요청 티켓을 발급.

충돌

  • Temporal의 기본 재시도 정책과 사가 패턴의 충돌: 시스템 인프라 계층(예: Temporal)의 지수 백오프 기반 자동 재시도와 비즈니스 논리 계층인 사가 패턴의 보상 트랜잭션 간의 간섭 우려. 인프라 수준의 재시도는 네트워크 일시 장애(Transient network error) 같은 일시적 문제 해결에 집중하고, 사가 보상 트랜잭션은 코드 문법 오류나 설계 충돌과 같은 영구적이고 논리적인 문제를 정합하는 데 책임을 분할하여 해결해야 한다.

관련 노트