# 프로젝트 개요 - **프로젝트명**: 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으로 빌드 통합) ## 빌드 및 실행 ```bash # 빌드 (백엔드만) ./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 범위 내 의존성은 버전 생략 가능