This commit is contained in:
dean
2026-04-15 12:36:58 +09:00
parent b23c3e2689
commit e358d9def5
19 changed files with 1266 additions and 1 deletions

129
shp-exporter_v2/README.md Normal file
View File

@@ -0,0 +1,129 @@
# shp-exporter-v2
`inference_results_testing` 테이블에서 공간 데이터를 읽어 **map_id 단위로 Shapefile(.shp)을 생성**하는 Spring Batch 애플리케이션입니다.
---
## 요구사항
| 항목 | 버전 |
|------|------|
| Java | 21 |
| Gradle | Wrapper 사용 (별도 설치 불필요) |
| DB | PostgreSQL + PostGIS (`inference_results_testing` 테이블) |
---
## 설정
`src/main/resources/application-prod.yml` 에서 아래 항목을 환경에 맞게 수정합니다.
```yaml
spring:
datasource:
url: jdbc:postgresql://<HOST>:<PORT>/<DB>
username: <USERNAME>
password: <PASSWORD>
exporter:
inference-id: 'D5E46F60FC40B1A8BE0CD1F3547AA6' # 추출 대상 inference ID
batch-ids: # 추출 대상 batch_id 목록
- 252
- 253
- 257
output-base-dir: '/data/model_output/export/' # Shapefile 저장 경로 (디렉토리)
crs: 'EPSG:5186' # 출력 좌표계
chunk-size: 1000 # 청크 단위 (기본값 유지 권장)
fetch-size: 1000 # DB cursor fetch 크기
skip-limit: 100 # 오류 허용 건수 (초과 시 Job 실패)
```
---
## 빌드
```bash
./gradlew bootJar
```
빌드 결과물: `build/libs/shp-exporter-v2.jar`
---
## 실행
### 방법 1 — Gradle로 직접 실행 (개발/테스트)
```bash
./gradlew bootRun
```
### 방법 2 — JAR 실행 (운영)
```bash
java \
-Xmx128g -Xms8g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:G1HeapRegionSize=16m \
-XX:+ParallelRefProcEnabled \
-jar build/libs/shp-exporter-v2.jar
```
> 대용량 데이터 처리를 위해 힙 메모리를 충분히 확보하는 것을 권장합니다.
### 방법 3 — 설정을 커맨드라인으로 오버라이드
```bash
java -jar build/libs/shp-exporter-v2.jar \
--exporter.batch-ids=252,253,257 \
--exporter.output-base-dir=/data/model_output/export/ \
--exporter.inference-id=D5E46F60FC40B1A8BE0CD1F3547AA6
```
---
## 출력 구조
```
{output-base-dir}/
{map_id}/
{map_id}.shp
{map_id}.dbf
{map_id}.shx
{map_id}.prj
```
---
## Job 처리 흐름
```
Step 1 (geomTypeStep)
└─ DB에서 geometry 타입 확인
Step 2 (generateMapIdFilesStep)
└─ inference_results_testing 조회 (batch_id 필터, ORDER BY map_id, uid)
└─ map_id가 바뀔 때마다 Shapefile 파일 분리 저장
```
**데이터 필터 조건 (고정)**
- `batch_id = ANY(batch-ids 목록)`
- geometry 타입: `ST_Polygon` 또는 `ST_MultiPolygon`
- SRID: `5186`
- 유효한 geometry (`ST_IsValid = true`)
- 좌표 범위: X `125000~530000`, Y `-600000~988000` (EPSG:5186 한반도 범위)
---
## 로그 확인
정상 실행 시 아래와 같은 로그가 출력됩니다.
```
=== shp-exporter-v2 시작 ===
inference-id : D5E46F60FC40B1A8BE0CD1F3547AA6
batch-ids : [252, 253, 257]
output : /data/model_output/export/
Job 완료: ExitStatus [COMPLETED]
```