2 Commits

Author SHA1 Message Date
57c3b1b7b5 stblt-check 로그작성,prod수정,spotless 2026-03-02 21:13:07 +09:00
b6fe47196e pnu-update 로그작성,prod수정,spotless 2026-03-02 21:08:45 +09:00
26 changed files with 99 additions and 57 deletions

View File

@@ -84,28 +84,28 @@ mapsheet:
baseurl: /app/detect/result #현재사용안함 baseurl: /app/detect/result #현재사용안함
file: file:
sync-root-dir: /data/images/ sync-root-dir: /kamco-nfs/images/
sync-tmp-dir: /data/repo/tmp # image upload temp dir sync-tmp-dir: /kamco-nfs/repo/tmp # image upload temp dir
sync-file-extention: tfw,tif sync-file-extention: tfw,tif
#dataset-dir: D:/data/model_output/ #변경 model_output #dataset-dir: D:/kamco-nfs/model_output/ #변경 model_output
dataset-dir: /data/model_output/export/ # 마운트경로 AI 추론결과 dataset-dir: /kamco-nfs/model_output/export/ # 마운트경로 AI 추론결과
dataset-tmp-dir: ${file.dataset-dir}tmp/ dataset-tmp-dir: ${file.dataset-dir}tmp/
#model-dir: D:/data/ckpt/model/ #model-dir: D:/kamco-nfs/ckpt/model/
model-dir: /data/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로 model-dir: /kamco-nfs/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로
model-tmp-dir: ${file.model-dir}tmp/ model-tmp-dir: ${file.model-dir}tmp/
model-file-extention: pth,json,py model-file-extention: pth,json,py
pt-path: /data/ckpt/v6-cls-checkpoints/ pt-path: /kamco-nfs/ckpt/v6-cls-checkpoints/
pt-FileName: yolov8_6th-6m.pt pt-FileName: yolov8_6th-6m.pt
dataset-response: /data/dataset/response/ dataset-response: /kamco-nfs/dataset/response/
inference: inference:
url: http://127.0.0.1:8000/jobs url: http://127.0.0.1:8000/jobs
batch-url: http://127.0.0.1:8000/batches batch-url: http://127.0.0.1:8000/batches
geojson-dir: /data/requests/ # 학습서버에서 트레이닝한 모델업로드경로 geojson-dir: /kamco-nfs/requests/ # 학습서버에서 트레이닝한 모델업로드경로
jar-path: /data/repo/jar/shp-exporter.jar # 추론실행을 위한 파일생성경로 jar-path: /kamco-nfs/repo/jar/shp-exporter.jar # 추론실행을 위한 파일생성경로
inference-server-name: server1,server2,server3,server4 inference-server-name: server1,server2,server3,server4
gukyuin: gukyuin:
@@ -113,7 +113,7 @@ gukyuin:
cdi: ${gukyuin.url}/api/kcd/cdi cdi: ${gukyuin.url}/api/kcd/cdi
training-data: training-data:
geojson-dir: /data/dataset/request/ geojson-dir: /kamco-nfs/dataset/request/
layer: layer:
geoserver-url: https://kamco.geo-dev.gs.dabeeo.com geoserver-url: https://kamco.geo-dev.gs.dabeeo.com

View File

