피드로 돌아가기
Transaction Hooks: A General Primitive for Post-Commit Side Effects (Case Study: Queuert)
Dev.toDev.to
Backend

Transaction Hooks를 통한 Post-Commit Side Effect 최적화 및 Sub-second Wakeup 구현

Transaction Hooks: A General Primitive for Post-Commit Side Effects (Case Study: Queuert)

Yury2026년 5월 26일9advanced

Context

DB 트랜잭션 내에서 NOTIFY 발송 시 롤백 시의 불일치 및 대량 Insert 시의 중복 알림으로 인한 성능 저하 발생. Commit 이후에만 실행되어야 하며, 실행 실패가 전체 트랜잭션에 영향을 주지 않는 비동기 Side Effect 처리 메커니즘의 필요성 대두.

Technical Solution

  • Transaction Hooks primitive 도입을 통한 작업 버퍼링 및 Commit 후 일괄 Flush 구조 설계
  • Map 기반의 상태 관리를 통해 동일 트랜잭션 내 중복 이벤트 제거 및 Type별 카운팅 처리
  • SAVEPOINT semantics 지원을 위한 checkpoint 기능을 통한 훅 상태의 원자적 롤백 보장
  • Commit 완료 후 실행되는 Flush 로직에 Try-Catch를 적용하여 Side Effect 실패가 비즈니스 로직에 영향을 주지 않도록 격리
  • Symbol key를 활용한 훅 등록 체계로 서로 다른 모듈 간의 상태 충돌 방지

- Commit 이후 실행되어야 하며 실패 시 재시도가 불필요한 작업(캐시 무효화, 메트릭 전송 등)에 적용 검토 - 중복 알림 방지를 위해 단순 호출이 아닌 Map/Set 기반의 상태 집계 구조 설계 - Savepoint 사용 시 훅 상태의 동기화를 위한 Snapshot 메커니즘 구현 여부 확인 - 외부 시스템 의존성으로 인한 트랜잭션 지연 방지를 위해 Flush 로직의 에러 핸들링 및 비동기 처리 적용

원문 읽기