129 lines
3.0 KiB
Markdown
129 lines
3.0 KiB
Markdown
# 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]
|
|
``` |