# 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://:/ username: 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] ```