Geojson File Monitoring System Created - Daniel C No.1

This commit is contained in:
sanghyeonhd
2025-11-21 10:21:09 +09:00
parent 760bd707cb
commit f847b55c89
19 changed files with 41374 additions and 2 deletions

228
GEOJSON_MONITOR_README.md Normal file
View File

@@ -0,0 +1,228 @@
# GeoJSON 파일 모니터링 시스템
kamco-dabeeo-backoffice 프로젝트에 추가된 GeoJSON 파일 자동 모니터링 및 처리 시스템입니다.
## 주요 기능
### 1. 자동 파일 모니터링
- 지정된 폴더(`/data/geojson/upload`)를 주기적으로 모니터링 (기본값: 30초마다)
- 지원 압축 형식: ZIP, TAR, TAR.GZ, TGZ
- 최대 파일 크기: 100MB
### 2. 압축파일 자동 처리
- 압축파일에서 GeoJSON 파일들을 자동 추출
- GeoJSON 데이터 검증 및 파싱
- `tb_map_sheet_learn_data` 테이블에 데이터 저장
### 3. Geometry 데이터 자동 변환
- JSON 데이터에서 Geometry 정보 추출
- `tb_map_sheet_learn_data_geom` 테이블에 geometry 데이터 저장
- JTS Geometry 객체로 변환하여 PostGIS와 연동
## 시스템 구조
### 폴더 구조
```
/data/geojson/
├── upload/ # 모니터링 대상 폴더 (압축파일 업로드)
├── processed/ # 처리 완료된 파일들
├── error/ # 처리 실패한 파일들
└── /tmp/geojson_extract/ # 임시 추출 폴더
```
### 데이터베이스 테이블
#### tb_map_sheet_learn_data (학습데이터)
- `data_uid`: 식별키
- `data_name`: 파일명
- `data_path`: 파일 경로
- `data_type`: 데이터 타입 (GeoJSON)
- `data_json`: GeoJSON 원본 데이터 (JSON)
- `data_state`: 처리 상태 (PROCESSED/PENDING)
- `anal_state`: 분석 상태 (PENDING/COMPLETED/ERROR)
#### tb_map_sheet_learn_data_geom (학습데이터 Geometry)
- `geo_uid`: 식별키
- `data_uid`: 연결된 학습데이터 ID
- `geom`: Geometry 데이터 (PostGIS)
- `geo_type`: Geometry 타입 (Point, Polygon 등)
- `area`: 면적 정보
- 기타 속성 정보들
## 설정 방법
### application.yml 설정
```yaml
geojson:
monitor:
watch-directory: /data/geojson/upload
processed-directory: /data/geojson/processed
error-directory: /data/geojson/error
temp-directory: /tmp/geojson_extract
cron-expression: "0/30 * * * * *" # 매 30초
supported-extensions:
- zip
- tar
- tar.gz
- tgz
max-file-size: 104857600 # 100MB
```
## 사용 방법
### 1. 자동 모니터링
1. 시스템 시작 시 자동으로 스케줄러가 동작
2. `/data/geojson/upload` 폴더에 압축파일 업로드
3. 30초 이내에 자동으로 처리됨
4. 처리 결과는 로그에서 확인 가능
### 2. API를 통한 수동 제어
#### 모니터링 상태 확인
```bash
GET /api/geojson/monitor/status
```
#### 특정 파일 수동 처리
```bash
POST /api/geojson/process/file?filePath=/path/to/your/file.zip
```
#### 미처리 Geometry 변환
```bash
POST /api/geojson/process/geometry
```
#### 특정 데이터 Geometry 변환
```bash
POST /api/geojson/process/geometry/convert
Content-Type: application/json
[1, 2, 3] # 학습데이터 ID 배열
```
### 3. 데이터 조회 API
#### 학습 데이터 목록 조회
```bash
GET /api/geojson/data/learn-data?page=0&size=10&dataState=PROCESSED
```
#### 학습 데이터 상세 조회
```bash
GET /api/geojson/data/learn-data/{id}
```
#### Geometry 데이터 조회
```bash
GET /api/geojson/data/geometry?dataUid=123
```
#### 시스템 통계 조회
```bash
GET /api/geojson/data/statistics
```
#### 상태별 카운트 조회
```bash
GET /api/geojson/data/status-counts
```
## 처리 흐름
1. **파일 모니터링**: 스케줄러가 주기적으로 upload 폴더 검사
2. **압축파일 검증**: 파일 형식, 크기 확인
3. **압축파일 추출**: GeoJSON 파일들 추출
4. **데이터 검증**: GeoJSON 형식 검증
5. **학습데이터 저장**: `tb_map_sheet_learn_data`에 저장
6. **Geometry 변환**: JSON → JTS Geometry 변환
7. **Geometry 저장**: `tb_map_sheet_learn_data_geom`에 저장
8. **파일 이동**: 처리 완료된 파일을 processed 폴더로 이동
## 오류 처리
### 처리 실패 시
- 파일은 `/data/geojson/error/` 폴더로 이동
- 오류 정보는 `.error.info` 파일에 기록
- 로그에 상세한 오류 내용 기록
### 복구 방법
- 오류 원인을 수정 후 error 폴더에서 upload 폴더로 파일 이동
- 또는 API를 통한 수동 처리 실행
## 모니터링 및 로그
### 로그 확인
```bash
# 전체 로그
tail -f logs/application.log
# GeoJSON 관련 로그만
tail -f logs/application.log | grep "geojson"
```
### 주요 로그 레벨
- `INFO`: 파일 처리 시작/완료
- `WARN`: 비정상적이지만 처리 가능한 상황
- `ERROR`: 처리 실패 및 오류 상황
- `DEBUG`: 상세한 처리 과정
## 성능 고려사항
### 제한사항
- 최대 파일 크기: 100MB
- 한 번에 처리 가능한 GeoJSON 파일: 50개
- 메모리 사용량을 고려하여 대용량 파일 처리 시 주의
### 최적화 팁
- 압축파일 내 GeoJSON 파일 개수를 적절히 제한
- 너무 큰 GeoJSON 파일은 분할하여 처리
- 시스템 리소스에 따라 cron 표현식 조정
## 문제 해결
### 자주 발생하는 문제
1. **폴더 권한 문제**
```bash
chmod 755 /data/geojson/upload
chown -R app-user:app-group /data/geojson/
```
2. **디스크 공간 부족**
- processed 폴더의 오래된 파일들 정리
- 임시 폴더 정리
3. **메모리 부족**
- JVM 힙 크기 조정: `-Xmx2g`
- 처리할 파일 크기 제한
4. **데이터베이스 연결 문제**
- PostgreSQL 연결 상태 확인
- PostGIS 확장 설치 확인
### 디버깅 방법
1. **로그 레벨 조정**
```yaml
logging:
level:
com.kamco.cd.kamcoback.geojson: DEBUG
```
2. **API 테스트**
```bash
# 상태 확인
curl http://localhost:8080/api/geojson/monitor/status
# 통계 확인
curl http://localhost:8080/api/geojson/data/statistics
```
## 확장 가능한 기능
1. **알림 시스템**: 처리 완료/실패 시 이메일 또는 슬랙 알림
2. **웹 UI**: 모니터링 및 관리를 위한 웹 인터페이스
3. **배치 처리**: 대용량 파일을 위한 비동기 배치 처리
4. **데이터 검증**: 더 상세한 GeoJSON 데이터 검증 룰
5. **성능 모니터링**: 처리 시간, 메모리 사용량 등 성능 지표 수집