본문 바로가기
개발&프로그래밍

[Spring Boot] application.properties vs application.yml

by 재아군 2024. 12. 3.

 

application.properties vs application.yml

Spring Boot에서 설정 파일로 사용되는 application.properties와 application.yml의 차이점과 활용법을 알아보자.

 

기본 문법 비교

application.properties

# 서버 설정
server.port=8080
server.servlet.context-path=/api

# 데이터베이스 설정
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=user
spring.datasource.password=password

# JPA 설정
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

application.yml

server:
  port: 8080
  servlet:
    context-path: /api

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: user
    password: password
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

 

 

계층 구조 표현

List/Array 표현 방식

properties 파일:

my.array[0]=value1
my.array[1]=value2
my.array[2]=value3

app.servers[0].ip=127.0.0.1
app.servers[0].port=8080
app.servers[1].ip=192.168.1.100
app.servers[1].port=8081

yml 파일:

my:
  array:
    - value1
    - value2
    - value3

app:
  servers:
    - ip: 127.0.0.1
      port: 8080
    - ip: 192.168.1.100
      port: 8081

 

 

 

프로파일 설정

properties 파일 방식

# application-dev.properties
spring.datasource.url=jdbc:mysql://dev-db:3306/mydb

# application-prod.properties
spring.datasource.url=jdbc:mysql://prod-db:3306/mydb

yml 파일 방식

# application.yml
spring:
  profiles:
    active: dev

---
spring:
  config:
    activate:
      on-profile: dev
  datasource:
    url: jdbc:mysql://dev-db:3306/mydb

---
spring:
  config:
    activate:
      on-profile: prod
  datasource:
    url: jdbc:mysql://prod-db:3306/mydb

 

 

복잡한 설정 예시

Custom 설정

properties 파일:

app.name=MyApplication
app.description=Sample Application
app.security.auth-token=123456
app.security.token-timeout=3600

app.feature.feature1.enabled=true
app.feature.feature1.value=value1
app.feature.feature2.enabled=false
app.feature.feature2.value=value2

yml 파일:

app:
  name: MyApplication
  description: Sample Application
  security:
    auth-token: 123456
    token-timeout: 3600
  feature:
    feature1:
      enabled: true
      value: value1
    feature2:
      enabled: false
      value: value2

 

 

각 방식의 장단점

application.properties

장점:

  • 단순하고 익숙한 구조
  • IDE에서 자동 완성 지원이 잘됨
  • 키-값 쌍이 명확함

단점:

  • 계층 구조 표현이 복잡
  • 반복되는 prefix가 많음
  • 가독성이 yml에 비해 떨어짐

application.yml

장점:

  • 계층 구조가 시각적으로 명확
  • 중복되는 prefix 제거
  • 들여쓰기로 구조 파악이 쉬움
  • 프로파일 구분이 한 파일에서 가능

단점:

  • 들여쓰기 실수 시 오류 발생
  • properties에 비해 약간의 학습 필요
  • 일부 IDE에서 자동 완성이 properties만큼 잘 지원되지 않을 수 있음

 

 

실무 추천 사항

  1. yml 사용 권장
    • 계층 구조가 명확해 유지보수가 쉬움
    • 코드 중복이 적음
    • 프로파일 관리가 용이
  2. 프로파일별 설정
spring:
  config:
    activate:
      on-profile: local
  datasource:
    url: jdbc:h2:mem:testdb
    
---
spring:
  config:
    activate:
      on-profile: dev
  datasource:
    url: jdbc:mysql://dev-db:3306/mydb

 

 

3. 민감정보처리

 

spring:
  datasource:
    password: ${DB_PASSWORD}  # 환경 변수 사용

댓글