snp-sync-batch/CLAUDE.md

4.0 KiB

프로젝트 개요

  • 프로젝트명: SNP Sync Batch
  • 타입: Java + Spring Boot + Spring Batch + Maven
  • 설명: S&P Global 해양 데이터를 API로 수집하여 PostgreSQL에 동기화하는 배치 시스템 (Web GUI 포함)
  • JDK: 17 (.sdkmanrc 참조, 17.0.18-amzn)
  • 프레임워크: Spring Boot 3.2.1, Spring Batch 5.1.0, Quartz 2.5.0
  • 빌드 도구: Maven (Maven Wrapper 사용)
  • DB: PostgreSQL (dual datasource: batch-meta + business)
  • 프론트엔드: React (frontend-maven-plugin으로 빌드 통합)

빌드 및 실행

# 빌드 (백엔드만)
./mvnw clean compile -DskipTests

# 전체 패키징 (프론트엔드 포함)
./mvnw clean package -DskipTests

# 테스트
./mvnw test

# 특정 테스트 클래스 실행
./mvnw test -Dtest=클래스명

# 로컬 실행 (포트 8051, context-path: /snp-sync)
./mvnw spring-boot:run

# 린트 (Checkstyle 설정된 경우)
./mvnw checkstyle:check

프로젝트 구조

src/
├── main/
│   ├── java/
│   │   └── com/snp/batch/
│   │       ├── SnpBatchApplication.java   # 메인 클래스
│   │       ├── common/
│   │       │   ├── batch/                 # 배치 공통 (Base 클래스들)
│   │       │   │   ├── config/            # BaseJobConfig
│   │       │   │   ├── entity/            # BaseEntity
│   │       │   │   ├── processor/         # BaseProcessor
│   │       │   │   ├── reader/            # BaseApiReader
│   │       │   │   ├── repository/        # BaseJdbcRepository
│   │       │   │   └── writer/            # BaseWriter, BaseChunkedWriter
│   │       │   ├── util/                  # 유틸리티 (EntityUtils, CommonSql 등)
│   │       │   └── web/                   # 웹 공통 (BaseController, BaseService)
│   │       ├── jobs/datasync/batch/       # 동기화 배치 Job 모듈
│   │       │   ├── code/                  # 코드 동기화 (Stat5Code, FlagCode)
│   │       │   ├── compliance/            # 컴플라이언스 동기화
│   │       │   ├── facility/              # 시설/항구 동기화
│   │       │   ├── movement/              # 선박 이동 동기화
│   │       │   ├── psc/                   # PSC 검사 동기화
│   │       │   └── ...                    # ship, event, risk 등
│   │       └── scheduler/                 # Quartz 스케줄러
│   └── resources/
│       ├── application.yml                # 공통 설정
│       ├── application-dev.yml            # 개발 설정
│       ├── application-prod.yml           # 운영 설정
│       └── application-local.yml          # 로컬 설정 (.gitignore)
├── test/
│   └── java/                              # 테스트 코드
└── frontend/                              # React 프론트엔드

배치 Job 구조 패턴

각 도메인 모듈은 동일한 구조를 따름:

jobs/datasync/batch/{도메인}/
├── config/       # JobConfig (Step, Job 정의)
├── dto/          # API 응답 DTO
├── entity/       # DB Entity
├── reader/       # ItemReader (API 호출)
├── processor/    # ItemProcessor (DTO → Entity 변환)
├── repository/   # JdbcRepository (SQL 직접 사용)
└── writer/       # ItemWriter (DB 저장)

팀 규칙

  • 코드 스타일: .claude/rules/code-style.md 참조
  • 네이밍 규칙: .claude/rules/naming.md 참조
  • 테스트 규칙: .claude/rules/testing.md 참조
  • Git 워크플로우: .claude/rules/git-workflow.md 참조
  • 팀 정책: .claude/rules/team-policy.md 참조

의존성 관리

  • Nexus 프록시 레포지토리를 통해 의존성 관리 (.mvn/settings.xml)
  • 새 의존성 추가 시 pom.xml에 버전 명시
  • Spring Boot BOM 범위 내 의존성은 버전 생략 가능