μŠ€ν”„λ§ μ™ΈλΆ€ μ„€μ • 방법 (OS ν™˜κ²½ λ³€μˆ˜, μžλ°” μ‹œμŠ€ν…œ 속성)

2023. 5. 4. 09:26γ†μΈν”„λŸ°/μŠ€ν”„λ§ λΆ€νŠΈ - 핡심 원리와 ν™œμš©

728x90

 

 

0️⃣ μ™ΈλΆ€ μ„€μ •μ΄λž€ ? 

보톡 μ‹€λ¬΄μ—μ„œ κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ λŒ€λΆ€λΆ„ νšŒμ‚¬μ—μ„œ 운영 μ„œλ²„μ™€ 개발 μ„œλ²„λ₯Ό λ‚˜λˆ μ„œ κ°œλ°œμ„ μ§„ν–‰ν•œλ‹€. 

λ¨Όμ € 개발 μ„œλ²„μ—μ„œ κ°œλ°œν•˜κ³ , ν…ŒμŠ€νŠΈλ₯Ό 진행 ν›„ μ •μƒμ μœΌλ‘œ λ™μž‘ν•œλ‹€λŠ” 것을 ν™•μΈν•œ 후에 μ‹€μ œ κ³ κ°μ—κ²Œ μ„œλΉ„μŠ€ ν•˜λŠ” 운영 ν™˜κ²½μ— 배포λ₯Ό ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰ν•œλ‹€. 

 

개발 ν™˜κ²½ : 개발 μ„œλ²„, 개발 DB

운영 ν™˜κ²½: 운영 μ„œλ²„, 운영 DB

 

μ΄λŸ°μ‹μœΌλ‘œ DB도 λ‹€λ₯Έ 각각 λ‹€λ₯Έ 것을 μ‚¬μš©ν•΄μ„œ μ§„ν–‰ν•΄μ£ΌλŠ”λ° 그러면 각각 ν™˜κ²½μ— λ”°λΌμ„œ DB URL , username λ“±λ“±μ˜ 섀정이 μ‘°κΈˆμ”© λ‹€λ₯΄κ²Œ λœλ‹€. 

ν™˜κ²½μ— 따라 λ‹€λ₯Έ μ„€μ • 값을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ λΉŒλ“œ ν›„ 각 ν™˜κ²½μ— 맞좰 μ‹€ν–‰ μ‹œμ μ— μ™ΈλΆ€ 섀정값을 μ£Όμž…ν•΄μ£Όλ©΄ λœλ‹€. 

 

배포 ν™˜κ²½κ³ΌλŠ” 상관없이 λΉŒλ“œλŠ” ν•œλ²ˆλ§Œ μ§„ν–‰ν•˜κ³ , κ·Έ λ‹€μŒ μ‹€ν–‰ μ‹œμ μ— ν™˜κ²½μ— 따라 섀정값을 μ™ΈλΆ€μ—μ„œ μ£Όμž…λ°›μœΌλ©΄ λœλ‹€. 

 

 

 

1️⃣ μ™ΈλΆ€ μ„€μ • 방법 

μ™ΈλΆ€ μ„€μ •ν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” 4가지 정도가 μžˆλ‹€. 

- OS ν™˜κ²½ λ³€μˆ˜: OS μ—μ„œ μ§€μ›ν•˜λŠ” μ™ΈλΆ€ μ„€μ •, ν•΄λ‹Ή OSλ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€μ—μ„œ μ‚¬μš© 
- μžλ°” μ‹œμŠ€ν…œ 속성 : μžλ°”μ—μ„œ μ§€μ›ν•˜λŠ” μ™ΈλΆ€ μ„€μ •, ν•΄λ‹Ή JVM μ•ˆμ—μ„œ μ‚¬μš© 
- μžλ°” μ»€λ§¨λ“œ 라인 인수 : μ»€λ§¨λ“œ λΌμΈμ—μ„œ μ „λ‹¬ν•˜λŠ” μ™ΈλΆ€ μ„€μ •, μ‹€ν–‰ μ‹œ main(args) λ©”μ„œλ“œμ—μ„œ μ‚¬μš©
- μ™ΈλΆ€ 파일(μ„€μ • 데이터) : ν”„λ‘œκ·Έλž¨μ—μ„œ μ™ΈλΆ€ νŒŒμΌμ„ 직접 μ½μ–΄μ„œ μ‚¬μš© 

 

 

 

2️⃣ μ™ΈλΆ€ μ„€μ • 방법 :  OS ν™˜κ²½ λ³€μˆ˜ 

OS ν™˜κ²½ λ³€μˆ˜ 섀정은 ν•΄λ‹Ή OSλ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  ν”„λ‘œκ·Έλž¨μ—μ„œ 읽을 수 μžˆλŠ” μ„€μ •κ°’μ΄μ–΄μ„œ μ‚¬μš© λ²”μœ„κ°€ 제일 λ„“λ‹€. 

 

* 쑰회 방법 

μœˆλ„μš° : set 

-> ν˜„μž¬ OS에 μ„€μ •λœ ν™˜κ²½ λ³€μˆ˜ 값듀을 좜λ ₯ν•œλ‹€. 

 

* μ„€μ • 방법

(μžλ°” μ„€μΉ˜ν•΄λ΄€λ‹€λ©΄ JAVA_HOME 섀정같은거 해봀을텐데 이와 λ™μΌν•˜κ²Œ ν™˜κ²½λ³€μˆ˜ μ„€μ •ν•΄μ£Όλ©΄ λœλ‹€.) 

 

 

*  μžλ°”μ—μ„œ OS ν™˜κ²½ λ³€μˆ˜ μ„€μ • κ°’ μ½λŠ” 방법 

