문제: GroupByExecutionIdPolicy 사용 시 Reader가 다음 그룹 데이터를
미리 로드하면서 N→P 전환이 청크 분리보다 먼저 발생하여,
한 청크에 여러 job_execution_id가 섞이는 경우 P 상태 고착 발생
해결: Reader 자체에서 peek/fetch 2단계로 청크 경계를 제어
- BaseSyncReader 추상 클래스 추출 (peek → fetch 2단계 분리)
- 47개 Reader를 BaseSyncReader 상속으로 변환 (-1,600줄 중복 제거)
- GroupByExecutionIdPolicy/ReadListener/ChunkListener를 Step에서 제거
- chunk(GroupByExecutionIdPolicy) → chunk(chunkSize) 변경
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Backend:
- SyncStatusService: batch_flag 기반 테이블별 N/P/S 집계 (병렬 조회)
- SyncDataPreviewResponse/SyncStatusResponse DTO 추가
- BatchController: sync-status 조회/미리보기/P상태조회/리셋 API 4개
- BatchTableProperties: application.yml 테이블 매핑 ConfigurationProperties
- WebViewController: /sync-status SPA 라우트 추가
Frontend:
- SyncStatus 페이지: 도메인 탭 + 테이블 아코디언 + 인라인 데이터 테이블
- SyncDataPreviewModal/StuckRecordsModal 컴포넌트
- batchApi.ts: SyncStatus 관련 타입 및 API 함수 추가
- App.tsx 라우트 + Navbar 메뉴 추가
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
mda-snp-batch 기반으로 snp-sync-batch 프로젝트 생성
- 프론트엔드: Thymeleaf → React + TypeScript + Vite + Tailwind CSS 전환
- 컨텍스트: /snp-sync, 포트 8051
- 재수집(Recollection) 관련 코드 제거
- displayName → job_schedule.description 기반으로 전환
- 누락 API 추가 (statistics, jobs/detail, executions/recent)
- 실행 이력 조회 속도 개선 (JDBC 경량 쿼리)
- 스케줄 CRUD API 메서드 매핑 수정 (PUT/DELETE)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>