본문 바로가기
  • 개발하는 곰돌이
Development/Spring & Spring Boot

[Spring Boot] application.properties와 application.yml의 차이점

by 개발하는 곰돌이 2023. 1. 4.

목차


    개요

    Spring Boot 프로젝트에서는 일반적으로 프로젝트의 각종 설정을 application.properties 또는 application.yml 파일을 통해 하게된다. 기본적으로 Spring Initializr를 통해 Spring Boot 프로젝트를 생성하면 application.properties가 생성되지만, Spring Boot 설정을 위해 구글링을 하다 보면 application.yml에 대한 내용이 상당히 많이 나온다. 따라서, application.properties와 application.yml의 차이를 정리하려고 한다.


    properties와 yml의 차이점

    properties와 yml의 대표적인 차이는 내부 구조가 있다. properties의 경우엔 각 줄마다 key=value의 형태로 이루어져 있지만, yml의 경우엔 들여쓰기로 구분되는 계층 구조 및 key: value의 형태로 이루어져 있다. 다음은 두 파일의 대략적인 예시이다.

    properties 예시
    yml 예시

    두 파일을 보면 비슷해보이는 부분이 보인다.

    # 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

    properties에서 DB Setting의 spring.datasource가 공통되고 있는데, 이 부분이 yml에서는

    # DB Setting
    spring:
      datasource:
        driver-class-name: oracle.jdbc.driver.OracleDriver
        url: jdbc:oracle:thin:@localhost:1521:orcl
        username: username
        password: password

    spring 내부에 datasource라는 구조가 있고 그 내부에 driver-class-nameurlusernamepassword를 각각 설정하고 있다. 즉, yml에서는 공통되는 구조는 상위에 한 번만 작성하고 하위에 다시 공통되는 구조가 작성되는 식으로 내려가다가 마지막에 최종적으로 값을 설정하게 된다. 이는 properties에서는 같은 구조 내부의 설정이라도 구조 전체를 작성해야 했던 점이 개선되었다고 볼 수 있다.


    그 외에도 리스트 구조에서도 차이가 있다.

    application.servers[0].ip=127.0.0.1
    application.servers[0].path=/path1
    application.servers[1].ip=127.0.0.2
    application.servers[1].path=/path2
    application:
      servers:
        - ip: '127.0.0.1'
          path: '/path1'
        - ip: '127.0.0.2'
          path: '/path2'

    properties에서는 배열과 비슷하게 하나씩 설정해줘야 하지만, yml에서는 마찬가지로 계층 구조로 나타낸다.


    결론

    결론적으로는 어떤 것을 사용해도 아무 문제가 없고, 기본적인 구조는 비슷하기 때문에 편한 것을 사용하면 되겠다. 개인적으로는 yml을 사용하는 것이 더 구조를 파악하기 쉽고, 중복되는 코드가 줄어들기 때문에 yml을 사용하는 것이 더 좋다고 생각한다.

     

    주의할 점은 properties와 yml을 함께 사용하면 properties 파일이 우선순위가 높아 yml 파일에서 설정한 내용이 덮어씌워질 수 있다는 점이다. 따라서 되도록이면 둘 중 한쪽만 사용하는 것이 권장된다.


    참조 링크

    https://www.baeldung.com/spring-boot-yaml-vs-properties

    댓글