3.0 KiB
3.0 KiB
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 에서 아래 항목을 환경에 맞게 수정합니다.
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 실패)
빌드
./gradlew bootJar
빌드 결과물: build/libs/shp-exporter-v2.jar
실행
방법 1 — Gradle로 직접 실행 (개발/테스트)
./gradlew bootRun
방법 2 — JAR 실행 (운영)
java \
-Xmx128g -Xms8g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:G1HeapRegionSize=16m \
-XX:+ParallelRefProcEnabled \
-jar build/libs/shp-exporter-v2.jar
대용량 데이터 처리를 위해 힙 메모리를 충분히 확보하는 것을 권장합니다.
방법 3 — 설정을 커맨드라인으로 오버라이드
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]