feat(동기화현황): 동기화 현황 메뉴 추가 및 배치 Reader 리팩토링 (#1) #5

병합
HYOJIN feature/ISSUE-1-sync-status-menu 에서 develop 로 5 commits 를 머지했습니다 2026-03-24 17:29:07 +09:00
소유자

변경 사항

  • 동기화 현황 메뉴 추가: 도메인 탭 + 테이블 아코디언 + 인라인 데이터 조회
  • SyncStatusService: batch_flag 기반 N/P/S 집계 (병렬 조회), P상태 레코드 조회/리셋
  • BaseSyncReader 추출: 47개 Reader 공통 로직 통합, 1 chunk = 1 job_execution_id 보장
  • BatchWriteListener SQL null 참조 수정 (실행 시점 지연 생성)
  • batch_flag P 상태 고착 버그 수정

관련 이슈

  • closes #1

테스트

  • 빌드 성공 확인
  • 동기화 배치 실행 후 N→P→S 정상 전환 확인
  • 동기화 현황 화면 조회/미리보기/P리셋 동작 확인

🤖 Generated with Claude Code

## 변경 사항 - 동기화 현황 메뉴 추가: 도메인 탭 + 테이블 아코디언 + 인라인 데이터 조회 - SyncStatusService: batch_flag 기반 N/P/S 집계 (병렬 조회), P상태 레코드 조회/리셋 - BaseSyncReader 추출: 47개 Reader 공통 로직 통합, 1 chunk = 1 job_execution_id 보장 - BatchWriteListener SQL null 참조 수정 (실행 시점 지연 생성) - batch_flag P 상태 고착 버그 수정 ## 관련 이슈 - closes #1 ## 테스트 - [x] 빌드 성공 확인 - [x] 동기화 배치 실행 후 N→P→S 정상 전환 확인 - [x] 동기화 현황 화면 조회/미리보기/P리셋 동작 확인 🤖 Generated with [Claude Code](https://claude.com/claude-code)
HYOJIN added 5 commits 2026-03-24 17:28:32 +09:00
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>
문제: 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>
- BaseSyncReader: 한 그룹 데이터 반환 후 null로 청크 종료하여
  1 chunk = 1 job_execution_id 보장
- chunk(Integer.MAX_VALUE): Reader의 null로만 청크 경계 결정
- BatchWriteListener: SQL을 실행 시점에 생성하여 CommonSql.SOURCE_SCHEMA
  초기화 전 null 참조 문제 해결 (빈 생성 시 → 실행 시 지연 생성)
- JobConfig: BatchWriteListener에 SQL 대신 테이블명 전달
- Repository: 배치 삽입 시작/완료 로그 주석처리

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- .gitignore: logs/ 디렉토리 제외 (개별 로그 파일 → 디렉토리 단위)
- application-dev.yml: chunk-size, sub-chunk-size 설정 추가

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
claude-bot 이 변경사항을 승인하였습니다. 2026-03-24 17:28:53 +09:00
claude-bot left a comment
멤버

MR 승인 (via /mr skill)

MR 승인 (via /mr skill)
HYOJIN merged commit c3beb65942 into develop 2026-03-24 17:29:07 +09:00
HYOJIN 삭제된 브랜치 feature/ISSUE-1-sync-status-menu 2026-03-24 17:29:07 +09:00
"로그인하여 이 대화에 참여"
No reviewers
레이블 없음
마일스톤 없음
담당자 없음
참여자 2명
알림
마감일
기한이 올바르지 않거나 범위를 벗어났습니다. 'yyyy-mm-dd'형식을 사용해주십시오.

마감일이 설정되지 않았습니다.

의존성

No dependencies set.

Reference: gc/snp-sync-batch#5
No description provided.