한국어
증분 데이터 동기화
계정·리소스·필터 조합마다 하나의 checkpoint를 관리합니다. 입금, 출금, 원장은 cursor를 공유하지 않습니다.
처리 순서
after_id=0또는 저장된 cursor에서 시작합니다.- 제한된 batch를 조회합니다.
- 안정적인 리소스 ID로 멱등 저장합니다.
- 항목 저장 후
next_cursor를 저장합니다. 가능하면 같은 DB 트랜잭션을 사용합니다. has_more가 true이면 계속 조회합니다.- 다음 polling에서 저장된 cursor부터 재개합니다.
Cursor feed는 새 레코드를 발견하지만 기존 입출금의 상태 변경을 다시 보내지 않습니다. 비최종 레코드를 작업 큐에 저장하고 상세 API로 최종 상태까지 polling합니다.
원장은 append-only이므로 cursor만으로 동기화할 수 있습니다. 필터가 바뀌면 기존 cursor를 재사용하지 않습니다. 장애 후 마지막 batch를 다시 처리해도 업무 효과가 중복되지 않도록 consumer를 멱등하게 구현합니다.
Worker 분리와 관측성
Stream마다 discovery worker를 두고 비최종 레코드의 status worker를 분리합니다. Discovery는 단조롭게 전진하고 status worker는 느린 거래 하나가 신규 레코드를 막지 않도록 개별 항목을 재시도합니다.
Cursor lag, 마지막 성공 polling 시각, batch 크기, 비최종 queue age, 상세 polling 실패, 최종 상태 전이 수를 metric으로 기록합니다. HTTP 실패뿐 아니라 cursor 정체와 오래된 비최종 레코드에 경보를 설정합니다.
초기 backfill도 정기 polling과 같은 멱등 pipeline으로 수행합니다. 별도 일회성 importer는 서로 다른 중복 제거 동작을 만들기 쉽습니다.