SNP-Global (snp-global)
S&P Global Maritime API Gateway 및 Risk & Compliance Screening 시스템. 외부 Maritime API를 인증 기반으로 프록시(Bypass)하고, 선박/회사의 리스크·규정준수 스크리닝 데이터를 서비스합니다.
기술 스택
- Java 17, Spring Boot 3.2.1
- Spring Security (Basic Auth)
- PostgreSQL (스키마: std_snp_data)
- WebFlux WebClient (외부 Maritime API 호출)
- Spring Data JPA, JdbcTemplate
- Thymeleaf (이메일 템플릿)
- Springdoc OpenAPI 2.3.0 (Swagger)
- Lombok, Jackson
- React 19, TypeScript, Vite, Tailwind CSS (프론트엔드)
사전 요구사항
| 항목 |
버전 |
비고 |
| JDK |
17 |
.sdkmanrc 참조 (sdk env) |
| Maven |
3.9+ |
|
| Node.js |
20+ |
프론트엔드 빌드용 |
| npm |
10+ |
Node.js에 포함 |
빌드
참고: frontend-maven-plugin이 Node.js 설치 및 프론트엔드 빌드를 자동으로 수행합니다.
# JDK 설정
sdk use java 17.0.18-amzn
# 전체 빌드 (프론트엔드 포함)
mvn clean package -DskipTests
# 프론트엔드만 별도 빌드
cd frontend && npm install && npm run build
로컬 실행
# Spring Boot 실행 (기본 프로파일)
mvn spring-boot:run
# 프론트엔드 개발 서버
cd frontend && npm run dev
서버 설정
| 프로파일 |
포트 |
Context Path |
| default (로컬) |
8031 |
/snp-global |
| dev / prod |
8041 |
/snp-api |
접속 정보
주요 API
Bypass Account 관리 (/api/bypass-account)
| 메서드 |
경로 |
설명 |
| GET |
/accounts |
계정 목록 (페이징) |
| GET/PUT/DELETE |
/accounts/{id} |
계정 상세/수정/삭제 |
| POST |
/accounts/{id}/reset-password |
비밀번호 초기화 |
| POST |
/requests |
API 접근 요청 (공개) |
| GET |
/requests |
요청 목록 |
| POST |
/requests/{id}/approve |
승인 (계정 자동 생성) |
| POST |
/requests/{id}/reject |
거부 |
Bypass Config 관리 (/api/bypass-config)
| 메서드 |
경로 |
설명 |
| GET/POST |
/ |
설정 목록/생성 |
| GET/PUT/DELETE |
/{id} |
설정 상세/수정/삭제 |
| POST |
/{id}/generate |
서비스·컨트롤러 코드 생성 |
S&P API Bypass (/api/compliance, /api/risk) — Basic Auth 필요
| 메서드 |
경로 |
설명 |
| GET |
/compliance/CompliancesByImos |
IMO별 규정준수 데이터 |
| GET |
/risk/RisksByImos |
IMO별 리스크 데이터 |
| GET |
/risk/UpdatedComplianceList |
기간별 업데이트 목록 |
Screening Guide (/api/screening-guide)
| 메서드 |
경로 |
설명 |
| GET |
/risk-indicators |
리스크 지표 (카테고리별) |
| GET |
/compliance-indicators |
규정준수 지표 |
| GET |
/methodology-history |
방법론 변경 이력 |
| GET |
/history/ship-risk |
선박 리스크 변경 이력 |
| GET |
/history/ship-compliance |
선박 규정준수 변경 이력 |
| GET |
/history/company-compliance |
회사 규정준수 변경 이력 |
| GET |
/ship-info, /company-info |
기본 정보 조회 |
| GET |
/ship-risk-status |
선박 리스크 현황 |
| GET |
/ship-compliance-status |
선박 규정준수 현황 |
| GET |
/company-compliance-status |
회사 규정준수 현황 |
디렉토리 구조
src/main/java/com/snp/batch/
├── SnpGlobalApplication.java # 메인 애플리케이션
├── api/logging/ # API 접근 로깅 필터
├── common/web/ # 공통 프레임워크
│ ├── ApiResponse.java # 통합 API 응답 래퍼
│ ├── controller/BaseBypassController # Bypass 컨트롤러 베이스
│ └── service/BaseBypassService # Bypass 서비스 베이스 (WebClient)
├── global/
│ ├── config/ # Security, Swagger, WebClient, Auth 설정
│ ├── controller/ # Bypass 계정/설정 관리, Screening Guide, SPA 라우터
│ ├── dto/ # bypass/, screening/ DTO
│ ├── model/ # bypass 엔티티, screening/ 다국어 엔티티
│ └── repository/ # bypass, screening/ 리포지토리
├── jobs/web/ # S&P API Bypass 엔드포인트
│ ├── compliance/ # CompliancesByImos
│ └── risk/ # RisksByImos, UpdatedComplianceList
└── service/ # 핵심 비즈니스 서비스
├── BypassApiAccountService # 계정 CRUD
├── BypassApiRequestService # 접근 요청 관리 (승인/거부)
├── BypassCodeGenerator # 서비스/컨트롤러 코드 자동 생성
├── BypassConfigService # Bypass API 설정 CRUD
├── EmailService # 이메일 발송 (승인/거부 알림)
└── ScreeningGuideService # 리스크·규정준수 스크리닝 데이터 조회