# 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. **성능 모니터링**: 처리 시간, 메모리 사용량 등 성능 지표 수집