feat(itms): urpItms_30_Batch → batch subtree 이식 (히스토리 보존)

git-subtree-dir: batch
git-subtree-mainline: 6338602337
git-subtree-split: 83e2529302
This commit is contained in:
itms-merge-dev 2026-07-17 17:01:12 +09:00
commit b60fd84fb9
185 changed files with 15290 additions and 0 deletions

27
batch/.classpath Normal file
View File

@ -0,0 +1,27 @@
<?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/openJDK16">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<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
batch/.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
batch/.gitignore vendored Normal file
View File

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

41
batch/.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.

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 >>>>>>>>>> ");
}
}

View File

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

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
batch/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
batch/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
batch/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
batch/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
batch/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'

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