Java Spring 군/Spring

properties파일과 yml파일 비교(왜 Spring은 properties파일을 default로 생각할까?)

KimYHG 2024. 11. 27. 22:08

이 궁금증을 해결해준 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시간을 낭비하게 되었다ㅠ