Spring - 외부 설정

·2024년 4월 23일
0

Spring/JPA

목록 보기
6/15

외부 설정

코드 내의 변수를 외부에서 가져오려면 외부 설정을 사용해야한다.
외부 설정으로부터 값을 가져오는 방법에는 여러가지가 있다.

  1. OS 환경변수
  2. 자바 시스템 속성
  3. 커맨드 라인 인수

그리고 이 세가지를 통합하여 사용하는 방법에 대해서 알아보겠다.

OS 환경변수

OS Environment variables

OS에서 지원하는 외부 설정으로, 해당 OS를 사용하는 모든 프로세스에 적용된다.

윈도우는 cmd에서 set 명령어로 설정된 환경변수를 확인할 수 있다.

환경변수 편집

시스템 환경 변수 편집 - 환경 변수에서 확인 및 편집이 가능하다.

자바에서 사용

자바에서 환경변수를 사용하려면, System.getenv()로 사용할 수 있다.

 Map<String, String> envMap = System.getenv();
 String username = envMap.get("username");

key-value 형식으로 저장되어, 지정한 환경변수명으로 값을 꺼낼 수 있다.

자바 시스템 속성

Java System properties

실행한 JVM 안에서 접근 가능한 외부 설정이다. 추가로 자바가 내부에서 미리 설정해두고고 사용하는 속성들도 있다.

자바 시스템 속성 편집

인텔리제이에서 Run/Debug Configuration으로부터 자바 시스템 속성을 설정할 수 있다.

Configuration을 열고, 해당 Application의 VM Options를 추가한다.


(칸이 없는 경우, Modify options-Add VM Options로 시스템 속성을 정의하는 칸을 만든다.)

VM Options를 추가할 때는 -D를 prefix로 붙여서 추가한다.
-Dusername=suhsein과 같이 추가하며, 여러 개를 추가할 때는 공백을 주고 추가하면 된다.

자바에서 사용

자바에서 자바 시스템 속성을 사용하려면, System.getProperties()로 사용할 수 있다.

 Properties properties = System.getProperties();
 String username = System.getProperty("username");

key-value 형식으로 저장되어, 지정한 자바 시스템 속성명으로 값을 꺼낼 수 있다.

커맨드 라인 인수

커맨드 라인 인수는 애플리케이션 실행 시에 받아오는 인수를 의미한다.

public class CommandLineV1 {
    public static void main(String[] args) {
        for (String arg : args) {
            log.info("arg {}", arg);
        }
    }
}

위 코드에서 main 메서드의 args에 해당한다.

커맨드 라인 인수 편집

인텔리제이에서 Run/Debug Configuration으로부터 커맨드 라인 인수를 설정할 수 있다.


Configuration을 열고, 해당 Application의 Program arguments를 추가한다.

(칸이 없는 경우, Modify options-Program Arguments로 커맨드 라인 인수를 정의하는 칸을 만든다.)

커맨드 라인 인수 사용

args로부터 값을 꺼내기만 하면 된다.

하지만, key=value 형식으로 저장되지 않고 String으로 통으로 저장되므로 따로 처리가 필요하다. 커맨드 라인 옵션 인수를 사용하면, 이 처리를 편리하게 할 수 있다.

커맨드 라인 옵션 인수 편집

커맨드 라인 인수 지정 시에 앞에 --를 붙여서 지정한다.

커맨드 라인 옵션 인수 사용

ApplicationArguments appArgs = new DefaultApplicationArguments(args);
Set<String> optionNames = appArgs.getOptionNames();
List<String> username = appArgs.getOptionValues("username");

getOptionName()로 optionNames(key에 해당)들을 한 번에 받을 수있다.
그리고 getOptionValues()로 값들을 받을 수도 있다.(하나의 key에 여러 개의 value 가 있을 수 있으므로, List 반환)

하지만, --로 지정하지 않은 경우에는 옵션 인수가 아니기 때문에 위 메소드들로 받을 수 없다.

스프링 부트 애플리케이션에서는 ApplicationArguments를 DI하여 받아온다. 그래서 따로 설정할 필요없이 사용할 수 있다.

profile
티스토리로 블로그 이전합니다. 최신 글들은 suhsein.tistory.com 에서 확인 가능합니다.

0개의 댓글