최초반영

This commit is contained in:
nhj 2025-08-11 18:08:32 +09:00
commit 7ed64a36d8
163 changed files with 14095 additions and 0 deletions

23
.classpath Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="bin/main" path="src/main/java">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="bin/main" path="src/main/resources">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-16/"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="bin/default"/>
</classpath>

6
.gitattributes vendored Normal file
View File

@ -0,0 +1,6 @@
#
# https://help.github.com/articles/dealing-with-line-endings/
#
# These are explicitly windows files and should use crlf
*.bat text eol=crlf

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
# Ignore Gradle project-specific cache directory
.gradle
# Ignore Gradle build output directory
build

41
.project Normal file
View File

@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>urpItms_30_Batch</name>
<comment>Project lib created by Buildship.</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.springframework.ide.eclipse.boot.validation.springbootbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,13 @@
arguments=
auto.sync=false
build.scans.enabled=false
connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
connection.project.dir=
eclipse.preferences.version=1
gradle.user.home=
java.home=
jvm.arguments=
offline.mode=false
override.workspace.settings=false
show.console.view=false
show.executions.view=false

View File

@ -0,0 +1,4 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=16
org.eclipse.jdt.core.compiler.compliance=16
org.eclipse.jdt.core.compiler.source=16

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="urpItms_30_Batch">
<property name="context-root" value="urpItms_30_Batch"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
</wb-module>
</project-modules>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="jst.java"/>
<fixed facet="jst.web"/>
<installed facet="jst.web" version="2.4"/>
<installed facet="jst.java" version="16"/>
</faceted-project>

View File

@ -0,0 +1,2 @@
boot.validation.initialized=true
eclipse.preferences.version=1

View File

@ -0,0 +1,62 @@
# Service port
# server:
# port: 9002
# JPA 설정, JSP 설정
spring:
devtools:
livereload:
enabled: true
# Primary db information
primarydb:
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbcUrl: jdbc:log4jdbc:mariadb://109.26.11.21:3306/ur_itms_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul&rewriteBatchedStatements=true
username: g9IwFesTyIloXVpUnfOX0g==
password: E4SOtjDqqO79BQERc/eaTw==
maximumPoolSize: 35
minimumIdle: 2
connectionTimeout: 3000
idleTimeout: 300000
testOnBorrow: true
validationQuery: SELECT 1
# SQL Log 관련 setting
log4jdbc:
spylogdelegator:
name: net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
dump:
sql:
maxlinelength: 0
logging.level.jdbc.sqltiming: false
logging.level.jdbc.audit: false
logging.level.jdbc.resultset: false
logging.level.jdbc.connection: false
# 개발중
logging.level.jdbc.sqlonly: info
logging.level.jdbc.resultsettable: info
# 운영중
# logging.level.jdbc.sqlonly: false
# logging.level.jdbc.resultsettable: false
# custom 설정
custom:
api_server : null
sendmail:
id: tW9kMpd3SiAnf3RQBOZapw==
password: Tkkj8p2PYfZ+AmpQMPLHF8ksj8vrtJouj6xczU8ShM8=
port: 587
host: smtp.gmail.com
sendEmail: hhjj0701@gmail.com
senderName: 나혁제
socketFactory-class: javax.net.ssl.SSLSocketFactory
supplier: gmail.com
sendkakaoTalk:
serviceId: ncp:kkobizmsg:kr:349487487272:uritms
accessKey: ncp_iam_BPAMKR4Le2ali6vfRCsG
secretKey: ncp_iam_BPKMKRIOXMe91u5YQoPjmk5WZ2A1FNEcoR
friendId: 유알피-uritsm
api_search_server: http://109.26.11.21:48381
# api_search_server: http://192.168.8.138:48381

View File

@ -0,0 +1,85 @@
# Service port
server:
port: 11030
# JPA 설정, JSP 설정
spring:
devtools:
livereload:
enabled: true
# Primary db information
primarydb:
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbcUrl: jdbc:log4jdbc:mariadb://192.10.10.203:3306/ur_itms_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul&rewriteBatchedStatements=true
username: g9IwFesTyIloXVpUnfOX0g==
password: E4SOtjDqqO79BQERc/eaTw==
maximumPoolSize: 35
minimumIdle: 2
connectionTimeout: 3000
idleTimeout: 300000
testOnBorrow: true
validationQuery: SELECT 1
# kicinsadb db information
kicinsadb:
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbcUrl: jdbc:log4jdbc:oracle:thin:@192.10.10.19:1521:gwdev
username: mLq9nSgZHzZBmuOmyvjahQ==
password: C7+TsdsHhTcGiH6JSupSeA==
maximumPoolSize: 35
minimumIdle: 2
connectionTimeout: 3000
idleTimeout: 300000
testOnBorrow: true
validationQuery: SELECT 1
# SQL Log 관련 setting
log4jdbc:
spylogdelegator:
name: net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
dump:
sql:
maxlinelength: 0
logging.level.jdbc.sqltiming: false
logging.level.jdbc.audit: false
logging.level.jdbc.resultset: false
logging.level.jdbc.connection: false
# 개발중
logging.level.jdbc.sqlonly: info
logging.level.jdbc.resultsettable: info
# 운영중
# logging.level.jdbc.sqlonly: false
# logging.level.jdbc.resultsettable: false
# custom 설정
custom:
api_server : null
sendmail:
id: tW9kMpd3SiAnf3RQBOZapw==
password: Tkkj8p2PYfZ+AmpQMPLHF8ksj8vrtJouj6xczU8ShM8=
port: 587
host: smtp.gmail.com
sendEmail: hhjj0701@gmail.com
senderName: 나혁제
socketFactory-class: javax.net.ssl.SSLSocketFactory
supplier: gmail.com
sendkakaoTalk:
serviceId: ncp:kkobizmsg:kr:349487487272:uritms
accessKey: ncp_iam_BPAMKR4Le2ali6vfRCsG
secretKey: ncp_iam_BPKMKRIOXMe91u5YQoPjmk5WZ2A1FNEcoR
friendId: 유알피-uritsm
# 검색서버
api_search_server: http://192.10.10.203:48381
# kicc 메일서버
api_kic_mail_server : https://devkicmail.kic.go.kr
# api_kic_mail_server : https://kicmail.kic.go.kr
# kicc 메신저 서버
api_kic_msg_server : http://devtalk.kic.go.kr
api_kic_msg_key : 73f26d49-b014-41a9-a184-24c34c893701
# api_kic_msg_server : http://talk.kic.go.kr
# api_kic_msg_key : eebe896f-1608-456f-80ff-282d1024c25c
client : kic

View File

@ -0,0 +1,81 @@
# Service port
server:
port: 12030
# JPA 설정, JSP 설정
spring:
devtools:
livereload:
enabled: true
# Primary db information
primarydb:
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbcUrl: jdbc:log4jdbc:mariadb://192.10.10.203:3306/ur_itms_rel_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul&rewriteBatchedStatements=true
username: YvRZ5jyhmB6gwVSUGBOqNMQB00k6OZZSfUH5ZU4GEFs=
password: E4SOtjDqqO79BQERc/eaTw==
maximumPoolSize: 35
minimumIdle: 2
connectionTimeout: 3000
idleTimeout: 300000
testOnBorrow: true
validationQuery: SELECT 1
# kicinsadb db information
kicinsadb:
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbcUrl: jdbc:log4jdbc:oracle:thin:@192.10.10.242:1521:gwprd2
username: mLq9nSgZHzZBmuOmyvjahQ==
password: F4KWP/A4aPptqZO9gZUdqg==
maximumPoolSize: 35
minimumIdle: 2
connectionTimeout: 3000
idleTimeout: 300000
testOnBorrow: true
validationQuery: SELECT 1
# SQL Log 관련 setting
log4jdbc:
spylogdelegator:
name: net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
dump:
sql:
maxlinelength: 0
logging.level.jdbc.sqltiming: false
logging.level.jdbc.audit: false
logging.level.jdbc.resultset: false
logging.level.jdbc.connection: false
# 개발중
logging.level.jdbc.sqlonly: info
logging.level.jdbc.resultsettable: info
# 운영중
# logging.level.jdbc.sqlonly: false
# logging.level.jdbc.resultsettable: false
# custom 설정
custom:
api_server : null
sendmail:
id: tW9kMpd3SiAnf3RQBOZapw==
password: Tkkj8p2PYfZ+AmpQMPLHF8ksj8vrtJouj6xczU8ShM8=
port: 587
host: smtp.gmail.com
sendEmail: hhjj0701@gmail.com
senderName: 나혁제
socketFactory-class: javax.net.ssl.SSLSocketFactory
supplier: gmail.com
sendkakaoTalk:
serviceId: ncp:kkobizmsg:kr:349487487272:uritms
accessKey: ncp_iam_BPAMKR4Le2ali6vfRCsG
secretKey: ncp_iam_BPKMKRIOXMe91u5YQoPjmk5WZ2A1FNEcoR
friendId: 유알피-uritsm
api_search_server: http://192.10.10.203:49381
# kicc 메일서버
api_kic_mail_server : https://kicmail.kic.go.kr
# kicc 메신저 서버
api_kic_msg_server : http://talk.kic.go.kr
api_kic_msg_key : eebe896f-1608-456f-80ff-282d1024c25c
client : kic

View File

@ -0,0 +1,81 @@
# Service port
# server:
# port: 11030
# JPA 설정, JSP 설정
spring:
devtools:
livereload:
enabled: true
# Primary db information
primarydb:
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbcUrl: jdbc:log4jdbc:mariadb://192.168.8.131:3306/ur_itms_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul&rewriteBatchedStatements=true
username: g9IwFesTyIloXVpUnfOX0g==
password: E4SOtjDqqO79BQERc/eaTw==
maximumPoolSize: 35
minimumIdle: 2
connectionTimeout: 3000
idleTimeout: 300000
testOnBorrow: true
validationQuery: SELECT 1
# kicinsadb db information
kicinsadb:
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbcUrl: jdbc:log4jdbc:oracle:thin:@192.168.8.132:1521:XE
username: Lp1nYnFre15DjG/Y36UNWA== ## TEST01
password: E4SOtjDqqO79BQERc/eaTw== ## 123456
maximumPoolSize: 35
minimumIdle: 2
connectionTimeout: 3000
idleTimeout: 300000
testOnBorrow: true
validationQuery: SELECT 1
# SQL Log 관련 setting
log4jdbc:
spylogdelegator:
name: net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
dump:
sql:
maxlinelength: 0
logging.level.jdbc.sqltiming: false
logging.level.jdbc.audit: false
logging.level.jdbc.resultset: false
logging.level.jdbc.connection: false
# 개발중
logging.level.jdbc.sqlonly: info
logging.level.jdbc.resultsettable: info
# 운영중
# logging.level.jdbc.sqlonly: false
# logging.level.jdbc.resultsettable: false
# custom 설정
custom:
api_server : null
sendmail:
id: tW9kMpd3SiAnf3RQBOZapw==
password: Tkkj8p2PYfZ+AmpQMPLHF8ksj8vrtJouj6xczU8ShM8=
port: 587
host: smtp.gmail.com
sendEmail: hhjj0701@gmail.com
senderName: 나혁제
socketFactory-class: javax.net.ssl.SSLSocketFactory
supplier: gmail.com
sendkakaoTalk:
serviceId: ncp:kkobizmsg:kr:349487487272:uritms
accessKey: ncp_iam_BPAMKR4Le2ali6vfRCsG
secretKey: ncp_iam_BPKMKRIOXMe91u5YQoPjmk5WZ2A1FNEcoR
friendId: 유알피-uritsm
# api_search_server: http://192.168.8.138:48381 # 개발
api_search_server: http://192.168.8.138:49381 # 운영
# kicc 메일서버
api_kic_mail_server : http://localhost:9002
# kicc 메신저 서버
api_kic_msg_server : http://localhost:9002
api_kic_msg_key : testKey
client :

View File

