[Spring] .properties vs .yml

김현수·2024년 7월 17일
0


Initializr을 활용하여 Spring을 시작하면 프로젝트 설정을 담당하는 application 파일이 application.properties로 생성된다. 하지만 이후 여러 강의를 듣거나 찾아보면 properties를 사용하지 않고 yml파일을 사용한다. 그렇다면 properties와 yml의 차이는 무엇이고 왜 요즘은 yml파일을 많이 사용하는지 알아보자.

application 설정 파일은 무엇일까?

먼저 application 설정 파일은 스프링 부트 애플리케이션의 속성을 설정하는 데 필요한 파일이다. 해당 파일을 사용하여 데이터베이스 연결 정보, 로깅 설정, 서버 포트, 보안 구성 등을 지정할 수 있다. 장고에서는 .env를 따로 만들어서 공개되면 안되는 정보들을 환경변수로 설정했는데 이와 달리 스프링에서는 기본 설정 파일이 자동으로 만들어져서 개인적으로 편했다.

이 같은 사항들을 따로 분리하는 가장 큰 이유는 아무래도 배포 시 다양한 환경에 따라 속성 값들이 달라질 수 있기에 편하게 설정을 변경하기 위해서이다.

application 설정 파일을 작성하는 방법은 대표적으로 두가지가 있다.

.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

// File Upload Setting
spring.servlet.multipart.max-file-size=20MB

// MyBatis Setting
mybatis.mapper-locations=classpath:/mapper/Mapper.xml
mybatis.type-aliases-package=com.colabear754.blog_example_kt.domain
mybatis.configuration.jdbc-type-for-null=null

// Server Port
server.port=5555
  • properties는 파일 설정 정보를 key-value 형태로 서술한다.
  • 닷(.)과 이퀄(=)을 사용하여 자료를 작성한다.
  • 자료형은 문자열만 사용 가능하다
  • 위 코드를 보면 알 수 있지만 중복되는 내용이 있어도 하나의 properties 파일은 하나의 profile만 가질 수 있으며 여러개의 properties 파일을 생성하여 사용할 수 있다.

.yml

// Server Port
spring:
  datasource:
    driver-class-name: oracle.jdbc.driver.OracleDriver
    username: username
    url: jdbc:oracle:thin:@localhost:1521:orcl
    password: password
  servlet:
    multipart:
      max-file-size: 20MB
mybatis:
  mapper-locations: classpath:/mapper/Mapper.xml
  configuration:
    jdbc-type-for-null: 'null'
  type-aliases-package: com.colabear754.blog_example_kt.domain
server:
  port: '5555'
  • yml은 properties 파일과 달리 계층적 구조를 사용하여 key-value 형태로 서술한다.
  • 들여쓰기와 콜론(:)을 사용하여 자료를 작성한다.
  • key, value, map, list 등의 자료형을 사용할 수 있으며 java 외에 파이썬이나 루비에서도 활용 가능하다.
  • 중복되는 내용이 있으면 하나의 yml파일에서 여러개의 profule을 사용하여 properties에서 여러번 작성했던 코드들을 간결하게 작성이 가능한 것을 볼 수 있다. (---)을 사용하여 다중 profile을 구별할 수 있다.

정리

코드만 봐도 yml 파일이 properties 파일보다 간결한 것을 볼 수 있다. 또한 다양한 자료형을 제공하고 더 직관적이고 중복되는 코드를 줄여주는 yml파일을properties 보다 많이 사용하는 것 같다.

그러면 두 파일 모두 사용하면 어떻게 될까? 그 경우에는 properties 파일이 우선순위가 더 높아서 yml파일에서 설정한 파일이 덮어씌어진다고 한다.

프로젝트를 하거나 강의를 수강하다 보면은 properties 파일을 사용하는 경우도 있다. 이런 상황에서 나같은 경우는 아래에 있는 사이트에서 properties 파일을 yml 파일로 전환해서 사용한다.
https://mageddo.com/tools/yaml-converter

참고자료

https://colabear754.tistory.com/90
https://velog.io/@lily_younk/application.yml-.properties-차이

2개의 댓글

comment-user-thumbnail
2024년 7월 17일

둘 중 어느 것을 사용해도 동일하게 동작하는 건가요??

1개의 답글