Files
kamco-cd-cron/shp-exporter_v2/README.md
2026-04-15 12:36:58 +09:00

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]