136 Commits

Author SHA1 Message Date
dean
4fcc645f63 oom처리 2026-03-26 14:54:24 +09:00
dean
df00af784e make shapefile 2026-03-20 13:33:36 +09:00
dean
17ca27087a docker 2026-03-20 13:31:16 +09:00
dean
efbdbfd632 make shapefile 2026-03-20 08:27:24 +09:00
3a53942264 gradle 내부망 주소로 변경 2026-03-13 14:52:13 +09:00
be12366293 gradle 내부망 주소로 변경 2026-03-13 14:40:32 +09:00
7430f15697 build 2026-03-12 13:40:27 +09:00
71916cc80c status-update 로직 수정 2026-03-12 13:39:34 +09:00
9f99aa78a4 실태조사 로직 변경 2026-03-12 13:18:07 +09:00
8459491189 status-update build 수행 2026-03-12 08:34:53 +09:00
66696efc42 실태조사 적합여부 log 추가 2026-03-12 08:33:48 +09:00
0d03a8d967 쿼리 sql 로그 추가 2026-03-12 08:29:27 +09:00
6ae3eddab4 Merge branch 'main' of https://kamco.git.gs.dabeeo.com/MVPTeam/kamco-cd-cron 2026-03-12 00:14:59 +09:00
501cdfe53c 진행중 + FINISH인데 검수완료가 마지막 zip 파일 완료일자보다 뒤에 일어난 건도 포함되게 수정 2026-03-12 00:14:36 +09:00
c3af9f8ed1 Merge pull request 'feat/dean/project-change-structure' (#3) from feat/dean/project-change-structure into main
Reviewed-on: #3
2026-03-11 23:44:18 +09:00
c3287b0fde shp파일등록방법변경 2026-03-11 23:38:37 +09:00
e2a491c373 shp파일등록방법변경 2026-03-11 23:38:35 +09:00
d7b7852d80 hello 2026-03-11 23:09:52 +09:00
24add0fc13 label-to-review 로그 추가 2026-03-11 22:46:55 +09:00
e4a385351e label-to-review 로그 추가 2026-03-11 22:46:38 +09:00
bfa5e861a2 label-send log 추가 2026-03-11 22:36:50 +09:00
4322e46e3a status-update log 추가 2026-03-11 22:26:01 +09:00
141b735ccc 실태조사 적합여부 log 추가 2026-03-11 22:03:01 +09:00
b0b4856ff5 hello 2026-03-11 21:12:17 +09:00
81312c7d1c shp파일등록방법변경 2026-03-11 20:17:17 +09:00
7347f2a8b1 shp파일등록방법변경 2026-03-11 19:14:05 +09:00
54b82dc3f8 shp파일등록방법변경 2026-03-11 08:19:43 +09:00
99d376f069 hello 2026-03-11 08:12:26 +09:00
cc796ce005 shp파일등록방법변경 2026-03-11 08:02:54 +09:00
c32c11496f geojson 파일 형식 수정 2026-03-09 23:53:18 +09:00
d193ff4ae6 commit 2026-03-09 10:00:56 +09:00
c4b26fde0a commit 2026-03-09 09:55:51 +09:00
17ec207d71 commit 2026-03-09 01:57:43 +09:00
8084b2eabc 스케줄러로 변경 2026-03-08 22:17:17 +09:00
f61a678ebf 스케줄러로 변경 2026-03-08 21:55:28 +09:00
0eebd8609a 스케줄러로 변경 2026-03-08 21:52:09 +09:00
f7df368036 스케줄러로 변경 2026-03-08 21:51:44 +09:00
316b3272bf 스케줄러로 변경 2026-03-08 21:47:54 +09:00
230b3d37e1 스케줄러로 변경 2026-03-08 21:35:13 +09:00
b156b61caf 스케줄러로 변경 2026-03-08 21:33:41 +09:00
a6bb589189 status-update prod에 경로 추가 2026-03-06 14:39:22 +09:00
ac5a11e33e file cnt 체크하는 로직 수정 2026-03-06 11:56:46 +09:00
55010f0618 review-to-geojson 로직 수정 2026-03-06 10:52:03 +09:00
e833173756 status-update jar 로직 추가 2026-03-05 11:12:51 +09:00
0e288777fe spotless 2026-03-04 21:07:12 +09:00
83a257538d stblt-check 적합여부 쿼리 수정 2026-03-04 21:04:33 +09:00
191936acc2 review-to-geojson 경로수정 2026-03-04 12:38:47 +09:00
906302ceaa welcomepath 2026-03-04 04:29:43 +09:00
0e380e3c0c 중복 경고 2026-03-04 04:15:29 +09:00
5fc4455fff welcomepath 2026-03-04 04:10:23 +09:00
b7a7b40b83 test 2026-03-04 03:55:56 +09:00
8ac1b021e2 test 2026-03-04 03:52:21 +09:00
5aad898b7e spotless 2026-03-03 17:20:03 +09:00
758c8b9cda review-to-geojson 수정 2026-03-03 16:44:48 +09:00
477a1505d1 label-to-review 수정 2026-03-03 16:38:36 +09:00
06dbfaf605 label-send 수정 2026-03-03 16:15:17 +09:00
77794c8ffa stblt-check 수정 2026-03-03 16:12:06 +09:00
ee98a45fea pnu-update yml 파일 수정 2026-03-03 16:11:02 +09:00
750e20d6e1 pnu-update yml 파일 수정 2026-03-03 16:06:23 +09:00
c4924bbba6 stblt-check 수정 2026-03-03 15:59:45 +09:00
14465115a2 prod 수정 2026-03-03 15:51:48 +09:00
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
280111d73e label-send 로그작성,prod수정,spotless 2026-03-02 21:04:45 +09:00
a9d9aa746f review-to-geojson 로그작성,prod수정, spotless 2026-03-02 21:01:14 +09:00
2ea6a62730 label-to-review 로그작성,prod수정 2026-03-02 20:56:22 +09:00
ffbc1b0de9 shp-exporter -> prod경로 수정 2026-02-26 14:13:31 +09:00
52504ea245 imagery-make-dataset - prod경로 수정 2026-02-26 14:10:01 +09:00
edf585672b review-to-geojson 러너 추가, prod경로 수정 2026-02-26 14:06:03 +09:00
ee3affcbe5 label-to-review 러너 추가, prod경로 수정 2026-02-26 14:00:49 +09:00
b7f6bd94f6 label-send 러너 추가, prod경로 수정 2026-02-26 13:57:42 +09:00
2c7bef2617 stblt spotless build 2026-02-26 13:54:54 +09:00
749014dc22 pnu spotless build 2026-02-26 13:53:37 +09:00
e137676621 stblt prod경로 수정, 러너 추가 2026-02-26 13:51:25 +09:00
c25e13b92c pnu-update prod경로 수정 2026-02-26 13:48:59 +09:00
e8c141948a pnu-update 러너 추가, prod경로 수정 2026-02-26 13:46:37 +09:00
31bf386840 shp-exporter prod 경로 수정 2026-02-25 15:43:46 +09:00
b943da33a6 imagery 영상관리 커밋 2026-02-25 15:30:08 +09:00
a419bd2768 review-to-json 커밋 2026-02-25 15:27:36 +09:00
7ac03692e9 label-to-review 커밋 2026-02-25 15:26:09 +09:00
25f6deebb1 gukyuin stblt 커밋 2026-02-25 15:24:30 +09:00
e740bc42ca gukyuin pnu-update 커밋 2026-02-25 15:23:21 +09:00
fb3d8a424d gukyuin label-send 커밋 2026-02-25 15:22:05 +09:00
2a32fae177 status-check 삭제 2026-02-25 15:20:35 +09:00
724d9184ac 영상관리 readme 파일 수정 2026-02-24 19:54:51 +09:00
6bec4d017f 검수완료 geosjon 생성 스케줄러 수정 2026-02-24 19:52:51 +09:00
135c6b5892 영상이미지관리 스케줄 수정 2026-02-24 19:31:15 +09:00
207078e5a2 Merge remote-tracking branch 'origin/main' 2026-02-23 16:15:25 +09:00
ee3f86f8ac shp export 소스 추가 2026-02-23 16:15:11 +09:00
ca7c5e7fa7 test 2026-02-23 15:18:59 +09:00
e92a56ff4f add log 2026-02-12 20:27:44 +09:00
d1a3c8cc2c add log 2026-02-12 20:27:24 +09:00
5c47d111b1 build 2026-02-10 15:11:09 +09:00
b940db8e73 Revert "build: add executable boot jar"
This reverts commit 4a3e299325.

revert: remove jar
2026-02-10 14:48:10 +09:00
4a3e299325 build: add executable boot jar 2026-02-10 14:19:20 +09:00
c2d4d3a5f0 Split the function 2026-02-09 20:52:41 +09:00
ef31309f77 Split the function 2026-02-09 20:36:07 +09:00
e697867bb0 Split the function 2026-02-09 20:34:33 +09:00
b4fff05460 Split the function 2026-02-09 20:29:50 +09:00
703c25aadf Split the function 2026-02-09 20:26:38 +09:00
be4840bb58 Split the function 2026-02-09 20:21:22 +09:00
b1765e9d1f Split the function 2026-02-09 20:21:09 +09:00
0ff3f43a99 Split the function 2026-02-09 20:17:12 +09:00
34b5dd928a Split the function 2026-02-09 20:12:22 +09:00
d0a6b88eba Split the function 2026-02-09 18:29:35 +09:00
48369486a3 test 2026-02-09 17:36:40 +09:00
f55e29f0cf Merge pull request 'modified_date -> updated_dttm 수정' (#1) from feat/modify-createdateyn-260209 into main
Reviewed-on: #1
2026-02-09 17:13:35 +09:00
2a3fa7e895 kamco-make-dataset-generation
TrainingDataReviewJobRepository.updateLearnDataGeomFileCreateYn

modified_date -> updated_dttm 수정
2026-02-09 17:11:22 +09:00
731dbb4170 jenkinsfile 2026-02-09 11:20:15 +09:00
e50295e929 jenkinsfile 2026-02-09 10:56:16 +09:00
84d66b57ea jenkinsfile 2026-02-09 10:55:10 +09:00
038a4fabc6 jenkinsfile 2026-02-09 10:52:55 +09:00
4836d09320 jenkinsfile 2026-02-09 10:50:04 +09:00
1ce49fb793 jenkinsfile 2026-02-09 10:43:00 +09:00
dee09ad16a jenkinsfile 2026-02-09 10:37:35 +09:00
596b6d4d84 jenkinsfile 2026-02-09 10:27:17 +09:00
135de03c21 .gitignore 2026-02-08 20:54:20 +09:00
cd284d94ae add make dataset 2026-02-08 20:53:45 +09:00
bf5537c384 add make dataset 2026-02-08 20:29:19 +09:00
045e3da923 add make dataset 2026-02-08 20:21:57 +09:00
5bfde5798f add make dataset 2026-02-08 20:21:35 +09:00
d29c7cf816 add make dataset 2026-02-08 20:19:09 +09:00
32d52e4ca0 stblt-check 추가 2026-02-03 11:33:30 +09:00
2cee73ea1f label-send 추가 2026-02-03 11:24:21 +09:00
e281a821eb 버전이 없는 파일 추가 2026-02-03 11:17:24 +09:00
eca21f8f41 state-check 스케줄 추가, pnu-update 수정 2026-02-03 11:16:41 +09:00
58d8df7a38 pnu-update 스케줄 설정 수정 2026-02-03 10:32:21 +09:00
48882c9123 pnu-update 스케줄 추가 2026-02-03 10:30:47 +09:00
fa0bec8747 review-to-down geojson-dir 추가 2026-02-03 10:25:50 +09:00
9700ac48b7 review-to-down 스케줄링 커밋 2026-02-03 10:19:42 +09:00
2cd44f4113 label-to-review 스케줄링 커밋 2026-02-03 09:58:40 +09:00
9cd1924014 init 2026-02-02 15:26:45 +09:00
a3061e8ef5 init 2026-02-02 15:11:07 +09:00
cd038cab35 init 2026-02-02 15:10:32 +09:00
8091b5a4c7 init 2026-02-02 15:04:50 +09:00
c8167485d1 init 2026-02-02 15:03:50 +09:00
2260 changed files with 90520 additions and 0 deletions

77
.gitignore vendored Normal file
View File

@@ -0,0 +1,77 @@
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### QueryDSL ###
/src/main/generated/
**/generated/
### Logs ###
*.log
logs/
*.log.*
### OS ###
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
### Environment ###
.env
.env.local
.env.*.local
application-local.yml
application-secret.yml
metrics-collector/.env
### Docker (local testing) ###
.dockerignore
docker-compose.override.yml
### Temporary ###
*.tmp
*.temp
*.swp
*.swo
*~
!/CLAUDE.md

8
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# 디폴트 무시된 파일
/shelf/
/workspace.xml
# 에디터 기반 HTTP 클라이언트 요청
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

9
.idea/kamco-cd-cron.iml generated Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

7
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KubernetesApiProvider"><![CDATA[{}]]></component>
<component name="ProjectRootManager" version="2" project-jdk-name="21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/kamco-cd-cron.iml" filepath="$PROJECT_DIR$/.idea/kamco-cd-cron.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

8
gukyuin/.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# 디폴트 무시된 파일
/shelf/
/workspace.xml
# 에디터 기반 HTTP 클라이언트 요청
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

19
gukyuin/.idea/gradle.xml generated Normal file
View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$/label-send" />
<option name="gradleJvm" value="21" />
</GradleProjectSettings>
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$/pnu-update" />
<option name="gradleJvm" value="21" />
</GradleProjectSettings>
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$/stblt-check" />
<option name="gradleJvm" value="21" />
</GradleProjectSettings>
</option>
</component>
</project>

9
gukyuin/.idea/gukyuin.iml generated Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

8
gukyuin/.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="KubernetesApiProvider"><![CDATA[{}]]></component>
<component name="ProjectRootManager">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
gukyuin/.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/gukyuin.iml" filepath="$PROJECT_DIR$/.idea/gukyuin.iml" />
</modules>
</component>
</project>

6
gukyuin/.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

View File

View File

@@ -0,0 +1,2 @@
#Mon Feb 02 19:50:45 KST 2026
gradle.version=8.14

Binary file not shown.

8
gukyuin/label-send/.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# 디폴트 무시된 파일
/shelf/
/workspace.xml
# 에디터 기반 HTTP 클라이언트 요청
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

1
gukyuin/label-send/.idea/.name generated Normal file
View File

@@ -0,0 +1 @@
kamco-label-send-job

28
gukyuin/label-send/.idea/compiler.xml generated Normal file
View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Gradle Imported" enabled="true">
<outputRelativeToContentRoot value="true" />
<processorPath useClasspath="false">
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.42/8365263844ebb62398e0dc33057ba10ba472d3b8/lombok-1.18.42.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.querydsl/querydsl-apt/5.0.0/d48657412f2b96d787bbe5ae393e33815c94b4d0/querydsl-apt-5.0.0-jakarta.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/jakarta.annotation/jakarta.annotation-api/2.1.1/48b9bda22b091b1f48b13af03fe36db3be6e1ae3/jakarta.annotation-api-2.1.1.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/jakarta.persistence/jakarta.persistence-api/3.1.0/66901fa1c373c6aff65c13791cc11da72060a8d6/jakarta.persistence-api-3.1.0.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.querydsl/querydsl-codegen/5.1.0/a8504ea51fbc2258543cedab6a37fe6039b2d20a/querydsl-codegen-5.1.0.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.querydsl/querydsl-core/5.1.0/be322c3fe98de8e7c204afb8860bfabd81a3bafd/querydsl-core-5.1.0.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.querydsl/codegen-utils/5.1.0/ba401554d613760617992eafb6cdba175c811e6f/codegen-utils-5.1.0.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/io.github.classgraph/classgraph/4.8.146/360448a09bfa5689d89cfa97fea53b3fdefa9c23/classgraph-4.8.146.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.mysema.commons/mysema-commons-lang/0.2.4/d09c8489d54251a6c22fbce804bdd4a070557317/mysema-commons-lang-0.2.4.jar" />
<entry name="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.eclipse.jdt/ecj/3.26.0/4837be609a3368a0f7e7cf0dc1bdbc7fe94993de/ecj-3.26.0.jar" />
</processorPath>
<module name="kamco-label-send-job.main" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel target="21" />
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_STRING" value="-parameters" />
</component>
</project>

16
gukyuin/label-send/.idea/gradle.xml generated Normal file
View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

9
gukyuin/label-send/.idea/label-send.iml generated Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
gukyuin/label-send/.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="KubernetesApiProvider"><![CDATA[{}]]></component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK" />
</project>

8
gukyuin/label-send/.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/modules/kamco-label-send-job.main.iml" filepath="$PROJECT_DIR$/.idea/modules/kamco-label-send-job.main.iml" />
</modules>
</component>
</project>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="AdditionalModuleElements">
<content url="file://$MODULE_DIR$/../../build/generated/sources/annotationProcessor/java/main">
<sourceFolder url="file://$MODULE_DIR$/../../build/generated/sources/annotationProcessor/java/main" isTestSource="false" generated="true" />
</content>
</component>
</module>

6
gukyuin/label-send/.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

View File

@@ -0,0 +1,112 @@
# Code Style 설정 가이드
이 문서는 프로젝트에서 Google Java Style을 자동으로 적용하기 위한 설정 가이드입니다.
## 자동 포맷팅 구성
### 1. 커밋 시점 자동 포맷팅 (Git Pre-commit Hook)
커밋 전에 자동으로 코드를 포맷팅하고 스테이징합니다.
**설정 완료:** `.git/hooks/pre-commit` 파일이 자동으로 실행됩니다.
**동작 방식:**
- 커밋 시도 시 `./gradlew spotlessApply` 자동 실행
- 스테이징된 Java 파일을 자동으로 포맷팅
- 포맷팅된 파일을 자동으로 다시 스테이징
- 포맷팅이 완료되면 커밋 진행
**장점:**
- 수동으로 `spotlessApply`를 실행할 필요 없음
- 항상 일관된 코드 스타일 유지
- 포맷팅 누락 방지
### 2. IntelliJ IDEA 저장 시점 자동 포맷팅
#### 방법 1: Code Style 설정 임포트 (권장)
1. **IntelliJ IDEA 열기**
2. **Settings/Preferences** (Mac: `⌘,` / Windows: `Ctrl+Alt+S`)
3. **Editor > Code Style > Java**
4. **⚙️ (톱니바퀴)** 클릭 > **Import Scheme > IntelliJ IDEA code style XML**
5. 프로젝트 루트의 `intellij-java-google-style.xml` 파일 선택
6. **OK** 클릭
#### 방법 2: 저장 시 자동 포맷팅 활성화
**Option A: Actions on Save 설정**
1. **Settings/Preferences** > **Tools > Actions on Save**
2. 다음 옵션들을 활성화:
-**Reformat code**
-**Optimize imports**
-**Rearrange code** (선택사항)
3. **Changed lines** 또는 **Whole file** 선택
4. **OK** 클릭
**Option B: Save Actions Plugin 사용 (더 많은 옵션)**
1. **Settings/Preferences** > **Plugins**
2. **Marketplace**에서 "Save Actions" 검색 및 설치
3. **Settings/Preferences** > **Other Settings > Save Actions**
4. 다음 옵션 활성화:
-**Activate save actions on save**
-**Reformat file**
-**Optimize imports**
-**Rearrange fields and methods** (선택사항)
### 3. Gradle Spotless Plugin 수동 실행
#### 코드 포맷팅 체크
```bash
# 포맷팅 문제 확인만 (수정하지 않음)
./gradlew spotlessCheck
```
#### 코드 자동 포맷팅
```bash
# 모든 Java 파일 자동 포맷팅 적용
./gradlew spotlessApply
```
#### 빌드 시 자동 체크
```bash
# 빌드 전에 자동으로 spotlessCheck 실행됨
./gradlew build
```
## 코드 스타일 규칙
프로젝트는 **Google Java Style Guide** 기반으로 다음 규칙을 따릅니다:
- **Indentation**: 2 spaces (탭 아님)
- **Line Length**: 180 characters
- **Line Endings**: LF (Unix-style)
- **Charset**: UTF-8
- **Import Order**: Static imports → 빈 줄 → Regular imports
- **Braces**: 모든 if, for, while, do 문에 중괄호 필수
## 문제 해결
### Pre-commit hook이 실행되지 않는 경우
```bash
# 실행 권한 확인 및 부여
chmod +x .git/hooks/pre-commit
```
### Spotless 플러그인이 동작하지 않는 경우
```bash
# Gradle 의존성 다시 다운로드
./gradlew clean build --refresh-dependencies
```
### IntelliJ 포맷팅이 다르게 적용되는 경우
1. `intellij-java-google-style.xml` 다시 임포트
2. **File > Invalidate Caches** > **Invalidate and Restart**
## 추가 정보
- **Google Java Style Guide**: https://google.github.io/styleguide/javaguide.html
- **Spotless Plugin**: https://github.com/diffplug/spotless
- **IntelliJ Code Style**: https://www.jetbrains.com/help/idea/code-style.html

View File

@@ -0,0 +1,282 @@
# 공통코드 Redis 캐시 시스템 - DanielLee
## 요구사항 검토
### 1. **API를 통해 공통코드 제공**
- **구현 완료**: `CommonCodeApiController`에서 전체 공통코드 조회 API 제공
```
GET /api/code
→ 모든 공통코드 조회
```
- **추가 구현**: 캐시 갱신 및 상태 확인 API
```
POST /api/code/cache/refresh → 캐시 갱신
GET /api/code/cache/status → 캐시 상태 확인
```
---
### 2. **애플리케이션 로딩시 Redis 캐시에 올리기**
- **구현 완료**: `CommonCodeCacheManager` 클래스 생성
#### 초기화 메커니즘
```java
@Component
@RequiredArgsConstructor
public class CommonCodeCacheManager {
@EventListener(ApplicationReadyEvent.class)
public void initializeCommonCodeCache() {
// 애플리케이션 완전히 시작된 후 공통코드를 Redis에 미리 로드
List<Basic> allCommonCodes = commonCodeService.getFindAll();
// @Cacheable이 자동으로 Redis에 캐시함
}
}
```
#### 동작 흐름
1. 애플리케이션 시작
2. Spring이 모든 Bean 생성 완료 (`ApplicationReadyEvent` 발생)
3. `CommonCodeCacheManager.initializeCommonCodeCache()` 실행
4. `commonCodeService.getFindAll()` 호출 (DB에서 조회)
5. `@Cacheable(value = "commonCodes")` 에노테이션이 결과를 Redis에 저장
---
### 3. **공통코드 변경시 데이터 갱신**
#### 자동 갱신
- **등록 (CREATE)**: `@CacheEvict` → 캐시 전체 삭제
- **수정 (UPDATE)**: `@CacheEvict` → 캐시 전체 삭제
- **삭제 (DELETE)**: `@CacheEvict` → 캐시 전체 삭제
- **순서 변경**: `@CacheEvict` → 캐시 전체 삭제
```java
@CacheEvict(value = "commonCodes", allEntries = true)
public ResponseObj save(CommonCodeDto.AddReq req) {
// 공통코드 저장
// ↓
// 캐시 전체 삭제 (다음 조회 시 DB에서 새로 로드)
}
```
#### 수동 갱신 (관리자)
```java
POST /api/code/cache/refresh
```
- 공통코드 설정이 변경된 후 API를 호출하여 캐시를 강제 갱신
#### 캐시 상태 모니터링
```java
GET /api/code/cache/status
→ 응답: { "data": 150 } // 캐시된 공통코드 150개
```
---
## 전체 아키텍처
```
┌─────────────────────────────────────────────────────────┐
│ 클라이언트 요청 │
└──────────────────┬──────────────────────────────────────┘
┌──────────▼──────────┐
│ CommonCodeApiController
└──────────┬──────────┘
┌─────────┴──────────┐
│ │
┌────▼─────┐ ┌──────▼────────────┐
│ 조회 API │ │ 캐시 관리 API │
│ (GET) │ │(POST, GET) │
└────┬─────┘ └──────┬────────────┘
│ │
│ ┌────────▼──────────┐
│ │CommonCodeCacheManager
│ │(캐시 초기화/갱신) │
│ └────────┬──────────┘
│ │
┌────▼─────────────────┬─▼────┐
│ CommonCodeService │ │
│ (@Cacheable) │ │
│ (@CacheEvict) │ │
└────┬──────────────────┴──────┘
┌────▼──────────┐
│ Redis 캐시 │
│ (공통코드) │
└────┬──────────┘
┌────▼──────────┐
│ PostgreSQL DB │
│ (공통코드) │
└───────────────┘
```
---
## API 명세
### 1. 공통코드 조회 (캐시됨)
```
GET /api/code
응답:
{
"data": [
{
"id": 1,
"code": "STATUS",
"name": "상태",
"description": "상태 공통코드",
"used": true,
...
},
...
]
}
```
### 2. 공통코드 캐시 갱신
```
POST /api/code/cache/refresh
응답:
{
"data": "공통코드 캐시가 갱신되었습니다."
}
```
### 3. 캐시 상태 확인
```
GET /api/code/cache/status
응답:
{
"data": 150 // Redis에 캐시된 공통코드 개수
}
```
---
## 캐시 갱신 흐름
### 자동 갱신 (CRUD 작업)
```
관리자가 공통코드 등록/수정/삭제
CommonCodeService.save() / update() / removeCode()
(@CacheEvict 실행)
Redis 캐시 전체 삭제
다음 조회 시 DB에서 새로 로드
```
### 수동 갱신 (API 호출)
```
관리자: POST /api/code/cache/refresh
CommonCodeCacheManager.refreshCommonCodeCache()
캐시 정리 + 새로운 데이터 로드
Redis 캐시 업데이트 완료
```
---
## 성능 최적화 효과
| 항목 | 개선 전 | 개선 후 |
|------|--------|--------|
| **조회 속도** | DB 직접 조회 (10-100ms) | Redis 캐시 (1-5ms) |
| **DB 부하** | 매번 조회 | 캐시 미스시만 조회 |
| **네트워크 대역폭** | 높음 (DB 왕복) | 낮음 (로컬 캐시) |
| **응답 시간** | 변동적 | 일정 (캐시) |
---
## 추가 기능
### CommonCodeUtil - 전역 공통코드 조회
```java
@Component
public class CommonCodeUtil {
// 모든 공통코드 조회 (캐시 활용)
public List<Basic> getAllCommonCodes()
// 특정 코드로 조회
public List<Basic> getCommonCodesByCode(String code)
// ID로 단건 조회
public Optional<Basic> getCommonCodeById(Long id)
// 코드명 조회
public Optional<String> getCodeName(String parentCode, String childCode)
// 하위 코드 조회
public List<Basic> getChildCodesByParentCode(String parentCode)
// 코드 사용 가능 여부 확인
public boolean isCodeAvailable(Long parentId, String code)
}
```
### 사용 예시
```java
@RequiredArgsConstructor
@RestController
public class SomeController {
private final CommonCodeUtil commonCodeUtil;
@GetMapping("/example")
public void example() {
// 1. 모든 공통코드 조회 (캐시됨)
List<Basic> allCodes = commonCodeUtil.getAllCommonCodes();
// 2. 특정 코드 조회
Optional<String> name = commonCodeUtil.getCodeName("PARENT", "CHILD");
// 3. 코드 사용 가능 여부 확인
boolean available = commonCodeUtil.isCodeAvailable(1L, "NEW_CODE");
}
}
```
---
## 완료 체크리스트
- Redis 캐싱 어노테이션 적용 (@Cacheable, @CacheEvict)
- 애플리케이션 로딩시 캐시 초기화
- CRUD 작업시 자동 캐시 갱신
- 수동 캐시 갱신 API 제공
- 캐시 상태 모니터링 API
- 전역 공통코드 조회 유틸리티
- 포괄적인 유닛 테스트 (12개)
---
## 모니터링
캐시 상태를 주기적으로 모니터링:
```bash
# 캐시 상태 확인
curl http://localhost:8080/api/code/cache/status
# 캐시 갱신
curl -X POST http://localhost:8080/api/code/cache/refresh
```
로그 확인:
```
=== 공통코드 캐시 초기화 시작 ===
✓ 공통코드 150개가 Redis 캐시에 로드되었습니다.
- [STATUS] 상태 (ID: 1)
- [TYPE] 타입 (ID: 2)
...
=== 공통코드 캐시 초기화 완료 ===
```

View File

@@ -0,0 +1,29 @@
# Stage 1: Build stage (gradle build는 Jenkins에서 이미 수행)
FROM eclipse-temurin:21-jre-jammy
# GDAL 설치
RUN apt-get update && apt-get install -y \
gdal-bin \
libgdal-dev \
&& rm -rf /var/lib/apt/lists/*
ARG UID=1000
ARG GID=1000
RUN groupadd -g ${GID} manager01 \
&& useradd -u ${UID} -g ${GID} -m manager01
USER manager01
# 작업 디렉토리 설정
WORKDIR /app
# JAR 파일 복사 (Jenkins에서 빌드된 ROOT.jar)
COPY build/libs/ROOT.jar app.jar
# 포트 노출
EXPOSE 8080
# 애플리케이션 실행
# dev 프로파일로 실행
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=dev", "app.jar"]

View File

@@ -0,0 +1,94 @@
pipeline {
agent any
tools {
jdk 'jdk21'
}
environment {
BRANCH = 'develop'
GIT_REPO = 'https://10.100.0.10:3210/dabeeo/kamco-dabeeo-backoffice.git'
}
stages {
stage('Checkout') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: "${env.BRANCH}"]],
userRemoteConfigs: [[
url: "${env.GIT_REPO}",
credentialsId: 'jenkins-dev-token'
]]
])
}
}
stage('Get Commit Hash') {
steps {
script {
env.COMMIT_HASH = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
echo "Current commit hash: ${env.COMMIT_HASH}"
}
}
}
stage('Build') {
steps {
sh "./gradlew clean build -x test"
}
}
stage('Docker Build & Deploy') {
steps {
script {
echo "Building Docker image with tag: ${env.COMMIT_HASH}"
// IMAGE_TAG 환경변수 설정 후 docker-compose로 빌드 및 배포
sh """
export IMAGE_TAG=${env.COMMIT_HASH}
# 기존 컨테이너 중지 및 제거
docker-compose -f docker-compose-dev.yml down || true
# 새 이미지 빌드
docker-compose -f docker-compose-dev.yml build
# latest 태그도 추가
docker tag kamco-changedetection-api:${env.COMMIT_HASH} kamco-changedetection-api:latest
# 컨테이너 시작
docker-compose -f docker-compose-dev.yml up -d
"""
// 헬스체크 대기
echo "Waiting for application to be ready..."
sh """
for i in {1..30}; do
if docker exec kamco-changedetection-api curl -f http://localhost:8080/monitor/health > /dev/null 2>&1; then
echo "✅ Application is healthy!"
docker-compose -f docker-compose-dev.yml ps
exit 0
fi
echo "⏳ Waiting for application... (\$i/30)"
sleep 2
done
echo "⚠️ Warning: Health check timeout, checking container status..."
docker-compose -f docker-compose-dev.yml ps
"""
}
}
}
stage('Cleanup Old Images') {
steps {
script {
echo "Cleaning up old Docker images..."
sh """
# Keep latest 5 images, remove older ones
docker images kamco-changedetection-api --format "{{.ID}} {{.Tag}}" | \
grep -v latest | tail -n +6 | awk '{print \$1}' | xargs -r docker rmi || true
"""
}
}
}
}
}

View File

@@ -0,0 +1,26 @@
# GUKYUIN LABEL SEND
> 국유인에 라벨링 툴 검수완료가 된 건들을 전송하는 schedule
## 📋 프로젝트 소개
**label-send**는 국유인에 라벨링 툴 검수완료가 된 건들을 전송하는 schedule 입니다.
## 🚀 시작하기
GukYuinApiLabelJobService 의 findLabelingCompleteSend 메소드가 매일 02:00에 schedule 실행됨
```bash
./gradlew spotlessApply
```
```bash
./gradlew clean build
```
```bash
Java -jar label-send.jar \
```
### 필수 요구사항
- Java 21 (JDK 21)
- PostgreSQL 12+ (PostGIS 확장 필요)
- Gradle 8.x (또는 Gradle Wrapper 사용)
- Docker & Docker Compose (선택사항)

View File

@@ -0,0 +1,121 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.7'
id 'io.spring.dependency-management' version '1.1.7'
id 'com.diffplug.spotless' version '6.25.0'
}
group = 'com.kamco.cd'
version = '0.0.1-SNAPSHOT'
description = 'label-send'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
bootJar {
archiveFileName = "label-send.jar"
}
jar {
enabled = false // plain.jar 안 만들기(혼동 방지)
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
//repositories {
// mavenCentral()
// maven { url "https://repo.osgeo.org/repository/release/" }
//}
def repoUrl = System.getProperty("org.gradle.project.repoUrl")
?: System.getenv("ORG_GRADLE_PROJECT_repoUrl")
?: "http://172.16.4.56:18100/repository/maven-public/"
repositories {
maven {
url = uri(repoUrl)
allowInsecureProtocol = true
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'org.springframework.boot:spring-boot-starter-validation'
//geometry
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation "org.geotools:gt-shapefile:30.0"
implementation "org.geotools:gt-referencing:30.0"
implementation "org.geotools:gt-geojson:30.0"
implementation 'org.locationtech.jts.io:jts-io-common:1.20.0'
implementation 'org.locationtech.jts:jts-core:1.19.0'
implementation 'org.hibernate:hibernate-spatial:6.2.7.Final'
implementation 'org.geotools:gt-main:30.0'
implementation("org.geotools:gt-geotiff:30.0") {
exclude group: "javax.media", module: "jai_core"
}
implementation 'org.geotools:gt-epsg-hsql:30.0'
// QueryDSL JPA
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
// Q클래스 생성용 annotationProcessor
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
// actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// Redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
// SpringDoc OpenAPI (Swagger)
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'
// Apache Commons Compress for archive handling
implementation 'org.apache.commons:commons-compress:1.26.0'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
implementation 'org.reflections:reflections:0.10.2'
implementation 'org.locationtech.jts:jts-core:1.19.0'
implementation 'org.locationtech.jts.io:jts-io-common:1.19.0'
}
configurations.configureEach {
exclude group: 'javax.media', module: 'jai_core'
}
tasks.named('test') {
useJUnitPlatform()
}
// Spotless configuration for code formatting (2-space indent)
spotless {
java {
target 'src/**/*.java'
googleJavaFormat('1.19.2') // Default Google Style = 2 spaces (NO .aosp()!)
trimTrailingWhitespace()
endWithNewline()
}
}
// Run spotlessCheck before build
tasks.named('build') {
dependsOn 'spotlessCheck'
}

Some files were not shown because too many files have changed in this diff Show More