diff --git a/pom.xml b/pom.xml index aaf2ee6..6c21c1d 100644 --- a/pom.xml +++ b/pom.xml @@ -493,4 +493,40 @@ + + + + local + + local + local + + + true + + + + + dev + + dev + dev + + + false + + + + + + prod + + prod + prod + + + false + + + diff --git a/src/main/java/egovframework/EgovBootApplication.java b/src/main/java/egovframework/EgovBootApplication.java index 914d47a..7ec53f2 100644 --- a/src/main/java/egovframework/EgovBootApplication.java +++ b/src/main/java/egovframework/EgovBootApplication.java @@ -29,7 +29,7 @@ public class EgovBootApplication { ); public static void main(String[] args) { - log.debug("##### EgovBootApplication Start #####"); + log.debug("##### EgovBootApplication::active profiles - {} Start #####", System.getProperty("spring.profiles.active")); // SpringApplication springApplication = new SpringApplication(EgovBootApplication.class); @@ -56,7 +56,7 @@ public class EgovBootApplication { - log.debug("##### EgovBootApplication End #####"); + log.debug("##### EgovBootApplication::active profiles - {} End #####", System.getProperty("spring.profiles.active")); } } diff --git a/src/main/java/egovframework/com/cmm/service/EgovProperties.java b/src/main/java/egovframework/com/cmm/service/EgovProperties.java index 5e84dc3..08ecbf8 100644 --- a/src/main/java/egovframework/com/cmm/service/EgovProperties.java +++ b/src/main/java/egovframework/com/cmm/service/EgovProperties.java @@ -50,64 +50,14 @@ public class EgovProperties { //파일구분자 static final char FILE_SEPARATOR = File.separatorChar; - - //프로퍼티 파일의 물리적 위치 - /*public static final String GLOBALS_PROPERTIES_FILE - = System.getProperty("user.home") + System.getProperty("file.separator") + "egovProps" - + System.getProperty("file.separator") + "globals.properties";*/ - - // 프로퍼티 파일의 위치 prefix - // /target/classes/egovframework - //public static final String RELATIVE_PATH_PREFIX = "classpath:" + FILE_SEPARATOR + "egovframework"; - - // 프로퍼티 파일의 위치 - // /target/classes/egovframework/egovProps/globals.properties - //public static final String GLOBALS_PROPERTIES_FILE = RELATIVE_PATH_PREFIX + FILE_SEPARATOR +"egovProps"+ FILE_SEPARATOR + "globals.properties"; - - // /target/classes/application.properties - //public static final String GLOBALS_PROPERTIES_FILE = "classpath:" + FILE_SEPARATOR + "application.properties"; - + // egovframework/com/cmm/service -> /../../../../ 경로에 properties public static final String RELATIVE_PATH_PREFIX = EgovProperties.class.getResource("").getPath() + FILE_SEPARATOR + ".." + FILE_SEPARATOR + ".." + FILE_SEPARATOR + ".." + FILE_SEPARATOR + ".." + FILE_SEPARATOR; public static final String GLOBALS_PROPERTIES_FILE - = RELATIVE_PATH_PREFIX + "application.properties"; - - /** - * 인자로 주어진 문자열을 Key값으로 하는 상대경로 프로퍼티 값을 절대경로로 반환한다(Globals.java 전용) - * @param keyName String - * @return String - - public static String getPathProperty(String keyName){ - String value = ERR_CODE; - value="99"; - debug(GLOBALS_PROPERTIES_FILE + " : " + keyName); - FileInputStream fis = null; - try{ - Properties props = new Properties(); - fis = new FileInputStream(GLOBALS_PROPERTIES_FILE); - props.load(new java.io.BufferedInputStream(fis)); - value = props.getProperty(keyName).trim(); - value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value; - }catch(FileNotFoundException fne){ - debug(fne); - }catch(IOException ioe){ - debug(ioe); - }catch(Exception e){ - debug(e); - }finally{ - try { - if (fis != null) fis.close(); - } catch (Exception ex) { - ex.printStackTrace(); - } - - } - return value; - } - */ + = RELATIVE_PATH_PREFIX + "application.yml"; /** * 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다(Globals.java 전용) @@ -140,56 +90,7 @@ public class EgovProperties { } return value; - /* - Resource resources = ResourcePatternUtils.getResourcePatternResolver(new DefaultResourceLoader()) - .getResource(GLOBALS_PROPERTIES_FILE); - - debug(GLOBALS_PROPERTIES_FILE + " : " + keyName); - - try (InputStream in = resources.getInputStream()) { - Properties props = new Properties(); - props.load(new java.io.BufferedInputStream(in)); - if ( props.getProperty(keyName) != null ) - value = props.getProperty(keyName).trim(); - } catch (FileNotFoundException fne) { - debug(fne); - } catch (IOException ioe) { - debug(ioe); - } - return value; - */ - } - - /** - * 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 상대 경로값을 절대 경로값으로 반환한다 - * @param fileName String - * @param key String - * @return String - - public static String getPathProperty(String fileName, String key){ - FileInputStream fis = null; - try{ - java.util.Properties props = new java.util.Properties(); - fis = new FileInputStream(fileName); - props.load(new java.io.BufferedInputStream(fis)); - fis.close(); - - String value = props.getProperty(key); - value = RELATIVE_PATH_PREFIX + "egovProps" + System.getProperty("file.separator") + value; - return value; - }catch(java.io.FileNotFoundException fne){ - return ERR_CODE_FNFE; - }catch(java.io.IOException ioe){ - return ERR_CODE_IOE; - }finally{ - try { - if (fis != null) fis.close(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } } - */ /** * 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다 @@ -264,34 +165,6 @@ public class EgovProperties { debug("EX:"+ex);//ex.printStackTrace(); } } - /* - String src = EgovWebUtil.filePathBlackList(property.replace("\\", FILE_SEPARATOR).replace("/", FILE_SEPARATOR)); - try (FileInputStream fis = new FileInputStream(src)) { - - File srcFile = new File(src); - if (srcFile.exists()) { - - java.util.Properties props = new java.util.Properties(); - props.load(new java.io.BufferedInputStream(fis)); - - int i = 0; - Enumeration plist = props.propertyNames(); - if (plist != null) { - while (plist.hasMoreElements()) { - Map map = new HashMap(); - String key = (String)plist.nextElement(); - map.put(key, props.getProperty(key)); - keyList.add(map); - } - } - } - } catch (FileNotFoundException ex) { - debug("FileNotFoundException:" + ex); - } catch (IOException ex) { - debug("IOException:" + ex); - } - - */ return keyList; } diff --git a/src/main/java/egovframework/com/cmm/service/EgovYmlProperties.java b/src/main/java/egovframework/com/cmm/service/EgovYmlProperties.java new file mode 100644 index 0000000..9e9139e --- /dev/null +++ b/src/main/java/egovframework/com/cmm/service/EgovYmlProperties.java @@ -0,0 +1,130 @@ +package egovframework.com.cmm.service; + +import lombok.extern.slf4j.Slf4j; +import org.yaml.snakeyaml.Yaml; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +@Slf4j +public class EgovYmlProperties { + + // 에러 메시지 상수 + public static final String ERR_CODE = "EXCEPTION OCCURRED"; + + // YAML 파일 경로 + public static final String GLOBALS_YAML_FILE = "application.yml"; + + // 활성 프로파일 설정 (기본값은 "default") + private static final String ACTIVE_PROFILE = System.getProperty("spring.profiles.active", "local"); + + /** + * 인자로 주어진 키에 해당하는 값을 반환한다. + * @param keyName String + * @return String + */ + public static String getProperty(String keyName) { + try (InputStream baseInputStream = EgovProperties.class.getClassLoader().getResourceAsStream(GLOBALS_YAML_FILE); + InputStream profileInputStream = EgovProperties.class.getClassLoader().getResourceAsStream(getProfileYamlFile())) { + + Yaml yaml = new Yaml(); + + // 기본 YAML 읽기 + Map yamlMap = baseInputStream != null ? yaml.load(baseInputStream) : new HashMap<>(); + + // 프로파일별 YAML 읽기 (override) + if (profileInputStream != null) { + Map profileMap = yaml.load(profileInputStream); + yamlMap.putAll(profileMap); + } + + return getValueFromYamlMap(yamlMap, keyName); + } catch (Exception e) { + log.error("YAML 읽기 오류: {}", e.getMessage(), e); + return ERR_CODE; + } + } + + /** + * 중첩된 YAML 구조에서 키로 값을 찾는다. + * @param yamlMap Map + * @param keyName String + * @return String + */ + @SuppressWarnings("unchecked") + private static String getValueFromYamlMap(Map yamlMap, String keyName) { + String[] keys = keyName.split("\\."); + Object current = yamlMap; + for (String key : keys) { + if (current instanceof Map) { + current = ((Map) current).get(key); + } else { + return ERR_CODE; // 키 경로가 잘못된 경우 + } + } + return Objects.toString(current, ERR_CODE); + } + + /** + * YAML 파일의 내용을 key-value 형태의 리스트로 반환한다. + * @return List> + */ + public static List> loadYamlFile() { + List> keyList = new ArrayList<>(); + + try (InputStream baseInputStream = EgovProperties.class.getClassLoader().getResourceAsStream(GLOBALS_YAML_FILE); + InputStream profileInputStream = EgovProperties.class.getClassLoader().getResourceAsStream(getProfileYamlFile())) { + + Yaml yaml = new Yaml(); + + // 기본 YAML 읽기 + Map yamlMap = baseInputStream != null ? yaml.load(baseInputStream) : new HashMap<>(); + + // 프로파일별 YAML 읽기 (override) + if (profileInputStream != null) { + Map profileMap = yaml.load(profileInputStream); + yamlMap.putAll(profileMap); + } + + flattenYamlMap(yamlMap, "", keyList); + } catch (Exception e) { + log.error("YAML 읽기 오류: {}", e.getMessage(), e); + } + + return keyList; + } + + /** + * 중첩된 YAML 구조를 평탄화하여 key-value 리스트에 추가한다. + * @param yamlMap Map + * @param parentKey String + * @param keyList List> + */ + @SuppressWarnings("unchecked") + private static void flattenYamlMap(Map yamlMap, String parentKey, List> keyList) { + for (Map.Entry entry : yamlMap.entrySet()) { + String fullKey = parentKey.isEmpty() ? entry.getKey() : parentKey + "." + entry.getKey(); + Object value = entry.getValue(); + + if (value instanceof Map) { + flattenYamlMap((Map) value, fullKey, keyList); + } else { + Map map = new HashMap<>(); + map.put(fullKey, Objects.toString(value, "")); + keyList.add(map); + } + } + } + + /** + * 활성화된 프로파일에 해당하는 YAML 파일 이름을 반환한다. + * @return String + */ + private static String getProfileYamlFile() { + return "application-" + ACTIVE_PROFILE + ".yml"; + } +} diff --git a/src/main/java/egovframework/com/config/EgovConfigApp.java b/src/main/java/egovframework/com/config/EgovConfigApp.java index 4842a31..0291e21 100644 --- a/src/main/java/egovframework/com/config/EgovConfigApp.java +++ b/src/main/java/egovframework/com/config/EgovConfigApp.java @@ -1,5 +1,6 @@ package egovframework.com.config; +import org.springframework.boot.context.properties.*; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.PropertySource; @@ -17,9 +18,7 @@ import org.springframework.context.annotation.PropertySources; EgovConfigAppValidator.class, EgovConfigAppWhitelist.class }) -@PropertySources({ - @PropertySource("classpath:/application.properties") -}) //CAUTION: min JDK 8 +@ConfigurationPropertiesScan(basePackages = {"egovframework", "com.xit"}) public class EgovConfigApp { } diff --git a/src/main/java/egovframework/com/config/EgovConfigAppMapper.java b/src/main/java/egovframework/com/config/EgovConfigAppMapper.java index f6ba505..8cc4a5f 100644 --- a/src/main/java/egovframework/com/config/EgovConfigAppMapper.java +++ b/src/main/java/egovframework/com/config/EgovConfigAppMapper.java @@ -1,6 +1,7 @@ package egovframework.com.config; import java.io.IOException; +import java.util.*; import javax.annotation.PostConstruct; import javax.sql.DataSource; @@ -19,6 +20,8 @@ import org.springframework.core.env.Environment; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.support.lob.DefaultLobHandler; +import egovframework.com.cmm.service.*; + /** * @ClassName : EgovConfigAppMapper.java * @Description : Mapper 설정 @@ -37,9 +40,6 @@ import org.springframework.jdbc.support.lob.DefaultLobHandler; * */ @Configuration -@PropertySources({ - @PropertySource("classpath:/application.properties") -}) public class EgovConfigAppMapper { @Autowired DataSource dataSource; @@ -84,7 +84,6 @@ public class EgovConfigAppMapper { @Bean public SqlSessionTemplate egovSqlSessionTemplate(@Qualifier("sqlSession") SqlSessionFactory sqlSession) { - SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSession); - return sqlSessionTemplate; + return new SqlSessionTemplate(sqlSession); } } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties deleted file mode 100644 index d7ac5e1..0000000 --- a/src/main/resources/application-dev.properties +++ /dev/null @@ -1,13 +0,0 @@ -# \uc6b4\uc601\uc11c\ubc84 \ud0c0\uc785(WINDOWS, UNIX) -Globals.OsType=WINDOWS - -#hsql - local hssql \uc0ac\uc6a9\uc2dc\uc5d0 \uc801\uc6a9 (\ub0b4\uc7a5 hsql\uc740 \uc815\ubcf4 \ud544\uc694 \uc5c6\uc74c) -Globals.hsql.DriverClassName=net.sf.log4jdbc.DriverSpy -Globals.hsql.Url=jdbc:log4jdbc:hsqldb:hsql://127.0.0.1/sampledb -Globals.hsql.UserName=sa -Globals.hsql.Password= - -logging.rollingpolicy.maxHistory=2 - -# File store Path -Globals.fileStorePath=./files \ No newline at end of file diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml new file mode 100644 index 0000000..895ec8c --- /dev/null +++ b/src/main/resources/application-dev.yml @@ -0,0 +1,15 @@ +spring: + config: + activate: + on-profile: dev + +# 운영서버 타입(WINDOWS, UNIX) +Globals: + OsType: WINDOWS + # File store Path + fileStorePath: ./files + pageUnit: 20 + pageSize: 20 + +logging.rollingpolicy.maxHistory: 2 + diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml new file mode 100644 index 0000000..895ec8c --- /dev/null +++ b/src/main/resources/application-local.yml @@ -0,0 +1,15 @@ +spring: + config: + activate: + on-profile: dev + +# 운영서버 타입(WINDOWS, UNIX) +Globals: + OsType: WINDOWS + # File store Path + fileStorePath: ./files + pageUnit: 20 + pageSize: 20 + +logging.rollingpolicy.maxHistory: 2 + diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties deleted file mode 100644 index 3c95022..0000000 --- a/src/main/resources/application-prod.properties +++ /dev/null @@ -1,13 +0,0 @@ -# \uc6b4\uc601\uc11c\ubc84 \ud0c0\uc785(WINDOWS, UNIX) -Globals.OsType=LINUX - -#hsql - local hssql \uc0ac\uc6a9\uc2dc\uc5d0 \uc801\uc6a9 (\ub0b4\uc7a5 hsql\uc740 \uc815\ubcf4 \ud544\uc694 \uc5c6\uc74c) -Globals.hsql.DriverClassName=net.sf.log4jdbc.DriverSpy -Globals.hsql.Url=jdbc:log4jdbc:hsqldb:hsql://127.0.0.1/sampledb -Globals.hsql.UserName=sa -Globals.hsql.Password= - -logging.rollingpolicy.maxHistory=90 - -# File store Path -Globals.fileStorePath=./files \ No newline at end of file diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..e3e8448 --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -0,0 +1,14 @@ +spring: + config: + activate: + on-profile: prod + +# 운영서버 타입(WINDOWS, UNIX) +Globals: + OsType: LINUX + # File store Path + fileStorePath: ./files + pageUnit: 20 + pageSize: 20 + +logging.rollingpolicy.maxHistory: 90 \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index ec38557..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,144 +0,0 @@ -spring.profiles.active=dev -spring.config.use-legacy-processing=true -#----------------------------------------------------------------------- -# -# globals.properties : \uC2DC\uC2A4\uD15C -# -#----------------------------------------------------------------------- -# 1. key = value \uAD6C\uC870\uC785\uB2C8\uB2E4. -# 2. key\uAC12\uC740 \uACF5\uBC31\uBB38\uC790\uB97C \uD3EC\uD568\uBD88\uAC00, value\uAC12\uC740 \uACF5\uBC31\uBB38\uC790\uB97C \uAC00\uB2A5 -# 3. key\uAC12\uC73C\uB85C \uD55C\uAE00\uC744 \uC0AC\uC6A9\uBD88\uAC00, value\uAC12\uC740 \uD55C\uAE00\uC0AC\uC6A9\uC774 \uAC00\uB2A5 -# 4. \uC904\uC744 \uBC14\uAFC0 \uD544\uC694\uAC00 \uC788\uC73C\uBA74 '\'\uB97C \uB77C\uC778\uC758 \uB05D\uC5D0 \uCD94\uAC00(\uB9CC\uC57D '\'\uBB38\uC790\uB97C \uC0AC\uC6A9\uD574\uC57C \uD558\uB294 \uACBD\uC6B0\uB294 '\\'\uB97C \uC0AC\uC6A9) -# 5. Windows\uC5D0\uC11C\uC758 \uB514\uB809\uD1A0\uB9AC \uD45C\uC2DC : '\\' or '/' ('\' \uC0AC\uC6A9\uD558\uBA74 \uC548\uB428) -# 6. Unix\uC5D0\uC11C\uC758 \uB514\uB809\uD1A0\uB9AC \uD45C\uC2DC : '/' -# 7. \uC8FC\uC11D\uBB38 \uCC98\uB9AC\uB294 #\uC0AC\uC6A9 -# 8. value\uAC12 \uB4A4\uC5D0 \uC2A4\uD398\uC774\uC2A4\uAC00 \uC874\uC7AC\uD558\uB294 \uACBD\uC6B0 \uC11C\uBE14\uB9BF\uC5D0\uC11C \uCC38\uC870\uD560\uB54C\uB294 \uC5D0\uB7EC\uBC1C\uC0DD\uD560 \uC218 \uC788\uC73C\uBBC0\uB85C trim()\uD558\uAC70\uB098 \uB9C8\uC9C0\uB9C9 \uACF5\uBC31\uC5C6\uC774 properties \uAC12\uC744 \uC124\uC815\uD560\uAC83 -#----------------------------------------------------------------------- -spring.application.name=xit-egov-springboot - -# G4C \uC5F0\uACB0\uC6A9 IP (localhost) -Globals.LocalIp=127.0.0.1 - -# DB\uC11C\uBC84 \uD0C0\uC785(hsql,mysql,oracle,altibase,tibero) - datasource \uBC0F sqlMap \uD30C\uC77C \uC9C0\uC815\uC5D0 \uC0AC\uC6A9\uB428 -Globals.DbType=mysql - -# DB \uC811\uADFC \uC815\uBCF4 - -#hsql - local hssql \uC0AC\uC6A9\uC2DC\uC5D0 \uC801\uC6A9 (\uB0B4\uC7A5 hsql\uC740 \uC815\uBCF4 \uD544\uC694 \uC5C6\uC74C) -Globals.hsql.DriverClassName=net.sf.log4jdbc.DriverSpy -Globals.hsql.Url=jdbc:log4jdbc:hsqldb:hsql://127.0.0.1/sampledb -Globals.hsql.UserName=sa -Globals.hsql.Password= - -# mysql -Globals.mysql.DriverClassName=net.sf.log4jdbc.DriverSpy -Globals.mysql.Url=jdbc:log4jdbc:mysql://211.119.124.9:4407/egov -Globals.mysql.UserName=egov -Globals.mysql.Password=xit1807 - -#oracle -Globals.oracle.DriverClassName=oracle.jdbc.driver.OracleDriver -Globals.oracle.Url=jdbc:oracle:thin:@127.0.0.1:1521:egovfrm -Globals.oracle.UserName= -Globals.oracle.Password= - -# \uAD8C\uD55C \uC778\uC99D\uBC29\uC2DD(dummy, session, security) - \uC0AC\uC6A9\uC790\uC758 \uB85C\uADF8\uC778\uC2DC \uC778\uC99D \uBC29\uC2DD\uC744 \uACB0\uC815\uD568 -# dummy : \uB354\uBBF8 \uBC29\uC2DD\uC73C\uB85C \uC0AC\uC6A9\uC790 \uAD8C\uD55C\uC744 \uC778\uC99D\uD568 -# session : \uC138\uC158 \uBC29\uC2DD\uC73C\uB85C \uC0AC\uC6A9\uC790 \uAD8C\uD55C\uC744 \uC778\uC99D\uD568 -# security : spring security \uBC29\uC2DD\uC73C\uB85C \uC0AC\uC6A9\uC790 \uAD8C\uD55C\uC744 \uC778\uC99D\uD568 -Globals.Auth = session - -# \uB85C\uADF8\uC778 \uC778\uC99D \uC81C\uD55C(login authentication limit) -# (\uC0AC\uC6A9 \uC5EC\uBD80 \uC124\uC815\uAC12 : true, false) -Globals.login.Lock = true -# -\uC778\uC99D \uC81C\uC2DC\uB3C4 \uD69F\uC218 -Globals.login.LockCount = 5 - -# \uBE44\uBC00\uBC88\uD638 \uC720\uD6A8\uAE30\uAC04 \uC124\uC815 -Globals.ExpirePwdDay = 180 - -# MainPage Setting -#Globals.MainPage = /cmm/main/mainPage.do -Globals.MainPage = /EgovContent.do - - -# Page Config -Globals.pageUnit=10 -Globals.pageSize=10 - -# File Config -Globals.posblAtchFileSize=5242880 -Globals.fileStorePath=./files -Globals.addedOptions=false - -# \uD30C\uC77C \uD655\uC7A5\uC790 \uD654\uC774\uD2B8\uB9AC\uC2A4\uD2B8(\uD5C8\uC6A9\uBAA9\uB85D) : \uD30C\uC77C \uD655\uC7A5\uC790\uB97C (.)\uACFC \uD568\uAED8 \uC5F0\uC774\uC5B4\uC11C \uC0AC\uC6A9\uD558\uBA70 (.)\uB85C \uC2DC\uC791\uD55C\uB2E4. -Globals.fileUpload.Extensions.Images = .gif.jpg.jpeg.png -Globals.fileUpload.Extensions = .gif.jpg.jpeg.png.xls.xlsx - -# Access-Control-Allow-Origin -Globals.Allow.Origin = http://localhost:3000 - -#\uC554\uD638\uD654\uC11C\uBE44\uC2A4 \uC54C\uACE0\uB9AC\uC998 \uD0A4 -#\uC8FC\uC758 : \uBC18\uB4DC\uC2DC \uAE30\uBCF8\uAC12 "egovframe"\uC744 \uB2E4\uB978\uAC83\uC73C\uB85C \uBCC0\uACBD\uD558\uC5EC \uC0AC\uC6A9\uD558\uC2DC\uAE30 \uBC14\uB78D\uB2C8\uB2E4. -Globals.crypto.algoritm = egovframe - -#JWT secret key -#\uC8FC\uC758 : \uBC18\uB4DC\uC2DC \uAE30\uBCF8\uAC12 "egovframe"\uC744 \uB2E4\uB978\uAC83\uC73C\uB85C \uBCC0\uACBD\uD558\uC5EC \uC0AC\uC6A9\uD558\uC2DC\uAE30 \uBC14\uB78D\uB2C8\uB2E4 -Globals.jwt.secret = egovframe - -#server.servlet.context-path=/sht_boot_web -server.servlet.context-path=/ -server.port = 8082 -server.servlet.session.timeout=3600 -spring.mvc.pathmatch.matching-strategy=ant_path_matcher - -#swaggerdoc -springdoc.version=v4.2.0 -springdoc.packages-to-scan=egovframework -springdoc.swagger-ui.tags-sorter=alpha -springdoc.swagger-ui.operations-sorter=alpha -springdoc.swagger-ui.doc-expansion=none -springdoc.api-docs.path=/v3/api-docs -springdoc.api-docs.groups.enabled=true -springdoc.cache.disabled=true - -#Sns -Sns.naver.clientId=YOUR_CLIENT_ID -Sns.naver.clientSecret=YOUR_CLIENT_SECRET -Sns.naver.callbackUrl=http://localhost:3000/login/naver/callback -Sns.kakao.clientId=YOUR_CLIENT_ID -Sns.kakao.callbackUrl=http://localhost:3000/login/kakao/callback - -spring.mvc.view.prefix=/WEB-INF/jsp/ -spring.mvc.view.suffix=.jsp - -spring.messages.basename=classpath*:/egovframework/message/com/message-common, classpath*:/egovframework/message/com/**/message*, classpath*:/org/egovframe/rte/fdl/idgnr/messages/idgnr, classpath*:/org/egovframe/rte/fdl/property/messages/properties - -# logging level -#Logging -#file path\uC758 default \uAC12\uC740 \uD504\uB85C\uC81D\uD2B8 root \uACBD\uB85C\uC774\uBBC0\uB85C \uC6D0\uD558\uC2DC\uB294 \uACBD\uB85C\uB85C \uBCC0\uACBD\uD558\uC5EC \uC0AC\uC6A9\uD558\uC2DC\uAE30 \uBC14\uB78D\uB2C8\uB2E4. -# ${LOG_FILE}, ${LOG_PATH} -logging.file.path=d:/data/xit-egov/logs -logging.file.name=${logging.file.path}/${spring.application.name} -logging.logback.rollingpolicy.file-name-pattern=${logging.file.name}.%d{yyyy-MM-dd}.%i.gz -logging.logback.rollingpolicy.max-file-size=10MB -logging.logback.rollingpolicy.max-history=7 -#logging.register-shutdown-hook=true - -logging.root.level=DEBUG - -logging.level.sql=DEBUG -logging.level.jdbc.resultset=OFF -logging.level.jdbc.audit=OFF -logging.level.jdbc.only=OFF - -logging.level.org.springframework=DEBUG -logging.level.org.hibernate.validator.internal=INFO - -logging.level.egovframework=${logging.root.level} -logging.level.org.egovframe=${logging.root.level} - -# HEADER, COOKIE -app.auth.save.type=HEADER - - diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..7cde4d8 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,157 @@ +#----------------------------------------------------------------------- +# +# globals.properties : 시스템 +# +#----------------------------------------------------------------------- +# 1. key = value 구조입니다. +# 2. key값은 공백문자를 포함불가, value값은 공백문자를 가능 +# 3. key값으로 한글을 사용불가, value값은 한글사용이 가능 +# 4. 줄을 바꿀 필요가 있으면 '\'를 라인의 끝에 추가(만약 '\'문자를 사용해야 하는 경우는 '\\'를 사용) +# 5. Windows에서의 디렉토리 표시 : '\\' or '/' ('\' 사용하면 안됨) +# 6. Unix에서의 디렉토리 표시 : '/' +# 7. 주석문 처리는 #사용 +# 8. value값 뒤에 스페이스가 존재하는 경우 서블릿에서 참조할때는 에러발생할 수 있으므로 trim()하거나 마지막 공백없이 properties 값을 설정할것 +#----------------------------------------------------------------------- +server: + servlet: + context-path: / + session: + timeout: 3600 + port: 8082 + +spring: + application: + name: xit-egov-springboot + profiles: + active: @spring.profiles.active@ + config: + use-legacy-processing: true + mvc: + pathmatch: + matching-strategy: ant_path_matcher + view: + prefix: /WEB-INF/jsp/ + suffix: .jsp + messages: + basename: classpath*:/egovframework/message/com/message-common, classpath*:/egovframework/message/com/**/message*, classpath*:/org/egovframe/rte/fdl/idgnr/messages/idgnr, classpath*:/org/egovframe/rte/fdl/property/messages/properties + +Globals: + # G4C 연결용 IP (localhost) + LocalIp: 127.0.0.1 + # DB 서버 타입 (hsql, mysql, oracle, altibase, tibero) - datasource 및 sqlMap 파일 지정에 사용됨 + DbType: mysql + + # DB 접근 정보 + hsql: + DriverClassName: net.sf.log4jdbc.DriverSpy + Url: jdbc:log4jdbc:hsqldb:hsql://127.0.0.1/sampledb + UserName: sa + Password: "" + mysql: + DriverClassName: net.sf.log4jdbc.DriverSpy + Url: jdbc:log4jdbc:mysql://211.119.124.9:4407/egov + UserName: egov + Password: xit1807 + oracle: + DriverClassName: oracle.jdbc.driver.OracleDriver + Url: jdbc:oracle:thin:@127.0.0.1:1521:egovfrm + UserName: "" + Password: "" + + # 권한 인증방식 (dummy, session, security) + Auth: security + + # 로그인 인증 제한 + login: + Lock: true # 인증 제한 사용 여부 (true, false) + LockCount: 5 # 인증 제한 횟수 + + ExpirePwdDay: 180 # 비밀번호 유효 기간 (일) + + # Main Page 설정 + MainPage: /EgovContent.do + #MainPage: /cmm/main/mainPage.do + + # 페이징 설정 + pageUnit: 10 + pageSize: 10 + + # 파일 설정 + posblAtchFileSize: 5242880 + fileStorePath: ./files + addedOptions: false + + # 파일 확장자 허용 목록 (화이트리스트) + fileUpload.Extensions: .gif.jpg.jpeg.png.xls.xlsx + fileUpload.Extensions.Images: .gif.jpg.jpeg.png + + # Access-Control-Allow-Origin + Allow: + Origin: http://localhost:3000 + + # 암호화 서비스 알고리즘 키 (egovframe 기본값을 수정하여 사용할 것) + crypto: + algoritm: egovframe + + # JWT secret key (egovframe 기본값 수정 필요) + jwt: + secret: egovframe + +# swagger 문서 구성 +springdoc: + version: v4.3.0 + packages-to-scan: egovframework + swagger-ui: + tags-sorter: alpha + operations-sorter: alpha + doc-expansion: none + api-docs: + path: /v3/api-docs + groups: + enabled: true + cache: + disabled: true + +# SNS 설정 +Sns: + naver: + clientId: YOUR_CLIENT_ID + clientSecret: YOUR_CLIENT_SECRET + callbackUrl: http://localhost:3000/login/naver/callback + kakao: + clientId: YOUR_CLIENT_ID + callbackUrl: http://localhost:3000/login/kakao/callback + +# 로깅 설정 +# file path의 default 값은 프로젝트 root 경로이므로 원하시는 경로로 변경하여 사용하시기 바랍니다. +# ${LOG_FILE}, ${LOG_PATH} +logging: + file: + path: d:/data/xit-egov/logs + name: ${logging.file.path}/${spring.application.name} + logback: + rollingpolicy: + file-name-pattern: ${logging.file.name}.%d{yyyy-MM-dd}.%i.gz + max-file-size: 10MB + max-history: 7 + root: + level: DEBUG + level: + sql: DEBUG + jdbc: + resultset: OFF + audit: OFF + only: OFF + org: + springframework: DEBUG + hibernate: + validator: + internal: INFO + egovframework: ${logging.root.level} + org.egovframe: ${logging.root.level} + +# HEADER, COOKIE 설정 +app: + auth: + save: + type: HEADER \ No newline at end of file