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 파일로 사용하는 것이 추천된다.