SPRING/Spring Boot

[SpringBoot] 설정파일(application.properties)

IT록흐 2023. 5. 5. 13:07
반응형

 
 

 
 
지난 포스팅에서 Application이 외부설정을 가져오는 3가지 방법을 알아보았다. Application은 OS의 환경변수, JVM의 VM옵션 그리고 CommandLine에서 외부의 설정을 넘겨받을 수 있다. 외부 설정의 개수가 적으면 3가지 방식이 유용하지만 설정의 개수가 많으면 외부에 파일을 하나 두고 관리하는 것이 좋다.
 
 

1) 외부설정파일
 

Application 내부가 아닌 외부에 파일을 생성해보자. (MacOS 기준 설명입니다.)
 

application.properties

url=dev.db.com
name=dev_user

 
key=value 형식을 지켜서 작성한다.

SpringBoot 프로젝트는 실행가능한 jar로 압축되는데, 해당 jar와 동일한 위치에 외부설정파일을 위치시킨다. jar를 실행하면 Spring은 자동으로 외부에 있는 설정파일을 읽는다.
 

@Slf4j
@Component
public class EnviromentCheck {
    private final Environment env;

    public EnviromentCheck(Environment env) {
        this.env = env;
    }

    @PostConstruct //의존성 주입이 이루어진 후, 수행되는 메소드 지정하는 어노테이션
    public void init(){
        String url = env.getProperty("url");
        String name = env.getProperty("name");
        log.info("url = {}",url); 
        log.info("name = {}",name); 

    }
}

 

 

Enviroment 는 Spring이 자동으로 생성하는 Bean객체이다. Enviroment는 여러 환경의 설정에 접근하여 설정정보를 가져온다. Enviroment 객체는 다양한 환경의 설정을 동일한 방법으로 가져올 수 있도록 추상화되어 있다. 그럼에도 OS의 환경변수, JVM의 VM옵션, CommandLine보다 파일(application.properties)로 구성된 설정이 우선순위가 높다. 

 

 

EnviromentCheck 객체가 Bean으로 등록될 때의 로그를 확인해보자.
 

 
명령어 : java -jar [ 실행할 jar ]
 
위 사진과 같이, url과 name의 값을 application.properties에서 가져왔음을 확인할 수 있다.

 
 
2) 내부설정파일 
 
외부설정파일은 프로퍼티파일이 jar 밖에 있었다. 프로퍼티파일을 jar 안에 생성할 수 있다.
 

 
resources 폴더 아래에 프로퍼티파일을 생성하면 된다.
application.yml도 가능하다. 
 
application.properties

url=dev.db.com
name=dev_user

 
빌드를 다시 하고 재실행 해보았다.

 
외부설정파일을 제거하고 실행하였음에도 내부설정파일에서 설정을 읽어와 설정정보를 잘 출력함을 확인할 수 있다. 그럼 내부와 외부파일에 중복된 설정이 있다면, Spring은 어떤 파일의 설정을 우선으로 읽을까?
 

 
실행결과를 확인하면 name의 값으로 outer_properties가 출력됨을 확인할 수 있다.  내부보다는 외부설정파일이 우선순위가 더 높다.
 
 


 
 
설정파일은 설정이 여러 개일 때 사용하면 편리하다. 설정파일은 jar파일 외부에도 내부에도 생성할 수 있는데 jar와 설정파일을 어떻게 관리하는지에 따라 환경에 맞게 사용하면 된다.  다음 포스팅에서는 여러 설정 파일 중 하나를 선택하는 방법인 '프로필(profile)'에 대해서 알아보겠다. 
 
 
 


 
 

참고자료

 

스프링 부트 - 핵심 원리와 활용 - 인프런 | 강의

실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드립니다., - 강의 소개 | 인프런

www.inflearn.com

 

반응형