yml vs properties – 스프링 설정, 무엇이 더 나은 선택인가?

2025. 4. 15. 23:09·삽질로그

1. 들어가며

한이음 프로젝트를 시작하며 Spring Boot로 백엔드 프로젝트를 세팅하던 중,

평소처럼 아무 생각 없이 application.properties를 application.yml로 바꿨다.

참고 링크: 2025.04.12 - [프로젝트 도전기] - [한이음 드림업 Ep.0] 진짜 터지지 않는 수강신청 시스템, 가능할까?
 

[한이음 드림업 Ep.0] 진짜 터지지 않는 수강신청 시스템, 가능할까?

1. 들어가며졸업 전, 나만의 규모 있는 프로젝트를 완성해보고 싶다는 욕심이 늘 있었다. 가능하다면 공모전에도 도전해보고 싶다는 생각도 있었고, 마지막 학년인 지금이 아니면 도전하기 어렵

mingking2.tistory.com

 

이제는 .yml로 바꾸는 게 습관처럼 굳어져 있었기에, 별다른 고민 없이 자연스럽게 바꾼 셈이다.

그런데 문득 이런 생각이 들었다.

 

“왜 나는 매번 .yml로 바꾸는 걸까?"
“단순히 익숙해서? 아니면 정말 더 좋은 선택이기 때문일까?”

 

이런 궁금증에서 출발해, .properties와 .yml 설정 파일의 구조와 차이,

그리고 실무에서 각각 어떤 장단점이 있는지를 코드와 함께 직접 비교해보기로 했다.


2. application.properties

✅ 형식

.properties 파일은 키-값(key=value) 형식으로 설정을 작성하는 전통적인 방식이다.

각 줄마다 하나의 설정을 정의하고, = 또는 : 기호를 사용해서 값을 할당한다.

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

-> 줄마다 설정을 하나씩 정의하고, 계층 구조는 마침표(.)를 통해 표현한다.

 

✅ 특징

특징 설명
간결한 표현 설정을 한 줄로 끝낼 수 있어 간단하고 빠르게 읽고 수정하기에 적합함
익숙함 Java 진영에서 오랫동안 사용되어온 형식으로 대부분의 개발자에게 친숙함
제한적인 표현력 배열, 중첩 구조, 다단계 설정 표현이 불편하며 복잡한 객체 설정에 적합하지 않음
중복 키 주의 같은 키가 중복되면 마지막 값만 적용되므로 키 충돌에 주의해야 함

3. application.yml

✅ 형식

application.yml은 YAML 포맷을 사용하는 설정 파일로, 계층 구조 기반의 설정을 직관적으로 표현할 수 있다.

들여쓰기를 통해 구조를 구분하며, 배열, 리스트, 중첩된 객체 표현에 특히 강력한 표현력을 가진다.

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

my:
  users:
    - name: Alice
      email: alice@example.com
    - name: Bob
      email: bob@example.com

 

✅ 특징

특징 설명
가독성 들여쓰기 기반의 계층 구조로, 설정의 구조를 한눈에 파악하기 쉽다.
표현력 배열, 중첩 객체 등 복잡한 설정을 자연스럽게 표현할 수 있다.
간결함 반복되는 prefix 없이도 설정을 깔끔하게 작성할 수 있다.
민감도 공백, 들여쓰기, 탭 등의 문법 오류에 민감하다. 잘못된 들여쓰기만으로 오류가 발생할 수 있다.
중복 허용 X 동일한 키를 여러 번 선언할 수 없으며, YAML 파서가 이를 오류로 처리한다.

4. 비교하기

1️⃣ 구조와 가독성

.properties는 평면적인 구조다.
설정이 한 줄씩 나열되며 구조적인 정보는 접두사로만 표현된다.
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root

 

.yml은 계층적 구조를 가진다.
설정이 들여쓰기를 통해 시각적으로 드러나며, 전체 구조가 한눈에 보인다.
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root

 

 

➡️ 설정이 복잡해질수록 YAML 쪽이 구조를 파악하기 쉽다.

 

2️⃣ 배열과 중첩 표현

.properties는 리스트나 복잡한 중첩 객체를 표현하기 까다롭다.
my.users[0].name=Alice
my.users[0].email=alice@example.com
my.users[1].name=Bob
my.users[1].email=bob@example.com

 

