Spring Boot에서 properties 대신 YAML을 써야 하는 결정적 이유 (비교 분석)

Spring Boot에서 properties 대신 YAML을 써야 하는 결정적 이유 (비교 분석) 이미지 1

안녕하세요. IT 기술 블로거입니다.

Spring Boot 프로젝트를 생성할 때마다 고민되는 순간이 있습니다.
“설정 파일 확장자를 .properties로 할까, 아니면 .yml로 바꿀까?”

과거 레거시 시스템에 익숙한 분들은 properties가 편할 수 있고, 최신 트렌드를 따르는 분들은 yml을 선호합니다. 단순히 “취향 차이”라고 말하기에는 두 형식 사이에 구조적, 기능적 차이가 꽤 큽니다.

오늘은 이 두 설정 파일 형식의 차이점을 낱낱이 파헤쳐 보고, 여러분의 프로젝트에 어떤 형식이 더 적합한지 명확한 가이드를 제시해 드리겠습니다.


1. 역사와 배경

application.properties

자바 초창기부터 존재해 온 유서 깊은 형식입니다. java.util.Properties 클래스가 기본적으로 지원하며, 단순한 Key=Value 쌍으로 이루어져 있어 직관적입니다. 별도의 파서 없이도 자바 표준 라이브러리만으로 읽을 수 있다는 장점이 있습니다.

application.yml (YAML)

“YAML Ain’t Markup Language”의 약자로, 구성 파일 작성을 위해 사람이 읽기 쉽게 만들어진 데이터 직렬화 언어입니다. JSON의 상위 호환 격으로 볼 수 있으며, 계층 구조(Hierarchy) 표현에 최적화되어 있습니다. Spring Boot가 등장하면서 복잡한 설정을 체계적으로 관리하기 위해 채택되었습니다.


2. 주요 차이점 상세 비교

가장 큰 차이는 구조(Structure)가독성(Readability)입니다.

2.1. 계층 구조 표현 (Hierarchy)

Spring Boot의 설정은 기본적으로 계층형입니다. spring 아래 datasource, 그 아래 url이 있는 식이죠.

application.properties

spring.datasource.url=jdbc:mysql://localhost/db
spring.datasource.username=root
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

Properties 파일은 계층을 표현하기 위해 매 줄마다 전체 경로(Prefix)를 반복해서 써야 합니다. 설정이 100줄이 넘어가면 spring.datasource...만 100번 읽어야 합니다.

application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost/db
    username: root
    password: 1234
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

YAML은 들여쓰기를 통해 중복을 제거하고 구조를 시각화합니다. 어떤 설정이 어디에 속해 있는지 한눈에 파악할 수 있습니다.

2.2. 리스트(List) 데이터 처리

이 부분이 YAML의 압승 포인트입니다.

application.properties
배열 인덱스를 사용해야 합니다.

my.servers[0]=dev.example.com
my.servers[1]=prod.example.com
my.servers[2]=test.example.com

application.yml
하이픈(-)으로 깔끔하게 표현됩니다.

my:
  servers:
    - dev.example.com
    - prod.example.com
    - test.example.com

2.3. 다중 프로파일 문서 (Multi-Document)

하나의 파일 안에 여러 환경(Profile)의 설정을 담고 싶을 때, YAML은 매우 강력한 기능을 제공합니다.

application.yml

server:
  port: 8080
---
spring:
  config:
    activate:
      on-profile: dev
server:
  port: 8081
---
spring:
  config:
    activate:
      on-profile: prod
server:
  port: 80

Properties 파일은 하나의 파일에 하나의 문서만 존재할 수 있어, 환경별로 파일을 물리적으로 쪼개야만 합니다 (application-dev.properties, application-prod.properties 등). 물론 YAML도 파일 분리를 권장하지만, 선택권이 있다는 것은 큰 장점입니다.


3. 언제 무엇을 써야 할까?

application.properties를 써야 할 때

  1. 초소형 프로젝트: 설정이 10줄 내외로 아주 적을 때.
  2. 레거시 호환성: 팀 내 모든 개발자가 YAML 문법(특히 들여쓰기)에 익숙하지 않거나 거부감이 클 때.
  3. CI/CD 파이프라인 제약: 쉘 스크립트 등에서 grep으로 간단히 값을 파싱 해야 하는 경우 (key=value 구조가 파싱 하기 더 쉽습니다).

application.yml을 써야 할 때

  1. 일반적인 Spring Boot 프로젝트: 사실상 표준입니다.
  2. 설정이 복잡할 때: 외부 API 연동, DB 설정, 클라우드 설정 등이 많아질수록 YAML의 가독성이 빛을 발합니다.
  3. 객체 지향적 설정 관리: @ConfigurationProperties와 매핑하여 구조화된 데이터를 다룰 때.

4. 마이그레이션 예제 (Properties -> YAML)

기존 Properties 파일을 YAML로 바꾸는 것은 어렵지 않습니다. 간단한 파이썬 스크립트나 온라인 컨버터를 사용할 수도 있지만, 직접 해보는 것도 좋습니다.

Before (Properties)

logging.level.root=INFO
logging.level.com.codecamp=DEBUG
logging.file.name=logs/app.log

After (YAML)

logging:
  level:
    root: INFO
    com.codecamp: DEBUG
  file:
    name: logs/app.log

주의할 점: 마이그레이션 시 들여쓰기(Space 2칸)를 실수하면 설정이 적용되지 않는 대참사가 발생할 수 있습니다. 변경 후에는 반드시 애플리케이션을 구동하여 설정이 정상 로드되었는지 확인해야 합니다.


Spring Boot에서 properties 대신 YAML을 써야 하는 결정적 이유 (비교 분석) 이미지 2

결론

“가독성은 생산성이다.”

코드뿐만 아니라 설정 파일에도 적용되는 말입니다. application.yml은 단순히 유행을 따르는 것이 아니라, 복잡해지는 현대 애플리케이션의 설정을 효율적으로 관리하기 위한 필연적인 선택입니다.

아직 properties를 고집하고 계셨다면, 이번 기회에 yml로 전환해 보세요. 처음에는 들여쓰기가 어색할 수 있지만, 적응하고 나면 그 깔끔함에 반해 다시는 돌아가지 못할 것입니다.

다음 포스팅에서는 이 설정 파일들을 환경별로 다르게 적용하는 “Spring Boot 프로파일(Profile)”의 모든 것에 대해 알아보겠습니다.

관련 글 보기