test3
This commit is contained in:
129
shp-exporter_v2/README.md
Normal file
129
shp-exporter_v2/README.md
Normal 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]
|
||||
```
|
||||
Reference in New Issue
Block a user