.yml은 리스트, 맵, 객체 중첩 표현이 자연스럽다.
my:
  users:
    - name: Alice
      email: alice@example.com
    - name: Bob
      email: bob@example.com

 

➡️ 설정이 계층화될수록 .yml의 표현력이 유리하다.

 

3️⃣ 유지보수성과 실수 방지

.properties는 키 중복 시 마지막 값이 우선된다.

→ 의도치 않은 설정 덮어쓰기가 발생할 수 있다.

 

.yml은 동일 키 중복 시 파싱 에러가 발생한다.

→ 실수를 빠르게 인지하고 수정할 수 있다.

 

➡️ 명시적 오류 유도가 있는 .yml이 유지보수에는 더 안전하다.


5.  활용하기

실제로 프로젝트를 진행하다 보면, 단순한 “취향”이 아닌 “상황에 따른 선택”이 필요할 때가 있다.

 

✅ .properties를 선호하는 경우

  • 단일 설정 파일로 충분할 때
    • 설정 항목이 10~20줄 내외로 간단하고, 중첩 구조가 거의 없을 때
  • 빠르게 프로토타이핑할 때
    • 한두 줄만 바꾸면 되니까 키-값 방식이 오히려 간편하다
  • 전통적인 Java 프로젝트와의 호환
    • Spring 이전의 Java 프로젝트들과 연동되는 경우

 

➡️ “짧고 단순한 설정이 필요할 때” .properties가 유리하다.

 

✅ .yml을 선호하는 경우

  • 설정이 깊거나 복잡한 구조일 때
    • 계층 구조, 리스트, 중첩 데이터 등 표현력이 필요한 경우
  • 설정이 여러 환경으로 분기될 때
    • application-dev.yml, application-prod.yml처럼 프로파일별 구성 시 가독성이 뛰어남
  • 다양한 외부 설정을 통합해야 할 때
    • 예: Kafka, Redis, OAuth, Swagger 등 다양한 설정이 모일 경우

 

➡️ “스케일이 있는 프로젝트, 환경 분기가 많을 때” .yml이 강력하다.


6. 결론

이번 글에서는 .properties와 .yml 설정 파일의 구조적 차이와 표현 방식, 그리고 실무에서의 활용 차이를 살펴보았다.

 

우리가 개발 중인 수강신청 대기열 시스템은

  • ✅ 복잡한 설정 구조
  • ✅ 환경 분기
  • ✅ 외부 시스템 연동이 많은 프로젝트 특성

이러한 이유로, 더 유연하고 가독성 높은 .yml 방식이 더 적합하다고 판단했으며,
이에 따라 해당 프로젝트는 .yml 설정 파일을 기반으로 개발을 진행할 예정이다.

'삽질로그' 카테고리의 다른 글

9초 걸리던 요청, 구조 손봤더니 3초 컷  (0) 2025.06.02
Tomcat 해부학 - Spring Boot 안에 살아있다?  (0) 2025.04.09
Tomcat은 그냥 서버가 아니다?  (0) 2025.03.23
Spring Boot 비동기 처리 = 스레드풀?  (0) 2025.03.16
여러 요청이 동시에 들어오면, Spring Boot는 어떻게 처리할까?  (2) 2025.03.09
'삽질로그' 카테고리의 다른 글
  • 9초 걸리던 요청, 구조 손봤더니 3초 컷
  • Tomcat 해부학 - Spring Boot 안에 살아있다?
  • Tomcat은 그냥 서버가 아니다?
  • Spring Boot 비동기 처리 = 스레드풀?
mingking2
mingking2
에러와 삽질 속에서 성장하는 응애 개발자의 성장 일지
  • mingking2
    Mingking의 삽질 기록
    mingking2
  • 전체
    오늘
    어제
    • 분류 전체보기 (19)
      • 삽질로그 (10)
      • 스타트업 응애기 (1)
      • 프로젝트 도전기 (2)
      • DB 모르는 백엔드 탈출기 (5)
      • 네트워크 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    orm
    server
    연관관계
    RDB
    servlet
    CompletableFuture
    @JoinColumn
    Tomcat
    Sync
    Java
    n:m
    WebSocket
    MVC
    Async
    batch
    JPA
    context
    DB
    spring
    플로우차트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
mingking2
yml vs properties – 스프링 설정, 무엇이 더 나은 선택인가?
상단으로

티스토리툴바