- Spring Boot 3.2.1 + React 19 프로젝트 구조 - S&P Global Maritime API Bypass 및 Risk & Compliance Screening 기능 - 팀 워크플로우 v1.6.1 적용 (settings.json, hooks, workflow-version) - 프론트엔드 빌드 (Vite + TypeScript + Tailwind CSS) - 메인 카드 레이아웃 CSS Grid 전환 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
105 lines
4.6 KiB
Markdown
105 lines
4.6 KiB
Markdown
# 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 (프론트엔드)
|
|
|
|
## 빌드 & 실행
|
|
```bash
|
|
# 빌드
|
|
sdk use java 17.0.18-amzn
|
|
mvn clean package -DskipTests
|
|
|
|
# 실행
|
|
mvn spring-boot:run
|
|
|
|
# 프론트엔드 개발
|
|
cd frontend && npm install && npm run dev
|
|
```
|
|
|
|
## 서버 설정
|
|
- 기본 포트: 8031 (dev/prod 프로파일: 8041)
|
|
- Context Path: /snp-global (dev/prod: /snp-api)
|
|
- Swagger UI: http://localhost:8031/snp-global/swagger-ui/index.html
|
|
|
|
## 디렉토리 구조
|
|
```
|
|
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 # 리스크·규정준수 스크리닝 데이터 조회
|
|
```
|
|
|
|
## 주요 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 | 회사 규정준수 현황 |
|
|
|
|
## Lint/Format
|
|
- 별도 lint 도구 미설정 (checkstyle, spotless 없음)
|
|
- IDE 기본 포매터 사용
|