welcome
This commit is contained in:
@@ -57,7 +57,7 @@ public class StartupLogger {
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
╔════════════════════════════════════════════════════════════════════════════════╗
|
╔════════════════════════════════════════════════════════════════════════════════╗
|
||||||
║ 🚀 APPLICATION STARTUP INFORMATION 2 ║
|
║ 🚀 APPLICATION STARTUP INFORMATION 3 ║
|
||||||
╠════════════════════════════════════════════════════════════════════════════════╣
|
╠════════════════════════════════════════════════════════════════════════════════╣
|
||||||
║ PROFILE CONFIGURATION ║
|
║ PROFILE CONFIGURATION ║
|
||||||
╠────────────────────────────────────────────────────────────────────────────────╣
|
╠────────────────────────────────────────────────────────────────────────────────╣
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public class ModelTrainDetailApiController {
|
|||||||
private final ModelTrainDetailService modelTrainDetailService;
|
private final ModelTrainDetailService modelTrainDetailService;
|
||||||
private final RangeDownloadResponder rangeDownloadResponder;
|
private final RangeDownloadResponder rangeDownloadResponder;
|
||||||
|
|
||||||
@Value("${train.docker.responseDir}")
|
@Value("${train.docker.response_dir}")
|
||||||
private String responseDir;
|
private String responseDir;
|
||||||
|
|
||||||
@Operation(summary = "모델학습관리> 모델관리 > 상세정보탭 > 학습 진행정보", description = "학습 진행정보, 모델학습 정보 API")
|
@Operation(summary = "모델학습관리> 모델관리 > 상세정보탭 > 학습 진행정보", description = "학습 진행정보, 모델학습 정보 API")
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class ModelTrainDetailService {
|
|||||||
private final ModelTrainDetailCoreService modelTrainDetailCoreService;
|
private final ModelTrainDetailCoreService modelTrainDetailCoreService;
|
||||||
private final ModelTrainMngCoreService mngCoreService;
|
private final ModelTrainMngCoreService mngCoreService;
|
||||||
|
|
||||||
@Value("${train.docker.responseDir}")
|
@Value("${train.docker.response_dir}")
|
||||||
private String responseDir;
|
private String responseDir;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -46,11 +46,14 @@ public class ModelTrainMngService {
|
|||||||
private final TrainJobService trainJobService;
|
private final TrainJobService trainJobService;
|
||||||
private final ModelTrainDetailService modelTrainDetailService;
|
private final ModelTrainDetailService modelTrainDetailService;
|
||||||
|
|
||||||
@Value("${train.docker.basePath}")
|
@Value("${train.docker.base_path}")
|
||||||
private String basePath;
|
private String basePath;
|
||||||
|
|
||||||
@Value("${train.docker.responseDir}")
|
@Value("${train.docker.response_dir}")
|
||||||
private String responseDir;
|
private String responseDir;
|
||||||
|
@Value("${train.docker.symbolic_link_dir}")
|
||||||
|
private String symbolicDir;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 모델학습 조회
|
* 모델학습 조회
|
||||||
@@ -80,7 +83,7 @@ public class ModelTrainMngService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ===== 2. 경로 생성 =====
|
// ===== 2. 경로 생성 =====
|
||||||
Path tmpBase = Path.of(basePath, "tmp").toAbsolutePath().normalize();
|
Path tmpBase = Path.of(symbolicDir).toAbsolutePath().normalize();
|
||||||
Path tmp = tmpBase.resolve(model.getRequestPath()).normalize();
|
Path tmp = tmpBase.resolve(model.getRequestPath()).normalize();
|
||||||
|
|
||||||
Path responseBase = Paths.get(responseDir).toAbsolutePath().normalize();
|
Path responseBase = Paths.get(responseDir).toAbsolutePath().normalize();
|
||||||
|
|||||||
@@ -23,11 +23,11 @@ import org.springframework.stereotype.Service;
|
|||||||
public class DataSetCountersService {
|
public class DataSetCountersService {
|
||||||
private final ModelTrainMngCoreService modelTrainMngCoreService;
|
private final ModelTrainMngCoreService modelTrainMngCoreService;
|
||||||
|
|
||||||
@Value("${train.docker.requestDir}")
|
@Value("${train.docker.request_dir}")
|
||||||
private String requestDir;
|
private String requestDir;
|
||||||
|
|
||||||
@Value("${train.docker.basePath}")
|
@Value("${train.docker.symbolic_link_dir}")
|
||||||
private String trainBaseDir;
|
private String symbolicDir;
|
||||||
|
|
||||||
public String getCount(Long modelId) {
|
public String getCount(Long modelId) {
|
||||||
ModelTrainMngDto.Basic basic = modelTrainMngCoreService.findModelById(modelId);
|
ModelTrainMngDto.Basic basic = modelTrainMngCoreService.findModelById(modelId);
|
||||||
@@ -45,7 +45,7 @@ public class DataSetCountersService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// tmp
|
// tmp
|
||||||
Path tmpPath = Path.of(trainBaseDir, "tmp", basic.getRequestPath());
|
Path tmpPath = Path.of(symbolicDir, basic.getRequestPath());
|
||||||
|
|
||||||
// 차이나는거
|
// 차이나는거
|
||||||
diffMergedRequestsVsTmp(uids, tmpPath);
|
diffMergedRequestsVsTmp(uids, tmpPath);
|
||||||
|
|||||||
@@ -31,27 +31,26 @@ public class DockerTrainService {
|
|||||||
private String image;
|
private String image;
|
||||||
|
|
||||||
// 학습 요청 데이터가 위치한 호스트 디렉토리
|
// 학습 요청 데이터가 위치한 호스트 디렉토리
|
||||||
@Value("${train.docker.requestDir}")
|
@Value("${train.docker.request_dir}")
|
||||||
private String requestDir;
|
private String requestDir;
|
||||||
|
|
||||||
// 학습 결과가 저장될 호스트 디렉토리
|
// 학습 결과가 저장될 호스트 디렉토리
|
||||||
@Value("${train.docker.responseDir}")
|
@Value("${train.docker.response_dir}")
|
||||||
private String responseDir;
|
private String responseDir;
|
||||||
|
|
||||||
// 컨테이너 이름 prefix
|
|
||||||
@Value("${train.docker.containerPrefix}")
|
|
||||||
private String containerPrefix;
|
|
||||||
|
|
||||||
// 공유메모리 사이즈 설정 (대용량 학습시 필요)
|
// 공유메모리 사이즈 설정 (대용량 학습시 필요)
|
||||||
@Value("${train.docker.shmSize:16g}")
|
@Value("${train.docker.shm_size:16g}")
|
||||||
private String shmSize;
|
private String shmSize;
|
||||||
|
|
||||||
// data 경로 request,response 상위 폴더
|
// data 경로 request,response 상위 폴더
|
||||||
@Value("${train.docker.basePath}")
|
@Value("${train.docker.base_path}")
|
||||||
private String basePath;
|
private String basePath;
|
||||||
|
|
||||||
|
@Value("${train.docker.symbolic_link_dir}")
|
||||||
|
private String symbolicDir;
|
||||||
|
|
||||||
// IPC host 사용 여부
|
// IPC host 사용 여부
|
||||||
@Value("${train.docker.ipcHost:true}")
|
@Value("${train.docker.ipc_host:true}")
|
||||||
private boolean ipcHost;
|
private boolean ipcHost;
|
||||||
|
|
||||||
@Value("${spring.profiles.active}")
|
@Value("${spring.profiles.active}")
|
||||||
@@ -260,12 +259,12 @@ public class DockerTrainService {
|
|||||||
c.add("NCCL_SOCKET_IFNAME=eth0");
|
c.add("NCCL_SOCKET_IFNAME=eth0");
|
||||||
|
|
||||||
// 요청/결과 디렉토리 볼륨 마운트
|
// 요청/결과 디렉토리 볼륨 마운트
|
||||||
// c.add("-v");
|
|
||||||
// c.add(basePath + ":" + basePath); // 심볼릭 링크와 연결되는 실제 파일 경로도 마운트를 해줘야 함
|
|
||||||
c.add("-v");
|
c.add("-v");
|
||||||
c.add(basePath + "/tmp:/data");
|
c.add(basePath + ":" + basePath); // 심볼릭 링크와 연결되는 실제 파일 경로도 마운트를 해줘야 함
|
||||||
c.add("-v");
|
c.add("-v");
|
||||||
c.add(responseDir + ":/checkpoints");
|
c.add(symbolicDir + ":/data"); //요청할경로
|
||||||
|
c.add("-v");
|
||||||
|
c.add(responseDir + ":/checkpoints"); //저장될경로
|
||||||
|
|
||||||
// 표준입력 유지 (-it 대신 -i만 사용)
|
// 표준입력 유지 (-it 대신 -i만 사용)
|
||||||
c.add("-i");
|
c.add("-i");
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ public class JobRecoveryOnStartupService {
|
|||||||
*
|
*
|
||||||
* <p>컨테이너가 --rm 으로 삭제된 경우에도 이 경로에 val.csv / *.pth 등이 남아있으면 정상 종료 여부를 "파일 기반"으로 판정합니다.
|
* <p>컨테이너가 --rm 으로 삭제된 경우에도 이 경로에 val.csv / *.pth 등이 남아있으면 정상 종료 여부를 "파일 기반"으로 판정합니다.
|
||||||
*/
|
*/
|
||||||
@Value("${train.docker.responseDir}")
|
@Value("${train.docker.response_dir}")
|
||||||
private String responseDir;
|
private String responseDir;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public class ModelTestMetricsJobService {
|
|||||||
private String profile;
|
private String profile;
|
||||||
|
|
||||||
// 학습 결과가 저장될 호스트 디렉토리
|
// 학습 결과가 저장될 호스트 디렉토리
|
||||||
@Value("${train.docker.responseDir}")
|
@Value("${train.docker.response_dir}")
|
||||||
private String responseDir;
|
private String responseDir;
|
||||||
|
|
||||||
@Value("${file.pt-path}")
|
@Value("${file.pt-path}")
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class ModelTrainMetricsJobService {
|
|||||||
private String profile;
|
private String profile;
|
||||||
|
|
||||||
// 학습 결과가 저장될 호스트 디렉토리
|
// 학습 결과가 저장될 호스트 디렉토리
|
||||||
@Value("${train.docker.responseDir}")
|
@Value("${train.docker.response_dir}")
|
||||||
private String responseDir;
|
private String responseDir;
|
||||||
|
|
||||||
/** 결과 csv 파일 정보 등록 */
|
/** 결과 csv 파일 정보 등록 */
|
||||||
|
|||||||
@@ -14,12 +14,11 @@ import org.springframework.stereotype.Service;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class TmpDatasetService {
|
public class TmpDatasetService {
|
||||||
|
|
||||||
@Value("${train.docker.requestDir}")
|
@Value("${train.docker.request_dir}")
|
||||||
private String requestDir;
|
private String requestDir;
|
||||||
|
|
||||||
@Value("${train.docker.basePath}")
|
@Value("${train.docker.symbolic_link_dir}")
|
||||||
private String trainBaseDir;
|
private String symbolicDir;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* train, val, test 폴더별로 link
|
* train, val, test 폴더별로 link
|
||||||
*
|
*
|
||||||
@@ -36,7 +35,7 @@ public class TmpDatasetService {
|
|||||||
throw new IOException("links is empty");
|
throw new IOException("links is empty");
|
||||||
}
|
}
|
||||||
|
|
||||||
Path tmp = Path.of(trainBaseDir, "tmp", uid);
|
Path tmp = Path.of(symbolicDir, uid);
|
||||||
|
|
||||||
long linksMade = 0;
|
long linksMade = 0;
|
||||||
|
|
||||||
@@ -115,7 +114,7 @@ public class TmpDatasetService {
|
|||||||
log.info("requestDir(raw)={}", requestDir);
|
log.info("requestDir(raw)={}", requestDir);
|
||||||
|
|
||||||
Path BASE = toPath(requestDir);
|
Path BASE = toPath(requestDir);
|
||||||
Path tmp = Path.of(trainBaseDir, "tmp", uid);
|
Path tmp = Path.of(symbolicDir, uid);
|
||||||
|
|
||||||
log.info("BASE={}", BASE);
|
log.info("BASE={}", BASE);
|
||||||
log.info("BASE exists? {}", Files.isDirectory(BASE));
|
log.info("BASE exists? {}", Files.isDirectory(BASE));
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class TrainJobService {
|
|||||||
private final DataSetCountersService dataSetCounters;
|
private final DataSetCountersService dataSetCounters;
|
||||||
|
|
||||||
// 학습 결과가 저장될 호스트 디렉토리
|
// 학습 결과가 저장될 호스트 디렉토리
|
||||||
@Value("${train.docker.responseDir}")
|
@Value("${train.docker.response_dir}")
|
||||||
private String responseDir;
|
private String responseDir;
|
||||||
|
|
||||||
public Long getModelIdByUuid(UUID uuid) {
|
public Long getModelIdByUuid(UUID uuid) {
|
||||||
|
|||||||
@@ -1,72 +1,49 @@
|
|||||||
spring:
|
spring:
|
||||||
config:
|
config:
|
||||||
activate:
|
activate:
|
||||||
on-profile: dev
|
on-profile: dev
|
||||||
|
|
||||||
jpa:
|
jpa:
|
||||||
show-sql: true
|
show-sql: true
|
||||||
hibernate:
|
properties:
|
||||||
ddl-auto: validate
|
hibernate:
|
||||||
properties:
|
use_sql_comments: true # ⚠️ 선택 - SQL에 주석 추가 (디버깅용)
|
||||||
hibernate:
|
format_sql: true # ⚠️ 선택 - SQL 포맷팅 (가독성)
|
||||||
default_batch_fetch_size: 100 # ✅ 성능 - N+1 쿼리 방지
|
|
||||||
order_updates: true # ✅ 성능 - 업데이트 순서 정렬로 데드락 방지
|
datasource:
|
||||||
use_sql_comments: true # ⚠️ 선택 - SQL에 주석 추가 (디버깅용)
|
url: jdbc:postgresql://192.168.2.127:15432/kamco_training_db
|
||||||
format_sql: true # ⚠️ 선택 - SQL 포맷팅 (가독성)
|
username: kamco_training_user
|
||||||
|
password: kamco_training_user_2025_!@#
|
||||||
datasource:
|
hikari:
|
||||||
url: jdbc:postgresql://192.168.2.127:15432/kamco_training_db
|
minimum-idle: 10
|
||||||
username: kamco_training_user
|
maximum-pool-size: 20
|
||||||
password: kamco_training_user_2025_!@#
|
|
||||||
hikari:
|
jwt:
|
||||||
minimum-idle: 10
|
secret: "kamco_token_dev_dfc6446d-68fc-4eba-a2ff-c80a14a0bf3a"
|
||||||
maximum-pool-size: 20
|
access-token-validity-in-ms: 86400000 # 1일
|
||||||
connection-timeout: 60000 # 60초 연결 타임아웃
|
refresh-token-validity-in-ms: 604800000 # 7일
|
||||||
idle-timeout: 300000 # 5분 유휴 타임아웃
|
|
||||||
max-lifetime: 1800000 # 30분 최대 수명
|
token:
|
||||||
leak-detection-threshold: 60000 # 연결 누수 감지
|
refresh-cookie-name: kamco-dev # 개발용 쿠키 이름
|
||||||
|
refresh-cookie-secure: false # 로컬 http 테스트면 false
|
||||||
transaction:
|
|
||||||
default-timeout: 300 # 5분 트랜잭션 타임아웃
|
swagger:
|
||||||
|
local-port: 8080
|
||||||
|
|
||||||
jwt:
|
file:
|
||||||
secret: "kamco_token_dev_dfc6446d-68fc-4eba-a2ff-c80a14a0bf3a"
|
dataset-dir: /home/kcomu/data/request/
|
||||||
access-token-validity-in-ms: 86400000 # 1일
|
dataset-tmp-dir: ${file.dataset-dir}tmp/
|
||||||
refresh-token-validity-in-ms: 604800000 # 7일
|
|
||||||
|
pt-path: /home/kcomu/data/response/v6-cls-checkpoints/
|
||||||
token:
|
pt-FileName: yolov8_6th-6m.pt
|
||||||
refresh-cookie-name: kamco-dev # 개발용 쿠키 이름
|
|
||||||
refresh-cookie-secure: false # 로컬 http 테스트면 false
|
train:
|
||||||
|
docker:
|
||||||
springdoc:
|
image: kamco-cd-train:latest
|
||||||
swagger-ui:
|
base_path: /home/kcomu/data
|
||||||
persist-authorization: true # 스웨거 새로고침해도 토큰 유지, 로컬스토리지에 저장
|
request_dir: ${train.docker.base_path}/request
|
||||||
|
response_dir: ${train.docker.base_path}/response
|
||||||
member:
|
symbolic_link_dir: ${train.docker.base_path}/tmp
|
||||||
init_password: kamco1234!
|
container_prefix: kamco-cd-train
|
||||||
|
shm_size: 16g
|
||||||
swagger:
|
ipc_host: true
|
||||||
local-port: 8080
|
|
||||||
|
|
||||||
file:
|
|
||||||
sync-root-dir: /app/original-images/
|
|
||||||
sync-tmp-dir: ${file.sync-root-dir}tmp/
|
|
||||||
sync-file-extention: tfw,tif
|
|
||||||
|
|
||||||
dataset-dir: /home/kcomu/data/request/
|
|
||||||
dataset-tmp-dir: ${file.dataset-dir}tmp/
|
|
||||||
|
|
||||||
pt-path: /home/kcomu/data/response/v6-cls-checkpoints/
|
|
||||||
pt-FileName: yolov8_6th-6m.pt
|
|
||||||
|
|
||||||
train:
|
|
||||||
docker:
|
|
||||||
image: kamco-cd-train:latest
|
|
||||||
requestDir: /home/kcomu/data/request
|
|
||||||
responseDir: /home/kcomu/data/response
|
|
||||||
basePath: /home/kcomu/data
|
|
||||||
containerPrefix: kamco-cd-train
|
|
||||||
shmSize: 16g
|
|
||||||
ipcHost: true
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,72 +1,43 @@
|
|||||||
spring:
|
spring:
|
||||||
config:
|
config:
|
||||||
activate:
|
activate:
|
||||||
on-profile: prod
|
on-profile: prod
|
||||||
|
|
||||||
jpa:
|
datasource:
|
||||||
show-sql: false # 운영 환경에서는 성능을 위해 비활성화
|
url: jdbc:postgresql://kamco-cd-train-db:5432/kamco_training_db
|
||||||
hibernate:
|
username: kamco_training_user
|
||||||
ddl-auto: validate
|
password: kamco_training_user_2025_!@#
|
||||||
properties:
|
hikari:
|
||||||
hibernate:
|
minimum-idle: 10
|
||||||
default_batch_fetch_size: 100 # N+1 쿼리 방지
|
maximum-pool-size: 20
|
||||||
order_updates: true # 업데이트 순서 정렬로 데드락 방지
|
|
||||||
|
jwt:
|
||||||
datasource:
|
# ⚠️ 운영 환경에서는 반드시 별도의 강력한 시크릿 키를 사용하세요
|
||||||
url: jdbc:postgresql://kamco-cd-train-db:5432/kamco_training_db
|
secret: "kamco_token_prod_CHANGE_THIS_TO_SECURE_SECRET_KEY"
|
||||||
username: kamco_training_user
|
access-token-validity-in-ms: 86400000 # 1일
|
||||||
password: kamco_training_user_2025_!@#
|
refresh-token-validity-in-ms: 604800000 # 7일
|
||||||
hikari:
|
|
||||||
minimum-idle: 10
|
token:
|
||||||
maximum-pool-size: 20
|
refresh-cookie-name: kamco
|
||||||
connection-timeout: 60000 # 60초 연결 타임아웃
|
refresh-cookie-secure: true # HTTPS 환경에서 필수
|
||||||
idle-timeout: 300000 # 5분 유휴 타임아웃
|
|
||||||
max-lifetime: 1800000 # 30분 최대 수명
|
swagger:
|
||||||
leak-detection-threshold: 60000 # 연결 누수 감지
|
local-port: 9080
|
||||||
|
|
||||||
transaction:
|
file:
|
||||||
default-timeout: 300 # 5분 트랜잭션 타임아웃
|
dataset-dir: /data/training/request/
|
||||||
|
dataset-tmp-dir: ${file.dataset-dir}tmp/
|
||||||
jwt:
|
|
||||||
# ⚠️ 운영 환경에서는 반드시 별도의 강력한 시크릿 키를 사용하세요
|
pt-path: /data/training/response/v6-cls-checkpoints/
|
||||||
secret: "kamco_token_prod_CHANGE_THIS_TO_SECURE_SECRET_KEY"
|
pt-FileName: yolov8_6th-6m.pt
|
||||||
access-token-validity-in-ms: 86400000 # 1일
|
|
||||||
refresh-token-validity-in-ms: 604800000 # 7일
|
train:
|
||||||
|
docker:
|
||||||
token:
|
image: kamco-cd-train:latest
|
||||||
refresh-cookie-name: kamco
|
base_path: /data/training
|
||||||
refresh-cookie-secure: true # HTTPS 환경에서 필수
|
request_dir: ${train.docker.base_path}/request
|
||||||
|
response_dir: ${train.docker.base_path}/response
|
||||||
springdoc:
|
symbolic_link_dir: ${train.docker.base_path}/tmp
|
||||||
swagger-ui:
|
container_prefix: kamco-cd-train
|
||||||
persist-authorization: true # 스웨거 새로고침해도 토큰 유지, 로컬스토리지에 저장
|
shm_size: 16g
|
||||||
|
ipc_host: true
|
||||||
member:
|
|
||||||
init_password: kamco1234!
|
|
||||||
|
|
||||||
swagger:
|
|
||||||
local-port: 9080
|
|
||||||
|
|
||||||
file:
|
|
||||||
# sync-root-dir: /app/original-images/
|
|
||||||
# sync-tmp-dir: ${file.sync-root-dir}tmp/
|
|
||||||
# sync-file-extention: tfw,tif
|
|
||||||
|
|
||||||
dataset-dir: /data/request/
|
|
||||||
dataset-tmp-dir: ${file.dataset-dir}tmp/
|
|
||||||
|
|
||||||
pt-path: /data/response/v6-cls-checkpoints/
|
|
||||||
pt-FileName: yolov8_6th-6m.pt
|
|
||||||
|
|
||||||
train:
|
|
||||||
docker:
|
|
||||||
image: kamco-cd-train:latest
|
|
||||||
requestDir: /data/request
|
|
||||||
responseDir: /data/response
|
|
||||||
basePath: /data
|
|
||||||
containerPrefix: kamco-cd-train
|
|
||||||
shmSize: 16g
|
|
||||||
ipcHost: true
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,71 +1,80 @@
|
|||||||
server:
|
server:
|
||||||
port: 8080
|
port: 8080
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
application:
|
application:
|
||||||
name: kamco-training-api
|
name: kamco-training-api
|
||||||
profiles:
|
profiles:
|
||||||
active: dev # 사용할 프로파일 지정 (ex. dev, prod, test)
|
active: dev # 사용할 프로파일 지정 (ex. dev, prod, test)
|
||||||
|
|
||||||
datasource:
|
datasource:
|
||||||
driver-class-name: org.postgresql.Driver
|
driver-class-name: org.postgresql.Driver
|
||||||
hikari:
|
hikari:
|
||||||
minimum-idle: 2
|
connection-timeout: 60000 # 60초 연결 타임아웃
|
||||||
maximum-pool-size: 2
|
idle-timeout: 300000 # 5분 유휴 타임아웃
|
||||||
connection-timeout: 20000
|
max-lifetime: 1800000 # 30분 최대 수명
|
||||||
idle-timeout: 300000
|
leak-detection-threshold: 60000 # 연결 누수 감지
|
||||||
max-lifetime: 1800000
|
# minimum-idle, maximum-pool-size 는 프로파일별 설정
|
||||||
leak-detection-threshold: 60000
|
|
||||||
|
jpa:
|
||||||
jpa:
|
hibernate:
|
||||||
hibernate:
|
ddl-auto: validate
|
||||||
ddl-auto: update # 스키마 자동 관리 활성화
|
properties:
|
||||||
properties:
|
hibernate:
|
||||||
hibernate:
|
jakarta:
|
||||||
javax:
|
persistence:
|
||||||
persistence:
|
validation:
|
||||||
validation:
|
mode: none
|
||||||
mode: none
|
jdbc:
|
||||||
jdbc:
|
batch_size: 50
|
||||||
batch_size: 50
|
default_batch_fetch_size: 100
|
||||||
default_batch_fetch_size: 100
|
order_updates: true
|
||||||
show-sql: false
|
show-sql: false
|
||||||
|
|
||||||
servlet:
|
servlet:
|
||||||
multipart:
|
multipart:
|
||||||
enabled: true
|
enabled: true
|
||||||
max-file-size: 10GB
|
max-file-size: 10GB
|
||||||
max-request-size: 10GB
|
max-request-size: 10GB
|
||||||
logging:
|
|
||||||
level:
|
transaction:
|
||||||
org:
|
default-timeout: 300 # 5분 트랜잭션 타임아웃
|
||||||
springframework:
|
|
||||||
web: INFO
|
logging:
|
||||||
security: INFO
|
level:
|
||||||
root: INFO
|
org:
|
||||||
|
springframework:
|
||||||
|
web: INFO
|
||||||
|
security: INFO
|
||||||
# actuator
|
root: INFO
|
||||||
management:
|
|
||||||
health:
|
springdoc:
|
||||||
readinessstate:
|
swagger-ui:
|
||||||
enabled: true
|
persist-authorization: true # 스웨거 새로고침해도 토큰 유지
|
||||||
livenessstate:
|
|
||||||
enabled: true
|
member:
|
||||||
diskspace:
|
init_password: kamco1234!
|
||||||
enabled: true
|
|
||||||
endpoint:
|
# actuator
|
||||||
health:
|
management:
|
||||||
probes:
|
health:
|
||||||
enabled: true
|
readinessstate:
|
||||||
show-details: when-authorized
|
enabled: true
|
||||||
endpoints:
|
livenessstate:
|
||||||
jmx:
|
enabled: true
|
||||||
exposure:
|
diskspace:
|
||||||
exclude: "*"
|
enabled: true
|
||||||
web:
|
endpoint:
|
||||||
base-path: /monitor
|
health:
|
||||||
exposure:
|
probes:
|
||||||
include:
|
enabled: true
|
||||||
- "health"
|
show-details: when-authorized
|
||||||
|
endpoints:
|
||||||
|
jmx:
|
||||||
|
exposure:
|
||||||
|
exclude: "*"
|
||||||
|
web:
|
||||||
|
base-path: /monitor
|
||||||
|
exposure:
|
||||||
|
include:
|
||||||
|
- "health"
|
||||||
|
|||||||
@@ -1,77 +1,74 @@
|
|||||||
server:
|
server:
|
||||||
port: 8080
|
port: 8080
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
application:
|
application:
|
||||||
name: kamco-training-api
|
name: kamco-training-api
|
||||||
|
|
||||||
datasource:
|
datasource:
|
||||||
driver-class-name: org.postgresql.Driver
|
driver-class-name: org.postgresql.Driver
|
||||||
url: jdbc:postgresql://localhost:15432/kamco_training_db
|
url: jdbc:postgresql://localhost:15432/kamco_training_db
|
||||||
username: kamco_cds
|
username: kamco_cds
|
||||||
password: kamco_cds_Q!W@E#R$
|
password: kamco_cds_Q!W@E#R$
|
||||||
hikari:
|
hikari:
|
||||||
minimum-idle: 2
|
minimum-idle: 2
|
||||||
maximum-pool-size: 2
|
maximum-pool-size: 2
|
||||||
connection-timeout: 20000
|
connection-timeout: 20000
|
||||||
idle-timeout: 300000
|
idle-timeout: 300000
|
||||||
max-lifetime: 1800000
|
max-lifetime: 1800000
|
||||||
leak-detection-threshold: 60000
|
leak-detection-threshold: 60000
|
||||||
|
|
||||||
jpa:
|
jpa:
|
||||||
hibernate:
|
hibernate:
|
||||||
ddl-auto: none # 테스트 환경에서는 DDL 자동 생성/수정 비활성화
|
ddl-auto: none # 테스트 환경에서는 DDL 자동 생성/수정 비활성화
|
||||||
properties:
|
properties:
|
||||||
hibernate:
|
hibernate:
|
||||||
hbm2ddl:
|
jakarta:
|
||||||
auto: none
|
persistence:
|
||||||
javax:
|
validation:
|
||||||
persistence:
|
mode: none
|
||||||
validation:
|
jdbc:
|
||||||
mode: none
|
batch_size: 50
|
||||||
jdbc:
|
default_batch_fetch_size: 100
|
||||||
batch_size: 50
|
show-sql: false
|
||||||
default_batch_fetch_size: 100
|
|
||||||
show-sql: false
|
logging:
|
||||||
|
level:
|
||||||
logging:
|
org:
|
||||||
level:
|
springframework:
|
||||||
org:
|
web: DEBUG
|
||||||
springframework:
|
security: DEBUG
|
||||||
web: DEBUG
|
root: INFO
|
||||||
security: DEBUG
|
|
||||||
root: INFO
|
management:
|
||||||
|
health:
|
||||||
management:
|
readinessstate:
|
||||||
health:
|
enabled: true
|
||||||
readinessstate:
|
livenessstate:
|
||||||
enabled: true
|
enabled: true
|
||||||
livenessstate:
|
endpoint:
|
||||||
enabled: true
|
health:
|
||||||
endpoint:
|
probes:
|
||||||
health:
|
enabled: true
|
||||||
probes:
|
show-details: always
|
||||||
enabled: true
|
endpoints:
|
||||||
show-details: always
|
jmx:
|
||||||
endpoints:
|
exposure:
|
||||||
jmx:
|
exclude: "*"
|
||||||
exposure:
|
web:
|
||||||
exclude: "*"
|
base-path: /monitor
|
||||||
web:
|
exposure:
|
||||||
base-path: /monitor
|
include:
|
||||||
exposure:
|
- "health"
|
||||||
include:
|
|
||||||
- "health"
|
jwt:
|
||||||
|
secret: "test_secret_key_for_testing_purposes_only"
|
||||||
jwt:
|
access-token-validity-in-ms: 86400000
|
||||||
secret: "test_secret_key_for_testing_purposes_only"
|
refresh-token-validity-in-ms: 604800000
|
||||||
access-token-validity-in-ms: 86400000
|
|
||||||
refresh-token-validity-in-ms: 604800000
|
token:
|
||||||
|
refresh-cookie-name: kamco-test
|
||||||
token:
|
refresh-cookie-secure: false
|
||||||
refresh-cookie-name: kamco-test
|
|
||||||
refresh-cookie-secure: false
|
member:
|
||||||
|
init_password: test1234!
|
||||||
member:
|
|
||||||
init_password: test1234!
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user