@@ -34,22 +34,26 @@ public class GukYuinApiPnuJobService {
} }
/** 국유인 등록 완료 후, 탐지객체 조회해서 PNU 업데이트 하는 스케줄링 하루 1번 새벽 1시에 실행 */ /** 국유인 등록 완료 후, 탐지객체 조회해서 PNU 업데이트 하는 스케줄링 하루 1번 새벽 1시에 실행 */
// @Scheduled(cron = "0 * * * * *")
public void findGukYuinContListPnuUpdate() { public void findGukYuinContListPnuUpdate() {
// if (isLocalProfile()) {
// return;
// }
log.info("[Step 1-1] 국유인 연동까지 완료된 추론 목록 가져오기");
log.info("=== apply_status -> 100% 다운 완료: GUK_COMPLETED, PNU매핑 실패: PNU_FAILED");
List<LearnKeyDto> list = List<LearnKeyDto> list =
gukYuinPnuJobCoreService.findGukyuinApplyStatusUidList( gukYuinPnuJobCoreService.findGukyuinApplyStatusUidList(
List.of(GukYuinStatus.GUK_COMPLETED.getId(), GukYuinStatus.PNU_FAILED.getId())); List.of(GukYuinStatus.GUK_COMPLETED.getId(), GukYuinStatus.PNU_FAILED.getId()));
log.info("[Step 1-2] 매핑할 추론 회차 갯수 : {}", list == null ? 0 : list.size());
if (list.isEmpty()) { if (list.isEmpty()) {
log.info("[Step 1-3] 매핑할 추론 회차 갯수 없어서 리턴하고 끝남");
return; return;
} }
log.info("[Step 2-1] 추론 회차별 pnu 매핑 for문 시작 ");
for (LearnKeyDto dto : list) { for (LearnKeyDto dto : list) {
try { try {
processUid(dto.getUid(), dto.getUid()); log.info("[Step 2-2] 진행하는 추론 Uid: {}", dto.getUid());
processUid(dto.getUid());
gukYuinPnuJobCoreService.updateGukYuinApplyStateComplete( gukYuinPnuJobCoreService.updateGukYuinApplyStateComplete(
dto.getId(), GukYuinStatus.PNU_COMPLETED); dto.getId(), GukYuinStatus.PNU_COMPLETED);
} catch (Exception e) { } catch (Exception e) {
@@ -60,15 +64,21 @@ public class GukYuinApiPnuJobService {
} }
} }
private void processUid(String chnDtctId, String uid) { private void processUid(String uid) {
ResultDto result = gukYuinApiService.listChnDtctId(chnDtctId, "Y"); log.info("[Step 2-4] 탐지 등록목록 상세 API 호출 시작");
ResultDto result = gukYuinApiService.listChnDtctId(uid, "Y");
if (result == null || result.getResult() == null || result.getResult().isEmpty()) { if (result == null || result.getResult() == null || result.getResult().isEmpty()) {
log.info("[Step 2-5] 결과값 없어서 return");
return; return;
} }
log.info("[Step 2-5] 결과값 첫번째 값 가져오기");
ChngDetectMastDto.Basic basic = result.getResult().get(0); ChngDetectMastDto.Basic basic = result.getResult().get(0);
String chnDtctCnt = basic.getChnDtctCnt(); String chnDtctCnt = basic.getChnDtctCnt();
log.info("[Step 2-6] 탐지 객체 전체 갯수 chnDtctCnt = {}", chnDtctCnt);
if (chnDtctCnt == null || chnDtctCnt.isEmpty()) { if (chnDtctCnt == null || chnDtctCnt.isEmpty()) {
log.info("[Step 2-76] 탐지 객체 전체 갯수 없어서 return");
return; return;
} }
@@ -77,29 +87,44 @@ public class GukYuinApiPnuJobService {
int totalCount = Integer.parseInt(chnDtctCnt); int totalCount = Integer.parseInt(chnDtctCnt);
int totalPages = (totalCount + pageSize - 1) / pageSize; int totalPages = (totalCount + pageSize - 1) / pageSize;
log.info("[Step 3-1] 탐지 객체 전체 수로 페이지 계산 : {}", totalPages);
for (int page = 0; page < totalPages; page++) { for (int page = 0; page < totalPages; page++) {
log.info("[Step 3-2] 페이지 별 호출 : {}", page);
processPage(uid, page, pageSize); processPage(uid, page, pageSize);
} }
} }
private void processPage(String uid, int page, int pageSize) { private void processPage(String uid, int page, int pageSize) {
log.info("[Step 4-1] 탐지객체 목록 API 호출 시작");
ResultContDto resContList = gukYuinApiService.findChnContList(uid, page, pageSize, "Y"); ResultContDto resContList = gukYuinApiService.findChnContList(uid, page, pageSize, "Y");
if (resContList.getResult() == null || resContList.getResult().isEmpty()) { if (resContList.getResult() == null || resContList.getResult().isEmpty()) {
log.info("[Step 4-2] 탐지객체 목록 결과 없어서 return");
return; // 외부 API 이상 방어 return; // 외부 API 이상 방어
} }
List<ContBasic> contList = resContList.getResult(); List<ContBasic> contList = resContList.getResult();
log.info("[Step 4-3] 탐지객체 목록 결과 contList.size : {}", contList == null ? 0 : contList.size());
for (ContBasic cont : contList) { for (ContBasic cont : contList) {
String[] pnuList = cont.getPnuList(); String[] pnuList = cont.getPnuList();
long pnuCnt = pnuList == null ? 0 : pnuList.length; long pnuCnt = pnuList == null ? 0 : pnuList.length;
log.info("[Step 4-4] 객체에 연결된 pnuCnt : {}", pnuCnt);
if (cont.getChnDtctObjtId() != null) { if (cont.getChnDtctObjtId() != null) {
log.info(
"[Step 4-5] inference_geom 에 pnu 갯수 update : cont.getChnDtctObjtId = {}",
cont.getChnDtctObjtId());
log.info(" === cont.getChnDtctObjtId : {}", cont.getChnDtctObjtId());
log.info(" === pnuCnt : {}", pnuCnt);
gukYuinPnuJobCoreService.updateInferenceGeomDataPnuCnt(cont.getChnDtctObjtId(), pnuCnt); gukYuinPnuJobCoreService.updateInferenceGeomDataPnuCnt(cont.getChnDtctObjtId(), pnuCnt);
if (pnuCnt > 0) { if (pnuCnt > 0) {
log.info("[Step 4-6] 객체 ID로 geoUid 검색 = {}", cont.getChnDtctObjtId());
Long geoUid = Long geoUid =
gukYuinPnuJobCoreService.findMapSheetAnalDataInferenceGeomUid( gukYuinPnuJobCoreService.findMapSheetAnalDataInferenceGeomUid(
cont.getChnDtctObjtId()); cont.getChnDtctObjtId());
log.info("[Step 4-7] tb_pnu 에 데이터 upsert 수행");
log.info("===== geoUid = {}", geoUid);
gukYuinPnuJobCoreService.insertGeoUidPnuData(geoUid, pnuList, cont.getChnDtctObjtId()); gukYuinPnuJobCoreService.insertGeoUidPnuData(geoUid, pnuList, cont.getChnDtctObjtId());
} }
} }

View File

@@ -84,28 +84,28 @@ mapsheet:
baseurl: /app/detect/result #현재사용안함 baseurl: /app/detect/result #현재사용안함
file: file:
sync-root-dir: /data/images/ sync-root-dir: /kamco-nfs/images/
sync-tmp-dir: /data/repo/tmp # image upload temp dir sync-tmp-dir: /kamco-nfs/repo/tmp # image upload temp dir
sync-file-extention: tfw,tif sync-file-extention: tfw,tif
#dataset-dir: D:/data/model_output/ #변경 model_output #dataset-dir: D:/kamco-nfs/model_output/ #변경 model_output
dataset-dir: /data/model_output/export/ # 마운트경로 AI 추론결과 dataset-dir: /kamco-nfs/model_output/export/ # 마운트경로 AI 추론결과
dataset-tmp-dir: ${file.dataset-dir}tmp/ dataset-tmp-dir: ${file.dataset-dir}tmp/
#model-dir: D:/data/ckpt/model/ #model-dir: D:/kamco-nfs/ckpt/model/
model-dir: /data/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로 model-dir: /kamco-nfs/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로
model-tmp-dir: ${file.model-dir}tmp/ model-tmp-dir: ${file.model-dir}tmp/
model-file-extention: pth,json,py model-file-extention: pth,json,py
pt-path: /data/ckpt/v6-cls-checkpoints/ pt-path: /kamco-nfs/ckpt/v6-cls-checkpoints/
pt-FileName: yolov8_6th-6m.pt pt-FileName: yolov8_6th-6m.pt
dataset-response: /data/dataset/response/ dataset-response: /kamco-nfs/dataset/response/
inference: inference:
url: http://127.0.0.1:8000/jobs url: http://127.0.0.1:8000/jobs
batch-url: http://127.0.0.1:8000/batches batch-url: http://127.0.0.1:8000/batches
geojson-dir: /data/requests/ # 학습서버에서 트레이닝한 모델업로드경로 geojson-dir: /kamco-nfs/requests/ # 학습서버에서 트레이닝한 모델업로드경로
jar-path: /data/repo/jar/shp-exporter.jar # 추론실행을 위한 파일생성경로 jar-path: /kamco-nfs/repo/jar/shp-exporter.jar # 추론실행을 위한 파일생성경로
inference-server-name: server1,server2,server3,server4 inference-server-name: server1,server2,server3,server4
gukyuin: gukyuin:
@@ -113,7 +113,7 @@ gukyuin:
cdi: ${gukyuin.url}/api/kcd/cdi cdi: ${gukyuin.url}/api/kcd/cdi
training-data: training-data:
geojson-dir: /data/dataset/request/ geojson-dir: /kamco-nfs/dataset/request/
layer: layer:
geoserver-url: https://kamco.geo-dev.gs.dabeeo.com geoserver-url: https://kamco.geo-dev.gs.dabeeo.com

View File

@@ -84,28 +84,28 @@ mapsheet:
baseurl: /app/detect/result #현재사용안함 baseurl: /app/detect/result #현재사용안함
file: file:
sync-root-dir: /data/images/ sync-root-dir: /kamco-nfs/images/
sync-tmp-dir: /data/repo/tmp # image upload temp dir sync-tmp-dir: /kamco-nfs/repo/tmp # image upload temp dir
sync-file-extention: tfw,tif sync-file-extention: tfw,tif
#dataset-dir: D:/data/model_output/ #변경 model_output #dataset-dir: D:/kamco-nfs/model_output/ #변경 model_output
dataset-dir: /data/model_output/export/ # 마운트경로 AI 추론결과 dataset-dir: /kamco-nfs/model_output/export/ # 마운트경로 AI 추론결과
dataset-tmp-dir: ${file.dataset-dir}tmp/ dataset-tmp-dir: ${file.dataset-dir}tmp/
#model-dir: D:/data/ckpt/model/ #model-dir: D:/kamco-nfs/ckpt/model/
model-dir: /data/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로 model-dir: /kamco-nfs/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로
model-tmp-dir: ${file.model-dir}tmp/ model-tmp-dir: ${file.model-dir}tmp/
model-file-extention: pth,json,py model-file-extention: pth,json,py
pt-path: /data/ckpt/v6-cls-checkpoints/ pt-path: /kamco-nfs/ckpt/v6-cls-checkpoints/
pt-FileName: yolov8_6th-6m.pt pt-FileName: yolov8_6th-6m.pt
dataset-response: /data/dataset/response/ dataset-response: /kamco-nfs/dataset/response/
inference: inference:
url: http://127.0.0.1:8000/jobs url: http://127.0.0.1:8000/jobs
batch-url: http://127.0.0.1:8000/batches batch-url: http://127.0.0.1:8000/batches
geojson-dir: /data/requests/ # 학습서버에서 트레이닝한 모델업로드경로 geojson-dir: /kamco-nfs/requests/ # 학습서버에서 트레이닝한 모델업로드경로
jar-path: /data/repo/jar/shp-exporter.jar # 추론실행을 위한 파일생성경로 jar-path: /kamco-nfs/repo/jar/shp-exporter.jar # 추론실행을 위한 파일생성경로
inference-server-name: server1,server2,server3,server4 inference-server-name: server1,server2,server3,server4
gukyuin: gukyuin:
@@ -113,7 +113,7 @@ gukyuin:
cdi: ${gukyuin.url}/api/kcd/cdi cdi: ${gukyuin.url}/api/kcd/cdi
training-data: training-data:
geojson-dir: /data/dataset/request/ geojson-dir: /kamco-nfs/dataset/request/
layer: layer:
geoserver-url: https://kamco.geo-dev.gs.dabeeo.com geoserver-url: https://kamco.geo-dev.gs.dabeeo.com

View File

@@ -37,24 +37,26 @@ public class GukYuinApiStbltJobService {
return "local".equalsIgnoreCase(profile); return "local".equalsIgnoreCase(profile);
} }
// @Scheduled(cron = "0 * * * * *")
public void runTask() { public void runTask() {
findGukYuinEligibleForSurvey(null); findGukYuinEligibleForSurvey(null);
} }
/** 국유인 연동 후, 실태조사 적합여부 확인하여 update */ /** 국유인 연동 후, 실태조사 적합여부 확인하여 update */
public void findGukYuinEligibleForSurvey(LocalDate baseDate) { public void findGukYuinEligibleForSurvey(LocalDate baseDate) {
// if (isLocalProfile()) {
// return;
// }
log.info("[Step 1-1] 국유인 연동 PNU 완료된 추론 회차 정보 가져오기 ");
log.info(" learn 테이블의 apply_status : {}", GukYuinStatus.PNU_COMPLETED.getId());
List<LearnKeyDto> list = List<LearnKeyDto> list =
gukYuinStbltJobCoreService.findGukYuinEligibleForSurveyList( gukYuinStbltJobCoreService.findGukYuinEligibleForSurveyList(
GukYuinStatus.PNU_COMPLETED.getId()); GukYuinStatus.PNU_COMPLETED.getId());
log.info("[Step 1-2] 국유인 연동 PNU 완료된 추론 회차 갯수 : {}", list == null ? 0 : list.size());
if (list.isEmpty()) { if (list.isEmpty()) {
log.info("[Step 1-3] 국유인 연동 PNU 완료된 추론 회차 갯수 없어서 return");
return; return;
} }
log.info("[Step 2-1] 추론 회차 list 로 for문 실행하기 ");
for (LearnKeyDto dto : list) { for (LearnKeyDto dto : list) {
try { try {
String targetDate = String targetDate =
@@ -62,19 +64,30 @@ public class GukYuinApiStbltJobService {
.minusDays(1) .minusDays(1)
.format(DateTimeFormatter.ofPattern("yyyyMMdd")); .format(DateTimeFormatter.ofPattern("yyyyMMdd"));
log.info("[Step 2-2] 실태조사 적합여부 조회 날짜 확인 : {}", targetDate);
if (baseDate != null) { // 파라미터가 있으면 if (baseDate != null) { // 파라미터가 있으면
targetDate = baseDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")); targetDate = baseDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
log.info("[Step 2-3] 수동호출 baseDate 가 있을 경우, 실태조사 적합여부 조회 날짜 확인 : {}", targetDate);
} }
log.info("[Step 3-1] 국유인 실태조사 적합여부 API 호출 시작 ");
log.info(" === 값 확인 - uid : {}", dto.getUid());
log.info(" === 값 확인 - targetDate : {}", targetDate);
RlbDtctDto result = gukYuinApiService.findRlbDtctList(dto.getUid(), targetDate, "Y"); RlbDtctDto result = gukYuinApiService.findRlbDtctList(dto.getUid(), targetDate, "Y");
if (result == null || result.getResult() == null || result.getResult().isEmpty()) { if (result == null || result.getResult() == null || result.getResult().isEmpty()) {
log.warn("[GUKYUIN] empty result chnDtctMstId={}", dto.getChnDtctMstId()); log.info("[GUKYUIN] empty result chnDtctId={}", dto.getUid());
log.info("=== 국유인 API 조회 결과 없어서 continue");
continue; continue;
} }
log.info("[Step 4-1] 국유인 실태조사 적합여부 result 값으로 데이터 업데이트");
log.info(" === 데이터 갯수 : {}", result.getResult() == null ? 0 : result.getResult().size());
for (RlbDtctMastDto stbltDto : result.getResult()) { for (RlbDtctMastDto stbltDto : result.getResult()) {
log.info("[Step 4-2] 국유인 실태조사 적합여부 결과 가져오기");
String resultUid = stbltDto.getChnDtctObjtId(); String resultUid = stbltDto.getChnDtctObjtId();
log.info(" == 테이블 tb_pnu 에 적합여부 리턴 결과를 upsert 진행, 객체 uid : {}", resultUid);
gukYuinStbltJobCoreService.updateGukYuinEligibleForSurvey(resultUid, stbltDto); gukYuinStbltJobCoreService.updateGukYuinEligibleForSurvey(resultUid, stbltDto);
} }
@@ -89,6 +102,7 @@ public class GukYuinApiStbltJobService {
e -> { e -> {
List<RlbDtctMastDto> pnuList = e.getValue(); List<RlbDtctMastDto> pnuList = e.getValue();
log.info("[Step 4-3] 국유인 실태조사 적합여부 업데이트 값을 객체 uid 기준으로 DTO 생성");
boolean hasY = pnuList.stream().anyMatch(v -> "Y".equals(v.getStbltYn())); boolean hasY = pnuList.stream().anyMatch(v -> "Y".equals(v.getStbltYn()));
String fitYn = hasY ? "Y" : "N"; String fitYn = hasY ? "Y" : "N";
@@ -104,7 +118,9 @@ public class GukYuinApiStbltJobService {
.findFirst() .findFirst()
.orElse(null); .orElse(null);
log.info(" === selected DTO : {}", selected);
if (selected == null) { if (selected == null) {
log.info(" === selected NULL");
return null; // 방어 코드 return null; // 방어 코드
} }
@@ -112,10 +128,11 @@ public class GukYuinApiStbltJobService {
fitYn, selected.getIncyCd(), selected.getIncyRsnCont()); fitYn, selected.getIncyCd(), selected.getIncyRsnCont());
})); }));
log.info("[Step 4-4] 국유인 실태조사 적합여부, 사유, 내용을 inference_geom 테이블에 update");
resultMap.forEach(gukYuinStbltJobCoreService::updateGukYuinObjectStbltYn); resultMap.forEach(gukYuinStbltJobCoreService::updateGukYuinObjectStbltYn);
} catch (Exception e) { } catch (Exception e) {
log.error("[GUKYUIN] failed uid={}", dto.getChnDtctMstId(), e); log.error("[GUKYUIN] failed uid={}", dto.getUid(), e);
} }
} }
} }

View File

@@ -84,28 +84,28 @@ mapsheet:
baseurl: /app/detect/result #현재사용안함 baseurl: /app/detect/result #현재사용안함
file: file:
sync-root-dir: /data/images/ sync-root-dir: /kamco-nfs/images/
sync-tmp-dir: /data/repo/tmp # image upload temp dir sync-tmp-dir: /kamco-nfs/repo/tmp # image upload temp dir
sync-file-extention: tfw,tif sync-file-extention: tfw,tif
#dataset-dir: D:/data/model_output/ #변경 model_output #dataset-dir: D:/kamco-nfs/model_output/ #변경 model_output
dataset-dir: /data/model_output/export/ # 마운트경로 AI 추론결과 dataset-dir: /kamco-nfs/model_output/export/ # 마운트경로 AI 추론결과
dataset-tmp-dir: ${file.dataset-dir}tmp/ dataset-tmp-dir: ${file.dataset-dir}tmp/
#model-dir: D:/data/ckpt/model/ #model-dir: D:/kamco-nfs/ckpt/model/
model-dir: /data/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로 model-dir: /kamco-nfs/ckpt/model/ # 학습서버에서 트레이닝한 모델업로드경로
model-tmp-dir: ${file.model-dir}tmp/ model-tmp-dir: ${file.model-dir}tmp/
model-file-extention: pth,json,py model-file-extention: pth,json,py
pt-path: /data/ckpt/v6-cls-checkpoints/ pt-path: /kamco-nfs/ckpt/v6-cls-checkpoints/
pt-FileName: yolov8_6th-6m.pt pt-FileName: yolov8_6th-6m.pt
dataset-response: /data/dataset/response/ dataset-response: /kamco-nfs/dataset/response/
inference: inference:
url: http://127.0.0.1:8000/jobs url: http://127.0.0.1:8000/jobs
batch-url: http://127.0.0.1:8000/batches batch-url: http://127.0.0.1:8000/batches
geojson-dir: /data/requests/ # 학습서버에서 트레이닝한 모델업로드경로 geojson-dir: /kamco-nfs/requests/ # 학습서버에서 트레이닝한 모델업로드경로
jar-path: /data/repo/jar/shp-exporter.jar # 추론실행을 위한 파일생성경로 jar-path: /kamco-nfs/repo/jar/shp-exporter.jar # 추론실행을 위한 파일생성경로
inference-server-name: server1,server2,server3,server4 inference-server-name: server1,server2,server3,server4
gukyuin: gukyuin:
@@ -113,7 +113,7 @@ gukyuin:
cdi: ${gukyuin.url}/api/kcd/cdi cdi: ${gukyuin.url}/api/kcd/cdi
training-data: training-data:
geojson-dir: /data/dataset/request/ geojson-dir: /kamco-nfs/dataset/request/
layer: layer:
geoserver-url: https://kamco.geo-dev.gs.dabeeo.com geoserver-url: https://kamco.geo-dev.gs.dabeeo.com