4.0 KiB
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 범위 내 의존성은 버전 생략 가능