@Slf4j
public class OsEnv
{
   public static void main(String[] args)
   {
      Map<String, String> envMap = System.getenv();
      for (String key : envMap.keySet())
      {
         log.info("env {} = {}", key, System.getenv(key));
      }
   }
}

System.getenv() ν•˜λ©΄ 전체 OS ν™˜κ²½ λ³€μˆ˜λ₯Ό Map으둜 μ‘°νšŒν•  수 μžˆλ‹€. 

System.getenv(key) λ₯Ό μ‚¬μš©ν•˜λ©΄ νŠΉμ • OS ν™˜κ²½ λ³€μˆ˜μ˜ 값을 μ‘°νšŒν•  수 μžˆλ‹€. 

 

λ§Œμ•½ OS ν™˜κ²½λ³€μˆ˜μ— 값을 μ„€μ •ν•΄μ„œ μ΄μš©ν•˜κ³  μ‹Άλ‹€λ©΄ ν™˜κ²½λ³€μˆ˜ μ„€μ •ν•œ λ‹€μŒ System.getenv("μ„€μ •κ°’") λ„£μ–΄μ£Όλ©΄ μ„€μ • 값을 μ½μ–΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. 

 

 

❗ 근데 os ν™˜κ²½ λ³€μˆ˜λŠ” μžλ°” ν”„λ‘œκ·Έλž¨λΏλ§Œ μ•„λ‹ˆλΌ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ—μ„œλ„ μ‚¬μš©ν•  수 있게 되기 λ•Œλ¬Έμ— 이 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ΄μš©ν•˜λŠ” μžλ°” ν”„λ‘œκ·Έλž¨μ—μ„œλ§Œ 이 μ„€μ • 값을 μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ μ„€μ •ν•΄μ•Ό ν•œλ‹€. 

 

 

 

3️⃣ μ™ΈλΆ€ μ„€μ • 방법 : μžλ°” μ‹œμŠ€ν…œ 속성 

μžλ°” μ‹œμŠ€ν…œ 속성(Java System Properties) 은 μ‹€ν–‰ν•œ JVM λ‚΄μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ μ™ΈλΆ€ 섀정이닀. 

μžλ°” μ‹œμŠ€ν…œ 속성은 μžλ°” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  λ•Œ μ‚¬μš©ν•˜λŠ”λ° 

java -Durl=aaa -jar XXX.jar 

μ΄λŸ°μ‹μœΌλ‘œ -D μ˜΅μ…˜μ„ ν†΅ν•΄μ„œ key = value ν˜•μ‹μœΌλ‘œ μ£Όλ©΄ λœλ‹€. 

 

* μžλ°” μ‹œμŠ€ν…œ 속성 μ½μ–΄μ˜€λŠ” 방법 

@Slf4j
public class JavaSystemProperties
{
   public static void main(String[] args)
   {
      Properties properties = System.getProperties();
      
      for (Object key : properties.keySet())
      {
         log.info("prop {} = {}", key, System.getProperty(key.toString()));
      }
      
      String url = System.getProperty("url");
      String username = System.getProperty("username");
      String password = System.getProperty("password");
      
      log.info("url = {} ", url);
      log.info("username = {} ", username);
      log.info("password = {} ", password);
   }
}

System.getProperties() λ₯Ό μ‚¬μš©ν•˜λ©΄ Map ν˜•μ‹μœΌλ‘œ key=vaule ν˜•μ‹μ˜ properties λ₯Ό λ°›κ³  μžλ°” μ‹œμŠ€ν…œ 속성을 μ‘°νšŒν•  수 μžˆλ‹€. 

System.getProperty(key) λ₯Ό μ‚¬μš©ν•˜λ©΄ 속성값을 μ‘°νšŒν•  수 μžˆλ‹€. 

 

그리고 url, username, password μžλ°” μ‹œμŠ€ν…œ 속성을 μ½μ–΄μ˜€λŠ” μ½”λ“œλ„ ν•¨κ»˜ μžˆλ‹€. 

url, username, password 속성을 μ½μ–΄μ˜€κΈ° μœ„ν•΄μ„œλŠ” μžλ°” μ‹œμŠ€ν…œμ„ μ‹€ν–‰ν•  λ•Œ 속성을 μ§€μ •ν•΄μ€˜μ•Ό ν•œλ‹€. 

μ΄λ ‡κ²Œ 지정해주고 apply ν›„ 싀행해보면 

-D μ˜΅μ…˜μ„ 톡해 μΆ”κ°€ν•œ μžλ°” μ‹œμŠ€ν…œ 속성을 확인할 수 μžˆλ‹€. 

 

 

μœ„μ— 방식은 μΈν…”λ¦¬μ œμ΄μ—μ„œ 직접 속성을 μΆ”κ°€ν•œ 것이고, jar 둜 μ‹€ν–‰ν•  λ•ŒλŠ” 

java -Durl=devdb -Dusername=hj -Dpassword=1231 -jar XXX.jar 

μ΄λŸ°μ‹μœΌλ‘œ μžλ°” μ‹œμŠ€ν…œ 속성을 μΆ”κ°€ν•  수 μžˆλ‹€. 

 

μ‹€ν–‰ν•  λ•Œ 속성을 μΆ”κ°€ν•  수 도 있고, System.setProperty(propertyKey, propertyValue) 둜 μ§€μ •ν•΄μ„œ μ‘°νšŒν•  수 도 μžˆλ‹€. (근데 이건 μ½”λ“œ μ•ˆμ— 직접 μ„€μ •ν•˜λŠ”κ±°λΌ ν™˜κ²½ λΆ„λ¦¬ν•΄μ„œ 각각 λ‹€λ₯Έ 섀정을 μ–»μ–΄μ˜¬ μˆ˜λŠ” μ—†λ‹€.) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90