properties파일과 yml파일 비교(왜 Spring은 properties파일을 default로 생각할까?)
이 궁금증을 해결해준 GPT에게 감사 인사를 한다.
내가 보기에 계층적인 구조 때문이라도 yml파일이 사람이 보기 편한 것 같은데
개발자들이 모여있는 Spring에서
왜 properties파일과 yml파일 중 default로 properties파일 사용해야 하는 이유가 궁금해졌다.
궁금증에 대한 답은 역사적인 배경과 기본적인 디자인 원칙 때문이다. 개발 환경에 맞게 유연하게 선택하면 된다.
properties파일 | yml(yaml)파일 | |
구조 | key=value 구조 | 계층적 구조 |
장점 | 간결함 파싱이 더 쉬움(yml파일은 공백이나 들여쓰기에 민감하고 눈으로 확인이 어려움) |
직관적 |
1. 역사적 배경
- Spring의 설계 철학은 "기본값은 간단하게(Simple by default)"이다. (이게 맞는지는 한번 찾아봐야 겠다.)
- 초창기 Spring Framework는 설정파일로 application.properties를 기본으로 사용했다.
- 그 당시 YAML은 표준적으로 널리 사용되지 않았다.
- 많은 Java 애플리케이션에서 properties 형식을 기본으로 사용했었다.
- 기존 환경과의 호환성 때문이기도 하다.
- 많은 Java 라이브러리와 툴( 예: Apache Commons Configuration, Log4j 등)이 properties 형식을 기본적으로 지원하고 있었다.
- Spring은 이러한 표준에 맞춰 초기 설계되었기 때문이다.
- Spring boot 2.0부터 yml(yaml)파일을 지원하기 시작했다.
2. 기본적인 디자인 원칙 - 간단한 구조와 사용성
- 간결함 : properties 파일은 key-value 쌍으로 이루어진 단순한 구조를 가지고 있어 작성 및 파싱이 간단하다.
- 범용성 : 대부분의 Java 환경에서 널리 지원된다.
- YAML의 도입과 상대적 복잡성
-- YAML의 도입 : Spring Boot 2.0부터 YAML파일을 지원하기 시작했다. YAML파일은 계층적 데이터 구조
-- 파싱 및 오류 처리의 복잡성 : YAML은 가독성이 높지만, 공백이나 들여쓰기에 민감하며
잘못된 형식으로 작성된 경우 오류를 발생시키기 쉽다.
3. 정책적인 이유
- Spring의 설계 철학은 "기본값은 간단하게(Simple by default)"이다. 따라서 Spring은 기본적으로 복잡도가 낮은 properties 파일을 우선적으로 고려하지만, 복잡한 구조를 필요로 하는 경우 YAML을 사용할 수 있도록 선택지를 제공한다.
4. 우선순위의 유연성
Spring Boot는 기본적으로 설정파일을 application.properties , application.yml 순으로 우선순위를 가진다.
우선순위를 변경할 수 있다.
@PropertySource 애노테이션이나 spring.config.additional-ocation 속성을 사용하여 바꿀 수 있다.
이럴 경우는 properties파일과 yml파일을 같이 쓸 경우에 해당한다.
시간도 없는데 이런 궁금증이 왜 계속 생기는지ㅠ
그냥 넘어가려고 했는데 계속 눈에 밟히는 건지ㅠ
중요한 것도 물리적인 시간이 부족해서 처리하지 못하고 있는데
고민하는 시간 제외하고 또 1시간을 낭비하게 되었다ㅠ