본문 바로가기

기록/Web

[IntelliJ] application.properties 과 application.yml의 차이

SMALL

개요

Spring Boot는 다른 환경에서 동일한 애플리케이션 코드로 작업할 수 있도록 구성을 외부화할 수 있다. Java 속성 파일, YAML 파일, 환경 변수 및 명령줄 인수를 포함한 다양한 외부 구성 소스를 사용할 수 있다. 

또, 프로젝트에 외부에서 특정 값들을 받아야 하는 경우가 있다. AWS나 외부 API를 사용하기 위한 secret key, API key가 이에 해당한다. 이러한 값들을 하드코딩하는 경우에는 보안에 취약하다.

따라서 이런 중요한 값들을 application.properties 또는 application.yml 의 외부 설정값을 관리하는 파일에 기록하여 사용한다. 즉, 두 파일 모두 외부 설정값 등을 관리하는 파일이다. 

 

STS로 프로젝트를 진행했을 때는 applicatoin.properties 파일이, IntelliJ에서는 application.yml 파일이 자동으로 생성되어 둘의 차이점을 알아보았다.


application.properties

Spring boot 애플리케이션 프로젝트에서 resource 디렉토리 하위에 자동으로 생성되는 파일이다.

.properties 파일의 포맷은 name=value 형식이다.

 

application.yml

properties 파일과 달리 계층 구조 형식으로 값을 지정할 수 있고, prefix의 중복 제거가 가능하다.

.yml 파일을 사용하기 위해서는 SnakeYAML 라이브러리가 포함되어야 하고, 일반적으로 spring-boot-starter의 의존성은 기본적으로 제공해준다.

 

 

 


스프링 홈페이지에서는 property source 사용법과 우선순위에 대해 자세히 나와있다.

더보기
  1. Default properties (specified by setting SpringApplication.setDefaultProperties).
  2. @Configuration classes. Please note that such property sources are not added to the Environment until the application context is being refreshed. This is too late to configure certain properties such as logging.* and spring.main.* which are read before refresh begins.
  3. Config data (such as application.properties files)
  4. A RandomValuePropertySource that has properties only in random.*.
  5. OS environment variables.
  6. Java System properties (System.getProperties()).
  7. JNDI attributes from java:comp/env.
  8. ServletContext init parameters.
  9. ServletConfig init parameters.
  10. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property).
  11. Command line arguments.
  12. properties
  13. @TestPropertySource annotations on your tests.
  14. $HOME/.config/spring-boot directory when devtools is active.

 

또한 응용 프로그램 전체를 위해 형식을 통일하는게 좋다. application.properties와 application.yml이 같이 있을 경우에는 .properties 파일이 우선권을 갖는다. 

SMALL