Spring

[Spring Boot] application.properties VS application.yml

cloud-grace 2024. 7. 6. 20:10

 
Spring Boot는 프로젝트 설정을 application.properties 또는 application.yml 파일로 하게 된다. Spring Initializer로 프로젝트를 만들면 자동으로 application.properties가 생성되지만, application.yml로 설정을 많이 한다.
 

application.properties와 application.yml 파일의 차이점

application.properties

  • key = value 형태로 모든 줄이 구성되어 있다.
  • 단순하고 직관적이며, 키와 값을 한 줄에 정의한다.
  • 중첩 구조를 표현하기 어렵다.
# spring configuration
spring.application.name=example

# devtools - live reload
spring.devtools.livereload.enabled=true

# aop
spring.aop.auto=true
spring.aop.proxy-target-class=true

# mvc
spring.mvc.static-path-pattern=/assets/**
spring.mvc.throw-exception-if-no-handler-found=true

# thymeleaf
spring.thymeleaf.check-template-location=true
spring.thymeleaf.mode=HTML
spring.thymeleaf.prefix=classpath:templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.cache=false

# web
spring.web.resources.static-locations=file:/Users/user1234/example-uploads/,classpath:assets/

# message resources (i18n)
spring.messages.basename=messages/message
spring.messages.encoding=utf-8
spring.messages.always-use-message-format=true

# multipart
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=10MB

# datasource
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://192.168.00.0:3306/example?charset=utf8
spring.datasource.username=user1234
spring.datasource.password=1234
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=20

# jpa
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

# server configuration
server.port=8080
server.servlet.context-path=/example
server.servlet.encoding.charset=utf-8
server.servlet.encoding.enabled=true
server.error.whitelabel.enabled=false
server.error.path=/error

# logging
logging.level.root=INFO
logging.level.com.example.myapp=DEBUG
logging.file.name=logs/myapp.log
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss} - %msg%n

 

application.yml

  • 들여쓰기로 구분하여 계층 구조로 되어 있으며, key: value 형태로 구성되어 있다.
  • YAML 형식을 사용하여 설정을 정의한다.
  • 중첩 구조를 간단히 표현하여 가독성이 좋다.
# spring configuration
spring:
  application:
    name: example

  # devtools - live reload
  devtools:
    livereload:
      enabled: true

  # aop
  aop:
    auto: true
    proxy-target-class: true

  # mvc
  mvc:
    static-path-pattern: /assets/**
    throw-exception-if-no-handler-found: true

  # thymeleaf
  thymeleaf:
    check-template-location: true
    mode: HTML
    prefix: classpath:templates/
    suffix: .html
    encoding: UTF-8
    cache: false

  # web
  web:
    resources:
      static-locations: file:/Users/user1234/example-uploads/, classpath:assets/

  # message resources (i18n)
  messages:
    basename: messages/message
    encoding: utf-8
    always-use-message-format: true

  # multipart
  servlet:
    multipart:
      enabled: true
      max-file-size: 50MB
      max-request-size: 10MB

  # datasource
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://192.168.00.0:3306/example?charset=utf8
    username: user1234
    password: 1234
    hikari:
      minimum-idle: 10
      maximum-pool-size: 20

  # jpa
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    properties:
      hibernate.dialect: org.hibernate.dialect.MariaDBDialect

# server configuration
server:
  port: 8080
  servlet:
    context-path: /example
    encoding:
      charset: utf-8
      enabled: true
  error:
    whitelabel:
      enabled: false
    path: /error

# logging
logging:
  level:
    root: INFO
    com.example.myapp: DEBUG
  file:
    name: logs/myapp.log
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"
    file: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

 

정리

  • 어떤 것을 사용하더라도 문제는 없다. 자신이 편한 것을 사용하면 된다.
  • 만약, 같은 설정을 두 파일에 동시에 사용한다면 Spring Boot는 두 파일 모두 사용이 가능하다.
  • 동일한 설정이 포함된 경우, application.properties가 우선적으로 적용된다.
  • 하지만, 동시에 사용하는 것은 권장되지 않으며, 구조 파악에 용이한 yml 파일로 사용하는 것이 추천된다.