@ -0,0 +1,62 @@
# Service port
# server:
# port: 11030
# JPA 설정, JSP 설정
spring:
devtools:
livereload:
enabled: true
# Primary db information
primarydb:
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
jdbcUrl: jdbc:log4jdbc:mariadb://192.168.8.131:3306/ur_itms_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul&rewriteBatchedStatements=true
username: g9IwFesTyIloXVpUnfOX0g==
password: E4SOtjDqqO79BQERc/eaTw==
maximumPoolSize: 35
minimumIdle: 2
connectionTimeout: 3000
idleTimeout: 300000
testOnBorrow: true
validationQuery: SELECT 1
# SQL Log 관련 setting
log4jdbc:
spylogdelegator:
name: net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
dump:
sql:
maxlinelength: 0
logging.level.jdbc.sqltiming: false
logging.level.jdbc.audit: false
logging.level.jdbc.resultset: false
logging.level.jdbc.connection: false
# 개발중
logging.level.jdbc.sqlonly: info
logging.level.jdbc.resultsettable: info
# 운영중
# logging.level.jdbc.sqlonly: false
# logging.level.jdbc.resultsettable: false
# custom 설정
custom:
api_server : null
sendmail:
id: tW9kMpd3SiAnf3RQBOZapw==
password: Tkkj8p2PYfZ+AmpQMPLHF8ksj8vrtJouj6xczU8ShM8=
port: 587
host: smtp.gmail.com
sendEmail: hhjj0701@gmail.com
senderName: 나혁제
socketFactory-class: javax.net.ssl.SSLSocketFactory
supplier: gmail.com
sendkakaoTalk:
serviceId: ncp:kkobizmsg:kr:349487487272:uritms
accessKey: ncp_iam_BPAMKR4Le2ali6vfRCsG
secretKey: ncp_iam_BPKMKRIOXMe91u5YQoPjmk5WZ2A1FNEcoR
friendId: 유알피-uritsm
# api_search_server: http://109.26.11.21:48381
api_search_server: http://192.168.8.138:48381

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,259 @@
package com.urpsys.itmsbatch.cmm.excute;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.PersistJobDataAfterExecution;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;
import com.urpsys.basebatch.common.util.CommonUtil;
import com.urpsys.basebatch.common.util.ConvertUtils;
import com.urpsys.basebatch.common.util.HtmlEmailUtil;
import com.urpsys.basebatch.common.util.RestApiCallUtil;
import com.urpsys.itmsbatch.cmm.dao.MailKaTalkDao;
import com.urpsys.itmsbatch.cmm.service.MailKaTalkService;
import kong.unirest.json.JSONObject;
import lombok.extern.slf4j.Slf4j;
/**
* KIC(한국투자공사) 메일/카톡 처리 실행 클래스
*
* @author urp 인프라본부 나혁제
* @since 2025.06.11
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
* ----------- --------- ------------------------
* 2025.06.11 나혁제 최초작성
*
* </pre>
*/
@Slf4j
@Component
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class MailKaTalkSendKiccJob2 implements Job
{
@Autowired
MailKaTalkService mailKaTalkService;
@Autowired
HtmlEmailUtil htmlEmailUtil;
@Autowired
RestApiCallUtil restApiCallUtil;
@Value("${custom.api_kic_msg_key}")
private String strApiKicMsgKey; // KIC 메신저서버 api key
@Override
public void execute(JobExecutionContext context) throws JobExecutionException
{
log.info(" >>>>>>>>>> MailKaTalkSendKiccJob Executed <<<<<<<<<< ");
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
log.info("dataMap date : {}", dataMap.get("date"));
log.info("dataMap executeCount : {}", dataMap.get("executeCount"));
// 전송메일 대상 조회
List<LinkedHashMap<String, Object>> listNctn = mailKaTalkService.selectNctnProcSndInfo();
for(LinkedHashMap<String, Object> tempMap : listNctn)
{
String strProcRsltCn = "";
String strProcRsltCd = "";
// 메일 처리
if(tempMap.get("procTy").equals("1"))
{
Map<String, Object> bodyMap = new HashMap();
String strMailAddress = CommonUtil.nvl(tempMap.get("rcvrAddr"));
// 2025.07.01 나혁제 자기 메일로 처리
// bodyMap.put("email" , "hong@kic.go.kr");
bodyMap.put("email" , CommonUtil.nvl(tempMap.get("rcvrAddr")) );
bodyMap.put("to" , CommonUtil.nvl(tempMap.get("rcvrAddr")) );
bodyMap.put("subject" , CommonUtil.nvl(tempMap.get("ttl")) );
bodyMap.put("content" , CommonUtil.nvl(tempMap.get("bdy")) );
// bodyMap.put("content" , "itms 메일테스트 입니다. 메일 삭제해주세요." );
bodyMap.put("contentType" , "text/html" );
try
{
// 메일주소가 없는경우 오류 처리
if(strMailAddress.equals(""))
{
strProcRsltCn = "메일주소 존재하지 않음";
strProcRsltCd = "-1";
}
else
{
// Map<String, Object> retMap = restApiCallUtil.RestApiCallNoAuthKicMailTextHtml(bodyMap, "/test/kicMailTest.do");
Map<String, Object> retMap = restApiCallUtil.RestApiCallNoAuthKicMailTextHtml(bodyMap, "/api/mail/send/json");
strProcRsltCn = retMap.toString();
strProcRsltCd = "0";
}
}
catch(Exception e)
{
e.printStackTrace();
strProcRsltCn = e.toString();
strProcRsltCd = "-2";
}
}
// 메신저 처리
else if(tempMap.get("procTy").equals("3"))
{
String strTtl = CommonUtil.nvl(tempMap.get("ttl"));
String strRcvrAddr = CommonUtil.nvl(tempMap.get("rcvrAddr"));
String strBdy = CommonUtil.nvl(tempMap.get("bdy"));
String[] srBdy = strBdy.split(",");
try
{
/*
Map<String, Object> messageMap = new HashMap();
messageMap.put("\""+"title" +"\"" , "\""+strTtl+"\"" );
messageMap.put("\""+"context" +"\"" , "\""+srBdy[0]+"\"" );
Map<String, Object> messageFuncMap = new HashMap();
messageFuncMap.put("\""+"name" +"\"", "\""+"상세페이지로이동"+"\"" );
messageFuncMap.put("\""+"type" +"\"", "\""+"link" +"\"" );
messageFuncMap.put("\""+"data" +"\"", "\""+srBdy[1] +"\"" );
messageMap.put("\""+"func"+"\"", messageFuncMap);
*/
// JSONParser parser = new JSONParser();
/*
Map<String, Object> messageMap = new HashMap();
messageMap.put("title" , strTtl );
messageMap.put("context" , srBdy[0] );
Map<String, Object> messageFuncMap = new HashMap();
messageFuncMap.put("name" , "상세페이지로이동" );
messageFuncMap.put("type" , "link" );
messageFuncMap.put("data" , srBdy[1] );
messageMap.put("func", messageFuncMap);
StringBuilder strBulider = new StringBuilder(1000);
strBulider.append("\"");
strBulider.append(messageMap.toString().replaceAll("\"", "\\\""));
strBulider.append("\"");
*/
// 변환처리
// JSONObject jsonObj = ConvertUtils.getJsonFromMap(messageMap);
Map<String, Object> bodyMap = new HashMap();
List<Map<String, Object>> targetsList = new ArrayList<>();
Map<String, Object> targetMap = new HashMap();
targetMap.put("targetCode", strRcvrAddr);
targetMap.put("targetType", "UR");
targetsList.add(targetMap);
JSONObject jsonObj = new JSONObject();
// String str = "\";
jsonObj.put("name", "상세페이지로이동");
jsonObj.put("type", "link");
jsonObj.put("data", srBdy[1]);
JSONObject jObj = new JSONObject();
jObj.put("title" , strTtl);
jObj.put("context", srBdy[0]);
jObj.put("func", jsonObj);
StringBuilder strBulider = new StringBuilder(100);
// strBulider.append("\"");
strBulider.append(jObj.toString().replaceAll("\"", "\\\""));
// strBulider.append("\"");
// bodyMap 구성
bodyMap.put("SubjectCode", strApiKicMsgKey);
bodyMap.put("targets" , targetsList );
// bodyMap.put("message" , jsonObj.toString() );
bodyMap.put("message" , strBulider.toString() );
// bodyMap.put("message" , messageMap.toString() );
// bodyMap.put("message" , messageMap );
// bodyMap.put("message" , "테스트" );
// Map<String, Object> retMap = restApiCallUtil.RestApiCallNoAuthKicMsg( bodyMap, "/test/kicMsgTest.do");
Map<String, Object> retMap = restApiCallUtil.RestApiCallNoAuthKicMsg( bodyMap, "/server/na/notice");
strProcRsltCn = retMap.toString();
strProcRsltCd = "0";
}
catch(Exception e)
{
strProcRsltCn = e.toString();
strProcRsltCd = "-2";
}
}
// 오류처리
else
{
strProcRsltCn = "알수 없는 구분값";
strProcRsltCd = (strProcRsltCn.equals("")) ? "0" : "-1";
}
LinkedHashMap<String, Object> inputMap = new LinkedHashMap<String, Object>();
inputMap.put("procRsltCn" , strProcRsltCn);
inputMap.put("procRsltCd" , strProcRsltCd);
inputMap.put("nctnEsntlId" , tempMap.get("nctnEsntlId"));
mailKaTalkService.updateNtcnProcSndInfo(inputMap);
}
//JobDataMap를 통해 Job의 실행 횟수를 받아서 횟수 + 1을한다.
int cnt = (int) dataMap.get("executeCount");
dataMap.put("executeCount", ++cnt);
dataMap.put("date", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
log.info(" <<<<<<<<<< MailKaTalkSendKiccJob Executed >>>>>>>>>> ");
}
}

Binary file not shown.

View File

@ -0,0 +1,2 @@
log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0

102
bin/main/logback-spring.xml Normal file
View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<contextName>${HOSTNAME}</contextName>
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n
</Pattern>
</encoder>
</appender>
<!-- 운영중 -->
<!--
<root level="error">
<appender-ref ref="consoleAppender" />
</root>
<logger name="TRACE_LOGGER" level="error" additivity="false">
<appender-ref ref="consoleAppender" />
</logger>
-->
<!-- 개발중 -->
<root level="info">
<appender-ref ref="consoleAppender" />
</root>
<logger name="TRACE_LOGGER" level="info" additivity="false">
<appender-ref ref="consoleAppender" />
</logger>
<logger name="org.quartz.core.QuartzSchedulerThread" level="INFO"/>
<!-- 일단 사용하지 않음 -->
<!--
<property name="LOG_DIR" value="/var/log/LAMP" />
<springProfile name="!local">
<appender name="rollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</encoder>
<file>${LOG_DIR}/${HOSTNAME}_server.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/${HOSTNAME}_server.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<appender name="asyncAppender" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>10000</queueSize>
<appender-ref ref="rollingFileAppender" />
</appender>
<appender name="traceRollingFileAppend" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%msg%n</Pattern>
</encoder>
<file>${LOG_DIR}/${HOSTNAME}_trace.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/${HOSTNAME}_trace.log.%d{yyyy-MM-dd}.%i</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>200MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>10</maxHistory>
</rollingPolicy>
</appender>
<appender name="traceLogAppend" class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>10000</queueSize>
<appender-ref ref="traceRollingFileAppend" />
</appender>
<root level="info">
<appender-ref ref="asyncAppender" />
</root>
<logger name="TRACE_LOGGER" level="info" additivity="false">
<appender-ref ref="traceLogAppend" />
</logger>
</springProfile>
-->
</Configuration>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
<setting name="defaultStatementTimeout" value="1800"/>
<setting name="callSettersOnNulls" value="true"/>
<setting name="defaultFetchSize" value="1000" />
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
</typeAliases>
</configuration>

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.kicinsa.dao.KicGroupwareDao">
<resultMap type="java.util.LinkedHashMap" id="viKicHrInterfaceUser">
<result property="userCode" column="USERCODE" />
<result property="userName" column="USERNAME" />
<result property="multiDisplayName" column="MULTIDISPLAYNAME" />
<result property="ChargeBusiness" column="CHARGEBUSINESS" />
<result property="mobile" column="MOBILE" />
<result property="mailAddress" column="MAILADDRESS" />
<result property="photePath" column="PHOTOPATH" />
<result property="retireDate" column="RETIREDATE" />
<result property="deptCode" column="DEPTCODE" />
<result property="deptName" column="DEPTNAME" />
<result property="multiDeptName" column="MULTIDEPTNAME" />
<result property="deptsoriKey" column="DEPTSORTKEY" />
<result property="jobPositionCode" column="JOBPOSITIONCODE" />
<result property="jobPositionName" column="JOBPOSITIONNAME" />
<result property="MultiJobPositionName" column="MULTIJOBPOSITIONNAME" />
<result property="isHr" column="ISHR" />
</resultMap>
<!-- 조건에 맞는 게시물 목록을 조회 한다. -->
<select id="getKicInsaList" resultMap="viKicHrInterfaceUser">
SELECT USERCODE
, USERNAME
, MULTIDISPLAYNAME
, CHARGEBUSINESS
, MOBILE
, MAILADDRESS
, PHOTOPATH
, RETIREDATE
, DEPTCODE
, DEPTNAME
, MULTIDEPTNAME
, DEPTSORTKEY
, JOBPOSITIONCODE
, JOBPOSITIONNAME
, MULTIJOBPOSITIONNAME
, ISHR
FROM V_GW_USERS
</select>
</mapper>

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.kicinsa.dao.KicGroupwareDao">
<resultMap type="java.util.LinkedHashMap" id="viKicHrInterfaceUser">
<result property="empId" column="EMPID"/>
<result property="empNm" column="EMPNM"/>
<result property="serviceCd" column="SERVICECD"/>
<result property="serviceCdNm" column="SERVICECD_NM"/>
<result property="enterDate" column="ENTERDATE"/>
<result property="brTel" column="BRTEL"/>
<result property="retireDate" column="RETIREDATE"/>
<result property="moveDate" column="MOVEDATE"/>
<result property="empGrpCd" column="EMPGRPCD"/>
<result property="empGrpCdNm" column="EMPGRPCD_NM"/>
<result property="orgId" column="ORGID"/>
<result property="orgIdNm" column="ORGID_NM"/>
<result property="posId" column="POSID"/>
<result property="posIdNm" column="POSID_NM"/>
<result property="titleCd" column="TITLECD"/>
<result property="titleCdNm" column="TITLECD_NM"/>
<result property="posgrdCd" column="POSGRDCD"/>
<result property="posgrdCdNm" column="POSGRDCD_NM"/>
<result property="orgIdAdd1" column="ORGID_ADD1"/>
<result property="orgIdAdd1Nm" column="ORGID_ADD1_NM"/>
<result property="posIdAdd1" column="POSID_ADD1"/>
<result property="posIdAdd1Nm" column="POSID_ADD1_NM"/>
<result property="startDateAdd1" column="STARTDATE_ADD1"/>
<result property="startDateRest" column="STARTDATE_REST"/>
<result property="expendDateRest" column="EXPENDDATE_REST"/>
<result property="sex" column="SEX"/>
<result property="sexNm" column="SEX_NM"/>
<result property="tel" column="TEL"/>
<result property="htel" column="HTEL"/>
<result property="empNmEng" column="EMPNMENG"/>
<result property="emailComp" column="EMAIL_COMP"/>
<result property="orgCd" column="ORGCD"/>
<result property="titleCdNmeng" column="TITLECD_NMENG"/>
<result property="orgIdSub" column="ORGID_SUB"/>
<result property="orgIdSubNm" column="ORGID_SUB_NM"/>
</resultMap>
<!-- 조건에 맞는 게시물 목록을 조회 한다. -->
<select id="getKicInsaList" resultMap="viKicHrInterfaceUser">
/* GroupwareDao.getKicInsaList */
SELECT EMPID
, EMPNM
, SERVICECD
, SERVICECD_NM
, ENTERDATE
, BRTEL
, RETIREDATE
, MOVEDATE
, EMPGRPCD
, EMPGRPCD_NM
, ORGID
, ORGID_NM
, POSID
, POSID_NM
, TITLECD
, TITLECD_NM
, POSGRDCD
, POSGRDCD_NM
, ORGID_ADD1
, ORGID_ADD1_NM
, POSID_ADD1
, POSID_ADD1_NM
, STARTDATE_ADD1
, STARTDATE_REST
, EXPENDDATE_REST
, SEX
, SEX_NM
, TEL
, HTEL
, EMPNMENG
, EMAIL_COMP
, ORGCD
, TITLECD_NMENG
, ORGID_SUB
, ORGID_SUB_NM
FROM VI_HR_INTERFACE_USER
</select>
</mapper>

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
<setting name="defaultStatementTimeout" value="1800"/>
<setting name="callSettersOnNulls" value="true"/>
<setting name="defaultFetchSize" value="1000" />
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--
<typeAliases>
<typeAlias alias="UserVO" type="com.gdsc.ImgEd.domain.UserVO" />
<typeAlias alias="ImageInfoVO" type="com.gdsc.ImgEd.domain.ImageInfoVO" />
<typeAlias alias="ImageMetaVO" type="com.gdsc.ImgEd.domain.ImageMetaVO" />
<typeAlias alias="IspnMngInfoVO" type="com.gdsc.ImgEd.domain.IspnMngInfoVO" />
<typeAlias alias="IspnMngInfo2VO" type="com.gdsc.ImgEd.domain.IspnMngInfo2VO" />
<typeAlias alias="IspnMngInfo4VO" type="com.gdsc.ImgEd.domain.IspnMngInfo4VO" />
<typeAlias alias="IspnMngInfo5VO" type="com.gdsc.ImgEd.domain.IspnMngInfo5VO" />
</typeAliases>
-->
<typeAliases>
</typeAliases>
</configuration>

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.basebatch.dao.QuartzDao">
<!-- 배치작업 목록 조회 -->
<select id="selectSchedJobInfo" resultType="java.util.LinkedHashMap">
/* QuartzDao.selectSchedJobInfo */
SELECT
JOB_NAME AS jobName
, JOB_DESCRIPTION AS jobDescription
, CRON_EXPRESSION AS cronExpression
, JOB_CLASS AS jobClass
, FRST_REG_DTM AS frstRegDtm
, FRST_REGR_ID AS frstRegrId
, LAST_UPD_DTM AS lastUpdDtm
, LAST_UPDR_ID AS lastUpdr_id
FROM
TB_SCHED_JOB_INFO
WHERE USE_AT ='Y'
</select>
<!-- 배치작업에 인자 정보 조회 -->
<select id="selectSchedJobParamInfo" parameterType="String" resultType="java.util.LinkedHashMap">
/* QuartzDao.selectSchedJobParamInfo */
SELECT
JOB_NAME AS jobName
, JOB_PARAM_KEY AS jobParamKey
, JOB_PARAM_VALUE AS jobParamValue
FROM
TB_SCHED_JOB_PARAM_INFO
WHERE USE_AT ='Y'
AND JOB_NAME = #{jobName}
</select>
</mapper>

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.itmsbatch.bbs.dao.BbsInfoHistDao">
<!-- 조건에 맞는 게시물 목록을 조회 한다. -->
<select id="getBbsInfoHistList" resultType="java.util.LinkedHashMap">
/* BbsInfoHistDao.getBbsInfoHistList */
SELECT A.EVENT_TYPE AS eventType
, DATE_FORMAT(A.EVENT_TIME, '%Y-%m-%d %H:%i:%s') AS eventTime
, a.NTT_SJ AS nttSj
, a.PSTGR_ID AS ntcrId
, a.PSTGR_NM AS ntcrNm
, a.NTT_NO AS nttNo
, a.NTT_CN AS nttCn
, a.PWD AS password
, a.FRST_REGR_ID AS frstRegisterId
, b.USER_NM AS frstRegisterNm
, DATE_FORMAT(a.FRST_REG_DTM, '%Y-%m-%d %H:%i:%s') AS frstRegisterPnttm
, a.PSTG_STRT_DTM AS ntceBgnde
, a.PSTG_END_DTM AS ntceEndde
, a.INQ_CNT AS inqireCo
, a.USE_AT AS useAt
, a.ATCH_FILE_ID AS atchFileId
, a.BBS_ID AS bbsId
, a.NTT_ID AS nttId
, a.PARNTSCTT_NO AS parnts
, a.CMNT_AT AS replyAt
, a.CMNT_LCTN AS replyLc
, a.SORT_SEQ AS sortOrdr
, c.BBS_TYCD AS bbsTyCode
, c.BBS_ATRB_CD AS bbsAttrbCode
, c.REPLY_POSBL_AT AS replyPosblAt
, c.FILE_ATCH_PSBL_AT AS fileAtchPosblAt
, c.ATCH_PSBL_FILE_NUM AS ATCH_PSBL_FILE_NUM
, c.BBS_NM AS bbsNm
FROM TB_BBS_INFO_HIST AS a
LEFT OUTER JOIN COMVNUSERMASTER AS b ON a.FRST_REGR_ID = b.ESNTL_ID
LEFT OUTER JOIN TB_BBS_MASTR_INFO AS c ON a.BBS_ID = c.BBS_ID
WHERE 1=1
AND SRCH_PROC_YN IS NULL
ORDER BY EVENT_TIME
</select>
<update id="updateBbsInfoHist" parameterType="java.util.LinkedHashMap">
/* BbsInfoHistDao.updateBbsInfoHist */
UPDATE TB_BBS_INFO_HIST
SET SRCH_PROC_YN = #{srchProcYn}
, SRCH_PROC_SND_TM = NOW()
, SRCH_PROC_SND_MSG = #{srchProcSndMsg}
WHERE NTT_ID = #{nttId}
AND EVENT_TIME = #{eventTime}
AND EVENT_TYPE = #{eventType}
</update>
</mapper>

View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.itmsbatch.cmm.dao.CmmUseDao">
<select id="selectCmmCodeDetail" parameterType="java.util.LinkedHashMap" resultType="java.util.LinkedHashMap">
/* CmmUseDao.selectCmmCodeDetail */
SELECT
CD_ID AS codeId
, CD AS code
, CD_NM AS codeNm
, CD_DESC AS codeDc
, DTL_TPL AS dtlTpl
FROM TB_CMM_DTL_CD_INFO
WHERE USE_AT = 'Y'
AND CD_ID = #{codeId}
</select>
<select id="selectCmmCodeDetailAsCd" parameterType="java.util.LinkedHashMap" resultType="java.util.LinkedHashMap">
/* CmmUseDao.selectCmmCodeDetailAsCd */
SELECT
CD_ID AS codeId
, CD AS code
, CD_NM AS codeNm
, CD_DESC AS codeDc
, DTL_TPL AS dtlTpl
FROM TB_CMM_DTL_CD_INFO
WHERE USE_AT = 'Y'
AND CD_ID = #{codeId}
AND CD = #{cd}
</select>
<select id="selectOgrnztIdDetail" parameterType="java.util.LinkedHashMap" resultType="java.util.LinkedHashMap">
/* CmmUseDao.selectOgrnztIdDetail */
SELECT #{tableNm} AS codeId
, ORG_ID AS code
, ORG_NM AS codeNm
, ORG_DESC AS codeDc
FROM TB_ORG_INFO
WHERE 1=1
<if test='haveDetailCondition == "Y"'>AND
ORG_ID LIKE #{detailConditionValue}
</if>
</select>
<select id="selectGroupIdDetail" parameterType="java.util.LinkedHashMap" resultType="java.util.LinkedHashMap">
/* CmmUseDao.selectGroupIdDetail */
SELECT #{tableNm} AS codeId
, GRP_ID AS code
, GRP_NM AS codeNm
, GRP_DESC AS codeDc
FROM TB_AUTH_GRP_INFO
WHERE 1=1
<if test='haveDetailCondition == "Y"'>AND
GRP_ID LIKE #{detailConditionValue}
</if>
</select>
</mapper>

View File

@ -0,0 +1,182 @@
<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.itmsbatch.cmm.dao.KicItsmDao">
<select id="selectItmsOrgId" parameterType="String" resultType="String">
/* KicItsmDao.selectItmsOrgId */
SELECT ORG_ID AS orgId
FROM TB_KIC_ORG_MAP
WHERE KIC_ORGID = #{strKicOrgId}
</select>
<insert id="insertKicOrgMap" parameterType="java.util.LinkedHashMap" >
/* KicItsmDao.insertDeptManage */
INSERT INTO TB_KIC_ORG_MAP
( ORG_ID
, KIC_ORGID
, KIC_ORGID_NM
, REG_DTM
)
VALUES
( #{orgId}
, #{kicOrgId}
, #{kicOrgIdNm}
, SYSDATE()
)
</insert>
<insert id="insertDeptManage" parameterType="java.util.LinkedHashMap" >
/* KicItsmDao.insertDeptManage */
INSERT INTO TB_ORG_INFO
( ORG_ID
, ORG_NM
, ORG_DESC
)
VALUES
( #{orgId}
, #{kicOrgIdNm}
, #{kicOrgIdNm})
</insert>
<select id="selectItsmUser" parameterType="String" resultType="java.util.LinkedHashMap">
/* KicItsmDao.selectItsmUser */
SELECT
ESNTL_ID uniqId
, 'USR03' userTy
, TASK_USER_ID emplyrId
, USER_NM emplyrNm
, PWD password
, PWD_HINT passwordHint
, PWD_RANS passwordCnsr
, EMPNO emplNo
, RRNO ihidnum
, SEX_CD sexdstnCode
, BIRTH brth
, REGN_NO areaNo
, HOUSE_MIDDLE_TELNO homemiddleTelno
, HOUSE_END_TELNO homeendTelno
, FAX_NO fxnum
, HOUSE_ADRES homeadres
, ADDR2 detailAdres
, ZIP_NO zip
, OFFM_TELNO offmTelno
, MOVE_TELNO moblphonNo
, EML_ADDR emailAdres
, JBPS_NM ofcpsNm
, GRP_ID groupId
, ORG_ID orgnztId
, BLNG_ISTT_CD insttCode
, USER_STACD emplyrSttusCode
, JOIN_DTM sbscrbDe
, CRTFC_DN_VALUE subDn
, LOCK_AT lockAt
, KATALK_ALAM_YN katalkAlamYn
, MAIL_ALAM_YN mailAlamYn
FROM TB_TASK_USER_INFO
WHERE TASK_USER_ID=#{uniqId}
</select>
<insert id="insertItsmUser" parameterType="java.util.LinkedHashMap" >
/* KicItsmDao.insertItsmUser */
INSERT INTO TB_TASK_USER_INFO
( ESNTL_ID
, TASK_USER_ID
, USER_NM
, PWD
, EMPNO
, SEX_CD
, REGN_NO
, HOUSE_MIDDLE_TELNO
, HOUSE_END_TELNO
, OFFM_TELNO
, MOVE_TELNO
, EML_ADDR
, JBPS_NM
, ORG_ID
, USER_STACD
, JOIN_DTM
, LAST_PWD_CHG_DTM
, HOUSE_ADRES
, PWD_HINT
, PWD_RANS
, ZIP_NO
, OTSD_CONN_YN
)
VALUES (
#{uniqId}
, #{userCode}
, #{userName}
, '$2a$10$ysPl0nYOLZXSVemDz1HQFukyaiSs05J9iwdBtwWxK7hrXrdG0MN2W'
, #{userCode}
, ''
, '0000'
, '0000'
, '0000'
, ''
, #{mobile}
, #{mailAddress}
, #{jobPositionName}
, #{orgId}
, CASE WHEN ISNULL(#{retireDate}) || #{retireDate} = '' THEN 'P'
ELSE 'D'
END
, sysdate()
, sysdate()
, '주소없음'
, 'P01'
, '한국투자공사'
, ''
, 'Y'
)
</insert>
<!-- 그룹웨어 연동사용자 기본 메뉴권한 입력 -->
<insert id="insertItsmUserMenu" parameterType="java.util.LinkedHashMap" >
/* KicItsmDao.insertItsmUserMenu */
INSERT INTO TB_USER_CRYP_CNF
( CRYP_CNF_TRG_ID
, MEM_TYCD
, AUTH_CD
)
VALUES (
#{uniqId}
, 'USR03'
, 'ROLE_EMPTY'
)
</insert>
<update id="updateItsmUser" parameterType="java.util.LinkedHashMap" >
/* KicItsmDao.insertItsmUser */
UPDATE TB_TASK_USER_INFO
SET USER_NM = #{userName}
, MOVE_TELNO = #{mobile}
, EML_ADDR = #{mailAddress}
, JBPS_NM = #{jobPositionName}
, ORG_ID = #{orgId}
, USER_STACD = CASE WHEN ISNULL(#{retireDate}) || #{retireDate} = '' THEN 'P'
ELSE 'D'
END
, LAST_PWD_CHG_DTM = sysdate()
, OTSD_CONN_YN = 'Y'
WHERE ESNTL_ID = #{uniqId}
</update>
</mapper>

View File

@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.itmsbatch.cmm.dao.KicItsmDao">
<select id="selectItmsOrgId" parameterType="String" resultType="String">
/* KicItsmDao.selectItmsOrgId */
SELECT ORG_ID AS orgId
FROM TB_KIC_ORG_MAP
WHERE KIC_ORGID = #{strKicOrgId}
</select>
<insert id="insertKicOrgMap" parameterType="java.util.LinkedHashMap" >
/* KicItsmDao.insertDeptManage */
INSERT INTO TB_KIC_ORG_MAP
( ORG_ID
, KIC_ORGID
, KIC_ORGID_NM
, REG_DTM
)
VALUES
( #{orgId}
, #{kicOrgId}
, #{kicOrgIdNm}
, SYSDATE()
)
</insert>
<insert id="insertDeptManage" parameterType="java.util.LinkedHashMap" >
/* KicItsmDao.insertDeptManage */
INSERT INTO TB_ORG_INFO
( ORG_ID
, ORG_NM
, ORG_DESC
)
VALUES
( #{orgId}
, #{kicOrgIdNm}
, #{kicOrgIdNm})
</insert>
<select id="selectItsmUser" parameterType="String" resultType="java.util.LinkedHashMap">
/* KicItsmDao.selectItsmUser */
SELECT
ESNTL_ID uniqId
, 'USR03' userTy
, TASK_USER_ID emplyrId
, USER_NM emplyrNm
, PWD password
, PWD_HINT passwordHint
, PWD_RANS passwordCnsr
, EMPNO emplNo
, RRNO ihidnum
, SEX_CD sexdstnCode
, BIRTH brth
, REGN_NO areaNo
, HOUSE_MIDDLE_TELNO homemiddleTelno
, HOUSE_END_TELNO homeendTelno
, FAX_NO fxnum
, HOUSE_ADRES homeadres
, ADDR2 detailAdres
, ZIP_NO zip
, OFFM_TELNO offmTelno
, MOVE_TELNO moblphonNo
, EML_ADDR emailAdres
, JBPS_NM ofcpsNm
, GRP_ID groupId
, ORG_ID orgnztId
, BLNG_ISTT_CD insttCode
, USER_STACD emplyrSttusCode
, JOIN_DTM sbscrbDe
, CRTFC_DN_VALUE subDn
, LOCK_AT lockAt
, KATALK_ALAM_YN katalkAlamYn
, MAIL_ALAM_YN mailAlamYn
FROM TB_TASK_USER_INFO
WHERE TASK_USER_ID=#{uniqId}
</select>
<insert id="insertItsmUser" parameterType="java.util.LinkedHashMap" >
/* KicItsmDao.insertItsmUser */
INSERT INTO TB_TASK_USER_INFO
( ESNTL_ID
, TASK_USER_ID
, USER_NM
, PWD
, EMPNO
, SEX_CD
, REGN_NO
, HOUSE_MIDDLE_TELNO
, HOUSE_END_TELNO
, OFFM_TELNO
, MOVE_TELNO
, EML_ADDR
, JBPS_NM
, ORG_ID
, USER_STACD
, JOIN_DTM
, LAST_PWD_CHG_DTM
, HOUSE_ADRES
, PWD_HINT
, PWD_RANS
, ZIP_NO
)
VALUES (
#{uniqId}
, #{empId}
, #{empNm}
, '$2a$10$ysPl0nYOLZXSVemDz1HQFukyaiSs05J9iwdBtwWxK7hrXrdG0MN2W'
, #{empId}
, #{sex}
, '0000'
, '0000'
, '0000'
, #{tel}
, #{htel}
, #{emailComp}
, #{posgrdCdNm}
, #{orgId}
, CASE WHEN #{serviceCd} = 'Y' THEN 'P'
WHEN #{serviceCd} = 'H' THEN 'A'
WHEN #{serviceCd} = 'N' THEN 'D'
END
, sysdate()
, sysdate()
, '주소없음'
, 'P01'
, '한국투자공사'
, ''
)
</insert>
<update id="updateItsmUser" parameterType="java.util.LinkedHashMap" >
/* KicItsmDao.insertItsmUser */
UPDATE TB_TASK_USER_INFO
SET USER_NM = #{empNm}
, SEX_CD = #{sex}
, OFFM_TELNO = #{tel}
, MOVE_TELNO = #{htel}
, EML_ADDR = #{emailComp}
, JBPS_NM = #{posgrdCdNm}
, ORG_ID = #{orgId}
, USER_STACD = CASE WHEN #{serviceCd} = 'Y' THEN 'P'
WHEN #{serviceCd} = 'H' THEN 'A'
WHEN #{serviceCd} = 'N' THEN 'D'
END
, LAST_PWD_CHG_DTM = sysdate()
WHERE ESNTL_ID = #{uniqId}
</update>
</mapper>

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.itmsbatch.cmm.dao.MailKaTalkDao">
<!-- 알림처리 대상 목록 조회 -->
<select id="selectNctnProcSndInfo" resultType="java.util.LinkedHashMap">
/* MailKaTalkDao.selectNctnProcSndInfo */
SELECT
NTCN_ESNTL_ID as nctnEsntlId
, PROC_TY as procTy
, TTL as ttl
, BDY as bdy
, RCVR_ADDR as rcvrAddr
, REG_DT as regDt
, REGR_ID as regrId
FROM
TB_NTCN_PROC_SND_INFO
WHERE PROC_RSLT_CD IS NULL
</select>
<update id="updateNtcnProcSndInfo" parameterType="java.util.LinkedHashMap">
/* CmmUseDao.insertNtcnProcSndInfo */
UPDATE TB_NTCN_PROC_SND_INFO
SET PROC_DT = SYSDATE()
, PROC_RSLT_CD = #{procRsltCd}
, PROC_RSLT_CN = #{procRsltCn}
WHERE NTCN_ESNTL_ID = #{nctnEsntlId}
</update>
</mapper>

View File

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
/**
* 명함관리 쿼리
*
* @author 김성재
* @since 2022.11.14
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
*ㅡㅡㅡㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
* 2022.11.14 김성재 최초작성
*
* </pre>
*/
-->
<mapper namespace="com.urpsys.baseapi.dao.NcrdManageDao">
<!-- 공개명함 조회 -->
<select id="selectNcrdItemList" parameterType="java.util.LinkedHashMap" resultType="java.util.LinkedHashMap">
SELECT NCRD_ID AS ncrdId
, NAME AS ncrdNm
, NCRD_TRGR_ID AS ncrdTrgterId
, OPEN_AT AS othbcAt
, OTSD_USER_AT AS extrlUserAt
, CO_NM AS cmpnyNm
, SB_SIGN AS deptNm
, DSTN_NO AS idntfcNo
, MDL_MOVE_TELNO AS middleMbtlNum
, END_MBTLNUM AS endMbtlNum
, TO_CHAR(FRST_REG_DTM,'YYYYMMDD' ) AS frstRegisterPnttm
, FRST_REGR_ID AS frstRegisterId
FROM
TB_NCRD_ATRB_INFO
WHERE OPEN_AT = 'Y'
<if test="searchCnd == 0">
AND NAME LIKE CONCAT ('%', #{searchWrd},'%')
</if>
<if test="searchCnd == 1">
AND CO_NM LIKE CONCAT ('%', #{searchWrd},'%')
</if>
<if test="searchCnd == 2">
AND SB_SIGN LIKE CONCAT ('%', #{searchWrd},'%')
</if>
ORDER BY NAME
OFFSET #{firstIndex} ROWS FETCH NEXT #{recordCountPerPage} ROWS ONLY
</select>
<!-- 공개명함 개수 -->
<select id="selectNcrdItemListCnt" parameterType="java.util.LinkedHashMap" resultType="java.lang.Integer">
SELECT COUNT(NCRD_ID)
FROM
TB_NCRD_ATRB_INFO
WHERE OPEN_AT = 'Y'
<if test="searchCnd == 0">
AND NAME LIKE CONCAT ('%', #{searchWrd},'%')
</if>
<if test="searchCnd == 1">
AND CO_NM LIKE CONCAT ('%', #{searchWrd},'%')
</if>
<if test="searchCnd == 2">
AND SB_SIGN LIKE CONCAT ('%', #{searchWrd},'%')
</if>
</select>
</mapper>

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.itmsbatch.srm.dao.IncidentHistDao">
<resultMap type="java.util.LinkedHashMap" id="incident">
<result property="eventType" column="EVENT_TYPE"/>
<result property="eventTime" column="EVENT_TIME"/>
<result property="inIncidentSeq" column="IN_INCIDENT_SEQ"/>
<result property="inIncidentStatus" column="IN_INCIDENT_STATUS"/>
<result property="vcIncidentNum" column="VC_INCIDENT_NUM"/>
<result property="inServiceCode" column="IN_SERVICE_CODE"/>
<result property="vcServiceName" column="VC_SERVICE_NAME"/>
<result property="inChargeUser" column="IN_CHARGE_USER"/>
<result property="vcChargeUser" column="VC_CHARGE_USER"/>
<result property="inDevUser" column="IN_DEV_USER"/>
<result property="vcDevUser" column="VC_DEV_USER"/>
<result property="dtReceiptDatetime" column="DT_RECEIPT_DATETIME"/>
<result property="dtReqDatetime" column="DT_REQ_DATETIME"/>
<result property="dtCompleteDatetime" column="DT_COMPLETE_DATETIME"/>
<result property="vcIncidentTitle" column="VC_INCIDENT_TITLE"/>
<result property="txIncidentBody" column="TX_INCIDENT_BODY"/>
<result property="vcIncidentStatus" column="VC_INCIDENT_STATUS"/>
<result property="inRegUser" column="IN_REG_USER"/>
<result property="vcRegUser" column="VC_REG_USER"/>
<result property="inReqApprovalUser" column="IN_REQ_APPROVAL_USER"/>
<result property="vcReqApprovalUser" column="VC_REQ_APPROVAL_USER"/>
<result property="dtReqApprovalDatetime" column="DT_REQ_APPROVAL_DATETIME"/>
<result property="txReqApprovalComment" column="TX_REQ_APPROVAL_COMMENT"/>
<result property="vcCompleted" column="VC_COMPLETED"/>
<result property="inCompleted" column="IN_COMPLETED"/>
<result property="txCompletedComment" column="TX_COMPLETED_COMMENT"/>
<result property="inDifficulty" column="IN_DIFFICULTY"/>
<result property="inSatisfaction" column="IN_SATISFACTION"/>
<result property="vcServiceTarget" column="VC_SERVICE_TARGET"/>
<result property="vcRequestDept" column="VC_REQUEST_DEPT"/>
<result property="vcRequestUser" column="VC_REQUEST_USER"/>
<result property="dtServiceStartDatetime" column="DT_SERVICE_START_DATETIME"/>
<result property="atchFileId" column="ATCH_FILE_ID"/>
</resultMap>
<select id="getIncidentHistList" resultMap="incident">
/* IncidentHistDao.getIncidentHistList */
SELECT
A.EVENT_TYPE
, DATE_FORMAT(A.EVENT_TIME, '%Y-%m-%d %H:%i:%s') AS EVENT_TIME
, A.IN_INCIDENT_SEQ
, A.VC_INCIDENT_NUM
, A.IN_SERVICE_CODE
, A.IN_CHARGE_USER
, A.VC_CHARGE_USER
, A.IN_DEV_USER
, A.VC_DEV_USER
, DATE_FORMAT(A.DT_RECEIPT_DATETIME, '%Y-%m-%d %H:%i') AS DT_RECEIPT_DATETIME
, DATE_FORMAT(A.DT_REQ_DATETIME, '%Y-%m-%d %H:%i') AS DT_REQ_DATETIME
, DATE_FORMAT(A.DT_COMPLETE_DATETIME, '%Y-%m-%d %H:%i') AS DT_COMPLETE_DATETIME
, A.VC_INCIDENT_TITLE
, A.TX_INCIDENT_BODY
, A.IN_REG_USER
, A.VC_REG_USER
, IF(A.IN_INCIDENT_STATUS=0, "접수",
IF(A.IN_INCIDENT_STATUS=1, "승인중",
IF(A.IN_INCIDENT_STATUS=2, "반려", "승인완료"))) AS VC_INCIDENT_STATUS
, A.IN_INCIDENT_STATUS
, B.VC_SERVICE_NAME
, A.VC_SERVICE_TARGET
, A.VC_REQUEST_DEPT
, A.VC_REQUEST_USER
, A.DT_SERVICE_START_DATETIME
, A.IN_COMPLETED
, IFNULL(A.TX_COMPLETED_COMMENT, "") AS TX_COMPLETED_COMMENT
, IF(A.IN_COMPLETED=0, '처리중', '처리완료') AS VC_COMPLETED
, IFNULL(A.IN_REQ_APPROVAL_USER, 0) AS IN_REQ_APPROVAL_USER
, DATE_FORMAT(A.DT_REQ_APPROVAL_DATETIME, '%Y-%m-%d %H:%i') AS DT_REQ_APPROVAL_DATETIME
, A.TX_REQ_APPROVAL_COMMENT
, A.VC_REQ_APPROVAL_USER
, A.IN_DIFFICULTY
, A.IN_SATISFACTION
, A.ATCH_FILE_ID
FROM CM_INCIDENT_HIST A
, CM_SERVICE B
WHERE 1=1
AND SRCH_PROC_YN IS NULL
AND A.IN_SERVICE_CODE=B.IN_SERVICE_CODE
ORDER BY EVENT_TIME
</select>
<update id="updateIncidentHist" parameterType="java.util.LinkedHashMap">
UPDATE CM_INCIDENT_HIST
SET SRCH_PROC_YN = #{srchProcYn}
, SRCH_PROC_SND_TM = NOW()
, SRCH_PROC_SND_MSG = #{srchProcSndMsg}
WHERE IN_INCIDENT_SEQ = #{inIncidentSeq}
AND EVENT_TIME = #{eventTime}
AND EVENT_TYPE = #{eventType}
</update>
</mapper>

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8"?><!--Converted at: Wed May 11 15:49:39 KST 2016-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.urpsys.itmsbatch.srm.dao.ReportHistDao">
<resultMap type="java.util.LinkedHashMap" id="reportVo">
<result property="eventType" column="EVENT_TYPE"/>
<result property="eventTime" column="EVENT_TIME"/>
<result property="inReportSeq" column="IN_REPORT_SEQ"/>
<result property="inReportStatus" column="IN_REPORT_STATUS"/>
<result property="vcReportId" column="VC_REPORT_ID"/>
<result property="inIncidentSeq" column="IN_INCIDENT_SEQ"/>
<result property="vcIncidentNum" column="VC_INCIDENT_NUM"/>
<result property="inServiceCode" column="IN_SERVICE_CODE"/>
<result property="vcServiceName" column="VC_SERVICE_NAME"/>
<result property="dtStartDatetime" column="DT_START_DATETIME"/>
<result property="dtFinishDatetime" column="DT_FINISH_DATETIME"/>
<result property="inTaskUser" column="IN_TASK_USER"/>
<result property="vcTaskUser" column="VC_TASK_USER"/>
<result property="inRegUser" column="IN_REG_USER"/>
<result property="vcRegUser" column="VC_REG_USER"/>
<result property="dtLastUpdate" column="DT_LAST_UPDATE"/>
<result property="inTask" column="IN_TASK"/>
<result property="inDowntime" column="IN_DOWNTIME"/>
<result property="dtDownstartDatetime" column="DT_DOWNSTART_DATETIME"/>
<result property="dtDownfinishDatetime" column="DT_DOWNFINISH_DATETIME"/>
<result property="vcReportTitle" column="VC_REPORT_TITLE"/>
<result property="vcReportStatus" column="VC_REPORT_STATUS"/>
<result property="txReportBody" column="TX_REPORT_BODY"/>
<result property="vcTask" column="VC_TASK"/>
<result property="inReqApprovalUser" column="IN_REQ_APPROVAL_USER"/>
<result property="vcReqApprovalUser" column="VC_REQ_APPROVAL_USER"/>
<result property="dtReqApprovalDatetime" column="DT_REQ_APPROVAL_DATETIME"/>
<result property="txReqApprovalComment" column="TX_REQ_APPROVAL_COMMENT"/>
<result property="vcTaskCompany" column="VC_TASK_COMPANY"/>
<result property="inAssetCount" column="IN_ASSET_COUNT"/>
<result property="inPercallPrice" column="IN_PERCALL_PRICE"/>
<result property="atchFileId" column="ATCH_FILE_ID"/>
</resultMap>
<select id="getReportHistList" resultMap="reportVo">
/* ReportHistDao.getReportHistList */
SELECT A.EVENT_TYPE
, DATE_FORMAT(A.EVENT_TIME, '%Y-%m-%d %H:%i:%s') AS EVENT_TIME
, A.IN_REPORT_SEQ
, A.IN_REPORT_STATUS
, A.VC_REPORT_ID
, A.IN_INCIDENT_SEQ
, DATE_FORMAT(A.DT_START_DATETIME, '%Y-%m-%d %H:%i') AS DT_START_DATETIME
, DATE_FORMAT(A.DT_FINISH_DATETIME, '%Y-%m-%d %H:%i') AS DT_FINISH_DATETIME
, A.IN_TASK_USER
, A.VC_TASK_USER
, A.IN_REG_USER
, A.VC_REG_USER
, DATE_FORMAT(A.DT_LAST_UPDATE, '%Y-%m-%d %H:%i') AS DT_LAST_UPDATE
, A.IN_TASK
, A.IN_DOWNTIME
, A.VC_REPORT_TITLE
, DATE_FORMAT(A.DT_DOWNSTART_DATETIME, '%Y-%m-%d %H:%i') AS DT_DOWNSTART_DATETIME
, DATE_FORMAT(A.DT_DOWNFINISH_DATETIME, '%Y-%m-%d %H:%i') AS DT_DOWNFINISH_DATETIME
, A.IN_SERVICE_CODE
, C.VC_SERVICE_NAME
, A.TX_REPORT_BODY
, B.CD_NM AS VC_TASK
, A.IN_PERCALL_PRICE
, IF( A.IN_REPORT_STATUS=3, "승인완료"
, IF(A.IN_REPORT_STATUS=2, "반려"
, IF(A.IN_REPORT_STATUS=1, "승인중", "접수"))) AS VC_REPORT_STATUS
, IFNULL(A.IN_REQ_APPROVAL_USER, 0) AS IN_REQ_APPROVAL_USER
, DATE_FORMAT(A.DT_REQ_APPROVAL_DATETIME, '%Y-%m-%d %H:%i') AS DT_REQ_APPROVAL_DATETIME
, A.TX_REQ_APPROVAL_COMMENT
, A.VC_REQ_APPROVAL_USER
, A.ATCH_FILE_ID
FROM CM_REPORT_HIST A
LEFT OUTER JOIN TB_CMM_DTL_CD_INFO B ON A.IN_TASK=B.CD
AND B.CD_ID ='SM_002'
LEFT OUTER JOIN CM_SERVICE C ON A.IN_SERVICE_CODE=C.IN_SERVICE_CODE
WHERE 1=1
AND A.SRCH_PROC_YN IS NULL
ORDER BY A.EVENT_TIME
</select>
<update id="updateReportHist" parameterType="java.util.LinkedHashMap">
/* ReportHistDao.updateReportHist */
UPDATE CM_REPORT_HIST
SET SRCH_PROC_YN = #{srchProcYn}
, SRCH_PROC_SND_TM = NOW()
, SRCH_PROC_SND_MSG = #{srchProcSndMsg}
WHERE IN_REPORT_SEQ = #{inReportSeq}
AND EVENT_TIME = #{eventTime}
AND EVENT_TYPE = #{eventType}
</update>
</mapper>

View File

@ -0,0 +1,467 @@
fail.common.msg=\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
fail.common.sql=sql \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! error code: {0}, error msg: {1}
info.nodata.msg=\ud574\ub2f9 \ub370\uc774\ud130\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
#UI Common resource#
table.num=\ubc88\ud638
table.regdate=\ub4f1\ub85d\uc77c
table.reger=\ub4f1\ub85d\uc790
table.select=\uc120\ud0dd
title.html=egovframe common component
title.detail=\uc0c1\uc138\uc870\ud68c
title.inquire=\uc870\ud68c
title.update=\uc218\uc815
title.create=\ub4f1\ub85d
title.delete=\uc0ad\uc81c
title.save=\uc800\uc7a5
title.list=\ubaa9\ub85d
title.searchCondition=\uac80\uc0c9\uc870\uac74
title.search=\uac80\uc0c9\uc5b4
title.reply=\ub2f5\uae00
title.scrap=\uc2a4\ud06c\ub7a9
title.comment=\ub313\uae00
title.attachedFileSelect=\ud30c\uc77c\uc120\ud0dd
title.attachedFileDelete=\ud30c\uc77c\uc0ad\uc81c
title.link=\ub9c1\ud06c
title.management=\uad00\ub9ac
title.all=\uc804\uccb4
input.select=\uc120\ud0dd\ud558\uc138\uc694
input.cSelect=\uc120\ud0dd
input.input=\uc785\ub825
input.button=\ubc84\ud2bc
input.selectAll.title=\uc804\uccb4\uc120\ud0dd\uccb4\ud06c\ubc15\uc2a4
input.yes=\uc608
input.no=\uc544\ub2c8\uc624
select.searchCondition=\uc870\ud68c\uc870\uac74 \uc120\ud0dd
button.select=\uc120\ud0dd
button.search=\uac80\uc0c9
button.use=\uc0ac\uc6a9
button.notUsed=\uc0ac\uc6a9\uc911\uc9c0
button.inquire=\uc870\ud68c
button.update=\uc218\uc815
button.create=\ub4f1\ub85d
button.delete=\uc0ad\uc81c
button.deleteDatabase=\uc644\uc804\uc0ad\uc81c
button.close=\ub2eb\uae30
button.save=\uc800\uc7a5
button.list=\ubaa9\ub85d
button.reset=\ucde8\uc18c
button.passwordUpdate=\uc554\ud638\ubcc0\uacbd
button.subscribe=\uac00\uc785\uc2e0\uccad
button.realname=\uc2e4\uba85\ud655\uc778
button.moveToGpin=GPIN\uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9
button.moveToIhidnum=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638 \uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9
button.agree=\ub3d9\uc758
button.disagree=\ube44\ub3d9\uc758
button.possible=\uac00\ub2a5
button.impossible=\ubd88\uac00\ub2a5
button.qnaregist=Q&A\ub4f1\ub85d
button.cnsltregist=\uc0c1\ub2f4\ub4f1\ub85d
button.preview=\ubbf8\ub9ac\ubcf4\uae30
button.next=\ub2e4\uc74c
button.add=\ubc14\ub85c\ucd94\uac00
button.confirm=\ud655\uc778
button.back = \ub4a4\ub85c
button.yes = \uc608
button.no = \uc544\ub2c8\uc624
button.home = \ud648
button.user = \uc0ac\uc6a9\uc790\uc9c0\uc6d0
button.cop = \ud611\uc5c5
button.wrkstart = \ucd9c\uadfc
button.wrkend = \ud1f4\uadfc
button.reply = \ub2f5\uae00
button.scrap = \uc2a4\ud06c\ub7a9
button.comment = \ub313\uae00
button.excel = \uc5d1\uc140
button.init=\ucd08\uae30\ud654
button.acknowledgment=\uc2b9\uc778
button.cancelAcknowledgment=\uc2b9\uc778\ucde8\uc18c
button.bulkUpload=\uc77c\uad04\ub4f1\ub85d
button.log = \ub85c\uadf8
button.set = \uc124\uc815
button.move = \uc774\ub3d9
button.answer = \ub2f5\ubcc0
#UI Common Message#
common.noScriptTitle.msg=\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub294 \uc77c\ubd80 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc2e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
common.searchCondition.msg=\uc774 \ub808\uc774\uc544\uc6c3\uc740 \ud558\ub2e8 \uc815\ubcf4\ub97c \ub300\ud55c \uac80\uc0c9 \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
common.summary.list={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \ubaa9\ub85d\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.
common.summary.regist={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \ub4f1\ub85d\ud55c\ub2e4.
common.summary.update={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc218\uc815\ud55c\ub2e4.
common.summary.inqire={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \uc0c1\uc138\uc870\ud68c \ub0b4\uc5ed\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.
common.save.msg=\uc800\uc7a5\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.regist.msg=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.delete.msg=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.update.msg=\uc218\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.nodata.msg=\uc790\ub8cc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694
common.required.msg=(\uc740)\ub294 \ud544\uc218\uc785\ub825\ud56d\ubaa9\uc785\ub2c8\ub2e4.
common.acknowledgement.msg=\uc2b9\uc778\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.acknowledgementcancel.msg=\uc2b9\uc778\ucde8\uc18c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.nocomment.msg=\ub313\uae00\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
common.noguest.msg=\uc791\uc131\ub41c \ubc29\uba85\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
success.request.msg = \uc694\uccad\ucc98\ub9ac\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc218\ud589\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
success.common.select=\uc815\uc0c1\uc801\uc73c\ub85c \uc870\ud68c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
success.common.insert=\uc815\uc0c1\uc801\uc73c\ub85c \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
success.common.update=\uc815\uc0c1\uc801\uc73c\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
success.common.delete=\uc815\uc0c1\uc801\uc73c\ub85c \uc0ad\uc81c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
common.imposbl.fileupload = \ub354 \uc774\uc0c1 \ud30c\uc77c\uc744 \ucca8\ubd80\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
common.isConfmDe.msg=\uc2b9\uc778\uc77c\uc790\ub97c \ud655\uc778 \ubc14\ub78d\ub2c8\ub2e4.
common.isExist.msg = \uc774\ubbf8 \uc874\uc7ac\ud558\uac70\ub098 \uacfc\uac70\uc5d0 \ub4f1\ub85d\uc774 \ub418\uc5c8\ub358 \uc0c1\ud0dc\uc785\ub2c8\ub2e4.
fail.common.insert = \uc0dd\uc131\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.update = \uc218\uc815\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.delete = \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.delete.upperMenuExist = \ucc38\uc870\ub418\ub294 \uba54\ub274\uac00 \uc788\uc5b4 \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.select = \uc870\ud68c\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.login = \ub85c\uadf8\uc778 \uc815\ubcf4\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
fail.common.loginIncorrect = {0}\ud68c \uc774\uc0c1 \ub85c\uadf8\uc778 \uc811\uc18d\uc774 \uc2dc\ub3c4 \ub418\uc5b4 \uacc4\uc815\uc774 \uc7a0\uaca8\uc2b5\ub2c8\ub2e4!
fail.common.login.password = \ud328\uc2a4\uc6cc\ub4dc \uc790\ub9ac \uc218\uac00 \uc77c\uce58 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.(8\uc790\ub9ac \uc774\uc0c1 20\uc790\ub9ac \uc774\ud558)
fail.common.idsearch = \uc544\uc774\ub514\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
fail.common.pwsearch = \ube44\ubc00\ubc88\ud638\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
fail.request.msg = \uc694\uccad\ucc98\ub9ac\ub97c \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.login.ip = \ub4f1\ub85d\ub41c IP\uac00 \uc544\ub2c8\ubbc0\ub85c \ub85c\uadf8\uc778\uc774 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
#UI User Message#
fail.user.passwordUpdate1=\ud604\uc7ac \ube44\ubc00\ubc88\ud638\uac00 \ub9de\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
fail.user.passwordUpdate2=\ube44\ubc00\ubc88\ud638\uc640 \ube44\ubc00\ubc88\ud638 \ud655\uc778\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
info.user.rlnmCnfirm=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624.
success.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4.
fail.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
fail.user.connectFail=\uc2dc\uc2a4\ud15c \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.(\uc778\uc99d\uc11c\ubc84 \uc5f0\uacb0 \uc2e4\ud328)
info.user.rlnmPinCnfirm=\uacf5\uacf5 \uc544\uc774\ud540 \uc544\uc774\ub514\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624.
success.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4.
fail.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
#Vlidator Errors#
errors.prefix=<div class="error">
errors.suffix=</div><br/>
errors.required={0}\uc740(\ub294) \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4.
errors.minlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
errors.maxlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
errors.invalid={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uac12\uc785\ub2c8\ub2e4.
errors.minInteger={0}\uc740(\ub294) \uc720\ud6a8\ud55c \uac12\uc774 \uc544\ub2d9\ub2c8\ub2e4. 1 \uc774\uc0c1\uc758 \uac12\uc744 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
errors.byte={0}\uc740(\ub294) byte\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.short={0}\uc740(\ub294) short\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.integer={0}\uc740(\ub294) integer \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.long={0}\uc740(\ub294) long \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.float={0}\uc740(\ub294) float \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.double={0}\uc740(\ub294) double \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.date={0}\uc740(\ub294) \ub0a0\uc9dc \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
errors.range={0}\uc740(\ub294) {1}\uacfc {2} \uc0ac\uc774\uc758 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.creditcard={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc2e0\uc6a9\uce74\ub4dc \ubc88\ud638\uc785\ub2c8\ub2e4.
errors.email={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4.
errors.ihidnum=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\uc785\ub2c8\ub2e4.
errors.korean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc785\ub825\ud558\uc154\uc57c \ud569\ub2c8\ub2e4.
errors.ip=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 IP\uc8fc\uc18c\uc785\ub2c8\ub2e4.
errors.english={0}\uc740(\ub294) \uc601\ubb38\ub9cc \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc788\uc2b5\ub2c8\ub2e4.
errors.notKorean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
errors.password1={0}\uc740(\ub294) 8~20\uc790 \ub0b4\uc5d0\uc11c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
errors.password2={0}\uc740(\ub294) \ud55c\uae00,\ud2b9\uc218\ubb38\uc790,\ub744\uc5b4\uc4f0\uae30\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
errors.password3={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
errors.password4={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
errors.pwdcheckcomb3={0}\uc740(\ub294) \uc601\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569\uc73c\ub85c \uc774\ub8e8\uc5b4 \uc838\uc57c \ud569\ub2c8\ub2e4.
errors.pwdcheckcomb4={0}\uc740(\ub294) \uc601\ubb38\ub300\ubb38\uc790,\uc601\ubb38\uc18c\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569\uc73c\ub85c \uc774\ub8e8\uc5b4 \uc838\uc57c \ud569\ub2c8\ub2e4.
errors.pwdcheckseries={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 3\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
errors.pwdcheckrepeat={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 3\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
error.security.runtime.error = error
info.password.rule.password1 = - 8\uc774\uc0c1 20\uc790\ub9ac \uc774\ud558
info.password.rule.pwdcheckcomb3 = - \uc601\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569
info.password.rule.pwdcheckcomb4 = - \uc601\ubb38\ub300\ubb38\uc790,\uc601\ubb38\uc18c\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569
info.password.rule.pwdcheckseries = - 3\uc790\ub9ac \uc774\uc0c1 \ubc18\ubcf5 \ub610\ub294 \uc5f0\uc18d\ub41c \ubb38\uc790 \uc0ac\uc6a9 \uae08\uc9c0. \uc608)kkk , 321 \ub4f1 \uc0ac\uc6a9\uae08\uc9c0
#Xss Errors#
errors.xss.checkerUser=\ud574\ub2f9 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc0ac\uc6a9 \ubc0f \ucc98\ub9ac \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
#File Upload / Download
errors.file.extension=\uc9c0\uc6d0\ub418\ub294 \ud30c\uc77c\uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
errors.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
success.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
#common#
comCmmErr.button=\uc774\uc804 \ud398\uc774\uc9c0
#accessDenied#
comCmmErr.accessDenied.title=\ud604\uc7ac \ud398\uc774\uc9c0\uc5d0 \ub300\ud55c \uc811\uadfc\uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4!
comCmmErr.accessDenied.code=\uc0ac\uc6a9\uc790\uc811\uadfc\uad8c\ud55c \uc5d0\ub7ec
#dataAccessFailure#
comCmmErr.dataAccessFailure.title=\ub370\uc774\ud130 \ucc98\ub9ac \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc600\uc2b5\ub2c8\ub2e4!
comCmmErr.dataAccessFailure.code=\ub370\uc774\ud130\ucc98\ub9ac \uc5d0\ub7ec
#bizException#
comCmmErr.bizException.title=\ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1 \ucc98\ub9ac \uc911 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
comCmmErr.bizException.code=\ube44\uc988\ub2c8\uc2a4\ub85c\uc9c1\ucc98\ub9ac \uc5d0\ub7ec
#runtimeException#
comCmmErr.runtimeException.title=\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
comCmmErr.runtimeException.code=\uc2dc\uc2a4\ud15c \uc5d0\ub7ec
#sessionException#
comCmmErr.sessionException.title=\uc138\uc158\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4!
comCmmErr.sessionException.code=\uc138\uc158\ub9cc\ub8cc \uc5d0\ub7ec
#top#
comCmm.top.title=\uc804\uc790\uc815\ubd80 \ud45c\uc900\ud504\ub808\uc784\uc6cc\ud06c \uacf5\ud1b5\ucef4\ud3ec\ub10c\ud2b8 VERSION 4.0
comCmm.top.leftSessionTime=\uc138\uc158\ub9cc\ub8cc \ub0a8\uc740\uc2dc\uac04
comCmm.top.incSessionTime=\uc2dc\uac04\uc5f0\uc7a5
comCmm.top.expiredSessionTime=\uc2dc\uac04\ub9cc\ub8cc
comCmm.top.expireSessionTimeInfo=\ub85c\uadf8\uc778 \uc138\uc158\uc2dc\uac04\uc774 \ub9cc\ub8cc \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
comCmm.top.cantIncSessionTime=\uc2dc\uac04\uc744 \uc5f0\uc7a5\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
#left#
comCmm.mai.title=\ud3ec\ud138(\uc608\uc81c) \uba54\uc778\ud654\uba74
comCmm.uat.title=\uc0ac\uc6a9\uc790\ub514\ub809\ud1a0\ub9ac/\ud1b5\ud569\uc778\uc99d
comCmm.sec.title=\ubcf4\uc548
comCmm.sts.title=\ud1b5\uacc4/\ub9ac\ud3ec\ud305
comCmm.cop.title=\ud611\uc5c5
comCmm.uss.title=\uc0ac\uc6a9\uc790\uc9c0\uc6d0
comCmm.sym.title=\uc2dc\uc2a4\ud15c\uad00\ub9ac
comCmm.ssi.title=\uc2dc\uc2a4\ud15c/\uc11c\ube44\uc2a4\uc5f0\uacc4
comCmm.dam.title=\ub514\uc9c0\ud138 \uc790\uc0b0 \uad00\ub9ac
comCmm.com.title=\uc694\uc18c\uae30\uc220
comCmm.ext.title=\uc678\ubd80 \ucd94\uac00 \ucef4\ud3ec\ub10c\ud2b8
#component#
#\ud3ec\ud0c8 \uba54\uc778\ud654\uba74#
comCmm.left.1=\ud3ec\ud138(\uc608\uc81c) \uba54\uc778\ud654\uba74
#\uc0ac\uc6a9\uc790\ub514\ub809\ud1a0\ub9ac/\ud1b5\ud569\uc778\uc99d#
comCmm.left.10=\ub85c\uadf8\uc778
comCmm.left.30=\ub85c\uadf8\uc778\uc815\ucc45\uad00\ub9ac
#\ubcf4\uc548#
comCmm.left.60=\uad8c\ud55c\uad00\ub9ac
comCmm.left.70=\uad8c\ud55c\uadf8\ub8f9\uad00\ub9ac
comCmm.left.80=\uadf8\ub8f9\uad00\ub9ac
comCmm.left.90=\ub864\uad00\ub9ac
comCmm.left.100=\ubd80\uc11c\uad8c\ud55c\uad00\ub9ac
#\ud1b5\uacc4/\ub9ac\ud3ec\ud305#
comCmm.left.120=\uac8c\uc2dc\ubb3c\ud1b5\uacc4
comCmm.left.130=\uc0ac\uc6a9\uc790\ud1b5\uacc4
comCmm.left.140=\uc811\uc18d\ud1b5\uacc4
comCmm.left.150=\ud654\uba74\ud1b5\uacc4
comCmm.left.160=\ubcf4\uace0\uc11c\ud1b5\uacc4
comCmm.left.161=\uc790\ub8cc\uc774\uc6a9\ud604\ud669\ud1b5\uacc4
\ud611\uc5c5
comCmm.left.170=\ube14\ub85c\uadf8\uad00\ub9ac
comCmm.left.180=\uac8c\uc2dc\ud310\uad00\ub9ac
comCmm.left.190=\uac8c\uc2dc\ud310\uc0ac\uc6a9\uc815\ubcf4
comCmm.left.200=\ud15c\ud50c\ub9bf\uad00\ub9ac
comCmm.left.250=\uc2a4\ud06c\ub7a9 \ubaa9\ub85d
comCmm.left.270=\ucee4\ubba4\ub2c8\ud2f0\uad00\ub9ac
comCmm.left.310=\ubb38\uc790\uba54\uc2dc\uc9c0
comCmm.left.320=\ubd80\uc11c\uc77c\uc815\uad00\ub9ac
comCmm.left.330=\uc77c\uc815\uad00\ub9ac
comCmm.left.340=\uc77c\uc9c0\uad00\ub9ac
comCmm.left.350=\uc804\uccb4\uc77c\uc815\uad00\ub9ac
comCmm.left.360=\uba54\uc77c\ubc1c\uc1a1
comCmm.left.361=\ubc1c\uc1a1\uba54\uc77c\ub0b4\uc5ed
comCmm.left.370=\uba85\ud568\uad00\ub9ac
comCmm.left.371=\ub0b4\uba85\ud568\ubaa9\ub85d
comCmm.left.380=\uc8fc\uc18c\ub85d\uad00\ub9ac
comCmm.left.390=\uac04\ubd80\uc77c\uc815\uad00\ub9ac
comCmm.left.400=\ubd80\uc11c\uc5c5\ubb34\ud568\uad00\ub9ac
comCmm.left.401=\ubd80\uc11c\uc5c5\ubb34\uc815\ubcf4
comCmm.left.410=\uc8fc\uac04/\uc6d4\uac04\ubcf4\uace0\uad00\ub9ac
comCmm.left.420=\uba54\ubaa8\ud560\uc77c\uad00\ub9ac
comCmm.left.430=\uba54\ubaa8\ubcf4\uace0
#\uc0ac\uc6a9\uc790\uc9c0\uc6d0#
comCmm.left.450=\uae30\uc5c5\ud68c\uc6d0\uad00\ub9ac
comCmm.left.460=\uc5c5\ubb34\uc0ac\uc6a9\uc790\uad00\ub9ac
comCmm.left.461=\ubd80\uc11c\uad00\ub9ac
comCmm.left.470=\uc77c\ubc18\ud68c\uc6d0\uad00\ub9ac
comCmm.left.480=\ub9c8\uc774\ud398\uc774\uc9c0\uad00\ub9ac
comCmm.left.490=\uc57d\uad00\uad00\ub9ac
comCmm.left.500=\uc800\uc791\uad8c\ubcf4\ud638\uc815\ucc45
comCmm.left.510=\uac1c\uc778\uc815\ubcf4\ubcf4\ud638\uc815\ucc45\ud655\uc778
comCmm.left.520=\ub3c4\uc6c0\ub9d0
comCmm.left.530=\uc6a9\uc5b4\uc0ac\uc804
comCmm.left.540=FAQ\uad00\ub9ac
comCmm.left.550=Q&A\uad00\ub9ac
comCmm.left.551=Q&A\ub2f5\ubcc0\uad00\ub9ac
comCmm.left.560=\ud589\uc815\uc804\ubb38\uc6a9\uc5b4\uc0ac\uc804
comCmm.left.561=\ud589\uc815\uc804\ubb38\uc6a9\uc5b4\uc0ac\uc804\uad00\ub9ac
comCmm.left.570=\uc628\ub77c\uc778\ub9e4\ub274\uc5bc
comCmm.left.571=\uc0ac\uc6a9\uc790\uc628\ub77c\uc778\ub9e4\ub274\uc5bc
comCmm.left.580=\uc0c1\ub2f4\uad00\ub9ac
comCmm.left.581=\uc0c1\ub2f4\ub2f5\ubcc0\uad00\ub9ac
comCmm.left.590=\uc124\ubb38\uad00\ub9ac
comCmm.left.600=\uc124\ubb38\uc870\uc0ac
comCmm.left.610=\uc124\ubb38\ud15c\ud50c\ub9bf\uad00\ub9ac
comCmm.left.620=\uc751\ub2f5\uc790\uad00\ub9ac
comCmm.left.630=\uc9c8\ubb38\uad00\ub9ac
comCmm.left.640=\ud56d\ubaa9\uad00\ub9ac
comCmm.left.650=\ud68c\uc758\uad00\ub9ac
comCmm.left.660=\uc628\ub77c\uc778poll\uad00\ub9ac
comCmm.left.661=\uc628\ub77c\uc778poll\ucc38\uc5ec
comCmm.left.670=\ub274\uc2a4\uad00\ub9ac
comCmm.left.680=\uc0ac\uc774\ud2b8\uad00\ub9ac
comCmm.left.700=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uad00\ub9ac
comCmm.left.710=\ud589\uc0ac/\uc774\ubca4\ud2b8/\ucea0\ud398\uc778
comCmm.left.711=\uc678\ubd80\uc778\uc0ac\uc815\ubcf4
comCmm.left.720=\ud31d\uc5c5\ucc3d\uad00\ub9ac
comCmm.left.730=\uc815\ubcf4\uc54c\ub9bc\uc774
comCmm.left.740=\ubc30\ub108\uad00\ub9ac
comCmm.left.741=MYPAGE\ubc30\ub108\uad00\ub9ac
comCmm.left.750=\ub85c\uadf8\uc778\ud654\uba74\uc774\ubbf8\uc9c0\uad00\ub9ac
comCmm.left.760=\ucd5c\uadfc\uac80\uc0c9\uc5b4 \uc870\ud68c
comCmm.left.770=\uba54\uc778\uc774\ubbf8\uc9c0\uad00\ub9ac
comCmm.left.771=\uba54\uc778\uc774\ubbf8\uc9c0 \ubc18\uc601\uacb0\uacfc\ubcf4\uae30
comCmm.left.780=\ud1b5\ud569\ub9c1\ud06c\uad00\ub9ac
comCmm.left.790=\uc0ac\uc6a9\uc790\ubd80\uc7ac\uad00\ub9ac
comCmm.left.800=\uc778\ud130\ub137\uc11c\ube44\uc2a4\uc548\ub0b4\ubc0f\uad00\ub9ac
comCmm.left.810=Wiki\uae30\ub2a5
comCmm.left.820=RSS\ud0dc\uadf8\uad00\ub9ac
comCmm.left.822=RSS\ud0dc\uadf8\uc11c\ube44\uc2a4
comCmm.left.830=Twitter\uc5f0\ub3d9
comCmm.left.831=Facebook \uc5f0\ub3d9
comCmm.left.840=\ucabd\uc9c0\uad00\ub9ac
comCmm.left.850=\ubc1b\uc740\ucabd\uc9c0\ud568\uad00\ub9ac
comCmm.left.860=\ubcf4\ub0b8\ucabd\uc9c0\ud568\uad00\ub9ac
comCmm.left.870=\ud68c\uc758\uc2e4\uad00\ub9ac
comCmm.left.871=\ud68c\uc758\uc2e4\uc608\uc57d\uad00\ub9ac
comCmm.left.890=\uc9c1\uc6d0\uacbd\uc870\uc0ac\uad00\ub9ac
comCmm.left.891=\uc9c1\uc6d0\uacbd\uc870\uc0ac\uc2b9\uc778\uad00\ub9ac
comCmm.left.900=\ud734\uac00\uad00\ub9ac
comCmm.left.901=\ud734\uac00\uc2b9\uc778\uad00\ub9ac
comCmm.left.902=\uac1c\uc778\uc5f0\ucc28\uad00\ub9ac
comCmm.left.910=\ub2f9\uc9c1\uad00\ub9ac
comCmm.left.911=\ub2f9\uc9c1\uccb4\ud06c\uad00\ub9ac
comCmm.left.920=\ud3ec\uc0c1\uad00\ub9ac
comCmm.left.921=\ud3ec\uc0c1\uc2b9\uc778\uad00\ub9ac
comCmm.left.930=\uae30\ub150\uc77c\uad00\ub9ac
comCmm.left.931=\uae30\ub150\uc77c\ubaa9\ub85d(\ud655\uc778\uc6a9)
comCmm.left.940=\ud589\uc0ac\uc2e0\uccad\uad00\ub9ac
comCmm.left.941=\ud589\uc0ac\uc811\uc218\uad00\ub9ac
comCmm.left.942=\ud589\uc0ac\uc811\uc218\uc2b9\uc778\uad00\ub9ac
comCmm.left.943=\uc57d\ub3c4 \uad00\ub9ac
comCmm.left.950=\ucd9c\ud1f4\uadfc\uad00\ub9ac
#\uc2dc\uc2a4\ud15c\uad00\ub9ac#
comCmm.left.960=\uacf5\ud1b5\ubd84\ub958\ucf54\ub4dc
comCmm.left.970=\uacf5\ud1b5\uc0c1\uc138\ucf54\ub4dc
comCmm.left.980=\uacf5\ud1b5\ucf54\ub4dc
comCmm.left.1000=\uc6b0\ud3b8\ubc88\ud638\uad00\ub9ac
comCmm.left.1010=\ud589\uc815\ucf54\ub4dc\uad00\ub9ac
comCmm.left.1020=\uae30\uad00\ucf54\ub4dc\uc218\uc2e0
comCmm.left.1030=\ub85c\uadf8\uad00\ub9ac
comCmm.left.1040=\uc0ac\uc6a9\ub85c\uadf8\uad00\ub9ac
comCmm.left.1050=\uc1a1/\uc218\uc2e0\ub85c\uadf8\uad00\ub9ac
comCmm.left.1060=\uc2dc\uc2a4\ud15c\uc774\ub825\uad00\ub9ac
comCmm.left.1070=\uc6f9\ub85c\uadf8\uad00\ub9ac
comCmm.left.1080=\uc811\uc18d\ub85c\uadf8\uad00\ub9ac
comCmm.left.1085=\uac1c\uc778\uc815\ubcf4\uc870\ud68c\ub85c\uadf8\uad00\ub9ac
comCmm.left.1090=\uba54\ub274\ub9ac\uc2a4\ud2b8\uad00\ub9ac
comCmm.left.1091=\uba54\ub274\uad00\ub9ac\ub9ac\uc2a4\ud2b8
comCmm.left.1100=\uba54\ub274\uc0dd\uc131\uad00\ub9ac
comCmm.left.1101=\uc0ac\uc774\ud2b8\ub9f5
comCmm.left.1110=\ubc14\ub85c\uac00\uae30\uba54\ub274\uad00\ub9ac
comCmm.left.1111=\ud504\ub85c\uadf8\ub7a8\uad00\ub9ac
comCmm.left.1112=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad\uad00\ub9ac
comCmm.left.1113=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad\ucc98\ub9ac
comCmm.left.1114=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc774\ub825
comCmm.left.1120=\ubc30\uce58\uc791\uc5c5\uad00\ub9ac
comCmm.left.1130=\ubc30\uce58\uacb0\uacfc\uad00\ub9ac
comCmm.left.1140=\uc2a4\ucf00\uc904\ucc98\ub9ac
comCmm.left.1150=\ubc31\uc5c5\uad00\ub9ac
comCmm.left.1151=\ubc31\uc5c5\uacb0\uacfc\uad00\ub9ac
comCmm.left.1160=\ub124\ud2b8\uc6cc\ud06c\uad00\ub9ac
comCmm.left.1170=\uc11c\ubc84\uc815\ubcf4\uad00\ub9ac
comCmm.left.1171=\uc11c\ubc84(S/W)\ubaa9\ub85d
comCmm.left.1180=\uc7a5\uc560\uc2e0\uccad\uad00\ub9ac
comCmm.left.1190=\uc7a5\uc560\ucc98\ub9ac\uacb0\uacfc\uad00\ub9ac
#\uc2dc\uc2a4\ud15c/\uc11c\ube44\uc2a4\uc5f0\uacc4#
comCmm.left.1210=\uc2dc\uc2a4\ud15c\uc5f0\uacc4\uad00\ub9ac
comCmm.left.1220=\uc5f0\uacc4\ud604\ud669\uad00\ub9ac
comCmm.left.1230=\uc5f0\uacc4\uba54\uc2dc\uc9c0\uad00\ub9ac
comCmm.left.1240=\uc5f0\uacc4\uae30\uad00\uad00\ub9ac
#\ub514\uc9c0\ud138 \uc790\uc0b0 \uad00\ub9ac#
comCmm.left.1250=\uac1c\uc778\uc9c0\uc2dd\uad00\ub9ac
comCmm.left.1260=\uc9c0\uc2dd\ub9f5\uad00\ub9ac(\uc720\ud615)
comCmm.left.1261=\uc9c0\uc2dd\ub9f5\uad00\ub9ac(\uc870\uc9c1)
comCmm.left.1270=\uc9c0\uc2dd\uc804\ubb38\uac00\uad00\ub9ac
comCmm.left.1280=\uc9c0\uc2dd\uc815\ubcf4\uad00\ub9ac
comCmm.left.1290=\uc9c0\uc2dd\ud3c9\uac00\uad00\ub9ac
comCmm.left.1291=\uc9c0\uc2dd\uc815\ubcf4\uc81c\uacf5
#\uc694\uc18c\uae30\uc220#
comCmm.left.1300=\uacf5\ud734\uc77c\uad00\ub9ac(\ub2ec\ub825)
comCmm.left.2080=\uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2090=DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2100=HTTP\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2110=\ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2120=\ub124\ud2b8\uc6cc\ud06c\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2130=\ud30c\uc77c\uc2dc\uc2a4\ud15c\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2140=\ud504\ub85d\uc2dc\uc11c\ube44\uc2a4
comCmm.left.2150=\ud30c\uc77c\ub3d9\uae30\ud654(\ub300\uc0c1\uc11c\ubc84)
comCmm.left.2160=\ub85c\uadf8\uc778\uc138\uc158\uc815\ubcf4\uccb4\ud06c
comCmm.left.2170=\uc11c\ubc84\uc790\uc6d0\ubaa8\ub2c8\ud130\ub9c1-\ub300\uc0c1\ubaa9\ub85d
comCmm.left.2180=\uc8fc\uc18c\uc815\ubcf4\uc5f0\uacc4
comCmm.left.2200=\uc554\ud638\ud654/\ubcf5\ud638\ud654
#\uc678\ubd80 \ucd94\uac00 \ucef4\ud3ec\ub10c\ud2b8#
comCmm.left.3000=JFile \uac00\uc774\ub4dc
comCmm.left.3010=JFile \ud30c\uc77c \uc5c5\ub85c\ub4dc
comCmm.left.3020=JFile \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc
comCmm.left.3100=LDAP \uc870\uc9c1\ub3c4 \ud2b8\ub9ac
comCmm.left.3110=LDAP \uc870\uc9c1\ub3c4 \uadf8\ub798\ud504
comCmm.left.3200=\uc6f9\uc18c\ucf13 \uba54\uc2e0\uc800
#EgovUnitContent(\ub85c\uadf8\uc778 \ud6c4 \ud398\uc774\uc9c0)#
comCmm.unitContent.1=\uacf5\ud1b5\ucef4\ud3ec\ub10c\ud2b8
comCmm.unitContent.2=\ub2d8 \ud658\uc601\ud569\ub2c8\ub2e4.
comCmm.unitContent.3=\ub85c\uadf8\uc544\uc6c3
comCmm.unitContent.4=\uc2e4\ud589 \uc2dc \uc624\ub958 \uc0ac\ud56d\uc774 \uc788\uc73c\uc2dc\uba74 \ud45c\uc900\ud504\ub808\uc784\uc6cc\ud06c\uc13c\ud130\ub85c \uc5f0\ub77d\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.
comCmm.unitContent.5=\ud654\uba74 \uc124\uba85
comCmm.unitContent.6=\uc67c\ucabd \uba54\ub274\ub294 \uba54\ub274\uc640 \uad00\ub828\ub41c \ucef4\ud3ec\ub10c\ud2b8(\uba54\ub274\uad00\ub9ac, \uc0ac\uc774\ud2b8\ub9f5 \ub4f1)\ub4e4\uc758 \uc601\ud5a5\uc744 \ubc1b\uc9c0 \uc54a\uc73c\uba70,
comCmm.unitContent.7=\uac01 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc27d\uac8c \ucc3e\uc544\ubcfc \uc218 \uc788\ub294 \ubc14\ub85c \uac00\uae30 \ub9c1\ud06c\ud398\uc774\uc9c0\uc785\ub2c8\ub2e4.
comCmm.unitContent.8=\ucef4\ud3ec\ub10c\ud2b8 \uc124\uce58 \ud6c4 \uc124\uce58\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 IncludedInfo annotation\uc744 \ud1b5\ud574 \ucc3e\uc544\ub0b8 \ud6c4
comCmm.unitContent.9=\ud654\uba74\uc5d0 \ud45c\uc2dc\ud560 \uc815\ubcf4\ub97c \ucc98\ub9ac\ud558\ub294 Controller \ud074\ub798\uc2a4\uc785\ub2c8\ub2e4.
comCmm.unitContent.10=\uac1c\ubc1c \uc2dc \uba54\ub274 \uad6c\uc870\uac00 \uc7a1\ud788\uae30 \uc804\uc5d0 \ubc30\ud3ec \ud30c\uc77c\ub4e4\uc5d0 \ud3ec\ud568\ub41c \uacf5\ud1b5 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc758 \ubaa9\ub85d\uc131 \ud654\uba74\uc5d0 URL\uc744 \uc81c\uacf5\ud558\uc5ec
comCmm.unitContent.11=\uac1c\ubc1c\uc790\uac00 \ud3b8\ub9ac\ud558\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc791\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
comCmm.unitContent.12=\uc6b4\uc601 \uc2dc\uc5d0 \ubcf8 \ucee8\ud2b8\ub864\uc744 \uc0ac\uc6a9\ud558\uc5ec \uba54\ub274\ub97c \uad6c\uc131\ud558\ub294 \uacbd\uc6b0,
comCmm.unitContent.13=\uc131\ub2a5 \ubb38\uc81c\ub97c \uc77c\uc73c\ud0a4\uac70\ub098 \uc0ac\uc6a9\uc790\ubcc4 \uba54\ub274 \uad6c\uc131\uc5d0 \uc624\ub958\ub97c \ubc1c\uc0dd\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0
comCmm.unitContent.14=\uc2e4 \uc6b4\uc601 \uc2dc\uc5d0\ub294 \uc0ad\uc81c\ud574\uc11c \ubc30\ud3ec\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud574 \ub4dc\ub9bd\ub2c8\ub2e4.
comCmm.unitContent.20=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ub9cc\ub8cc \uc548\ub0b4
#EgovExpirePwd(\ube44\ubc00\ubc88\ud638\ubcc0\uacbd \uacf5\uc9c0)#
comCmm.expirePwdContent.1=\ub85c\uadf8\uc778
comCmm.expirePwdContent.2=\ub85c\uadf8\uc778 \uad6c\ubd84
comCmm.expirePwdContent.10=\uc5c5\ubb34\uc0ac\uc6a9\uc790
comCmm.expirePwdContent.11=\uae30\uc5c5\ud68c\uc6d0
comCmm.expirePwdContent.12=\uc77c\ubc18\ud68c\uc6d0
comCmm.expirePwdContent.21=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04\uc758 \ubcc0\uacbd\uc740 \ub2e4\uc74c \ud30c\uc77c\uc744 \ucc38\uc870\ud558\uc5ec \uc8fc\uc138\uc694.
comCmm.expirePwdContent.22=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ub9cc\ub8cc
comCmm.expirePwdContent.23=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04\uc774 \ub9cc\ub8cc \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
comCmm.expirePwdContent.24=\uc548\uc804\ud55c \uac1c\uc778\uc815\ubcf4 \ubcf4\ud638\ub97c \uc704\ud574 \uc9c0\uae08 \ube44\ubc00\ubc88\ud638\ub97c \ubcc0\uacbd\ud574 \uc8fc\uc138\uc694!
comCmm.expirePwdContent.25=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ucd08\uacfc\uc77c\uc218
comCmm.expirePwdContent.26=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04
comCmm.expirePwdContent.27=\ube44\ubc00\ubc88\ud638 \ubcc0\uacbd\ud6c4 \uacbd\uacfc\uc77c\uc218
comCmm.expirePwdContent.28=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ucd08\uacfc\uc77c\uc218
comCmm.expirePwdContent.29=\uc8fc\uae30\uc801\uc73c\ub85c \ube44\ubc00\ubc88\ud638\ub97c \ubcc0\uacbd\ud574 \uc8fc\uc138\uc694.
comCmm.expirePwdContent.30=\uc77c
comCmm.expirePwdContent.50=\uc9c0\uae08 \uc989\uc2dc \ubcc0\uacbd\ud558\uae30
comCmm.expirePwdContent.51=\ub2e4\uc74c\uc5d0 \ubcc0\uacbd\ud558\uae30

View File

@ -0,0 +1,468 @@
fail.common.msg=error ocurred!
fail.common.sql=sql error ocurred! error code: {0}, error msg: {1}
info.nodata.msg=no data found.
#UI Common resource#
table.num=num.
table.regdate=reg.date
table.reger=registrant
table.select=select
title.html=egovframe common component
title.detail=Detail Inquiry
title.inquire=Inquire
title.update=Modify
title.create=Create
title.delete=Delete
title.save=Save
title.list=List
title.searchCondition=search condition
title.search=keyword
title.reply=reply
title.scrap=scrap
title.comment=comment
title.attachedFileSelect=attached file
title.attachedFileDelete=attached file delete
title.link=link
title.management=Management
title.all=All
input.select=Select
input.cSelect=Select
input.input=input
input.button=button
input.selectAll.title=Checkbox select all
input.yes=Yes
input.no=No
select.searchCondition=select condition select
button.select=select
button.search=Search
button.use=use
button.notUsed=Not used
button.inquire=inquire
button.update=update
button.create=create
button.delete=delete
button.deleteDatabase=Wiping
button.close=close
button.save=save
button.list=list
button.reset=reset
button.passwordUpdate=password update
button.subscribe=subscribe
button.realname=realname confirm
button.moveToGpin=move to gpin confirm
button.moveToIhidnum=move to ihidnum confirm
button.agree=agree
button.disagree=disagree
button.possible=possible
button.impossible=impossible
button.qnaregist=Q&A create
button.cnsltregist=Counsel create
button.preview=preview
button.next=nexut
button.add=add it now
button.confirm=confirm
button.back =back
button.yes =yes
button.no =no
button.home =home
button.user =user support
button.cop =cooperation
button.wrkstart = work start
button.wrkend = work end
button.reply = reply
button.scrap = scrap
button.comment = comment
button.excel = excel
button.init=init
button.acknowledgment=acknowledgment
button.cancelAcknowledgment=cancel acknowledgment
button.bulkUpload=bulk upload
button.log = log
button.set = set
button.move = move
button.answer = answer
#UI Common Message#
common.noScriptTitle.msg=I can't use all functions in browser JavaScript is not supported.
common.searchCondition.msg=This layout is a lower information searches made up of information.
common.summary.list={0} A list of the details of the output.
common.summary.regist={0} Registered by typing the possible contents of registers by clicking the button.
common.summary.update={0} Registered by typing the possible content of modification by clicking the button.
common.summary.inqire={0} Full inquiry details about the details of the output.
common.save.msg=confirm save?
common.regist.msg=confirm regist?
common.delete.msg=confirm delete?
common.update.msg=confirm update?
common.nodata.msg=There is no data. please choose another seach keyword
common.required.msg=is required field
common.acknowledgement.msg=confirm acknowledgement?
common.acknowledgementcancel.msg=confirm acknowledgement cancel?
common.nocomment.msg=There is no comment.
common.noguest.msg=There is no guest notice.
success.request.msg=you're request successfully done
success.common.select=successfully selected
success.common.insert=successfully inserted
success.common.update=successfully updated
success.common.delete=successfully deleted
common.imposbl.fileupload = cannot upload files
common.isConfmDe.msg=Please check the approval date box
common.isExist.msg = already exist
fail.common.insert = fail to insert.
fail.common.update = fail to update
fail.common.delete = fail to delete
fail.common.delete.upperMenuExist = fail to delete[upperMenuId foreign key error]
fail.common.select = fail to select
fail.common.login = login information is not correct
fail.common.loginIncorrect = login in more than {0} account will be locked!
fail.common.login.password = password information is not correct(password digit should be 8 to 20)
fail.common.idsearch = can not find id
fail.common.pwsearch = can not find password
fail.request.msg = Failed to handle the request
fail.common.login.ip = Login is refused because it is not a registered IP.
#UI User Message#
fail.user.passwordUpdate1=current password is not correct
fail.user.passwordUpdate2=password confirm is not correct
info.user.rlnmCnfirm=realname confirm ready
success.user.rlnmCnfirm=it is realname
fail.user.rlnmCnfirm=it is not realname
fail.user.connectFail=connection fail
info.user.rlnmPinCnfirm=Using the i-PIN ID, please check your real name
success.user.rlnmPinCnfirm=Consistent with the registration data of the i-PIN
fail.user.rlnmPinCnfirm=i-PIN does not match the registered data
#Vlidator Errors#
errors.prefix=<div class="error">
errors.suffix=</div><br/>
errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid={0} is invalid.
errors.byte={0} must be a byte.
errors.short={0} must be a short.
errors.integer={0} must be an integer.
errors.long={0} must be a long.
errors.float={0} must be a float.
errors.double={0} must be a double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is an invalid credit card number.
errors.email={0} is an invalid e-mail address.
errors.ihidnum=Is not a valid Social Security number
errors.korean={0} should be entered with their Korean
errors.ip=Invalid IP address.
errors.english={0}is an invalid English character.
errors.notKorean={0} should not be entered with their Korean
errors.password1={0} must be entered within 8 to 20 characters.
errors.password2={0} is Korean, special characters, spaces are not allowed.
errors.password3={0} can not be used continuously for more than four sequential digits.
errors.password4={0} can not be used continuously for more than 4 letters or numbers that are repeated.
errors.pwdcheckcomb3={0} must be include as least 3 of English alphabet, digit number, special characters such as ~!@#$%^&*?
errors.pwdcheckcomb4={0} must be include as least 4 of English alphabet uppercase letter, English alphabet lowercase letter, digit number, special characters such as ~!@#$%^&*?
errors.pwdcheckseries={0} can not be used continuously for more than 3 sequential letters or digits.
errors.pwdcheckrepeat={0} can not be used continuously for more than 3 letters or numbers that are repeated.
error.security.runtime.error = error
info.password.rule.password1 = - must be entered within 8 to 20 characters.
info.password.rule.pwdcheckcomb3 = - must be include as least 3 of English alphabet, digit number, special characters such as ~!@#$%^&*?
info.password.rule.pwdcheckcomb4 = - must be include as least 4 of English alphabet uppercase letter, English alphabet lowercase letter, digit number, special characters such as ~!@#$%^&*?
info.password.rule.pwdcheckseries = - can not be used continuously for more than 3 sequential letters or digits ex) kkk, 321 are not allowed.
#Xss Errors#
errors.xss.checkerUser=There is no use and disposal authority for its capabilities.
#File Upload / Download
errors.file.extension=It is not a supported file type.
errors.file.transfer=An error occurred during file transfer.
success.file.transfer=The file transfer is complete.
#common#
comCmmErr.button=before page
#accessDenied#
comCmmErr.accessDenied.title=You do not have permission to access this page!
comCmmErr.accessDenied.code=User authorization Error
#dataAccessFailure#
comCmmErr.dataAccessFailure.title=Error occurred while processing data!
comCmmErr.dataAccessFailure.code=Database Processing Error
#bizException#
comCmmErr.bizException.title=During business logic processing!
comCmmErr.bizException.code=Business Logic Processing Error
#runtimeException#
comCmmErr.runtimeException.title=Unknown error occurred!
comCmmErr.runtimeException.code=System Error
#sessionException#
comCmmErr.sessionException.title=Session Expiration Error!
comCmmErr.sessionException.code=Session Expiration Error
#top#
comCmm.top.title=eGoverment Standard Framework Common Components VERSION 4.0
comCmm.top.leftSessionTime=Session expiration time
comCmm.top.incSessionTime=Time extension
comCmm.top.expiredSessionTime=Time out
comCmm.top.expireSessionTimeInfo=The Signin session time has expired.
comCmm.top.cantIncSessionTime=Time cannot be extended.
#left#
comCmm.mai.title=Portal(example) Main Page
comCmm.uat.title=User Authentication/Directory Service
comCmm.sec.title=Security
comCmm.sts.title=Statistics/Reporting
comCmm.cop.title=Collaboration
comCmm.uss.title=User Support
comCmm.sym.title=System Management
comCmm.ssi.title=System/Service Integration
comCmm.dam.title=Digital Asset Management
comCmm.com.title=Utility Technology
comCmm.ext.title=External Add Components
#component#
#Portal(example) Main Page#
comCmm.left.1=Portal(example) Main Page
#User Authentication/Directory Service#
comCmm.left.10=Log In
comCmm.left.30=Log In Policy Management
#Security#
comCmm.left.60=Authority Management
comCmm.left.70=Authority Group Management
comCmm.left.80=Group Management
comCmm.left.90=Role management for Each Authority
comCmm.left.100=Department Authority Management
#Statistics/Reporting#
comCmm.left.120=Post Statistics
comCmm.left.130=User Statistics
comCmm.left.140=Connection Statistics
comCmm.left.150=Screen Statistics
comCmm.left.160=Report Statistics
comCmm.left.161=Data Usage Statistics
#Collaboration#
comCmm.left.170=Blog Management
comCmm.left.180=Board Master Management
comCmm.left.190=Board Usage Management
comCmm.left.200=Template Management
comCmm.left.250=Scrap Management
comCmm.left.270=Community Creation/Usage/Member Management
comCmm.left.310=SMS Service
comCmm.left.320=Department Schedule Management
comCmm.left.330=Schedule Management
comCmm.left.340=Diary Management
comCmm.left.350=Master Schedule
comCmm.left.360=Send Mail
comCmm.left.361=Send Mail List
comCmm.left.370=Business Card Management
comCmm.left.371=My Business Card Management
comCmm.left.380=Address Book Management
comCmm.left.390=Executive Schedule Management
comCmm.left.400=Division Task Folder Management
comCmm.left.401=Division Task Information
comCmm.left.410=Weekly/Monthly Reports Management
comCmm.left.420=Memo/To-do List Management
comCmm.left.430=Memo Report
#User Support#
comCmm.left.450=Corporate Member Management
comCmm.left.460=User Management
comCmm.left.461=Department Management
comCmm.left.470=Member Management
comCmm.left.480=My Page
comCmm.left.490=Provision Management
comCmm.left.500=Copyright Protection Policy
comCmm.left.510=Private Information Protection Policy
comCmm.left.520=Help
comCmm.left.530=Word Dictionary
comCmm.left.540=FAQ Management
comCmm.left.550=Q&A Management
comCmm.left.551=Q&A Answer
comCmm.left.560=Administration Terminology Dictionary
comCmm.left.561=Administration Terminology Dictionary Management
comCmm.left.570=Online Manual
comCmm.left.571=User Online Manual
comCmm.left.580=Consulting Management
comCmm.left.581=Consulting Answer Management
comCmm.left.590=Questionnaire Management
comCmm.left.600=Questionnaire Survey
comCmm.left.610=Questionnaire Template Management
comCmm.left.620=Questionnaire Respond Management
comCmm.left.630=Questionnaire Question Management
comCmm.left.640=Questionnaire Item Management
comCmm.left.650=Meeting Management
comCmm.left.660=Online POLL Management
comCmm.left.661=Online POLL Participation
comCmm.left.670=News Management
comCmm.left.680=Site Management
comCmm.left.700=Recommended Site Management
comCmm.left.710=Occasion/Event/Campaign
comCmm.left.711=Extra Human Resource
comCmm.left.720=Pop-up Management
comCmm.left.730=Information Alerts
comCmm.left.740=Banner Management
comCmm.left.741=MYPAGE Banner Management
comCmm.left.750=Login Page Image Management
comCmm.left.760=Recent Search Word Inquiry
comCmm.left.770=Main Image Management
comCmm.left.771=Main Image View Reflection Result
comCmm.left.780=Link Intergration Management
comCmm.left.790=User Absence Management
comCmm.left.800=Internet Service Information and Management
comCmm.left.810=Wiki Function
comCmm.left.820=RSS Tag Management
comCmm.left.822=RSS Tag Service
comCmm.left.830=Twitter Linkage
comCmm.left.831=Facebook Linkage
comCmm.left.840=Note Management
comCmm.left.850=Received Note Box Management
comCmm.left.860=Sent Note Box Management
comCmm.left.870=Meeting Room Management
comCmm.left.871=Meeting Room Reservation Management
comCmm.left.890=Employee Family Event Management
comCmm.left.891=Employee Congratulatory Approval Management
comCmm.left.900=Vacation Management
comCmm.left.901=Vacation Approval Management
comCmm.left.902=Personal Vocation Management
comCmm.left.910=Duty Management
comCmm.left.911=Duty Journal Management
comCmm.left.920=Compensation
comCmm.left.921=Compensation Approval Management
comCmm.left.930=Anniversary Management
comCmm.left.931=Anniversary List (Check)
comCmm.left.940=Event Application Management
comCmm.left.941=Event Reception Management
comCmm.left.942=Event Reception Approval Management
comCmm.left.943=Office Location Management
comCmm.left.950=Commute Management
#System Management#
comCmm.left.960=Common Classification Code
comCmm.left.970=Common Detail Code
comCmm.left.980=Common Code
comCmm.left.1000=Address Management
comCmm.left.1010=Administration Code Management
comCmm.left.1020=Institutions Code Management
comCmm.left.1030=Log Management
comCmm.left.1040=User Log Management
comCmm.left.1050=Transmit/Receive Log Management
comCmm.left.1060=System History Management
comCmm.left.1070=Web Log Management
comCmm.left.1080=Connection Log Management
comCmm.left.1085=Privacy Log Management
comCmm.left.1090=Menu Management
comCmm.left.1091=Menu Management List
comCmm.left.1100=Menu Creation Management
comCmm.left.1101=Site Map
comCmm.left.1110=Short Cut Menu Management
comCmm.left.1111=Program Management
comCmm.left.1112=Program Change Management
comCmm.left.1113=Program Change Process
comCmm.left.1114=Program Change History
comCmm.left.1120=Batch Work Management
comCmm.left.1130=Batch Result Management
comCmm.left.1140=Schedule Process
comCmm.left.1150=Backup Management
comCmm.left.1151=Backup Result Management
comCmm.left.1160=NetWork Management
comCmm.left.1170=Server Information Management
comCmm.left.1171=Server S/W List
comCmm.left.1180=Trouble Request Management
comCmm.left.1190=Trouble Process Result Management
#System/Service Integration#
comCmm.left.1210=System Contact Management
comCmm.left.1220=Contact Status Management
comCmm.left.1230=Contact Message Management
comCmm.left.1240=Contact Institution Management
#Digital Asset Management#
comCmm.left.1250=Individual Knowledge Management
comCmm.left.1260=Knowledge Map Management by Types
comCmm.left.1261=Organizational Knowledge Map Management
comCmm.left.1270=Knowledge Expert Management
comCmm.left.1280=Knowledge Information Management
comCmm.left.1290=Knowledge Evaluation Management
comCmm.left.1291=Knowledge Information Offer
#Utility Technology#
comCmm.left.1300=General Calendar
comCmm.left.2080=Transmit and Receive Monitoring
comCmm.left.2090=DB Service Monitoring
comCmm.left.2100=HTTP Service Monitoring
comCmm.left.2110=Process Monitoring
comCmm.left.2120=Network Service Monitoring
comCmm.left.2130=File System Monitoring
comCmm.left.2140=Proxy Service
comCmm.left.2150=File Synchronization
comCmm.left.2160=Login Session Information Check
comCmm.left.2170=Server Resource Monitoring
comCmm.left.2180=Address Info Linkage
comCmm.left.2200=Encryption/Decryption
#External Add Components#
comCmm.left.3000=JFile Guide
comCmm.left.3010=JFile File Upload
comCmm.left.3020=JFile File Download
comCmm.left.3100=LDAP Org. Management
comCmm.left.3110=LDAP Org. Graph
comCmm.left.3200=WebMessenger
#EgovUnitContent(\ub85c\uadf8\uc778 \ud6c4 \ud398\uc774\uc9c0)#
comCmm.unitContent.1=Common Compoent
comCmm.unitContent.2=Welcome.
comCmm.unitContent.3=Logout
comCmm.unitContent.4=If you run into any errors, please contact the eGovframework center.
comCmm.unitContent.5=Screen description
comCmm.unitContent.6=The left menu is not affected by the menu-related components (menu management, site map, etc.)
comCmm.unitContent.7=Controller class that finds installed components after installing components through IncludedInfo annotation and processes information to be displayed on the screen.
comCmm.unitContent.8=
comCmm.unitContent.9=
comCmm.unitContent.10=Before the menu structure is developed,
comCmm.unitContent.11=the list of common components included in the distribution files is provided.
comCmm.unitContent.12=If you use this control to configure menus at runtime,
comCmm.unitContent.13=we recommend that you delete and deploy them in production
comCmm.unitContent.14= because they can cause performance problems or cause errors in your menu configuration.
comCmm.unitContent.20=Password expiration notice
#EgovExpirePwd(\ube44\ubc00\ubc88\ud638\ubcc0\uacbd \uacf5\uc9c0)#
comCmm.expirePwdContent.1=Login
comCmm.expirePwdContent.2=Login classification
comCmm.expirePwdContent.10=Manager
comCmm.expirePwdContent.11=Corporate Member
comCmm.expirePwdContent.12=General Member
comCmm.expirePwdContent.21=Please refer to the following file to change the password expiration date.
comCmm.expirePwdContent.22=Password expiration
comCmm.expirePwdContent.23=Password validity has expired.
comCmm.expirePwdContent.24=Please change your password now for safe privacy!
comCmm.expirePwdContent.25=Password expiration days
comCmm.expirePwdContent.26=Password validity period
comCmm.expirePwdContent.27=Number of days since password change
comCmm.expirePwdContent.28=Password expiration days
comCmm.expirePwdContent.29=Please change your password periodically.
comCmm.expirePwdContent.30=days
comCmm.expirePwdContent.50=Change immediately
comCmm.expirePwdContent.51=Change next

View File

@ -0,0 +1,467 @@
fail.common.msg=\uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
fail.common.sql=sql \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4! error code: {0}, error msg: {1}
info.nodata.msg=\ud574\ub2f9 \ub370\uc774\ud130\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.
#UI Common resource#
table.num=\ubc88\ud638
table.regdate=\ub4f1\ub85d\uc77c
table.reger=\ub4f1\ub85d\uc790
table.select=\uc120\ud0dd
title.html=egovframe common component
title.detail=\uc0c1\uc138\uc870\ud68c
title.inquire=\uc870\ud68c
title.update=\uc218\uc815
title.create=\ub4f1\ub85d
title.delete=\uc0ad\uc81c
title.save=\uc800\uc7a5
title.list=\ubaa9\ub85d
title.searchCondition=\uac80\uc0c9\uc870\uac74
title.search=\uac80\uc0c9\uc5b4
title.reply=\ub2f5\uae00
title.scrap=\uc2a4\ud06c\ub7a9
title.comment=\ub313\uae00
title.attachedFileSelect=\ud30c\uc77c\uc120\ud0dd
title.attachedFileDelete=\ud30c\uc77c\uc0ad\uc81c
title.link=\ub9c1\ud06c
title.management=\uad00\ub9ac
title.all=\uc804\uccb4
input.select=\uc120\ud0dd\ud558\uc138\uc694
input.cSelect=\uc120\ud0dd
input.input=\uc785\ub825
input.button=\ubc84\ud2bc
input.selectAll.title=\uc804\uccb4\uc120\ud0dd\uccb4\ud06c\ubc15\uc2a4
input.yes=\uc608
input.no=\uc544\ub2c8\uc624
select.searchCondition=\uc870\ud68c\uc870\uac74 \uc120\ud0dd
button.select=\uc120\ud0dd
button.search=\uac80\uc0c9
button.use=\uc0ac\uc6a9
button.notUsed=\uc0ac\uc6a9\uc911\uc9c0
button.inquire=\uc870\ud68c
button.update=\uc218\uc815
button.create=\ub4f1\ub85d
button.delete=\uc0ad\uc81c
button.deleteDatabase=\uc644\uc804\uc0ad\uc81c
button.close=\ub2eb\uae30
button.save=\uc800\uc7a5
button.list=\ubaa9\ub85d
button.reset=\ucde8\uc18c
button.passwordUpdate=\uc554\ud638\ubcc0\uacbd
button.subscribe=\uac00\uc785\uc2e0\uccad
button.realname=\uc2e4\uba85\ud655\uc778
button.moveToGpin=GPIN\uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9
button.moveToIhidnum=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638 \uc2e4\uba85\ud655\uc778\uc73c\ub85c \uc774\ub3d9
button.agree=\ub3d9\uc758
button.disagree=\ube44\ub3d9\uc758
button.possible=\uac00\ub2a5
button.impossible=\ubd88\uac00\ub2a5
button.qnaregist=Q&A\ub4f1\ub85d
button.cnsltregist=\uc0c1\ub2f4\ub4f1\ub85d
button.preview=\ubbf8\ub9ac\ubcf4\uae30
button.next=\ub2e4\uc74c
button.add=\ubc14\ub85c\ucd94\uac00
button.confirm=\ud655\uc778
button.back = \ub4a4\ub85c
button.yes = \uc608
button.no = \uc544\ub2c8\uc624
button.home = \ud648
button.user = \uc0ac\uc6a9\uc790\uc9c0\uc6d0
button.cop = \ud611\uc5c5
button.wrkstart = \ucd9c\uadfc
button.wrkend = \ud1f4\uadfc
button.reply = \ub2f5\uae00
button.scrap = \uc2a4\ud06c\ub7a9
button.comment = \ub313\uae00
button.excel = \uc5d1\uc140
button.init=\ucd08\uae30\ud654
button.acknowledgment=\uc2b9\uc778
button.cancelAcknowledgment=\uc2b9\uc778\ucde8\uc18c
button.bulkUpload=\uc77c\uad04\ub4f1\ub85d
button.log = \ub85c\uadf8
button.set = \uc124\uc815
button.move = \uc774\ub3d9
button.answer = \ub2f5\ubcc0
#UI Common Message#
common.noScriptTitle.msg=\uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub294 \uc77c\ubd80 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc2e4 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
common.searchCondition.msg=\uc774 \ub808\uc774\uc544\uc6c3\uc740 \ud558\ub2e8 \uc815\ubcf4\ub97c \ub300\ud55c \uac80\uc0c9 \uc815\ubcf4\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.
common.summary.list={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \ubaa9\ub85d\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.
common.summary.regist={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \ub4f1\ub85d\ud55c\ub2e4.
common.summary.update={0}\uc758 \ub4f1\ub85d \uac00\ub2a5\ud55c \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc5ec \ub4f1\ub85d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc218\uc815\ud55c\ub2e4.
common.summary.inqire={0}\uc758 \ub0b4\uc5ed\uc5d0 \ub300\ud55c \uc0c1\uc138\uc870\ud68c \ub0b4\uc5ed\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.
common.save.msg=\uc800\uc7a5\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.regist.msg=\ub4f1\ub85d\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.delete.msg=\uc0ad\uc81c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.update.msg=\uc218\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.nodata.msg=\uc790\ub8cc\uac00 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\ub978 \uac80\uc0c9\uc870\uac74\uc744 \uc120\ud0dd\ud574\uc8fc\uc138\uc694
common.required.msg=(\uc740)\ub294 \ud544\uc218\uc785\ub825\ud56d\ubaa9\uc785\ub2c8\ub2e4.
common.acknowledgement.msg=\uc2b9\uc778\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.acknowledgementcancel.msg=\uc2b9\uc778\ucde8\uc18c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?
common.nocomment.msg=\ub313\uae00\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
common.noguest.msg=\uc791\uc131\ub41c \ubc29\uba85\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
success.request.msg = \uc694\uccad\ucc98\ub9ac\uac00 \uc131\uacf5\uc801\uc73c\ub85c \uc218\ud589\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
success.common.select=\uc815\uc0c1\uc801\uc73c\ub85c \uc870\ud68c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
success.common.insert=\uc815\uc0c1\uc801\uc73c\ub85c \ub4f1\ub85d\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
success.common.update=\uc815\uc0c1\uc801\uc73c\ub85c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
success.common.delete=\uc815\uc0c1\uc801\uc73c\ub85c \uc0ad\uc81c\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
common.imposbl.fileupload = \ub354 \uc774\uc0c1 \ud30c\uc77c\uc744 \ucca8\ubd80\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
common.isConfmDe.msg=\uc2b9\uc778\uc77c\uc790\ub97c \ud655\uc778 \ubc14\ub78d\ub2c8\ub2e4.
common.isExist.msg = \uc774\ubbf8 \uc874\uc7ac\ud558\uac70\ub098 \uacfc\uac70\uc5d0 \ub4f1\ub85d\uc774 \ub418\uc5c8\ub358 \uc0c1\ud0dc\uc785\ub2c8\ub2e4.
fail.common.insert = \uc0dd\uc131\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.update = \uc218\uc815\uc774 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.delete = \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.delete.upperMenuExist = \ucc38\uc870\ub418\ub294 \uba54\ub274\uac00 \uc788\uc5b4 \uc0ad\uc81c\uac00 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.select = \uc870\ud68c\uc5d0 \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.login = \ub85c\uadf8\uc778 \uc815\ubcf4\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
fail.common.loginIncorrect = {0}\ud68c \uc774\uc0c1 \ub85c\uadf8\uc778 \uc811\uc18d\uc774 \uc2dc\ub3c4 \ub418\uc5b4 \uacc4\uc815\uc774 \uc7a0\uaca8\uc2b5\ub2c8\ub2e4!
fail.common.login.password = \ud328\uc2a4\uc6cc\ub4dc \uc790\ub9ac \uc218\uac00 \uc77c\uce58 \ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.(8\uc790\ub9ac \uc774\uc0c1 20\uc790\ub9ac \uc774\ud558)
fail.common.idsearch = \uc544\uc774\ub514\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
fail.common.pwsearch = \ube44\ubc00\ubc88\ud638\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
fail.request.msg = \uc694\uccad\ucc98\ub9ac\ub97c \uc2e4\ud328\ud558\uc600\uc2b5\ub2c8\ub2e4.
fail.common.login.ip = \ub4f1\ub85d\ub41c IP\uac00 \uc544\ub2c8\ubbc0\ub85c \ub85c\uadf8\uc778\uc774 \uac70\ubd80\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
#UI User Message#
fail.user.passwordUpdate1=\ud604\uc7ac \ube44\ubc00\ubc88\ud638\uac00 \ub9de\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
fail.user.passwordUpdate2=\ube44\ubc00\ubc88\ud638\uc640 \ube44\ubc00\ubc88\ud638 \ud655\uc778\uc774 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
info.user.rlnmCnfirm=\uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624.
success.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4.
fail.user.rlnmCnfirm=\ud589\uc815\uc548\uc804\ubd80\uc758 \uc8fc\ubbfc\ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
fail.user.connectFail=\uc2dc\uc2a4\ud15c \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.(\uc778\uc99d\uc11c\ubc84 \uc5f0\uacb0 \uc2e4\ud328)
info.user.rlnmPinCnfirm=\uacf5\uacf5 \uc544\uc774\ud540 \uc544\uc774\ub514\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\uba85\ud655\uc778\uc744 \ud558\uc2ed\uc2dc\uc624.
success.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud569\ub2c8\ub2e4.
fail.user.rlnmPinCnfirm=\uacf5\uacf5\uc544\uc774\ud540\uc758 \ub4f1\ub85d\uc790\ub8cc\uc640 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
#Vlidator Errors#
errors.prefix=<div class="error">
errors.suffix=</div><br/>
errors.required={0}\uc740(\ub294) \ud544\uc218 \uc785\ub825\uac12\uc785\ub2c8\ub2e4.
errors.minlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
errors.maxlength={0}\uc740(\ub294) {1}\uc790 \uc774\uc0c1 \uc785\ub825\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
errors.invalid={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uac12\uc785\ub2c8\ub2e4.
errors.minInteger={0}\uc740(\ub294) \uc720\ud6a8\ud55c \uac12\uc774 \uc544\ub2d9\ub2c8\ub2e4. 1 \uc774\uc0c1\uc758 \uac12\uc744 \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
errors.byte={0}\uc740(\ub294) byte\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.short={0}\uc740(\ub294) short\ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.integer={0}\uc740(\ub294) integer \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.long={0}\uc740(\ub294) long \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.float={0}\uc740(\ub294) float \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.double={0}\uc740(\ub294) double \ud0c0\uc785\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.date={0}\uc740(\ub294) \ub0a0\uc9dc \uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
errors.range={0}\uc740(\ub294) {1}\uacfc {2} \uc0ac\uc774\uc758 \uac12\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.
errors.creditcard={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc2e0\uc6a9\uce74\ub4dc \ubc88\ud638\uc785\ub2c8\ub2e4.
errors.email={0}\uc740(\ub294) \uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc774\uba54\uc77c \uc8fc\uc18c\uc785\ub2c8\ub2e4.
errors.ihidnum=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 \uc8fc\ubbfc\ub4f1\ub85d\ubc88\ud638\uc785\ub2c8\ub2e4.
errors.korean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc785\ub825\ud558\uc154\uc57c \ud569\ub2c8\ub2e4.
errors.ip=\uc720\ud6a8\ud558\uc9c0 \uc54a\uc740 IP\uc8fc\uc18c\uc785\ub2c8\ub2e4.
errors.english={0}\uc740(\ub294) \uc601\ubb38\ub9cc \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc788\uc2b5\ub2c8\ub2e4.
errors.notKorean={0}\uc740(\ub294) \ud55c\uae00\uc744 \uc0ac\uc6a9\ud558\uc2e4\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
errors.password1={0}\uc740(\ub294) 8~20\uc790 \ub0b4\uc5d0\uc11c \uc785\ub825\ud574\uc57c \ud569\ub2c8\ub2e4.
errors.password2={0}\uc740(\ub294) \ud55c\uae00,\ud2b9\uc218\ubb38\uc790,\ub744\uc5b4\uc4f0\uae30\ub294 \ud5c8\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
errors.password3={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
errors.password4={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 4\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
errors.pwdcheckcomb3={0}\uc740(\ub294) \uc601\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569\uc73c\ub85c \uc774\ub8e8\uc5b4 \uc838\uc57c \ud569\ub2c8\ub2e4.
errors.pwdcheckcomb4={0}\uc740(\ub294) \uc601\ubb38\ub300\ubb38\uc790,\uc601\ubb38\uc18c\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569\uc73c\ub85c \uc774\ub8e8\uc5b4 \uc838\uc57c \ud569\ub2c8\ub2e4.
errors.pwdcheckseries={0}\uc740(\ub294) \uc21c\ucc28\uc801\uc778 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 3\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
errors.pwdcheckrepeat={0}\uc740(\ub294) \ubc18\ubcf5\ub418\ub294 \ubb38\uc790\ub098 \uc22b\uc790\ub97c 3\uac1c\uc774\uc0c1 \uc5f0\uc18d\ud574\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
error.security.runtime.error = error
info.password.rule.password1 = - 8\uc774\uc0c1 20\uc790\ub9ac \uc774\ud558
info.password.rule.pwdcheckcomb3 = - \uc601\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569
info.password.rule.pwdcheckcomb4 = - \uc601\ubb38\ub300\ubb38\uc790,\uc601\ubb38\uc18c\ubb38\uc790,\uc22b\uc790,\ud2b9\uc218\ubb38\uc790(~!@#$%^&*?)\uc758 \uc870\ud569
info.password.rule.pwdcheckseries = - 3\uc790\ub9ac \uc774\uc0c1 \ubc18\ubcf5 \ub610\ub294 \uc5f0\uc18d\ub41c \ubb38\uc790 \uc0ac\uc6a9 \uae08\uc9c0. \uc608)kkk , 321 \ub4f1 \uc0ac\uc6a9\uae08\uc9c0
#Xss Errors#
errors.xss.checkerUser=\ud574\ub2f9 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc0ac\uc6a9 \ubc0f \ucc98\ub9ac \uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.
#File Upload / Download
errors.file.extension=\uc9c0\uc6d0\ub418\ub294 \ud30c\uc77c\uc720\ud615\uc774 \uc544\ub2d9\ub2c8\ub2e4.
errors.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.
success.file.transfer=\ud30c\uc77c\uc804\uc1a1\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
#common#
comCmmErr.button=\uc774\uc804 \ud398\uc774\uc9c0
#accessDenied#
comCmmErr.accessDenied.title=\ud604\uc7ac \ud398\uc774\uc9c0\uc5d0 \ub300\ud55c \uc811\uadfc\uad8c\ud55c\uc774 \uc5c6\uc2b5\ub2c8\ub2e4!
comCmmErr.accessDenied.code=\uc0ac\uc6a9\uc790\uc811\uadfc\uad8c\ud55c \uc5d0\ub7ec
#dataAccessFailure#
comCmmErr.dataAccessFailure.title=\ub370\uc774\ud130 \ucc98\ub9ac \uc911 \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uc600\uc2b5\ub2c8\ub2e4!
comCmmErr.dataAccessFailure.code=\ub370\uc774\ud130\ucc98\ub9ac \uc5d0\ub7ec
#bizException#
comCmmErr.bizException.title=\ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1 \ucc98\ub9ac \uc911 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
comCmmErr.bizException.code=\ube44\uc988\ub2c8\uc2a4\ub85c\uc9c1\ucc98\ub9ac \uc5d0\ub7ec
#runtimeException#
comCmmErr.runtimeException.title=\uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4!
comCmmErr.runtimeException.code=\uc2dc\uc2a4\ud15c \uc5d0\ub7ec
#sessionException#
comCmmErr.sessionException.title=\uc138\uc158\uc774 \ub9cc\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4!
comCmmErr.sessionException.code=\uc138\uc158\ub9cc\ub8cc \uc5d0\ub7ec
#top#
comCmm.top.title=\uc804\uc790\uc815\ubd80 \ud45c\uc900\ud504\ub808\uc784\uc6cc\ud06c \uacf5\ud1b5\ucef4\ud3ec\ub10c\ud2b8 VERSION 4.0
comCmm.top.leftSessionTime=\uc138\uc158\ub9cc\ub8cc \ub0a8\uc740\uc2dc\uac04
comCmm.top.incSessionTime=\uc2dc\uac04\uc5f0\uc7a5
comCmm.top.expiredSessionTime=\uc2dc\uac04\ub9cc\ub8cc
comCmm.top.expireSessionTimeInfo=\ub85c\uadf8\uc778 \uc138\uc158\uc2dc\uac04\uc774 \ub9cc\ub8cc \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
comCmm.top.cantIncSessionTime=\uc2dc\uac04\uc744 \uc5f0\uc7a5\ud560\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.
#left#
comCmm.mai.title=\ud3ec\ud138(\uc608\uc81c) \uba54\uc778\ud654\uba74
comCmm.uat.title=\uc0ac\uc6a9\uc790\ub514\ub809\ud1a0\ub9ac/\ud1b5\ud569\uc778\uc99d
comCmm.sec.title=\ubcf4\uc548
comCmm.sts.title=\ud1b5\uacc4/\ub9ac\ud3ec\ud305
comCmm.cop.title=\ud611\uc5c5
comCmm.uss.title=\uc0ac\uc6a9\uc790\uc9c0\uc6d0
comCmm.sym.title=\uc2dc\uc2a4\ud15c\uad00\ub9ac
comCmm.ssi.title=\uc2dc\uc2a4\ud15c/\uc11c\ube44\uc2a4\uc5f0\uacc4
comCmm.dam.title=\ub514\uc9c0\ud138 \uc790\uc0b0 \uad00\ub9ac
comCmm.com.title=\uc694\uc18c\uae30\uc220
comCmm.ext.title=\uc678\ubd80 \ucd94\uac00 \ucef4\ud3ec\ub10c\ud2b8
#component#
#\ud3ec\ud0c8 \uba54\uc778\ud654\uba74#
comCmm.left.1=\ud3ec\ud138(\uc608\uc81c) \uba54\uc778\ud654\uba74
#\uc0ac\uc6a9\uc790\ub514\ub809\ud1a0\ub9ac/\ud1b5\ud569\uc778\uc99d#
comCmm.left.10=\ub85c\uadf8\uc778
comCmm.left.30=\ub85c\uadf8\uc778\uc815\ucc45\uad00\ub9ac
#\ubcf4\uc548#
comCmm.left.60=\uad8c\ud55c\uad00\ub9ac
comCmm.left.70=\uad8c\ud55c\uadf8\ub8f9\uad00\ub9ac
comCmm.left.80=\uadf8\ub8f9\uad00\ub9ac
comCmm.left.90=\ub864\uad00\ub9ac
comCmm.left.100=\ubd80\uc11c\uad8c\ud55c\uad00\ub9ac
#\ud1b5\uacc4/\ub9ac\ud3ec\ud305#
comCmm.left.120=\uac8c\uc2dc\ubb3c\ud1b5\uacc4
comCmm.left.130=\uc0ac\uc6a9\uc790\ud1b5\uacc4
comCmm.left.140=\uc811\uc18d\ud1b5\uacc4
comCmm.left.150=\ud654\uba74\ud1b5\uacc4
comCmm.left.160=\ubcf4\uace0\uc11c\ud1b5\uacc4
comCmm.left.161=\uc790\ub8cc\uc774\uc6a9\ud604\ud669\ud1b5\uacc4
\ud611\uc5c5
comCmm.left.170=\ube14\ub85c\uadf8\uad00\ub9ac
comCmm.left.180=\uac8c\uc2dc\ud310\uad00\ub9ac
comCmm.left.190=\uac8c\uc2dc\ud310\uc0ac\uc6a9\uc815\ubcf4
comCmm.left.200=\ud15c\ud50c\ub9bf\uad00\ub9ac
comCmm.left.250=\uc2a4\ud06c\ub7a9 \ubaa9\ub85d
comCmm.left.270=\ucee4\ubba4\ub2c8\ud2f0\uad00\ub9ac
comCmm.left.310=\ubb38\uc790\uba54\uc2dc\uc9c0
comCmm.left.320=\ubd80\uc11c\uc77c\uc815\uad00\ub9ac
comCmm.left.330=\uc77c\uc815\uad00\ub9ac
comCmm.left.340=\uc77c\uc9c0\uad00\ub9ac
comCmm.left.350=\uc804\uccb4\uc77c\uc815\uad00\ub9ac
comCmm.left.360=\uba54\uc77c\ubc1c\uc1a1
comCmm.left.361=\ubc1c\uc1a1\uba54\uc77c\ub0b4\uc5ed
comCmm.left.370=\uba85\ud568\uad00\ub9ac
comCmm.left.371=\ub0b4\uba85\ud568\ubaa9\ub85d
comCmm.left.380=\uc8fc\uc18c\ub85d\uad00\ub9ac
comCmm.left.390=\uac04\ubd80\uc77c\uc815\uad00\ub9ac
comCmm.left.400=\ubd80\uc11c\uc5c5\ubb34\ud568\uad00\ub9ac
comCmm.left.401=\ubd80\uc11c\uc5c5\ubb34\uc815\ubcf4
comCmm.left.410=\uc8fc\uac04/\uc6d4\uac04\ubcf4\uace0\uad00\ub9ac
comCmm.left.420=\uba54\ubaa8\ud560\uc77c\uad00\ub9ac
comCmm.left.430=\uba54\ubaa8\ubcf4\uace0
#\uc0ac\uc6a9\uc790\uc9c0\uc6d0#
comCmm.left.450=\uae30\uc5c5\ud68c\uc6d0\uad00\ub9ac
comCmm.left.460=\uc5c5\ubb34\uc0ac\uc6a9\uc790\uad00\ub9ac
comCmm.left.461=\ubd80\uc11c\uad00\ub9ac
comCmm.left.470=\uc77c\ubc18\ud68c\uc6d0\uad00\ub9ac
comCmm.left.480=\ub9c8\uc774\ud398\uc774\uc9c0\uad00\ub9ac
comCmm.left.490=\uc57d\uad00\uad00\ub9ac
comCmm.left.500=\uc800\uc791\uad8c\ubcf4\ud638\uc815\ucc45
comCmm.left.510=\uac1c\uc778\uc815\ubcf4\ubcf4\ud638\uc815\ucc45\ud655\uc778
comCmm.left.520=\ub3c4\uc6c0\ub9d0
comCmm.left.530=\uc6a9\uc5b4\uc0ac\uc804
comCmm.left.540=FAQ\uad00\ub9ac
comCmm.left.550=Q&A\uad00\ub9ac
comCmm.left.551=Q&A\ub2f5\ubcc0\uad00\ub9ac
comCmm.left.560=\ud589\uc815\uc804\ubb38\uc6a9\uc5b4\uc0ac\uc804
comCmm.left.561=\ud589\uc815\uc804\ubb38\uc6a9\uc5b4\uc0ac\uc804\uad00\ub9ac
comCmm.left.570=\uc628\ub77c\uc778\ub9e4\ub274\uc5bc
comCmm.left.571=\uc0ac\uc6a9\uc790\uc628\ub77c\uc778\ub9e4\ub274\uc5bc
comCmm.left.580=\uc0c1\ub2f4\uad00\ub9ac
comCmm.left.581=\uc0c1\ub2f4\ub2f5\ubcc0\uad00\ub9ac
comCmm.left.590=\uc124\ubb38\uad00\ub9ac
comCmm.left.600=\uc124\ubb38\uc870\uc0ac
comCmm.left.610=\uc124\ubb38\ud15c\ud50c\ub9bf\uad00\ub9ac
comCmm.left.620=\uc751\ub2f5\uc790\uad00\ub9ac
comCmm.left.630=\uc9c8\ubb38\uad00\ub9ac
comCmm.left.640=\ud56d\ubaa9\uad00\ub9ac
comCmm.left.650=\ud68c\uc758\uad00\ub9ac
comCmm.left.660=\uc628\ub77c\uc778poll\uad00\ub9ac
comCmm.left.661=\uc628\ub77c\uc778poll\ucc38\uc5ec
comCmm.left.670=\ub274\uc2a4\uad00\ub9ac
comCmm.left.680=\uc0ac\uc774\ud2b8\uad00\ub9ac
comCmm.left.700=\ucd94\ucc9c\uc0ac\uc774\ud2b8\uad00\ub9ac
comCmm.left.710=\ud589\uc0ac/\uc774\ubca4\ud2b8/\ucea0\ud398\uc778
comCmm.left.711=\uc678\ubd80\uc778\uc0ac\uc815\ubcf4
comCmm.left.720=\ud31d\uc5c5\ucc3d\uad00\ub9ac
comCmm.left.730=\uc815\ubcf4\uc54c\ub9bc\uc774
comCmm.left.740=\ubc30\ub108\uad00\ub9ac
comCmm.left.741=MYPAGE\ubc30\ub108\uad00\ub9ac
comCmm.left.750=\ub85c\uadf8\uc778\ud654\uba74\uc774\ubbf8\uc9c0\uad00\ub9ac
comCmm.left.760=\ucd5c\uadfc\uac80\uc0c9\uc5b4 \uc870\ud68c
comCmm.left.770=\uba54\uc778\uc774\ubbf8\uc9c0\uad00\ub9ac
comCmm.left.771=\uba54\uc778\uc774\ubbf8\uc9c0 \ubc18\uc601\uacb0\uacfc\ubcf4\uae30
comCmm.left.780=\ud1b5\ud569\ub9c1\ud06c\uad00\ub9ac
comCmm.left.790=\uc0ac\uc6a9\uc790\ubd80\uc7ac\uad00\ub9ac
comCmm.left.800=\uc778\ud130\ub137\uc11c\ube44\uc2a4\uc548\ub0b4\ubc0f\uad00\ub9ac
comCmm.left.810=Wiki\uae30\ub2a5
comCmm.left.820=RSS\ud0dc\uadf8\uad00\ub9ac
comCmm.left.822=RSS\ud0dc\uadf8\uc11c\ube44\uc2a4
comCmm.left.830=Twitter\uc5f0\ub3d9
comCmm.left.831=Facebook \uc5f0\ub3d9
comCmm.left.840=\ucabd\uc9c0\uad00\ub9ac
comCmm.left.850=\ubc1b\uc740\ucabd\uc9c0\ud568\uad00\ub9ac
comCmm.left.860=\ubcf4\ub0b8\ucabd\uc9c0\ud568\uad00\ub9ac
comCmm.left.870=\ud68c\uc758\uc2e4\uad00\ub9ac
comCmm.left.871=\ud68c\uc758\uc2e4\uc608\uc57d\uad00\ub9ac
comCmm.left.890=\uc9c1\uc6d0\uacbd\uc870\uc0ac\uad00\ub9ac
comCmm.left.891=\uc9c1\uc6d0\uacbd\uc870\uc0ac\uc2b9\uc778\uad00\ub9ac
comCmm.left.900=\ud734\uac00\uad00\ub9ac
comCmm.left.901=\ud734\uac00\uc2b9\uc778\uad00\ub9ac
comCmm.left.902=\uac1c\uc778\uc5f0\ucc28\uad00\ub9ac
comCmm.left.910=\ub2f9\uc9c1\uad00\ub9ac
comCmm.left.911=\ub2f9\uc9c1\uccb4\ud06c\uad00\ub9ac
comCmm.left.920=\ud3ec\uc0c1\uad00\ub9ac
comCmm.left.921=\ud3ec\uc0c1\uc2b9\uc778\uad00\ub9ac
comCmm.left.930=\uae30\ub150\uc77c\uad00\ub9ac
comCmm.left.931=\uae30\ub150\uc77c\ubaa9\ub85d(\ud655\uc778\uc6a9)
comCmm.left.940=\ud589\uc0ac\uc2e0\uccad\uad00\ub9ac
comCmm.left.941=\ud589\uc0ac\uc811\uc218\uad00\ub9ac
comCmm.left.942=\ud589\uc0ac\uc811\uc218\uc2b9\uc778\uad00\ub9ac
comCmm.left.943=\uc57d\ub3c4 \uad00\ub9ac
comCmm.left.950=\ucd9c\ud1f4\uadfc\uad00\ub9ac
#\uc2dc\uc2a4\ud15c\uad00\ub9ac#
comCmm.left.960=\uacf5\ud1b5\ubd84\ub958\ucf54\ub4dc
comCmm.left.970=\uacf5\ud1b5\uc0c1\uc138\ucf54\ub4dc
comCmm.left.980=\uacf5\ud1b5\ucf54\ub4dc
comCmm.left.1000=\uc6b0\ud3b8\ubc88\ud638\uad00\ub9ac
comCmm.left.1010=\ud589\uc815\ucf54\ub4dc\uad00\ub9ac
comCmm.left.1020=\uae30\uad00\ucf54\ub4dc\uc218\uc2e0
comCmm.left.1030=\ub85c\uadf8\uad00\ub9ac
comCmm.left.1040=\uc0ac\uc6a9\ub85c\uadf8\uad00\ub9ac
comCmm.left.1050=\uc1a1/\uc218\uc2e0\ub85c\uadf8\uad00\ub9ac
comCmm.left.1060=\uc2dc\uc2a4\ud15c\uc774\ub825\uad00\ub9ac
comCmm.left.1070=\uc6f9\ub85c\uadf8\uad00\ub9ac
comCmm.left.1080=\uc811\uc18d\ub85c\uadf8\uad00\ub9ac
comCmm.left.1085=\uac1c\uc778\uc815\ubcf4\uc870\ud68c\ub85c\uadf8\uad00\ub9ac
comCmm.left.1090=\uba54\ub274\ub9ac\uc2a4\ud2b8\uad00\ub9ac
comCmm.left.1091=\uba54\ub274\uad00\ub9ac\ub9ac\uc2a4\ud2b8
comCmm.left.1100=\uba54\ub274\uc0dd\uc131\uad00\ub9ac
comCmm.left.1101=\uc0ac\uc774\ud2b8\ub9f5
comCmm.left.1110=\ubc14\ub85c\uac00\uae30\uba54\ub274\uad00\ub9ac
comCmm.left.1111=\ud504\ub85c\uadf8\ub7a8\uad00\ub9ac
comCmm.left.1112=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad\uad00\ub9ac
comCmm.left.1113=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc694\uccad\ucc98\ub9ac
comCmm.left.1114=\ud504\ub85c\uadf8\ub7a8\ubcc0\uacbd\uc774\ub825
comCmm.left.1120=\ubc30\uce58\uc791\uc5c5\uad00\ub9ac
comCmm.left.1130=\ubc30\uce58\uacb0\uacfc\uad00\ub9ac
comCmm.left.1140=\uc2a4\ucf00\uc904\ucc98\ub9ac
comCmm.left.1150=\ubc31\uc5c5\uad00\ub9ac
comCmm.left.1151=\ubc31\uc5c5\uacb0\uacfc\uad00\ub9ac
comCmm.left.1160=\ub124\ud2b8\uc6cc\ud06c\uad00\ub9ac
comCmm.left.1170=\uc11c\ubc84\uc815\ubcf4\uad00\ub9ac
comCmm.left.1171=\uc11c\ubc84(S/W)\ubaa9\ub85d
comCmm.left.1180=\uc7a5\uc560\uc2e0\uccad\uad00\ub9ac
comCmm.left.1190=\uc7a5\uc560\ucc98\ub9ac\uacb0\uacfc\uad00\ub9ac
#\uc2dc\uc2a4\ud15c/\uc11c\ube44\uc2a4\uc5f0\uacc4#
comCmm.left.1210=\uc2dc\uc2a4\ud15c\uc5f0\uacc4\uad00\ub9ac
comCmm.left.1220=\uc5f0\uacc4\ud604\ud669\uad00\ub9ac
comCmm.left.1230=\uc5f0\uacc4\uba54\uc2dc\uc9c0\uad00\ub9ac
comCmm.left.1240=\uc5f0\uacc4\uae30\uad00\uad00\ub9ac
#\ub514\uc9c0\ud138 \uc790\uc0b0 \uad00\ub9ac#
comCmm.left.1250=\uac1c\uc778\uc9c0\uc2dd\uad00\ub9ac
comCmm.left.1260=\uc9c0\uc2dd\ub9f5\uad00\ub9ac(\uc720\ud615)
comCmm.left.1261=\uc9c0\uc2dd\ub9f5\uad00\ub9ac(\uc870\uc9c1)
comCmm.left.1270=\uc9c0\uc2dd\uc804\ubb38\uac00\uad00\ub9ac
comCmm.left.1280=\uc9c0\uc2dd\uc815\ubcf4\uad00\ub9ac
comCmm.left.1290=\uc9c0\uc2dd\ud3c9\uac00\uad00\ub9ac
comCmm.left.1291=\uc9c0\uc2dd\uc815\ubcf4\uc81c\uacf5
#\uc694\uc18c\uae30\uc220#
comCmm.left.1300=\uacf5\ud734\uc77c\uad00\ub9ac(\ub2ec\ub825)
comCmm.left.2080=\uc1a1\uc218\uc2e0\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2090=DB\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2100=HTTP\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2110=\ud504\ub85c\uc138\uc2a4\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2120=\ub124\ud2b8\uc6cc\ud06c\uc11c\ube44\uc2a4\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2130=\ud30c\uc77c\uc2dc\uc2a4\ud15c\ubaa8\ub2c8\ud130\ub9c1
comCmm.left.2140=\ud504\ub85d\uc2dc\uc11c\ube44\uc2a4
comCmm.left.2150=\ud30c\uc77c\ub3d9\uae30\ud654(\ub300\uc0c1\uc11c\ubc84)
comCmm.left.2160=\ub85c\uadf8\uc778\uc138\uc158\uc815\ubcf4\uccb4\ud06c
comCmm.left.2170=\uc11c\ubc84\uc790\uc6d0\ubaa8\ub2c8\ud130\ub9c1-\ub300\uc0c1\ubaa9\ub85d
comCmm.left.2180=\uc8fc\uc18c\uc815\ubcf4\uc5f0\uacc4
comCmm.left.2200=\uc554\ud638\ud654/\ubcf5\ud638\ud654
#\uc678\ubd80 \ucd94\uac00 \ucef4\ud3ec\ub10c\ud2b8#
comCmm.left.3000=JFile \uac00\uc774\ub4dc
comCmm.left.3010=JFile \ud30c\uc77c \uc5c5\ub85c\ub4dc
comCmm.left.3020=JFile \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc
comCmm.left.3100=LDAP \uc870\uc9c1\ub3c4 \ud2b8\ub9ac
comCmm.left.3110=LDAP \uc870\uc9c1\ub3c4 \uadf8\ub798\ud504
comCmm.left.3200=\uc6f9\uc18c\ucf13 \uba54\uc2e0\uc800
#EgovUnitContent(\ub85c\uadf8\uc778 \ud6c4 \ud398\uc774\uc9c0)#
comCmm.unitContent.1=\uacf5\ud1b5\ucef4\ud3ec\ub10c\ud2b8
comCmm.unitContent.2=\ub2d8 \ud658\uc601\ud569\ub2c8\ub2e4.
comCmm.unitContent.3=\ub85c\uadf8\uc544\uc6c3
comCmm.unitContent.4=\uc2e4\ud589 \uc2dc \uc624\ub958 \uc0ac\ud56d\uc774 \uc788\uc73c\uc2dc\uba74 \ud45c\uc900\ud504\ub808\uc784\uc6cc\ud06c\uc13c\ud130\ub85c \uc5f0\ub77d\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.
comCmm.unitContent.5=\ud654\uba74 \uc124\uba85
comCmm.unitContent.6=\uc67c\ucabd \uba54\ub274\ub294 \uba54\ub274\uc640 \uad00\ub828\ub41c \ucef4\ud3ec\ub10c\ud2b8(\uba54\ub274\uad00\ub9ac, \uc0ac\uc774\ud2b8\ub9f5 \ub4f1)\ub4e4\uc758 \uc601\ud5a5\uc744 \ubc1b\uc9c0 \uc54a\uc73c\uba70,
comCmm.unitContent.7=\uac01 \ucef4\ud3ec\ub10c\ud2b8\ub97c \uc27d\uac8c \ucc3e\uc544\ubcfc \uc218 \uc788\ub294 \ubc14\ub85c \uac00\uae30 \ub9c1\ud06c\ud398\uc774\uc9c0\uc785\ub2c8\ub2e4.
comCmm.unitContent.8=\ucef4\ud3ec\ub10c\ud2b8 \uc124\uce58 \ud6c4 \uc124\uce58\ub41c \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc744 IncludedInfo annotation\uc744 \ud1b5\ud574 \ucc3e\uc544\ub0b8 \ud6c4
comCmm.unitContent.9=\ud654\uba74\uc5d0 \ud45c\uc2dc\ud560 \uc815\ubcf4\ub97c \ucc98\ub9ac\ud558\ub294 Controller \ud074\ub798\uc2a4\uc785\ub2c8\ub2e4.
comCmm.unitContent.10=\uac1c\ubc1c \uc2dc \uba54\ub274 \uad6c\uc870\uac00 \uc7a1\ud788\uae30 \uc804\uc5d0 \ubc30\ud3ec \ud30c\uc77c\ub4e4\uc5d0 \ud3ec\ud568\ub41c \uacf5\ud1b5 \ucef4\ud3ec\ub10c\ud2b8\ub4e4\uc758 \ubaa9\ub85d\uc131 \ud654\uba74\uc5d0 URL\uc744 \uc81c\uacf5\ud558\uc5ec
comCmm.unitContent.11=\uac1c\ubc1c\uc790\uac00 \ud3b8\ub9ac\ud558\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc791\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
comCmm.unitContent.12=\uc6b4\uc601 \uc2dc\uc5d0 \ubcf8 \ucee8\ud2b8\ub864\uc744 \uc0ac\uc6a9\ud558\uc5ec \uba54\ub274\ub97c \uad6c\uc131\ud558\ub294 \uacbd\uc6b0,
comCmm.unitContent.13=\uc131\ub2a5 \ubb38\uc81c\ub97c \uc77c\uc73c\ud0a4\uac70\ub098 \uc0ac\uc6a9\uc790\ubcc4 \uba54\ub274 \uad6c\uc131\uc5d0 \uc624\ub958\ub97c \ubc1c\uc0dd\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0
comCmm.unitContent.14=\uc2e4 \uc6b4\uc601 \uc2dc\uc5d0\ub294 \uc0ad\uc81c\ud574\uc11c \ubc30\ud3ec\ud558\ub294 \uac83\uc744 \uad8c\uc7a5\ud574 \ub4dc\ub9bd\ub2c8\ub2e4.
comCmm.unitContent.20=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ub9cc\ub8cc \uc548\ub0b4
#EgovExpirePwd(\ube44\ubc00\ubc88\ud638\ubcc0\uacbd \uacf5\uc9c0)#
comCmm.expirePwdContent.1=\ub85c\uadf8\uc778
comCmm.expirePwdContent.2=\ub85c\uadf8\uc778 \uad6c\ubd84
comCmm.expirePwdContent.10=\uc5c5\ubb34\uc0ac\uc6a9\uc790
comCmm.expirePwdContent.11=\uae30\uc5c5\ud68c\uc6d0
comCmm.expirePwdContent.12=\uc77c\ubc18\ud68c\uc6d0
comCmm.expirePwdContent.21=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04\uc758 \ubcc0\uacbd\uc740 \ub2e4\uc74c \ud30c\uc77c\uc744 \ucc38\uc870\ud558\uc5ec \uc8fc\uc138\uc694.
comCmm.expirePwdContent.22=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ub9cc\ub8cc
comCmm.expirePwdContent.23=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04\uc774 \ub9cc\ub8cc \ub418\uc5c8\uc2b5\ub2c8\ub2e4.
comCmm.expirePwdContent.24=\uc548\uc804\ud55c \uac1c\uc778\uc815\ubcf4 \ubcf4\ud638\ub97c \uc704\ud574 \uc9c0\uae08 \ube44\ubc00\ubc88\ud638\ub97c \ubcc0\uacbd\ud574 \uc8fc\uc138\uc694!
comCmm.expirePwdContent.25=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ucd08\uacfc\uc77c\uc218
comCmm.expirePwdContent.26=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04
comCmm.expirePwdContent.27=\ube44\ubc00\ubc88\ud638 \ubcc0\uacbd\ud6c4 \uacbd\uacfc\uc77c\uc218
comCmm.expirePwdContent.28=\ube44\ubc00\ubc88\ud638 \uc720\ud6a8\uae30\uac04 \ucd08\uacfc\uc77c\uc218
comCmm.expirePwdContent.29=\uc8fc\uae30\uc801\uc73c\ub85c \ube44\ubc00\ubc88\ud638\ub97c \ubcc0\uacbd\ud574 \uc8fc\uc138\uc694.
comCmm.expirePwdContent.30=\uc77c
comCmm.expirePwdContent.50=\uc9c0\uae08 \uc989\uc2dc \ubcc0\uacbd\ud558\uae30
comCmm.expirePwdContent.51=\ub2e4\uc74c\uc5d0 \ubcc0\uacbd\ud558\uae30

View File

@ -0,0 +1,23 @@
org.quartz.scheduler.instanceName=pooney
org.quartz.scheduler.instanceId=AUTO
org.quartz.scheduler.rmi.export=false
org.quartz.scheduler.rmi.proxy=false
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=3
org.quartz.context.key.QuartzTopic=QuartzPorperties
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval=300000
# \uae30\ubcf8\uac12: 15000 (15\ucd08), \ubcc0\uacbd\uac12: 120000 (2\ubd84)
org.quartz.jobStore.dataSource = primarydb
org.quartz.jobStore.dataSource = pooney
org.quartz.dataSource.pooney.provider=hikaricp
org.quartz.dataSource.pooney.driver = net.sf.log4jdbc.sql.jdbcapi.DriverSpy
org.quartz.dataSource.pooney.URL = jdbc:log4jdbc:mariadb://192.10.10.203:3306/ur_itms_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul&rewriteBatchedStatements=true
org.quartz.dataSource.pooney.user = g9IwFesTyIloXVpUnfOX0g==
org.quartz.dataSource.pooney.password = E4SOtjDqqO79BQERc/eaTw==
org.quartz.dataSource.pooney.maxConnections = 30

View File

@ -0,0 +1,23 @@
org.quartz.scheduler.instanceName=pooney
org.quartz.scheduler.instanceId=AUTO
org.quartz.scheduler.rmi.export=false
org.quartz.scheduler.rmi.proxy=false
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=3
org.quartz.context.key.QuartzTopic=QuartzPorperties
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval=300000
# \uae30\ubcf8\uac12: 15000 (15\ucd08), \ubcc0\uacbd\uac12: 120000 (2\ubd84)
org.quartz.jobStore.dataSource = primarydb
org.quartz.jobStore.dataSource = pooney
org.quartz.dataSource.pooney.provider=hikaricp
org.quartz.dataSource.pooney.driver = net.sf.log4jdbc.sql.jdbcapi.DriverSpy
org.quartz.dataSource.pooney.URL = jdbc:log4jdbc:mariadb://192.10.10.203:3306/ur_itms_rel_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul&rewriteBatchedStatements=true
org.quartz.dataSource.pooney.user = YvRZ5jyhmB6gwVSUGBOqNMQB00k6OZZSfUH5ZU4GEFs=
org.quartz.dataSource.pooney.password = E4SOtjDqqO79BQERc/eaTw==
org.quartz.dataSource.pooney.maxConnections = 30

View File

@ -0,0 +1,23 @@
org.quartz.scheduler.instanceName=pooney
org.quartz.scheduler.instanceId=AUTO
org.quartz.scheduler.rmi.export=false
org.quartz.scheduler.rmi.proxy=false
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=3
org.quartz.context.key.QuartzTopic=QuartzPorperties
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval=300000
# \uae30\ubcf8\uac12: 15000 (15\ucd08), \ubcc0\uacbd\uac12: 120000 (2\ubd84)
org.quartz.jobStore.dataSource = primarydb
org.quartz.jobStore.dataSource = pooney
org.quartz.dataSource.pooney.provider=hikaricp
org.quartz.dataSource.pooney.driver = net.sf.log4jdbc.sql.jdbcapi.DriverSpy
org.quartz.dataSource.pooney.URL = jdbc:log4jdbc:mariadb://192.168.8.131:3306/ur_itms_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul&rewriteBatchedStatements=true
org.quartz.dataSource.pooney.user = g9IwFesTyIloXVpUnfOX0g==
org.quartz.dataSource.pooney.password = E4SOtjDqqO79BQERc/eaTw==
org.quartz.dataSource.pooney.maxConnections = 30

View File

@ -0,0 +1,23 @@
org.quartz.scheduler.instanceName=pooney
org.quartz.scheduler.instanceId=AUTO
org.quartz.scheduler.rmi.export=false
org.quartz.scheduler.rmi.proxy=false
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=3
org.quartz.context.key.QuartzTopic=QuartzPorperties
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval=300000
# \uae30\ubcf8\uac12: 15000 (15\ucd08), \ubcc0\uacbd\uac12: 120000 (2\ubd84)
org.quartz.jobStore.dataSource = primarydb
org.quartz.jobStore.dataSource = pooney
org.quartz.dataSource.pooney.provider=hikaricp
org.quartz.dataSource.pooney.driver = net.sf.log4jdbc.sql.jdbcapi.DriverSpy
org.quartz.dataSource.pooney.URL = jdbc:log4jdbc:mariadb://192.168.8.131:3306/ur_itms_db?characterEncoding=UTF-8&serverTimezone=Asia/Seoul&rewriteBatchedStatements=true
org.quartz.dataSource.pooney.user = g9IwFesTyIloXVpUnfOX0g==
org.quartz.dataSource.pooney.password = E4SOtjDqqO79BQERc/eaTw==
org.quartz.dataSource.pooney.maxConnections = 30

View File

@ -0,0 +1 @@
aes256.key=52f48aa1c7435bc11bf909d9d7d1d5932f4bacd8184ec5c1eed6d03ee17fe126

Binary file not shown.

94
build.gradle Normal file
View File

@ -0,0 +1,94 @@
plugins
{
id 'org.springframework.boot' version '2.6.2'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'org.asciidoctor.convert' version '1.5.8'
id 'java'
id 'war'
}
group = 'com.urpsys'
version = '1.0.0-SNAPSHOT'
sourceCompatibility = '16'
configurations
{
compileOnly
{
extendsFrom annotationProcessor
}
// spring logging , egov dataaccess
// egov dataaccess
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
repositories
{
mavenCentral()
maven { url "https://maven.egovframe.go.kr/maven/" } // egovframe maven
}
ext
{
set('snippetsDir', file("build/generated-snippets"))
}
dependencies
{
implementation 'org.springframework.boot:spring-boot-starter-batch'
implementation 'org.springframework.boot:spring-boot-starter-quartz'
implementation ('org.springframework.boot:spring-boot-starter-web')
{
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' // mariadb
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2' // DB
implementation 'org.springframework.boot:spring-boot-starter-undertow'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
// 2025.06.04 DB
implementation group: 'com.oracle.database.jdbc', name: 'ojdbc8', version: '21.8.0.0'
compileOnly 'org.projectlombok:lombok:1.18.20'
annotationProcessor 'org.projectlombok:lombok:1.18.20'
testCompileOnly 'org.projectlombok:lombok:1.18.20'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
implementation 'commons-codec:commons-codec:1.15' //
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' // sql log
//
developmentOnly 'org.springframework.boot:spring-boot-devtools' //
implementation 'org.apache.commons:commons-lang3:3.12.0' //
// 2025.04.02 email
implementation 'org.apache.commons:commons-email:1.5'
implementation group: 'commons-io', name: 'commons-io', version: '2.6'
// api
implementation 'com.konghq:unirest-java:3.7.02'
// egov dataaccess
implementation('org.egovframe.rte:org.egovframe.rte.psl.dataaccess:4.0.0')
implementation('org.egovframe.rte:org.egovframe.rte.fdl.idgnr:4.0.0')
}
test
{
outputs.dir snippetsDir
useJUnitPlatform()
}
asciidoctor
{
inputs.dir snippetsDir
dependsOn test
}

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

234
gradlew vendored Normal file
View File

@ -0,0 +1,234 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

89
gradlew.bat vendored Normal file
View File

@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

11
settings.gradle Normal file
View File

@ -0,0 +1,11 @@
/*
* This file was generated by the Gradle 'init' task.
*
* The settings file is used to specify which projects to include in your build.
*
* Detailed information about configuring a multi-project build in Gradle can be found
* in the user manual at https://docs.gradle.org/7.4.2/userguide/multi_project_builds.html
*/
rootProject.name = 'urpItms_30_Batch'

168
src/etc/tables_mysql.sql Normal file
View File

@ -0,0 +1,168 @@
#
# Quartz seems to work best with the driver mm.mysql-2.0.7-bin.jar
#
# PLEASE consider using mysql with innodb tables to avoid locking issues
#
# In your Quartz properties file, you'll need to set
# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#
DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
DROP TABLE IF EXISTS QRTZ_LOCKS;
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
DROP TABLE IF EXISTS QRTZ_CALENDARS;
CREATE TABLE QRTZ_JOB_DETAILS
(
SCHED_NAME VARCHAR(120) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
JOB_CLASS_NAME VARCHAR(250) NOT NULL,
IS_DURABLE VARCHAR(1) NOT NULL,
IS_NONCONCURRENT VARCHAR(1) NOT NULL,
IS_UPDATE_DATA VARCHAR(1) NOT NULL,
REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
);
CREATE TABLE QRTZ_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
NEXT_FIRE_TIME BIGINT(13) NULL,
PREV_FIRE_TIME BIGINT(13) NULL,
PRIORITY INTEGER NULL,
TRIGGER_STATE VARCHAR(16) NOT NULL,
TRIGGER_TYPE VARCHAR(8) NOT NULL,
START_TIME BIGINT(13) NOT NULL,
END_TIME BIGINT(13) NULL,
CALENDAR_NAME VARCHAR(200) NULL,
MISFIRE_INSTR SMALLINT(2) NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
);
CREATE TABLE QRTZ_SIMPLE_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
REPEAT_COUNT BIGINT(7) NOT NULL,
REPEAT_INTERVAL BIGINT(12) NOT NULL,
TIMES_TRIGGERED BIGINT(10) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_CRON_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
CRON_EXPRESSION VARCHAR(200) NOT NULL,
TIME_ZONE_ID VARCHAR(80),
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_SIMPROP_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
STR_PROP_1 VARCHAR(512) NULL,
STR_PROP_2 VARCHAR(512) NULL,
STR_PROP_3 VARCHAR(512) NULL,
INT_PROP_1 INT NULL,
INT_PROP_2 INT NULL,
LONG_PROP_1 BIGINT NULL,
LONG_PROP_2 BIGINT NULL,
DEC_PROP_1 NUMERIC(13,4) NULL,
DEC_PROP_2 NUMERIC(13,4) NULL,
BOOL_PROP_1 VARCHAR(1) NULL,
BOOL_PROP_2 VARCHAR(1) NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_BLOB_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
BLOB_DATA BLOB NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_CALENDARS
(
SCHED_NAME VARCHAR(120) NOT NULL,
CALENDAR_NAME VARCHAR(200) NOT NULL,
CALENDAR BLOB NOT NULL,
PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)
);
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
(
SCHED_NAME VARCHAR(120) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
);
CREATE TABLE QRTZ_FIRED_TRIGGERS
(
SCHED_NAME VARCHAR(120) NOT NULL,
ENTRY_ID VARCHAR(95) NOT NULL,
TRIGGER_NAME VARCHAR(200) NOT NULL,
TRIGGER_GROUP VARCHAR(200) NOT NULL,
INSTANCE_NAME VARCHAR(200) NOT NULL,
FIRED_TIME BIGINT(13) NOT NULL,
SCHED_TIME BIGINT(13) NOT NULL,
PRIORITY INTEGER NOT NULL,
STATE VARCHAR(16) NOT NULL,
JOB_NAME VARCHAR(200) NULL,
JOB_GROUP VARCHAR(200) NULL,
IS_NONCONCURRENT VARCHAR(1) NULL,
REQUESTS_RECOVERY VARCHAR(1) NULL,
PRIMARY KEY (SCHED_NAME,ENTRY_ID)
);
CREATE TABLE QRTZ_SCHEDULER_STATE
(
SCHED_NAME VARCHAR(120) NOT NULL,
INSTANCE_NAME VARCHAR(200) NOT NULL,
LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
CHECKIN_INTERVAL BIGINT(13) NOT NULL,
PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
);
CREATE TABLE QRTZ_LOCKS
(
SCHED_NAME VARCHAR(120) NOT NULL,
LOCK_NAME VARCHAR(40) NOT NULL,
PRIMARY KEY (SCHED_NAME,LOCK_NAME)
);
commit;

View File

@ -0,0 +1,122 @@
package com.urpsys.basebatch;
import java.io.InputStream;
import java.security.InvalidKeyException;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
/**
* Hello world!
*
*/
public class Aes256Test
{
private static SecretKey keySpec; // keySpec
private static IvParameterSpec ivSpec; // ivSpec
public static void main( String[] args )
{
InputStream fis = null;
String secretKey = null;
System.out.println( "Hello World!" );
secretKey = "52f48aa1c7435bc11bf909d9d7d1d5932f4bacd8184ec5c1eed6d03ee17fe126";
args = new String[2];
args[0] ="enc";
args[1] ="kicintf12!";
if(args.length !=2 )
{
System.out.println("Invalid args , args length 2 input ");
System.exit(0);
}
try
{
byte[] secretKeyBytes = Hex.decodeHex(secretKey);
if (secretKeyBytes.length != 32)
{
System.out.println("Invalid key (key length is not valid) ");
System.exit(0);
}
byte[] ivBytes = new byte[16];
System.arraycopy(secretKeyBytes, 0, ivBytes, 0, 16);
keySpec = new SecretKeySpec(secretKeyBytes, "AES");
ivSpec = new IvParameterSpec(ivBytes);
if(args[0].equals("enc"))
{
System.out.println( "암호로 변경" );
if (args[1] == null)
{
System.out.println("변경할 문자열이 없습니다.");
}
String encryptedStr = null;
try
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encrypted = cipher.doFinal(args[1].getBytes("UTF-8"));
encryptedStr = new String(Base64.encodeBase64(encrypted));
}
catch (Exception ex)
{
ex.printStackTrace();
}
System.out.println( "["+ args[1] +"] 암호화로 변경 =============>"+ encryptedStr);
}
else if(args[0].equals("dec"))
{
System.out.println( "평문으로 변경" );
if (args[1] == null)
{
System.out.println("변경할 문자열이 없습니다.");
}
String decryptedStr = null;
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] byteStr = Base64.decodeBase64(args[1].getBytes("UTF-8"));
decryptedStr = new String(cipher.doFinal(byteStr), "UTF-8");
}
catch (Exception ex)
{
ex.printStackTrace();
}
System.out.println( "["+ args[1] +"] 평문으로 변경 =============>"+ decryptedStr);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,152 @@
package com.urpsys.basebatch.common.crypto;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.util.Properties;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import com.urpsys.basebatch.common.util.CommonUtil;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
import org.springframework.core.io.ClassPathResource;
/**
* aes 256 암호화 클래스
*
* @author urp 인프라본부 나혁제
* @since 2025.04.03
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
* ----------- --------- ------------------------
* 2025.04.03 나혁제 최초작성
*
* </pre>
*/
public class Aes256Cipher
{
private SecretKey keySpec; // keySpec
private IvParameterSpec ivSpec; // ivSpec
/**
* Aes256Cipher 생성자
*
* @param keyFile 파일 위치를 입력 받음
* @throws IOException 파일 io 발생하는 익셉션
* @throws InvalidKeyException key가 잘못되었을 경우 발생하는 익셉션
* @throws DecoderException 암호화된 문자열을 decoding할 발생하는 익셉션
*/
public Aes256Cipher() throws IOException, InvalidKeyException, DecoderException
{
String activeProfile = (CommonUtil.nvl(System.getProperty("spring.profiles.active")));
InputStream fis = null;
String secretKey = null;
try
{
fis = new ClassPathResource("secrets/UrpSystem.keystore").getInputStream();
Properties props = new Properties();
props.load(fis);
secretKey = props.getProperty("aes256.key");
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
fis.close();
}
byte[] secretKeyBytes = Hex.decodeHex(secretKey);
if (secretKeyBytes.length != 32) {
throw new InvalidKeyException("Invalid key (key length is not valid) ");
}
byte[] ivBytes = new byte[16];
System.arraycopy(secretKeyBytes, 0, ivBytes, 0, 16);
keySpec = new SecretKeySpec(secretKeyBytes, "AES");
ivSpec = new IvParameterSpec(ivBytes);
}
/**
* encryption 하는 메소드
*
* @param plainStr 평문을 입력 받음
* @return 암호화된 문자열
*/
public String encrypt(String plainStr)
{
if (plainStr == null)
{
return null;
}
String encryptedStr = null;
try
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encrypted = cipher.doFinal(plainStr.getBytes("UTF-8"));
encryptedStr = new String(Base64.encodeBase64(encrypted));
}
catch (Exception ex)
{
ex.printStackTrace();
}
return encryptedStr;
}
/**
* 암호화된 문자열을 복호화하는 메소드
*
* @param encryptedStr 암호화된 문자열
* @return 암호화가 해제된 문자열
*/
public String decrypt(String encryptedStr)
{
if (encryptedStr == null)
{
return null;
}
String decryptedStr = null;
try
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] byteStr = Base64.decodeBase64(encryptedStr.getBytes("UTF-8"));
decryptedStr = new String(cipher.doFinal(byteStr), "UTF-8");
}
catch (Exception ex)
{
ex.printStackTrace();
}
return decryptedStr;
}
}

View File

@ -0,0 +1,124 @@
package com.urpsys.basebatch.common.exception;
import java.sql.SQLSyntaxErrorException;
import lombok.Getter;
/**
* Custom exception 클래스
*
* @author urp 인프라본부 나혁제
* @since 2025.04.03
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
* ----------- --------- ------------------------
* 2025.04.03 나혁제 최초작성
*
* </pre>
*/
public class CustomException extends Exception
{
private static final long serialVersionUID = 3559302713942492181L;
@Getter
private String errorCode;
@Getter
private String errorMsg;
/**
* 생성자(throwable를 받아서 exception 종류에 따라 에러 코드 정의하는 클래스)
* 에러코드 처리 부분은 향후 db에서 에러코드 읽어와서 매핑하는 것으로
* 변경 가능성 있음
* @param throwable
*/
public CustomException(Throwable throwable)
{
Throwable rootThrowable = getRootCause(throwable);
// TODO 에러 코드는 상세 정의해서 define 해야
if(rootThrowable instanceof SQLSyntaxErrorException)
{
this.errorCode = "100";
this.errorMsg = "SQL 오류";
}
else if(rootThrowable instanceof ArithmeticException)
{
this.errorCode = "200";
this.errorMsg = "연산 오류";
}
else
{
this.errorCode = "900";
this.errorMsg = "Unknown Error";
}
}
/**
* 생성자(에러메시지만 받을 경우 에러코드를 0을 default로 세팅)
* @param errorMsg
*/
public CustomException(String errorMsg)
{
super(errorMsg);
this.errorCode = "0";
this.errorMsg = errorMsg;
}
/**
* 생성자(errorcode, errmsg를 받아 세팅, 소스코드에서 편하게 사용하기 위해
* 에러코드를 int 값으로 받으면 string으로 변환하여 저장)
* @param errorCode
* @param errorMsg
*/
public CustomException(int errorCode, String errorMsg)
{
super(errorMsg);
this.errorCode = String.valueOf(errorCode);
this.errorMsg = errorMsg;
}
/**
* 생성자(에러코드, 에러메시지를 받아 세팅)
* @param errorCode
* @param errorMsg
*/
public CustomException(String errorCode, String errorMsg)
{
super(errorMsg);
this.errorCode = errorCode;
this.errorMsg = errorMsg;
}
/**
* stack에서 에러코드 root cause를 찾아내는 메소드
* @param throwable
* @return
*/
private Throwable getRootCause(Throwable throwable)
{
Throwable cause = throwable.getCause();
if (cause == null) {
return throwable;
}
while (true) {
if(cause.getCause() == null) {
break;
} else {
cause = cause.getCause();
}
}
return cause;
}
}

View File

@ -0,0 +1,524 @@
package com.urpsys.basebatch.common.util;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Base64;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.SimpleTimeZone;
import java.util.Vector;
import com.urpsys.basebatch.common.exception.CustomException;
/**
* 공통 유틸리티를 모아둔 클래스
*
* @author urp 인프라본부 나혁제
* @since 2025.04.03
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
* ----------- --------- ------------------------
* 2025.04.03 나혁제 최초작성
*
* </pre>
*/
public class CommonUtil
{
/**
* nvl 메소드
* @param inputStr
* @return
*/
public static String nvl(String inputStr)
{
return (inputStr != null) ? inputStr.trim() : "";
}
/**
* nvl 메소드
* @param inputStr
* @param defaultValue
* @return
*/
public static String nvl(String inputStr, String defaultValue)
{
return nvl(inputStr).contentEquals("") ? defaultValue : inputStr.trim();
}
/**
* nvl 메소드
* @param inputObj
* @return
*/
public static String nvl(Object inputObj)
{
return (inputObj != null) ? String.valueOf(inputObj).trim() : "";
}
/**
* long 타입의 시간을 입력받아 날짜 형태로 변환해서 리턴해주는 함수
*
* @param longTime long type 시간
* @param dateFormat 변환할 포맷
* @return 변환된 날짜 String
* @throws SystemException
*/
public static String getTimeString(long longTime, String dateFormat) throws CustomException
{
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.KOREA);
if (longTime < 0)
{
return "";
}
else
{
try
{
return sdf.format(new Date(longTime));
}
catch (Exception e)
{
throw new CustomException("Date 변환 오류");
}
}
}
/**
* 현재(한국기준) 시간정보를 얻는다.<BR>
* () 입력파리미터인 format string에 "yyyyMMddhh" 셋팅하면 1998121011과 같이 Return.<BR>
* () format string에 "yyyyMMddHHmmss" 셋팅하면 19990114232121과 같이
* 0~23시간 타입으로 Return. <BR>
* String CurrentDate = CtosUtil2.getKST("yyyyMMddHH");<BR>
* @param format 얻고자하는 현재시간의 Type
* @return str 현재 한국 시간.
*/
public static String getKST(String format)
{
//1hour(ms) = 60s * 60m * 1000ms
int millisPerHour = 60 * 60 * 1000;
SimpleDateFormat fmt= new SimpleDateFormat(format);
SimpleTimeZone timeZone = new SimpleTimeZone(9*millisPerHour,"KST");
fmt.setTimeZone(timeZone);
long time=System.currentTimeMillis();
String str=fmt.format(new java.util.Date(time));
return str;
}
/**
* 입력한 날짜 기준으로 몇일 , (주의)입력날짜는 구분자가 없는 string형
*
* @param date
* string date (19991002)
* @param Day
* 기준이 되는 시간
* @return String
*/
public static String getDatewithSpan(String date, long Day)
{
/*
* int millisPerHour = 60 * 60 * 1000; SimpleDateFormat fmt= new
* SimpleDateFormat("yyyy/MM/dd"); SimpleTimeZone timeZone = new
* SimpleTimeZone(9*millisPerHour,"KST"); fmt.setTimeZone(timeZone);
*
* int year = Integer.valueOf(date.substring(0,4)).intValue(); int month
* = Integer.valueOf(date.substring(4,6)).intValue(); int day =
* Integer.valueOf(date.substring(6,8)).intValue();
*
* java.util.Calendar aDay = Calendar.getInstance();
* aDay.set(year+1900,month,day); java.util.Calendar bDay
* =Calendar.getInstance(); bDay.set(1970+1900,1,1); java.util.Date cDay
* = new java.util.Date((aDay.getTime()).getTime() -
* (bDay.getTime()).getTime() + ((Day+1)*86400000) );
*
* return fmt.format(cDay);
*/
// 2006-09-04 7:03오후 오동원수정
String vFORMAT = "yyyy/MM/dd";
return getDatewithSpan(date, Day, "D", vFORMAT);
}
/**
* 입력한 날짜 기준으로 (,시간,) , (주의)입력날짜는 구분자가 없는 string형<br>
*
* @param date
* string date (20000315/2000031509/200003150915)
* @param unit
* long unit: (,시간,) , (,시간,)
* @param type
* String type: D:Day H:Hour M:Minute
* @return String 계산된 문자열의 .
*/
public static String getDatewithSpan(String date, long unit, String type, String strFormatType)
{
/*
* String formatType = strFormatType; int ihour = 0; int itime = 0;
*
* long dhm = 24 * 60 * 60 * 1000;
*
* if (type.equals("D")) { dhm =dhm + unit * 24 * 60 * 60 * 1000; } else
* if (type.equals("H")){ dhm =dhm + unit * 60 * 60 * 1000; } else if
* (type.equals("M")){ dhm =dhm + unit * 60 * 1000; } else{ return type
* + "은 부적절한 Type값입니다"; }
*
* switch (date.length()){ case (8): if (type.equals("H") ||
* type.equals("M")) { return "HM-ERROR"; }
*
* break; case (10): if (type.equals("M")) { return "M-ERROR"; }
*
* ihour = Integer.valueOf(date.substring(8,10)).intValue(); break; case
* (12):
*
* ihour = Integer.valueOf(date.substring(8,10)).intValue(); itime =
* Integer.valueOf(date.substring(10,12)).intValue(); break; default:
* return "date Length Error"; }
*
* int millisPerHour = 60 * 60 * 1000; SimpleDateFormat fmt= new
* SimpleDateFormat(formatType); SimpleTimeZone timeZone = new
* SimpleTimeZone(9*millisPerHour,"KST"); fmt.setTimeZone(timeZone);
*
* int iyear = Integer.valueOf(date.substring(0,4)).intValue(); int
* imonth = Integer.valueOf(date.substring(4,6)).intValue(); int iday =
* Integer.valueOf(date.substring(6,8)).intValue(); java.util.Calendar
* aDay = Calendar.getInstance();
* aDay.set(iyear+1900,imonth,iday,ihour,itime); java.util.Calendar bDay
* = Calendar.getInstance(); bDay.set(1970+1900,1,1,9,0); java.util.Date
* cDay = new java.util.Date((aDay.getTime()).getTime() -
* (bDay.getTime()).getTime() + dhm); return fmt.format(cDay);
*/
// 2006-09-04 7:03오후 오동원수정
String formatType = strFormatType;
int ihour = 0;
int itime = 0;
if(!(type.equals("D") || type.equals("H") || type.equals("M")))
{
return type + "은 부적절한 Type값입니다";
}
switch(date.length())
{
case (8):
if(type.equals("H") || type.equals("M"))
{
return "HM-ERROR";
}
break;
case (10):
if(type.equals("M"))
{
return "M-ERROR";
}
ihour = Integer.parseInt(date.substring(8, 10));
// ihour = Integer.valueOf(date.substring(8, 10)).intValue();
break;
case (12):
ihour = Integer.parseInt(date.substring(8, 10));
itime = Integer.parseInt(date.substring(10, 12));
// ihour = Integer.valueOf(date.substring(8, 10)).intValue();
// itime = Integer.valueOf(date.substring(10, 12)).intValue();
break;
default:
return "date Length Error";
}
int iyear = Integer.parseInt(date.substring(0, 4));
int imonth = Integer.parseInt(date.substring(4, 6));
int iday = Integer.parseInt(date.substring(6, 8));
/*
int iyear = Integer.valueOf(date.substring(0, 4)).intValue();
int imonth = Integer.valueOf(date.substring(4, 6)).intValue();
int iday = Integer.valueOf(date.substring(6, 8)).intValue();
*/
int imonth1 = imonth - 1; // 달은 0달부터 시작한다.
java.util.Calendar zDay = Calendar.getInstance();
zDay.set(iyear, imonth1, iday, ihour, itime);
if(type.equals("D"))
{
zDay.add(Calendar.DATE, (int) unit);
}
else if(type.equals("H"))
{
zDay.add(Calendar.HOUR_OF_DAY, (int) unit);
}
else if(type.equals("M"))
{
zDay.add(Calendar.MINUTE, (int) unit);
}
else
{
return type + "은 부적절한 Type값입니다";
}
java.util.Date z1Day = zDay.getTime();
java.text.SimpleDateFormat fmt2 = new java.text.SimpleDateFormat(formatType);
return fmt2.format(z1Day);
}
/**
* 현재 시간을 기준으로 일후 시간 시간의 형태는 (yyyy/mm/dd)
*
* @param day
* 더하려는 날짜
* @return str 현재 시간에 입력 시간을 더한 DATE형 시간
*/
public static String getDatewithSpan(long day)
{
/*
* int millisPerHour = 60 * 60 * 1000; SimpleDateFormat fmt= new
* SimpleDateFormat("yyyy/MM/dd"); SimpleTimeZone timeZone = new
* SimpleTimeZone(9*millisPerHour,"KST"); fmt.setTimeZone(timeZone);
*
* long time = System.currentTimeMillis(); long span = ( 60 * 60 * 1000
* * 24 ) * day; //하루에 대한 millisecond... long time2 = time + span;
* String str=fmt.format(new java.util.Date(time2));
*
* return str;
*/
String strSYSDATE = CommonUtil.getKST("yyyyMMddHH"); // 지금 시간
String vFORMAT = "yyyy/MM/dd";
return getDatewithSpan(strSYSDATE, day, "D", vFORMAT);
}
public static long stol(String str)
{
if(str == null ) return 0;
return (Long.valueOf(str).longValue());
}
/**
문자열을 특정 문자열을 변환시킨다.
@version 1.0
@author Yoon Su-wan
@since JDK1.0
@param targeter 대상문자열
@param target_str 변환될 대상문자열
@param replace_str 변환될 문자열
@return target_str이 replace_str로 변환된 문자열
*/
public static String getReplacedString(String targeter, String target_str, String replace_str)
{
if( targeter == null
|| target_str == null
|| replace_str == null )
return "debug : parameter value is null";
if(target_str.length() == 0)
return targeter;
StringBuffer str = new StringBuffer();
int start_ptr = 0;
int current_ptr = 0;
int increment_size = replace_str.length();
if(increment_size == 0 ) increment_size = 1;
while((current_ptr = targeter.indexOf(target_str, start_ptr)) != -1)
{
str.append(targeter.substring(start_ptr, current_ptr));
str.append(replace_str);
start_ptr = current_ptr + increment_size;
if(start_ptr >= targeter.length())
break;
}//end while
if(start_ptr == 0)
return targeter;
if(start_ptr < targeter.length())
str.append(targeter.substring(start_ptr));
return str.toString();
}//getReplacedString(String targeter, String target_str, String replace_str)
/**
받은메세지에서 v_s1값을 찾아서 v_s2로 대치한다.
@version 1.0
@author Yoon Su-wan
@since JDK1.0
@param v_msg 대상문자열
@param v_s1 변환될 대상문자열
@param v_s2 변환될 문자열
@return v_s1이 v_s2 변환된 문자열
*/
public static String getReplacedString2(String v_msg, String v_s1, String v_s2)
{
int idx = v_msg.indexOf(v_s1);
if (idx == -1) return v_msg;
else
{
try
{
return v_msg.substring(0, idx) + v_s2 + v_msg.substring(idx+2);
} catch (Exception e)
{
return v_msg.substring(0, idx) + v_s2;
}
}
}
public static String getReplacedString3(String sStr, String n1, String n2)
{
int iTmp = 0;
if (sStr == null) return "";
String sTmp = sStr;
StringBuffer sbSave = new StringBuffer();
sbSave.append("");
while (sTmp.indexOf(n1) > -1)
{
iTmp = sTmp.indexOf(n1);
sbSave.append(sTmp.substring(0,iTmp));
sbSave.append(n2);
sTmp = sTmp.substring(iTmp + n1.length());
}
sbSave.append(sTmp);
return sbSave.toString();
}
public static Vector arrToDouVector(String strArray, String strDelimt)
{
String[] stArray = strArray.split(strDelimt);
double[] dArray = Arrays.stream(stArray).mapToDouble(Double::parseDouble).toArray();
Vector vReturn = new Vector();
if(dArray==null) return vReturn;
for(double dTemp: dArray)
{
vReturn.add(dTemp);
}
return vReturn;
}
public static String arrListToString(List list)
{
String strReturn="";
if(list == null ) return "";
for(int i=0; i<list.size(); i++)
{
String strTemp = list.get(i)+"";
// System.out.println("한번 봅시다=>"+strTemp);
// double dou = Double.parseDouble(strTemp);
// strReturn = strReturn+","+dou;
strReturn = strReturn+","+strTemp;
}
strReturn = strReturn.substring(1);
return strReturn;
}
/**
보고서 body base64 변환
front로 부터 받아서 DB저장시 사용
@version 1.0
@author 나혁제
@since 2025.02.06
@param txt String
@return String
*/
public static String base64encode(String txt)
{
try
{
byte[] bytes = Base64.getEncoder().encode((txt).getBytes("utf-8"));
return new String(bytes);
}
catch(Exception e)
{
e.printStackTrace();
byte[] bytes = Base64.getEncoder().encode((txt).getBytes());
return new String(bytes);
}
}
/**
서버(DB)에서 front로 전달시 사용
@version 1.0
@author 나혁제
@since 2025.02.06
@param txt String
@return String
*/
public static String base64decode(String txt)
{
byte[] bytes = Base64.getDecoder().decode(txt.getBytes());
try
{
return new String(bytes, "utf-8");
}
catch(Exception e)
{
e.printStackTrace();
return new String(bytes);
}
}
/**
*<pre>
* 인자로 받은 String이 null일 경우 &quot;0&quot; 리턴한다.
* &#064;param src null값일 가능성이 있는 String .
* &#064;return 만약 String이 null 값일 경우 &quot;0&quot; 바꾼 String .
*</pre>
*/
public static int zeroConvert(Object src)
{
String src2 = src+"";
if (src == null || src.equals("null"))
{
return 0;
}
else
{
return Integer.parseInt(((String)src2).trim());
}
}
/**
*<pre>
* 인자로 받은 String이 null일 경우 &quot;&quot; 리턴한다.
* &#064;param src null값일 가능성이 있는 String .
* &#064;return 만약 String이 null 값일 경우 &quot;&quot; 바꾼 String .
*</pre>
*/
public static int zeroConvert(String src)
{
if (src == null || src.equals("null") || "".equals(src) || " ".equals(src))
{
return 0;
}
else
{
return Integer.parseInt(src.trim());
}
}
}

View File

@ -0,0 +1,431 @@
package com.urpsys.basebatch.common.util;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.springframework.util.ObjectUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import kong.unirest.json.JSONArray;
import kong.unirest.json.JSONException;
import kong.unirest.json.JSONObject;
import lombok.extern.slf4j.Slf4j;
/**
* 데이터 유형 변환 처리 모음 Util 클래스
*
* @author urp 인프라본부 나혁제
* @since 2025.04.09
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
* ----------- --------- ------------------------
* 2025.03.20 나혁제 최초작성
*s
* </pre>
*/
@Slf4j
public class ConvertUtils
{
private ConvertUtils() {}
/**
Object Type을 Map 타입으로 변환처리
@version 1.0
@author 나혁제
@param Object obj
@return Map<String, Object>
*/
public static Map<String, Object> convertToMap(Object obj)
{
try
{
if (Objects.isNull(obj))
{
return Collections.emptyMap();
}
Map<String, Object> convertMap = new LinkedHashMap<>();
Field[] fields = obj.getClass().getDeclaredFields();
for (Field field : fields)
{
field.setAccessible(true);
convertMap.put(field.getName(), field.get(obj));
}
return convertMap;
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
/**
Object Type의 List을 Map List 타입으로 변환처리
@version 1.0
@author 나혁제
@param List<?> list
@return List<Map<String, Object>>
*/
public static List<Map<String, Object>> convertToMaps(List<?> list)
{
if (list == null || list.isEmpty())
{
return Collections.emptyList();
}
List<Map<String, Object>> convertList = new ArrayList<>(list.size());
for (Object obj : list)
{
convertList.add(ConvertUtils.convertToMap(obj));
}
return convertList;
}
/**
Object Type을 Map 타입으로 변환처리 (확장영역까지 변환)
@version 1.0
@author 나혁제
@param Object obj
@return Map<String, Object>
*/
public static Map<String, Object> convertToMapAll(Object obj)
{
try
{
if (Objects.isNull(obj))
{
return Collections.emptyMap();
}
Class<?> upType = obj.getClass();
Map<String, Object> convertMap = new HashMap<>();
while(true)
{
Field[] fields = upType.getDeclaredFields();
for (Field field : fields)
{
field.setAccessible(true);
convertMap.put(field.getName(), field.get(obj));
}
if(upType.getSuperclass() == null )
{
break;
}
else
{
upType = upType.getSuperclass();
}
}
return convertMap;
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
/**
Map 데이터를 입력괸 클래스 타입으로 변환처리
@version 1.0
@author 나혁제
@param Map<String, Object> map 입력맵
Class<T> type 변환 클래스
@return <T> T 변환된 븤래스
*/
public static <T> T convertToValueObject(Map<String, Object> map, Class<T> type)
{
try
{
Objects.requireNonNull(type, "Class cannot be null");
T instance = type.getConstructor().newInstance();
if (map == null || map.isEmpty())
{
return instance;
}
for (Map.Entry<String, Object> entry : map.entrySet())
{
Field[] fields = type.getDeclaredFields();
for (Field field : fields)
{
field.setAccessible(true);
String name = field.getName();
boolean isSameType = entry.getValue().getClass().equals(getReferenceType(field.getType()));
boolean isSameName = entry.getKey().equals(name);
if (isSameType && isSameName)
{
field.set(instance, map.get(name));
break;
}
}
}
return instance;
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
/**
Map List 데이터를 입력괸 클래스 타입으로 변환처리
@version 1.0
@author 나혁제
@param List<Map<String, Object>> list
Class<T> type 변환 클래스
@return <T> T 변환된 리스트
*/
public static <T> List<T> convertToValueObjects(List<Map<String, Object>> list, Class<T> type)
{
Objects.requireNonNull(type, "Class cannot be null");
if (list == null || list.isEmpty())
{
return Collections.emptyList();
}
List<T> convertList = new ArrayList<>(list.size());
for (Map<String, Object> map : list)
{
convertList.add(ConvertUtils.convertToValueObject(map, type));
}
return convertList;
}
/**
Map List 데이터를 입력괸 클래스 타입으로 변환처리 (확장영역)
@version 1.0
@author 나혁제
@param Map<String, Object> map 입력맵
Class<T> type 변환 클래스
@return <T> T 변환된 븤래스
*/
public static <T> T convertToValueObjectAll(Map<String, Object> map, Class<T> type)
{
try
{
Objects.requireNonNull(type, "Class cannot be null");
T instance = type.getConstructor().newInstance();
if (map == null || map.isEmpty())
{
return instance;
}
for (Map.Entry<String, Object> entry : map.entrySet())
{
Class<?> upType = type;
while(true)
{
Boolean bExist = false;
Field[] fields = upType.getDeclaredFields();
if(fields == null || fields.length==0) break;
for (Field field : fields)
{
field.setAccessible(true);
String name = field.getName();
boolean isSameType = entry.getValue().getClass().equals(getReferenceType(field.getType()));
boolean isSameName = entry.getKey().equals(name);
if (isSameType && isSameName)
{
field.set(instance, map.get(name));
bExist = true;
break;
}
}
if(bExist) break;
if(upType.getSuperclass().getClass() == null)
{
break;
}
else
{
upType = upType.getSuperclass();
}
}
}
return instance;
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
/**
Map List 데이터를 입력괸 클래스 타입으로 변환처리 (확장된 클래스 처리)
@version 1.0
@author 나혁제
@param v_msg Map
@return List<T>
*/
public static <T> List<T> convertToValueObjectsAll(List<Map<String, Object>> list, Class<T> type)
{
Objects.requireNonNull(type, "Class cannot be null");
if (list == null || list.isEmpty())
{
return Collections.emptyList();
}
List<T> convertList = new ArrayList<>(list.size());
for (Map<String, Object> map : list)
{
convertList.add(ConvertUtils.convertToValueObjectAll(map, type));
}
return convertList;
}
private static Class<?> getReferenceType(Class<?> type)
{
switch (type.getName()) {
case "boolean" : return Boolean.class;
case "byte" : return Byte.class;
case "short" : return Short.class;
case "char" : return Character.class;
case "int" : return Integer.class;
case "long" : return Long.class;
case "float" : return Float.class;
case "double" : return Double.class;
default : return type;
}
}
/**
Map 데이터를 JSONObject로 변환.
@version 1.0
@author 나혁제
@param v_msg Map
@return JSONObject
*/
public static JSONObject getJsonFromMap(Map<String, Object> map) throws JSONException
{
JSONObject jsonData = new JSONObject();
for (String key : map.keySet())
{
Object value = map.get(key);
if (value instanceof Map<?, ?>)
{
value = getJsonFromMap((Map<String, Object>) value);
}
jsonData.put(key, value);
}
return jsonData;
}
/**
List 데이터를 JSONArray로 변환.
@version 1.0
@author 나혁제
@param v_msg Map
@return JSONObject
*/
public static JSONArray getJsonFromList(List<Map<String, Object>> list) throws JSONException
{
JSONArray jsonArr = new JSONArray();
for(Map<String, Object> map : list)
{
JSONObject jsonObj = getJsonFromMap(map);
jsonArr.put(jsonObj);
}
return jsonArr;
}
/**
* jsonObject --> map 으로 변경
* JSONObject JSONArray 없어야 .
* @author 나혁제
* @param obj
* @return
*/
public static Map<String, Object> getMapFromJSONObject(JSONObject obj)
{
if (ObjectUtils.isEmpty(obj))
{
log.error("BAD REQUEST obj : {}", obj);
throw new IllegalArgumentException(String.format("BAD REQUEST obj %s", obj));
}
try
{
return new ObjectMapper().readValue(obj.toString(), Map.class);
}
catch (Exception e)
{
log.error(e.getMessage(), e);
throw new RuntimeException(e);
}
}
/**
* json array list map 으로 변경.
*
* @author 나혁제
* @param jsonArray
* @return 값이 있으면 list map, 없으면 list return
*/
public static List<Map<String, Object>> getListMapFromJsonArray(JSONArray jsonArray)
{
if (ObjectUtils.isEmpty(jsonArray))
{
log.error("jsonArray is null.");
throw new IllegalArgumentException("jsonArray is null");
}
List<Map<String, Object>> list = new ArrayList<>();
for (Object jsonObject : jsonArray)
{
list.add(getMapFromJSONObject((JSONObject) jsonObject));
}
return list;
}
}

View File

@ -0,0 +1,113 @@
package com.urpsys.basebatch.common.util;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import com.urpsys.basebatch.common.crypto.Aes256Cipher;
import com.urpsys.basebatch.common.exception.CustomException;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.util.LinkedHashMap;
/**
* Datasource 생성하는 유틸리티
*
* @author 나혁제
* @since 2025.04.03
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
* ----------- --------- ------------------------
* 2025.04.03 나혁제 최초작성
*
* </pre>
*/
public class DataSourceUtil
{
/**
* 데이터 소스 만드는 메소드
* @param dataSourceName
* @param env
* @param cipher
* @return
*/
public static DataSource createDataSource(String dataSourceName, Environment env, Aes256Cipher cipher)
{
HikariConfig config = new HikariConfig();
config.setDriverClassName (env.getProperty(dataSourceName + ".driverClassName" ));
config.setJdbcUrl (env.getProperty(dataSourceName + ".jdbcUrl" ));
config.setUsername (cipher.decrypt(env.getProperty(dataSourceName + ".username")));
config.setPassword (cipher.decrypt(env.getProperty(dataSourceName + ".password")));
config.setAutoCommit(false);
config.setMaximumPoolSize (Integer.parseInt(env.getProperty(dataSourceName + ".maximumPoolSize" )));
config.setMinimumIdle (Integer.parseInt(env.getProperty(dataSourceName + ".minimumIdle" )));
config.setConnectionTimeout (Long.parseLong (env.getProperty(dataSourceName + ".connectionTimeout" )));
config.setIdleTimeout (Long.parseLong (env.getProperty(dataSourceName + ".idleTimeout" )));
config.addDataSourceProperty("cachePrepStmts" , "true");
config.addDataSourceProperty("prepStmtCacheSize" , "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit" , "2048");
return new HikariDataSource(config);
}
/**
* SqlSessionFactory 만드는 메소드
* @param dataSource
* @param configLocation
* @param mapperLocation
* @return
* @throws CustomException
*/
public static SqlSessionFactory createSqlSessionFactory(DataSource dataSource, Resource configLocation,
Resource[] mapperLocation) throws CustomException
{
SqlSessionFactory sqlSessionFactory;
try {
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setConfigLocation(configLocation);
sessionFactoryBean.setMapperLocations(mapperLocation);
sqlSessionFactory = sessionFactoryBean.getObject();
}
catch (Exception ex)
{
throw new CustomException(ex.getMessage());
}
return sqlSessionFactory;
}
/**
* 트랜잭션 처리 메소드
* @param dataSource
* @return
*/
public static DataSourceTransactionManager createTxManager(DataSource dataSource)
{
DataSourceTransactionManager txManager = new DataSourceTransactionManager(dataSource);
txManager.setGlobalRollbackOnParticipationFailure(false);
return txManager;
}
//end method
}

View File

@ -0,0 +1,97 @@
package com.urpsys.basebatch.common.util;
import javax.sql.DataSource;
import org.egovframe.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl;
import org.egovframe.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl;
/**
* @ClassName : EgovIdGnrBuilder.java
* @Description : IdGen 정보 builder
*
* @author : urp 인프라본부 나혁제
* @since : 2025.01.16
* @version : 1.0
*
* <pre>
* << 개정이력(Modification Information) >>
*
* 수정일 수정자 수정내용
* ------------- ------------ ---------------------
* 2025.01.16 나혁제 최초 생성
* </pre>
*
*/
public class EgovIdGnrBuilder
{
// TODO : 기본값 설정, 예외처리 필요
private DataSource dataSource;
private EgovIdGnrStrategyImpl egovIdGnrStrategyImpl;
private String preFix;
private int cipers;
private char fillChar;
private int blockSize;
private String table;
private String tableName;
public EgovIdGnrBuilder setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
return this;
}
public EgovIdGnrBuilder setEgovIdGnrStrategyImpl(EgovIdGnrStrategyImpl egovIdGnrStrategyImpl) {
this.egovIdGnrStrategyImpl = egovIdGnrStrategyImpl;
return this;
}
public EgovIdGnrBuilder setPreFix(String preFix) {
this.preFix = preFix;
return this;
}
public EgovIdGnrBuilder setCipers(int cipers) {
this.cipers = cipers;
return this;
}
public EgovIdGnrBuilder setFillChar(char fillChar) {
this.fillChar = fillChar;
return this;
}
public EgovIdGnrBuilder setBlockSize(int blockSize) {
this.blockSize = blockSize;
return this;
}
public EgovIdGnrBuilder setTable(String table) {
this.table = table;
return this;
}
public EgovIdGnrBuilder setTableName(String tableName) {
this.tableName = tableName;
return this;
}
public EgovTableIdGnrServiceImpl build() {
EgovTableIdGnrServiceImpl egovTableIdGnrServiceImpl = new EgovTableIdGnrServiceImpl();
egovTableIdGnrServiceImpl.setDataSource(dataSource);
if(egovIdGnrStrategyImpl != null) {
egovIdGnrStrategyImpl = new EgovIdGnrStrategyImpl();
egovIdGnrStrategyImpl.setPrefix(preFix);
egovIdGnrStrategyImpl.setCipers(cipers);
egovIdGnrStrategyImpl.setFillChar(fillChar);
egovTableIdGnrServiceImpl.setStrategy(egovIdGnrStrategyImpl);
}
egovTableIdGnrServiceImpl.setBlockSize(blockSize);
egovTableIdGnrServiceImpl.setTable(table);
egovTableIdGnrServiceImpl.setTableName(tableName);
return egovTableIdGnrServiceImpl;
}
}

View File

@ -0,0 +1,148 @@
package com.urpsys.basebatch.common.util;
import java.io.IOException;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.util.StringUtils;
import org.apache.commons.io.IOUtils;
import lombok.extern.slf4j.Slf4j;
/**
* Html 메일 처리에 필요한 유틸리티 클래스
*
* @author urp 인프라본부 나혁제
* @since 2025.04.02
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
* ----------- --------- ------------------------
* 2025.03.20 나혁제 최초작성
*
* </pre>
*/
@Slf4j
@Component("HtmlEmailUtil")
public class HtmlEmailUtil
{
@Autowired
private HtmlEmailUtil(JavaMailSender mailSender)
{
this.mailSender = mailSender;
}
@Value("${custom.sendmail.sendEmail}")
private String strMailAddress;
@Value("${custom.sendmail.senderName}")
private String strMailSendName;
private static JavaMailSender mailSender;
/**
메일처리 기본함수
@author 나혁제
@since 2025.02.11
@param : String to 받는사람
String sj 제목
String cn 메시지
@return String 처리결과
* @throws Exception
*/
public String send(String to, String sj, String cn)
{
if (StringUtils.isEmpty(to)) return "수신자 메일이 불문명합니다."; // 수신자가 없을 경우 종료
String strReturnErr = "";
try
{
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, false, "UTF-8");
messageHelper.setSubject(sj);
messageHelper.setText(cn, true);
messageHelper.setFrom(strMailAddress, strMailSendName);
String[] toArr = to.split(",");
messageHelper.setTo(toArr);
mailSender.send(message); // 메일발송
strReturnErr = "";
}
catch(MailException es)
{
es.printStackTrace();
strReturnErr = es.toString();
}
catch(Exception e)
{
e.printStackTrace();
strReturnErr = e.toString();
}
return strReturnErr;
}
public void sendMultipleMessage( String to
, String cc
, String sj
, String cn
, MultipartFile file) throws MessagingException, IOException
{
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
//메일 제목 설정
helper.setSubject(sj);
//참조자 설정
helper.setCc(cc);
helper.setText(cn, false);
helper.setFrom(strMailAddress);
//첨부 파일 설정
String fileName = StringUtils.cleanPath(file.getOriginalFilename());
helper.addAttachment( MimeUtility.encodeText(fileName, "UTF-8", "B")
, new ByteArrayResource(IOUtils.toByteArray(file.getInputStream())));
//수신자 개별 전송
// for(String s : mailDto.getAddress()) {
// helper.setTo(s);
// emailSender.send(message);
// }
//수신자 한번에 전송
helper.setTo(to);
mailSender.send(message);
log.info("mail multiple send complete.");
}
}

View File

@ -0,0 +1,375 @@
package com.urpsys.basebatch.common.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import com.urpsys.basebatch.common.exception.CustomException;
import com.urpsys.basebatch.domain.TokenInfo;
import com.urpsys.basebatch.common.util.ConvertUtils;
import kong.unirest.HttpRequestWithBody;
import kong.unirest.HttpResponse;
import kong.unirest.JsonNode;
import kong.unirest.Unirest;
import kong.unirest.json.JSONObject;
import lombok.extern.slf4j.Slf4j;
/**
* Rest Api 호출하는 필요한 유틸리티 클래스
*
* @author urp 인프라본부 나혁제
* @since 2025.03.20
* @version 1.0.0
* @see
*
* <pre>
*
* << 개정이력(Modification information) >>
*
* 수정일 수정자 수정내용
* ----------- --------- ------------------------
* 2025.03.20 나혁제 최초작성
*
* </pre>
*/
@Slf4j
@Component("RestApiCallUtil")
public class RestApiCallUtil
{
@Value("${custom.sendkakaoTalk.serviceId}")
private String strServiceId;
@Value("${custom.sendkakaoTalk.accessKey}")
private String strAccessKey;
@Value("${custom.sendkakaoTalk.secretKey}")
private String strSecretKey;
@Value("${custom.sendkakaoTalk.friendId}")
private String strFriendId;
@Value("${custom.api_search_server}")
private String strApiSearchSvr; // API 서버
@Value("${custom.api_kic_mail_server}")
private String strKicMailSvr; // KIC 메일서버
@Value("${custom.api_kic_msg_server}")
private String strKicMsgSvr; // KIC 메신저서버
/**
네이버 클라우드 카톡 서비스 호출
@author 나혁제
@since 2025.03.20
@param : TokenInfo tokenInfo
, Map<String, Object> bodyMap
, String strRestUrl
@return Map<String, Object>
* @throws CustomException
*/
public Map<String, Object> RestApiCallNaverCloudKaKao(String strTemplateCd, String to, String msg) throws CustomException
{
log.info(">>>>>>>>>>>>>>> RestApiCallNaverCloudKaKao <<<<<<<<<<<<<<<");
long timestamp = System.currentTimeMillis();
String strTime = timestamp+"";
String strContentType = "application/json; charset=utf-8" ;
String strSignature = makeSignature(strTime, strServiceId, strAccessKey, strSecretKey);
// Header Setting Start ---------------------------------
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type" , strContentType );
headers.put("x-ncp-apigw-timestamp" , strTime );
headers.put("x-ncp-iam-access-key" , strAccessKey );
headers.put("x-ncp-apigw-signature-v2" , strSignature );
// Header Setting End ---------------------------------
log.info("headers 입력값 확인 => [{}]", headers.toString());
Map<String, Object> bodyMap = new HashMap<>();
bodyMap.put("plusFriendId" , "@"+strFriendId );
bodyMap.put("templateCode" , strTemplateCd );
List<Map<String, Object>> messagesList = new ArrayList<>();
Map<String, Object> messages = new HashMap<>();
messages.put("countryCode", "82");
messages.put("to" , to);
messages.put("content" , msg);
messagesList.add(messages);
bodyMap.put("messages", messagesList);
log.info("body 입력값 확인 json => [{}]", ConvertUtils.getJsonFromMap(bodyMap).toString() );
String strFullUrl = "https://sens.apigw.ntruss.com/alimtalk/v2/services/"+strServiceId+"/messages";
log.info("strFullUrl => [{}]", strFullUrl);
HttpResponse<JsonNode> jsonResponse = Unirest.post(strFullUrl)
.headers(headers)
.body (bodyMap)
.asJson();
JSONObject returnObj = jsonResponse.getBody().getObject();
// JSONObject returnObjData = new JSONObject();
// String strFullReturnData = returnObj.toString();
// Map 변환처리
Map<String, Object> returnMap = null;
// json to Map 변환처리
returnMap = ConvertUtils.getMapFromJSONObject(returnObj);
log.info("전체 리턴값 => [{}]", returnMap.toString());
log.info("<<<<<<<<<<<<<<< RestApiCallNaverCloudKaKao >>>>>>>>>>>>>>>");
return returnMap;
}
public String makeSignature(String timestamp, String strServiceId, String strAccessKey, String strSecretKey)
{
String encodeBase64String = "";
try
{
String space = " " ; // one space
String newLine = "\n" ; // new line
String method = "POST"; // method
String url = "/alimtalk/v2/services/"+strServiceId+"/messages" ; // url (include query string)
String accessKey = strAccessKey ; // access key id (from portal or Sub Account)
String secretKey = strSecretKey ;
String message = new StringBuilder()
.append(method)
.append(space)
.append(url)
.append(newLine)
.append(timestamp)
.append(newLine)
.append(accessKey)
.toString();
SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(message.getBytes("UTF-8"));
encodeBase64String = Base64.encodeBase64String(rawHmac);
}
catch(Exception e)
{
e.printStackTrace();
}
return encodeBase64String;
}
/**
RestApi 호출 함수
@author 나혁제
@since 2025.01.06
@param : TokenInfo tokenInfo
, Map<String, Object> bodyMap
, String strRestUrl
@return Map<String, Object>
* @throws CustomException
*/
public Map<String, Object> RestApiCallNoAuth ( Map<String, Object> bodyMap
, String strRestUrl ) throws CustomException
{
log.info(">>>>>>>>>>>>>>> RestApiCallNoAuth <<<<<<<<<<<<<<<");
// Header Setting Start ---------------------------------
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
// Header Setting End ---------------------------------
String strDomain = strApiSearchSvr;
String strFullUrl = strDomain + strRestUrl;
log.info("입력값 확인 => [{}]", bodyMap.toString());
log.info("입력값 확인 JSON => [{}]", ConvertUtils.getJsonFromMap(bodyMap));
log.info("입력 strFullUrl => [{}]", strFullUrl);
HttpResponse<JsonNode> jsonResponse = Unirest.post(strFullUrl)
.headers(headers)
.body(bodyMap)
.asJson();
JSONObject returnObj = jsonResponse.getBody().getObject();
// JSONObject returnObjData = new JSONObject();
log.info("리턴값 확인 => [{}]", returnObj.toString());
/*
int iReturnStatus = (int)returnObj.get("status");
if(iReturnStatus != 200)
{
String strError = (String)returnObj.get("error");
String strErrTrace = (String)returnObj.get("trace");
throw new CustomException("9000", strErrTrace);
}
else
{
returnObjData = returnObj.getJSONObject("data");
log.info("리턴값 확인 => [{}]", returnObjData.toString());
}
*/
Map<String, Object> returnMap = ConvertUtils.getMapFromJSONObject(returnObj); // Map 변환처리
log.info("<<<<<<<<<<<<<<< RestApiCallNoAuth >>>>>>>>>>>>>>>");
return returnMap;
}
/**
RestApi 호출 함수
@author 나혁제
@since 2025.06.11
@param : Map<String, Object> bodyMap
, String strRestUrl
@return Map<String, Object>
* @throws CustomException
*/
public Map<String, Object> RestApiCallNoAuthKicMailTextHtml ( Map<String, Object> bodyMap
, String strRestUrl ) throws CustomException
{
log.info(">>>>>>>>>>>>>>> RestApiCallNoAuthKicMailTextHtml <<<<<<<<<<<<<<<");
String strDomain = strKicMailSvr;
String strFullUrl = strDomain + strRestUrl;
log.info("입력값 확인 JSON => [{}]", ConvertUtils.getJsonFromMap(bodyMap));
log.info("입력 strFullUrl => [{}]", strFullUrl);
/*
HttpRequestWithBody request = Unirest.post("https://example.com/api");
for (Map.Entry<String, Object> entry : bodyMap.entrySet())
{
// request = request.field(entry.getKey(), entry.getValue());
request = request.field(entry.getKey(), entry.getValue());
}
*/
/*
HttpResponse<JsonNode> jsonResponse = Unirest.post(strFullUrl)
.field("email" , (String)bodyMap.get("email" ))
.field("to" , (String)bodyMap.get("to" ))
.field("subject" , (String)bodyMap.get("subject" ))
.field("content" , (String)bodyMap.get("content" ))
.field("contentType" , (String)bodyMap.get("contentType"))
.asJson();
*/
HttpResponse<JsonNode> jsonResponse = Unirest.post(strFullUrl)
.fields(bodyMap)
.asJson();
JSONObject returnObj = jsonResponse.getBody().getObject();
log.info("리턴값 확인 => [{}]", returnObj.toString());
Map<String, Object> returnMap = ConvertUtils.getMapFromJSONObject(returnObj); // Map 변환처리
log.info("<<<<<<<<<<<<<<< RestApiCallNoAuthKicMailTextHtml >>>>>>>>>>>>>>>");
return returnMap;
}
/**
RestApi 호출 함수
@author 나혁제
@since 2025.01.06
@param : TokenInfo tokenInfo
, Map<String, Object> bodyMap
, String strRestUrl
@return Map<String, Object>
* @throws CustomException
*/
public Map<String, Object> RestApiCallNoAuthKicMsg ( Map<String, Object> bodyMap
, String strRestUrl ) throws CustomException
{
log.info(">>>>>>>>>>>>>>> RestApiCallNoAuthKicMsg <<<<<<<<<<<<<<<");
// Header Setting Start ---------------------------------
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
// Header Setting End ---------------------------------
String strDomain = strKicMsgSvr;
String strFullUrl = strDomain + strRestUrl;
log.info("입력값 확인 => [{}]", bodyMap.toString());
log.info("입력값 확인 JSON => [{}]", ConvertUtils.getJsonFromMap(bodyMap));
log.info("입력 strFullUrl => [{}]", strFullUrl);
HttpResponse<JsonNode> jsonResponse = Unirest.post(strFullUrl)
.headers(headers)
.body(bodyMap)
.asJson();
JSONObject returnObj = jsonResponse.getBody().getObject();
// JSONObject returnObjData = new JSONObject();
log.info("리턴값 확인 => [{}]", returnObj.toString());
/*
int iReturnStatus = (int)returnObj.get("status");
if(iReturnStatus != 200)
{
String strError = (String)returnObj.get("error");
String strErrTrace = (String)returnObj.get("trace");
throw new CustomException("9000", strErrTrace);
}
else
{
returnObjData = returnObj.getJSONObject("data");
log.info("리턴값 확인 => [{}]", returnObjData.toString());
}
*/
Map<String, Object> returnMap = ConvertUtils.getMapFromJSONObject(returnObj); // Map 변환처리
log.info("<<<<<<<<<<<<<<< RestApiCallNoAuthKicMsg >>>>>>>>>>>>>>>");
return returnMap;
}
}

File diff suppressed because it is too large Load Diff

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