refactor: VMIS 통합 설정 개선 및 RestTemplate 동적 구성 추가

- VMIS RestTemplate 설정을 내부/외부 모드로 분리
  - Internal Mode: 정부 API 호출 설정(빠른 타임아웃)
  - External Mode: 외부 API 호출 설정(완화된 타임아웃)
- application-{profile}.yml에 환경별 VMIS 설정 추가
- RestTemplateProperties -> VmisProperties로 대체하여 설정 통합
  - 타임아웃, 연결 풀, Rate Limit 설정을 모드별로 분기
- 기존 regionCode -> sigunguCode로 수정하여 의미 명확화
- 로그 포맷 개선 및 나열 정보 추가

## 효과
- 환경 구성 단순화 및 명확화
- RestTemplate 설정 관리 용이성 향상
- 코드 유지보수성 및 가독성 개선

 BUILD SUCCESSFUL
internalApi
박성영 1 month ago
parent d0cb4eefbd
commit 6b47e3f84c

@ -1,7 +1,7 @@
package go.kr.project.api.config;
import com.google.common.util.concurrent.RateLimiter;
import egovframework.configProperties.RestTemplateProperties;
import go.kr.project.api.config.properties.VmisProperties;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.config.RequestConfig;
@ -22,24 +22,37 @@ import java.io.IOException;
/**
* RestTemplate
* API RestTemplate Bean
* VMIS Integration Mode
* - Internal Mode: API ( )
* - External Mode: VMIS-interface API ( )
* Apache HttpClient 4
* Rate Limiting: application.yml
*/
@Slf4j
@Configuration
@RequiredArgsConstructor
public class RestTemplateConfig {
private final RestTemplateProperties properties;
private final VmisProperties vmisProperties;
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
// 타임아웃 설정 (application.yml에서 읽어옴)
int connectTimeout = properties.getTimeout().getConnectTimeoutMillis();
int readTimeout = properties.getTimeout().getReadTimeoutMillis();
// VMIS Integration Mode에 따라 적절한 설정 선택
String mode = vmisProperties.getIntegration().getMode();
VmisProperties.RestTemplateProps.ModeConfig config;
log.info("RestTemplate 타임아웃 설정 - connectTimeout: {}ms, readTimeout: {}ms",
if ("internal".equalsIgnoreCase(mode)) {
config = vmisProperties.getRestTemplate().getInternal();
log.info("RestTemplate 설정 - Internal Mode (정부 API 호출용)");
} else {
config = vmisProperties.getRestTemplate().getExternal();
log.info("RestTemplate 설정 - External Mode (외부 VMIS-interface API 호출용)");
}
// 타임아웃 설정
int connectTimeout = config.getTimeout().getConnectTimeoutMillis();
int readTimeout = config.getTimeout().getReadTimeoutMillis();
log.info(" - 타임아웃: connectTimeout={}ms, readTimeout={}ms",
connectTimeout, readTimeout);
RequestConfig requestConfig = RequestConfig.custom()
@ -48,14 +61,14 @@ public class RestTemplateConfig {
.setConnectionRequestTimeout(connectTimeout)
.build();
// 연결 풀 관리 설정 (application.yml에서 읽어옴)
// 연결 풀 관리 설정
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(properties.getConnectionPool().getMaxTotal());
cm.setDefaultMaxPerRoute(properties.getConnectionPool().getMaxPerRoute());
cm.setMaxTotal(config.getConnectionPool().getMaxTotal());
cm.setDefaultMaxPerRoute(config.getConnectionPool().getMaxPerRoute());
log.info("RestTemplate 연결 풀 설정 - maxTotal: {}, maxPerRoute: {}",
properties.getConnectionPool().getMaxTotal(),
properties.getConnectionPool().getMaxPerRoute());
log.info(" - 연결 풀: maxTotal={}, maxPerRoute={}",
config.getConnectionPool().getMaxTotal(),
config.getConnectionPool().getMaxPerRoute());
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
@ -70,12 +83,12 @@ public class RestTemplateConfig {
.build();
// Rate Limiter 인터셉터 추가 (0 이하면 제한 없음)
double permitsPerSecond = properties.getRateLimit().getPermitsPerSecond();
double permitsPerSecond = config.getRateLimit().getPermitsPerSecond();
if (permitsPerSecond > 0) {
log.info("RestTemplate Rate Limiter 활성화 - 초당 {} 건으로 제한", permitsPerSecond);
log.info(" - Rate Limiter: 활성화 (초당 {} 건으로 제한)", permitsPerSecond);
restTemplate.getInterceptors().add(new RateLimitInterceptor(permitsPerSecond));
} else {
log.info("RestTemplate Rate Limiter 비활성화 - 제한 없음");
log.info(" - Rate Limiter: 비활성화 (제한 없음)");
}
return restTemplate;

@ -79,9 +79,11 @@ public class VmisIntegrationConfig {
log.info(" - GPKI 암호화: {}",
vmisProperties.getGpki().getEnabled());
log.info(" - 연결 타임아웃: {}ms",
vmisProperties.getGov().getConnectTimeoutMillis());
vmisProperties.getRestTemplate().getInternal().getTimeout().getConnectTimeoutMillis());
log.info(" - 읽기 타임아웃: {}ms",
vmisProperties.getGov().getReadTimeoutMillis());
vmisProperties.getRestTemplate().getInternal().getTimeout().getReadTimeoutMillis());
log.info(" - Rate Limit: 초당 {} 건",
vmisProperties.getRestTemplate().getInternal().getRateLimit().getPermitsPerSecond());
if ("Y".equalsIgnoreCase(vmisProperties.getGpki().getEnabled())) {
log.info(" - GPKI 인증서 서버 ID: {}",
@ -101,9 +103,11 @@ public class VmisIntegrationConfig {
log.info(" - 외부 API URL: {}",
vmisProperties.getExternal().getApi().getUrl());
log.info(" - 연결 타임아웃: {}ms",
vmisProperties.getExternal().getApi().getConnectTimeoutMillis());
vmisProperties.getRestTemplate().getExternal().getTimeout().getConnectTimeoutMillis());
log.info(" - 읽기 타임아웃: {}ms",
vmisProperties.getExternal().getApi().getReadTimeoutMillis());
vmisProperties.getRestTemplate().getExternal().getTimeout().getReadTimeoutMillis());
log.info(" - Rate Limit: 초당 {} 건",
vmisProperties.getRestTemplate().getExternal().getRateLimit().getPermitsPerSecond());
log.warn(" - 외부 VMIS-interface 서버가 실행 중이어야 합니다.");
log.info(" - 기본사항 조회: POST {}/basic",
vmisProperties.getExternal().getApi().getUrl());

@ -12,6 +12,8 @@ public class VmisProperties {
@NotNull
private IntegrationProps integration = new IntegrationProps();
@NotNull
private RestTemplateProps restTemplate = new RestTemplateProps();
@NotNull
private SystemProps system = new SystemProps();
@NotNull
private GpkiProps gpki = new GpkiProps();
@ -22,6 +24,8 @@ public class VmisProperties {
public IntegrationProps getIntegration() { return integration; }
public void setIntegration(IntegrationProps integration) { this.integration = integration; }
public RestTemplateProps getRestTemplate() { return restTemplate; }
public void setRestTemplate(RestTemplateProps restTemplate) { this.restTemplate = restTemplate; }
public SystemProps getSystem() { return system; }
public void setSystem(SystemProps system) { this.system = system; }
public GpkiProps getGpki() { return gpki; }
@ -49,15 +53,9 @@ public class VmisProperties {
public static class ApiProps {
@NotBlank
private String url = "http://localhost:8081/api/v1/vehicles";
private int connectTimeoutMillis = 5000;
private int readTimeoutMillis = 10000;
public String getUrl() { return url; }
public void setUrl(String url) { this.url = url; }
public int getConnectTimeoutMillis() { return connectTimeoutMillis; }
public void setConnectTimeoutMillis(int connectTimeoutMillis) { this.connectTimeoutMillis = connectTimeoutMillis; }
public int getReadTimeoutMillis() { return readTimeoutMillis; }
public void setReadTimeoutMillis(int readTimeoutMillis) { this.readTimeoutMillis = readTimeoutMillis; }
}
}
@ -67,7 +65,7 @@ public class VmisProperties {
/** INFO_SYS_IP */
private String infoSysIp;
/** 시군구코드 (SIGUNGU_CODE) */
private String regionCode;
private String sigunguCode;
private String departmentCode;
// 담당자 정보
private String chargerId;
@ -78,8 +76,8 @@ public class VmisProperties {
public void setInfoSysId(String infoSysId) { this.infoSysId = infoSysId; }
public String getInfoSysIp() { return infoSysIp; }
public void setInfoSysIp(String infoSysIp) { this.infoSysIp = infoSysIp; }
public String getRegionCode() { return regionCode; }
public void setRegionCode(String regionCode) { this.regionCode = regionCode; }
public String getSigunguCode() { return sigunguCode; }
public void setSigunguCode(String sigunguCode) { this.sigunguCode = sigunguCode; }
public String getDepartmentCode() { return departmentCode; }
public void setDepartmentCode(String departmentCode) { this.departmentCode = departmentCode; }
public String getChargerId() { return chargerId; }
@ -144,6 +142,61 @@ public class VmisProperties {
public boolean isEnabledFlag() { return "Y".equalsIgnoreCase(enabled); }
}
public static class RestTemplateProps {
@NotNull
private ModeConfig internal = new ModeConfig();
@NotNull
private ModeConfig external = new ModeConfig();
public ModeConfig getInternal() { return internal; }
public void setInternal(ModeConfig internal) { this.internal = internal; }
public ModeConfig getExternal() { return external; }
public void setExternal(ModeConfig external) { this.external = external; }
public static class ModeConfig {
@NotNull
private TimeoutConfig timeout = new TimeoutConfig();
@NotNull
private ConnectionPoolConfig connectionPool = new ConnectionPoolConfig();
@NotNull
private RateLimitConfig rateLimit = new RateLimitConfig();
public TimeoutConfig getTimeout() { return timeout; }
public void setTimeout(TimeoutConfig timeout) { this.timeout = timeout; }
public ConnectionPoolConfig getConnectionPool() { return connectionPool; }
public void setConnectionPool(ConnectionPoolConfig connectionPool) { this.connectionPool = connectionPool; }
public RateLimitConfig getRateLimit() { return rateLimit; }
public void setRateLimit(RateLimitConfig rateLimit) { this.rateLimit = rateLimit; }
public static class TimeoutConfig {
private int connectTimeoutMillis = 10000;
private int readTimeoutMillis = 12000;
public int getConnectTimeoutMillis() { return connectTimeoutMillis; }
public void setConnectTimeoutMillis(int connectTimeoutMillis) { this.connectTimeoutMillis = connectTimeoutMillis; }
public int getReadTimeoutMillis() { return readTimeoutMillis; }
public void setReadTimeoutMillis(int readTimeoutMillis) { this.readTimeoutMillis = readTimeoutMillis; }
}
public static class ConnectionPoolConfig {
private int maxTotal = 100;
private int maxPerRoute = 20;
public int getMaxTotal() { return maxTotal; }
public void setMaxTotal(int maxTotal) { this.maxTotal = maxTotal; }
public int getMaxPerRoute() { return maxPerRoute; }
public void setMaxPerRoute(int maxPerRoute) { this.maxPerRoute = maxPerRoute; }
}
public static class RateLimitConfig {
private double permitsPerSecond = 5.0;
public double getPermitsPerSecond() { return permitsPerSecond; }
public void setPermitsPerSecond(double permitsPerSecond) { this.permitsPerSecond = permitsPerSecond; }
}
}
}
public static class GovProps {
@NotBlank
private String scheme = "http";
@ -151,8 +204,6 @@ public class VmisProperties {
private String host;
@NotBlank
private String basePath;
private int connectTimeoutMillis = 5000;
private int readTimeoutMillis = 10000;
@NotNull
private Services services = new Services();
@ -162,10 +213,6 @@ public class VmisProperties {
public void setHost(String host) { this.host = host; }
public String getBasePath() { return basePath; }
public void setBasePath(String basePath) { this.basePath = basePath; }
public int getConnectTimeoutMillis() { return connectTimeoutMillis; }
public void setConnectTimeoutMillis(int connectTimeoutMillis) { this.connectTimeoutMillis = connectTimeoutMillis; }
public int getReadTimeoutMillis() { return readTimeoutMillis; }
public void setReadTimeoutMillis(int readTimeoutMillis) { this.readTimeoutMillis = readTimeoutMillis; }
public Services getServices() { return services; }
public void setServices(Services services) { this.services = services; }

@ -33,14 +33,14 @@ public class VmisRequestEnricher {
if (req == null) continue;
req.setInfoSysId(sys.getInfoSysId());
req.setInfoSysIp(sys.getInfoSysIp());
req.setSigunguCode(sys.getRegionCode());
req.setSigunguCode(sys.getSigunguCode());
req.setCntcInfoCode(cntc);
req.setChargerId(sys.getChargerId());
req.setChargerIp(sys.getChargerIp());
req.setChargerNm(sys.getChargerNm());
}
log.debug("[ENRICH] basic: applied INFO_SYS_ID={}, INFO_SYS_IP={}, SIGUNGU_CODE={}, CNTC_INFO_CODE={}",
sys.getInfoSysId(), sys.getInfoSysIp(), sys.getRegionCode(), cntc);
sys.getInfoSysId(), sys.getInfoSysIp(), sys.getSigunguCode(), cntc);
}
public void enrichLedger(Envelope<LedgerRequest> envelope) {
@ -51,13 +51,13 @@ public class VmisRequestEnricher {
if (req == null) continue;
req.setInfoSysId(sys.getInfoSysId());
req.setInfoSysIp(sys.getInfoSysIp());
req.setSigunguCode(sys.getRegionCode());
req.setSigunguCode(sys.getSigunguCode());
req.setCntcInfoCode(cntc);
req.setChargerId(sys.getChargerId());
req.setChargerIp(sys.getChargerIp());
req.setChargerNm(sys.getChargerNm());
}
log.debug("[ENRICH] ledger: applied INFO_SYS_ID={}, INFO_SYS_IP={}, SIGUNGU_CODE={}, CNTC_INFO_CODE={}",
sys.getInfoSysId(), sys.getInfoSysIp(), sys.getRegionCode(), cntc);
sys.getInfoSysId(), sys.getInfoSysIp(), sys.getSigunguCode(), cntc);
}
}

@ -149,4 +149,84 @@ file:
juso:
api:
key: "devU01TX0FVVEgyMDI1MDkyMjEyMTM1NzExNjI0NzE="
url: "https://business.juso.go.kr/addrlink/addrLinkApiJsonp.do"
url: "https://business.juso.go.kr/addrlink/addrLinkApiJsonp.do"
# ===== VMIS 통합 설정 (Dev 환경) =====
vmis:
integration:
mode: external # internal: 내부 VMIS 모듈 직접 호출, external: 외부 REST API 호출
# RestTemplate 설정 (모드별 분기)
rest-template:
# Internal Mode용 설정 (정부 API 호출)
internal:
timeout:
connect-timeout-millis: 5000 # 연결 타임아웃 (정부 API는 빠른 응답 기대)
read-timeout-millis: 10000 # 읽기 타임아웃
connection-pool:
max-total: 100 # 최대 연결 수
max-per-route: 20 # 경로당 최대 연결 수
rate-limit:
permits-per-second: 5.0 # 초당 5건 제한
# External Mode용 설정 (외부 VMIS-interface API 호출)
external:
timeout:
connect-timeout-millis: 10000 # 연결 타임아웃 (외부 서버 여유 있게)
read-timeout-millis: 12000 # 읽기 타임아웃
connection-pool:
max-total: 100 # 최대 연결 수
max-per-route: 20 # 경로당 최대 연결 수
rate-limit:
permits-per-second: 5.0 # 초당 5건 제한
# Internal Mode 설정 (내부 VMIS 모듈 사용 시)
system:
infoSysId: "41-345" # 정보시스템 ID
infoSysIp: "105.19.10.135" # 시스템 IP
sigunguCode: "41460" # 시군구 코드
departmentCode: "" # 부서 코드
chargerId: "" # 담당자 ID
chargerIp: "" # 담당자 IP
chargerNm: "" # 담당자명
# GPKI 암호화 설정 (개발 환경: 비활성화)
gpki:
enabled: "N" # 개발 환경에서는 암호화 미사용
useSign: true
charset: "UTF-8"
certServerId: "SVR5640020001"
targetServerId: "SVR1500000015"
ldap: true
gpkiLicPath: "src/GPKI/conf"
certFilePath: "src/GPKI/certs"
envCertFilePathName: "src/GPKI/certs/SVR5640020001_env.cer"
envPrivateKeyFilePathName: "src/GPKI/certs/SVR5640020001_env.key"
envPrivateKeyPasswd: "*sbm204221"
sigCertFilePathName: "src/GPKI/certs/SVR5640020001_sig.cer"
sigPrivateKeyFilePathName: "src/GPKI/certs/SVR5640020001_sig.key"
sigPrivateKeyPasswd: "*sbm204221"
# 정부 API 연동 설정 (개발 행정망)
# 타임아웃 설정은 공통 rest-template 설정 사용
gov:
scheme: "http"
host: "10.188.225.94:29001" # 개발(DEV) 행정망
basePath: "/piss/api/molit"
services:
basic: # 시군구연계 자동차기본사항조회
path: "/SignguCarBassMatterInqireService"
cntcInfoCode: "AC1_FD11_01"
apiKey: "05e8d748fb366a0831dce71a32424460746a72d591cf483ccc130534dd51e394"
cvmisApikey: "014F9215-B6D9A3B6-4CED5225-68408C46"
ledger: # 시군구연계 자동차등록원부(갑)
path: "/SignguCarLedgerFrmbkService"
cntcInfoCode: "AC1_FD11_02"
apiKey: "1beeb01857c2e7e9b41c002b007ccb9754d9c272f66d4bb64fc45b302c69e529"
cvmisApikey: "63DF159B-7B9C64C5-86CCB15C-5F93E750"
# External Mode 설정 (외부 REST API 사용 시)
# 타임아웃 설정은 공통 rest-template 설정 사용
external:
api:
url: "http://localhost:8081/api/v1/vehicles" # VMIS-interface 서버 URL (개발)

@ -158,4 +158,84 @@ file:
juso:
api:
key: "devU01TX0FVVEgyMDI1MDkyMjEyMTM1NzExNjI0NzE="
url: "https://business.juso.go.kr/addrlink/addrLinkApiJsonp.do"
url: "https://business.juso.go.kr/addrlink/addrLinkApiJsonp.do"
# ===== VMIS 통합 설정 (Local 환경) =====
vmis:
integration:
mode: external # internal: 내부 VMIS 모듈 직접 호출, external: 외부 REST API 호출
# RestTemplate 설정 (모드별 분기)
rest-template:
# Internal Mode용 설정 (정부 API 호출)
internal:
timeout:
connect-timeout-millis: 5000 # 연결 타임아웃 (정부 API는 빠른 응답 기대)
read-timeout-millis: 10000 # 읽기 타임아웃
connection-pool:
max-total: 100 # 최대 연결 수
max-per-route: 20 # 경로당 최대 연결 수
rate-limit:
permits-per-second: 5.0 # 초당 5건 제한
# External Mode용 설정 (외부 VMIS-interface API 호출)
external:
timeout:
connect-timeout-millis: 10000 # 연결 타임아웃 (외부 서버 여유 있게)
read-timeout-millis: 12000 # 읽기 타임아웃
connection-pool:
max-total: 100 # 최대 연결 수
max-per-route: 20 # 경로당 최대 연결 수
rate-limit:
permits-per-second: 5.0 # 초당 5건 제한
# Internal Mode 설정 (내부 VMIS 모듈 사용 시)
system:
infoSysId: "41-345" # 정보시스템 ID
infoSysIp: "${SERVER_IP:105.19.10.135}" # 시스템 IP
sigunguCode: "41460" # 시군구 코드
departmentCode: "" # 부서 코드
chargerId: "" # 담당자 ID
chargerIp: "" # 담당자 IP
chargerNm: "" # 담당자명
# GPKI 암호화 설정 (로컬 환경: 비활성화)
gpki:
enabled: "N" # 로컬 환경에서는 암호화 미사용
useSign: true
charset: "UTF-8"
certServerId: "SVR5640020001"
targetServerId: "SVR1500000015"
ldap: true
gpkiLicPath: "src/GPKI/conf"
certFilePath: "src/GPKI/certs"
envCertFilePathName: "src/GPKI/certs/SVR5640020001_env.cer"
envPrivateKeyFilePathName: "src/GPKI/certs/SVR5640020001_env.key"
envPrivateKeyPasswd: "${GPKI_ENV_PASSWORD:*sbm204221}"
sigCertFilePathName: "src/GPKI/certs/SVR5640020001_sig.cer"
sigPrivateKeyFilePathName: "src/GPKI/certs/SVR5640020001_sig.key"
sigPrivateKeyPasswd: "${GPKI_SIG_PASSWORD:*sbm204221}"
# 정부 API 연동 설정 (개발 행정망)
# 타임아웃 설정은 공통 rest-template 설정 사용
gov:
scheme: "http"
host: "10.188.225.94:29001" # 개발(DEV) 행정망
basePath: "/piss/api/molit"
services:
basic: # 시군구연계 자동차기본사항조회
path: "/SignguCarBassMatterInqireService"
cntcInfoCode: "AC1_FD11_01"
apiKey: "${GOV_API_KEY_BASIC:05e8d748fb366a0831dce71a32424460746a72d591cf483ccc130534dd51e394}"
cvmisApikey: "${GOV_CVMIS_API_KEY_BASIC:014F9215-B6D9A3B6-4CED5225-68408C46}"
ledger: # 시군구연계 자동차등록원부(갑)
path: "/SignguCarLedgerFrmbkService"
cntcInfoCode: "AC1_FD11_02"
apiKey: "${GOV_API_KEY_LEDGER:1beeb01857c2e7e9b41c002b007ccb9754d9c272f66d4bb64fc45b302c69e529}"
cvmisApikey: "${GOV_CVMIS_API_KEY_LEDGER:63DF159B-7B9C64C5-86CCB15C-5F93E750}"
# External Mode 설정 (외부 REST API 사용 시)
# 타임아웃 설정은 공통 rest-template 설정 사용
external:
api:
url: "http://localhost:8081/api/v1/vehicles" # VMIS-interface 서버 URL (로컬)

@ -156,4 +156,85 @@ juso:
api:
# key: "U01TX0FVVEgyMDE5MDcxNzE2NTM0OTEwODg5MTY=" # 기존 서버 키
key: "devU01TX0FVVEgyMDI1MDYxOTE1MjgxODExNTg2MTY="
url: "http://10.182.60.20/addrlink/addrLinkApiJsonp.do"
url: "http://10.182.60.20/addrlink/addrLinkApiJsonp.do"
# ===== VMIS 통합 설정 (운영 환경) =====
# 주의: 실제 운영 키/호스트는 배포 환경 변수나 외부 설정(Secret)로 주입 권장
vmis:
integration:
mode: external # internal: 내부 VMIS 모듈 직접 호출, external: 외부 REST API 호출
# RestTemplate 설정 (모드별 분기)
rest-template:
# Internal Mode용 설정 (정부 API 호출)
internal:
timeout:
connect-timeout-millis: 5000 # 연결 타임아웃 (정부 API는 빠른 응답 기대)
read-timeout-millis: 10000 # 읽기 타임아웃
connection-pool:
max-total: 100 # 최대 연결 수
max-per-route: 20 # 경로당 최대 연결 수
rate-limit:
permits-per-second: 5.0 # 초당 5건 제한
# External Mode용 설정 (외부 VMIS-interface API 호출)
external:
timeout:
connect-timeout-millis: 10000 # 연결 타임아웃 (외부 서버 여유 있게)
read-timeout-millis: 12000 # 읽기 타임아웃
connection-pool:
max-total: 100 # 최대 연결 수
max-per-route: 20 # 경로당 최대 연결 수
rate-limit:
permits-per-second: 5.0 # 초당 5건 제한
# Internal Mode 설정 (내부 VMIS 모듈 사용 시)
system:
infoSysId: "41-345" # 운영 실제값으로 교체 필요
infoSysIp: "105.19.10.135"
sigunguCode: "41460" # 시군구 코드 (운영 실제값으로 교체 필요)
departmentCode: "" # 운영 실제값
chargerId: ""
chargerIp: ""
chargerNm: ""
# GPKI 암호화 설정 (운영 환경: 활성화)
gpki:
enabled: "Y" # 운영 환경에서는 암호화 사용
useSign: true
charset: "UTF-8"
certServerId: "SVR5640020001" # 운영 인증서 ID로 교체 필요
targetServerId: "SVR1500000015"
ldap: true
gpkiLicPath: "src/GPKI/conf"
certFilePath: "src/GPKI/certs"
envCertFilePathName: "src/GPKI/certs/SVR5640020001_env.cer"
envPrivateKeyFilePathName: "src/GPKI/certs/SVR5640020001_env.key"
envPrivateKeyPasswd: "*sbm204221"
sigCertFilePathName: "src/GPKI/certs/SVR5640020001_sig.cer"
sigPrivateKeyFilePathName: "src/GPKI/certs/SVR5640020001_sig.key"
sigPrivateKeyPasswd: "*sbm204221"
# 정부 API 연동 설정 (운영 행정망)
# 타임아웃 설정은 공통 rest-template 설정 사용
gov:
scheme: "http"
host: "10.188.225.25:29001" # 운영 행정망
basePath: "/piss/api/molit"
services:
basic: # 시군구연계 자동차기본사항조회
path: "/SignguCarBassMatterInqireService"
cntcInfoCode: "AC1_FD11_01"
apiKey: "05e8d748fb366a0831dce71a32424460746a72d591cf483ccc130534dd51e394"
cvmisApikey: "014F9215-B6D9A3B6-4CED5225-68408C46"
ledger: # 시군구연계 자동차등록원부(갑)
path: "/SignguCarLedgerFrmbkService"
cntcInfoCode: "AC1_FD11_02"
apiKey: "1beeb01857c2e7e9b41c002b007ccb9754d9c272f66d4bb64fc45b302c69e529"
cvmisApikey: "63DF159B-7B9C64C5-86CCB15C-5F93E750"
# External Mode 설정 (외부 REST API 사용 시)
# 타임아웃 설정은 공통 rest-template 설정 사용
external:
api:
url: "http://운영서버IP:8080/api/v1/vehicles" # VMIS-interface 서버 URL (운영)

@ -59,17 +59,6 @@ query-executor:
transaction:
timeout-minutes: 5 # 트랜잭션 타임아웃 (분 단위, 기본값: 5분)
# RestTemplate configuration
rest-template:
timeout:
connect-timeout-millis: 10000 # 연결 타임아웃 (밀리초, 기본값: 10초)
read-timeout-millis: 12000 # 읽기 타임아웃 (밀리초, 기본값: 12초)
connection-pool:
max-total: 100 # 최대 연결 수 (기본값: 100)
max-per-route: 20 # 경로당 최대 연결 수 (기본값: 20)
rate-limit:
permits-per-second: 5.0 # 초당 요청 제한 (0 이하: 제한 없음, 기본값: 5건/초)
# Mariadb aes_secret_key # 참고용도, 실제는 DB function에 하드코딩되어 있음
aes-secret-key: Copyright(c)2015-xit.co.kr
@ -103,60 +92,7 @@ interceptor:
- /v3/api-docs/** #Swagger API 문서
# ===== VMIS 통합 설정 =====
# 차량 정보 조회 모드 설정
vmis:
integration:
mode: internal # internal: 내부 VMIS 모듈 직접 호출, external: 외부 REST API 호출 (기본값: external)
# Internal Mode 설정 (내부 VMIS 모듈 사용 시)
system:
infoSysId: "41-345" # 정보시스템 ID
infoSysIp: "${SERVER_IP:105.19.10.135}" # 시스템 IP
regionCode: "41460" # 지역 코드
departmentCode: "" # 부서 코드
chargerId: "" # 담당자 ID
chargerIp: "" # 담당자 IP
chargerNm: "" # 담당자명
# GPKI 암호화 설정 (운영 환경에서만 사용)
gpki:
enabled: "N" # Y: 암호화 사용, N: 암호화 미사용 (개발 환경: N, 운영 환경: Y)
useSign: true
charset: "UTF-8"
certServerId: "SVR5640020001"
targetServerId: "SVR1500000015"
ldap: true
gpkiLicPath: "src/GPKI/conf"
certFilePath: "src/GPKI/certs"
envCertFilePathName: "src/GPKI/certs/SVR5640020001_env.cer"
envPrivateKeyFilePathName: "src/GPKI/certs/SVR5640020001_env.key"
envPrivateKeyPasswd: "${GPKI_ENV_PASSWORD:*sbm204221}"
sigCertFilePathName: "src/GPKI/certs/SVR5640020001_sig.cer"
sigPrivateKeyFilePathName: "src/GPKI/certs/SVR5640020001_sig.key"
sigPrivateKeyPasswd: "${GPKI_SIG_PASSWORD:*sbm204221}"
# 정부 API 연동 설정
gov:
scheme: "http"
host: "10.188.225.94:29001" # 개발(DEV) 행정망
basePath: "/piss/api/molit"
connectTimeoutMillis: 5000
readTimeoutMillis: 10000
services:
basic: # 시군구연계 자동차기본사항조회
path: "/SignguCarBassMatterInqireService"
cntcInfoCode: "AC1_FD11_01"
apiKey: "${GOV_API_KEY_BASIC:05e8d748fb366a0831dce71a32424460746a72d591cf483ccc130534dd51e394}"
cvmisApikey: "${GOV_CVMIS_API_KEY_BASIC:014F9215-B6D9A3B6-4CED5225-68408C46}"
ledger: # 시군구연계 자동차등록원부(갑)
path: "/SignguCarLedgerFrmbkService"
cntcInfoCode: "AC1_FD11_02"
apiKey: "${GOV_API_KEY_LEDGER:1beeb01857c2e7e9b41c002b007ccb9754d9c272f66d4bb64fc45b302c69e529}"
cvmisApikey: "${GOV_CVMIS_API_KEY_LEDGER:63DF159B-7B9C64C5-86CCB15C-5F93E750}"
# External Mode 설정 (외부 REST API 사용 시)
external:
api:
url: "http://localhost:8081/api/v1/vehicles" # VMIS-interface 서버 URL
connectTimeoutMillis: 5000
readTimeoutMillis: 10000
# 환경별 설정은 application-{profile}.yml 파일 참고
# - application-local.yml: 로컬 개발 환경
# - application-dev.yml: 개발 환경
# - application-prd.yml: 운영 환경

Loading…
Cancel
Save