스프링부트를 공부하면서 프로젝트를 할 때마다 가장 먼저 하는 일 중 하나는 application.properties
파일에 설정 정보를 수정하는 일이었습니다.
여러 자료들을 참고하면서 공부하다보니 어느 자료에서는 application.properties
파일을 설정 정보에 사용하고 어느 자료에서는 application.yml
을 사용하는 경우가 있었습니다.
그래서 두 파일의 차이는 무엇이지?하고 조사해보게 되었습니다.
들어가기 앞에서 .properties
, .yml
코드를 가져왔습니다. 서버 포트 설정과 jdbc 설정만을 설정한 간단한 설정 파일이며 두 파일의 내용을 실행했을 때 동일합니다.
.properties
server.port=8080 spring.datasource.url=jdbc:[Database]://localhost:3306/[Database스키마] spring.datasource.username=[DB 아이디] spring.datasource.password=[DB 비밀번호] spring.datasource.driver-class-name=[JDBC 드라이버]
.yml (=.yaml)
server: port: 8080 spring: datasource: url: jdbc:[Database]://localhost:3306/[Database스키마] username: [DB 아이디] password: [DB 비밀번호] driver-class-name: [JDBC 드라이버]
.properties
는 키-값
쌍과 =
를 사용해서 설정을 구성합니다. 그리고 각 설정간 .
을 이용해서 계층 구조를 표시해서 나타내고 있습니다.
그리고 .yml
은 설정 이름과 :
을 사용해서 설정을 구성합니다. 이때 :
뒤의 설정 값에는 반드시 한 칸의 공백이 있어야합니다. 또한 계층구조는 들여쓰기(space 2번)
을 통해서 표현하고 있습니다.
위에서 본 파일 포맷 형태의 차이로 인해 .yml
이 가독성 면에서 더 좋습니다.
또한 .properties
는 모든 설정에 대해 모든 계층 구조를 적어주어야 했었지만, .yml
은 계층 구조를 일일이 작성할 필요가 없어서 작성하기도 더 편합니다.
.properties
는 String 형태의 데이터만 지원을 해서 리스트 등의 데이터를 표현해야할 때는 일일이 여스트 등의 데이터를 표현해야할 때는 데이터를 하나씩 열거해야 한다는 문제점이 있습니다.
.yml
은 배열, 리스트, 숫자 등의 타입도 지원하기 때문에 다양한 데이터 타입을 설정 정보에 사용할 수 있습니다.
자료를 조사해보면서 느낀건데 의외로 내용이 방대하길래 최대한 큰 특징 세 개만 뽑아서 글을 쓰다보니 .yml
이 훨씬 좋아보이게 작성된 것 같습니다.
그래서 결론만 말하자면 '스프링 부트는 두 가지 형식을 완벽하게 지원하므로 프로젝트 상황마다 다르다!'라고 할 수 있습니다.
.yml
의 경우에는 계층 구조가 복잡해지거나, anchor, alias, override같은 기능이 필요할 때 사용하면 좋습니다.
.properties
의 경우에는 placeholder(${}
)를 이용한 동적 값 주입이나 @PropertySource
를 통한 조건부 설정 적용이 필요한 경우에 사용하면 좋습니다. 또는 레거시 시스템과 호환이 필요하다고 생각되면 사용합니다.