본문으로 건너뛰기

Properties ↔ YAML Converter

Spring Boot의 application.propertiesapplication.yml 파일을 상호 변환하는 도구입니다. 설정 파일 마이그레이션과 리팩토링에 필수!

📄 Properties → YAML

Output will appear here...

💡 Spring Boot Configuration Tips

Properties 장점:
  • 간단하고 직관적
  • 한 줄에 하나의 설정
  • 검색하기 쉬움
YAML 장점:
  • 계층 구조가 명확
  • 중복 줄임
  • 가독성 좋음
주의사항:
  • YAML은 들여쓰기에 민감 (스페이스만 사용)
  • Properties는 특수문자 이스케이프 필요
  • Profile별 파일 분리 권장

Properties vs YAML

Properties 형식

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
server.port=8080

YAML 형식

spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
server:
port: 8080

언제 사용하나요?

Properties → YAML 변환

  • 프로젝트를 YAML로 마이그레이션할 때
  • 계층 구조를 명확하게 보고 싶을 때
  • 중복 프리픽스를 줄이고 싶을 때
  • 가독성을 높이고 싶을 때

YAML → Properties 변환

  • 레거시 시스템과의 호환성
  • 단순한 설정 선호
  • 검색과 grep이 더 쉬움
  • IDE 자동완성이 더 잘 작동

실제 사용 예시

데이터베이스 설정

Properties:

# Database Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

YAML:

# Database Configuration
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret123
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true

서버 & 로깅 설정

Properties:

server.port=8080
server.servlet.context-path=/api
server.compression.enabled=true

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

YAML:

server:
port: 8080
servlet:
context-path: /api
compression:
enabled: true

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

복잡한 프로퍼티

Properties:

spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=my-group
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

YAML:

spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: my-group
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

Properties와 YAML 비교

✅ Properties 장점

  1. 단순함: 한 줄에 하나의 설정
  2. 검색 용이: grep으로 쉽게 찾기
  3. 익숙함: 오래된 Java 표준
  4. 특수문자: 쉽게 이스케이프

✅ YAML 장점

  1. 가독성: 계층 구조가 명확
  2. 중복 제거: 공통 프리픽스 생략
  3. 주석: 더 자유로운 주석
  4. 리스트: 배열 표현 가능

⚠️ Properties 단점

  • 중복이 많음
  • 계층 구조 파악 어려움
  • 복잡한 설정은 길어짐

⚠️ YAML 단점

  • 들여쓰기에 민감
  • 탭 사용 불가 (스페이스만)
  • 파싱 에러 디버깅 어려움

Spring Boot에서의 차이점

프로파일 사용

Properties:

# application.properties (공통)
app.name=MyApp

# application-dev.properties (개발)
spring.datasource.url=jdbc:mysql://localhost:3306/dev_db

# application-prod.properties (운영)
spring.datasource.url=jdbc:mysql://prod-server:3306/prod_db

YAML (한 파일에 프로파일 구분):

app:
name: MyApp

---
spring:
config:
activate:
on-profile: dev
datasource:
url: jdbc:mysql://localhost:3306/dev_db

---
spring:
config:
activate:
on-profile: prod
datasource:
url: jdbc:mysql://prod-server:3306/prod_db

리스트/배열 표현

Properties (인덱스 사용):

app.servers[0]=server1.example.com
app.servers[1]=server2.example.com
app.servers[2]=server3.example.com

YAML (네이티브 배열):

app:
servers:
- server1.example.com
- server2.example.com
- server3.example.com

Map 구조

Properties:

app.config.key1=value1
app.config.key2=value2
app.config.key3=value3

YAML:

app:
config:
key1: value1
key2: value2
key3: value3

사용 팁

1. 점진적 마이그레이션

# 1. 기존 properties 백업
cp application.properties application.properties.bak

# 2. YAML로 변환
# (이 도구 사용)

# 3. application.yml 생성

# 4. 테스트 후 properties 삭제

2. 프로파일 분리

# application.yml (공통 설정만)
app:
name: MyApp

# application-dev.yml (개발 환경)
# application-prod.yml (운영 환경)

3. 민감한 정보는 환경변수로

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

4. IDE 플러그인 활용

  • IntelliJ IDEA: Spring Boot 지원
  • VS Code: Spring Boot Extension Pack
  • 자동완성과 검증 기능 활용

주의사항

YAML 작성 시

# ❌ 잘못된 예 (탭 사용)
spring:
datasource: # 탭 사용 - 에러!

# ✅ 올바른 예 (스페이스 사용)
spring:
datasource: # 2칸 스페이스

특수문자 처리

Properties:

# 특수문자는 백슬래시로 이스케이프
app.message=Hello\nWorld
app.path=C:\\Users\\Example

YAML:

# 따옴표로 감싸기
app:
message: "Hello\nWorld"
path: "C:\\Users\\Example"

숫자와 불리언

Properties:

server.port=8080
app.enabled=true

YAML (자동 타입 변환):

server:
port: 8080 # 숫자로 인식
port: "8080" # 문자열로 유지
app:
enabled: true # boolean
enabled: "true" # 문자열

트러블슈팅

변환 후 오류 발생

  1. YAML 들여쓰기 확인

    • 2칸 스페이스 사용
    • 탭 문자 없는지 확인
  2. 특수문자 확인

    • :, #, @ 등은 따옴표로 감싸기
  3. 타입 확인

    • 숫자, boolean이 의도대로 변환되었는지
  4. 프로파일 설정 확인

    • spring.profiles.active 설정

관련 도구

추가 리소스

베스트 프랙티스

1. 환경별 분리

application.yml          # 공통 설정
application-dev.yml # 개발 환경
application-test.yml # 테스트 환경
application-prod.yml # 운영 환경

2. 민감 정보 외부화

spring:
datasource:
password: ${DB_PASSWORD:defaultPassword}

3. 주석 활용

# Database Configuration
# 운영 환경에서는 별도 설정 필요
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb

4. 일관된 네이밍

# 케밥 케이스 (kebab-case) 권장
spring:
data-source: # ✅
driver-class-name: ...

# 카멜 케이스는 피하기
spring:
dataSource: # ❌
driverClassName: ...