스프링부트를 공부하다보면 application.yml 혹은 application.properties 파일을 보게된다. 둘다 서버정보나 profile 등을 설정할 수 있는 외부설정파일이지만, 어떤 경우에 yml을 쓰고 properties를 쓰는지 궁금해서 공부해보고자 한다.
실제 프로젝트를 진행하다보면 dev, stg, prod 등 운영환경에 따라 서버 설정이나, 데이터베이스 설정 등을 다르게 설정한다. 이렇게 스프링부트 외적인 시스템과 연동할때 필요한 profile들을 정의하거나 프로그램이 실행되는데 필요한 속성들을 정의할때 application.yml application.properties를 사용하게된다. 스프링 initializr를 통해 프로젝트를 생성하면 application.properties가 생성되지만, 종종 yml파일로 변경해서 사용하는 경우가 있다.
properties파일은 key=value 형식으로 서술된다. 문자열만 사용가능하며, 그외 자료형은 사용할수 없다.properties 파일은 java에서만 활용된다.
하나의 properties파일은 하나의 profile만 가지며, 여러개의 properties 파일을 생성하여 쓸수있다.
# DB Setting
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.username=username
spring.datasource.password=password
yml 파일은 properties 파일과 다르게 계층적 구조를 사용할 수 있다.
예를들어, db세팅을 할때 datasource라는 공통 구조는 상위에 한번만 작성하고, 하위에 driver, url, password 등의 구조를 선언하여 쓸 수 있다.
key,value,map,list 등을 사용할 수 있으며, java 외에도 파이썬이나 루비에서 활용될 수 있다.
하나의 properties 파일에 하나의 profile만 설정할 수 있었던것과 다르게, yml 파일에는 여러개의 profile을 정리해둘 수있다.
# DB Setting
spring:
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:orcl
username: username
password: password
위와같이 계층적인 선언은 properties에서 같은 구조내부의 설정들을 여러번 작성해야했던 불편함을 해소할 수 있다.
yml 파일과 properties 파일을 함께 사용하면 properties 파일이 우선순위가 높아 yml 파일의 설정이 이를 덮어 쓰게 된다. 따라서 한 프로젝트내에선 둘중 하나의 파일만 쓰기를 권장한다고 한다.