97 lines
4.0 KiB
Markdown
97 lines
4.0 KiB
Markdown
# 프로젝트 개요
|
|
|
|
- **프로젝트명**: 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 범위 내 의존성은 버전 생략 가능
|