
Spring Boot에서 같은 위치에 application.properties와 application.yaml이 함께 있으면, 동일한 설정 키는 .properties 파일의 값이 우선합니다. 다만 이는 같은 위치의 두 형식을 비교하는 규칙이며, 애플리케이션의 최종 값은 다른 설정 소스의 영향을 받을 수 있습니다.
YAML을 수정해도 값이 바뀌지 않는 이유
설정 형식을 YAML로 바꾸면서 기존 properties 파일을 남겨 두면 같은 키가 두 파일에 존재할 수 있습니다. 이때 YAML의 값을 수정해도 properties의 값이 우선하므로 변경이 반영되지 않은 것처럼 보입니다.
우선순위는 중복된 키의 값을 결정합니다. properties 파일이 존재한다고 해서 YAML 파일 전체가 무시되는 것은 아닙니다. 따라서 한 파일을 삭제하기 전에는 다른 파일에 없는 설정도 확인해야 합니다.
같은 위치인지, 다른 설정이 덮어쓰는지 확인하기
-
두 파일의 실제 로딩 위치를 확인합니다. 예를 들어 둘 다 클래스패스 루트에 있는 경우가 같은 위치의 비교에 해당합니다. JAR 내부 파일과 실행 디렉터리의 외부 파일은 위치가 다릅니다.
-
동일한 키를 비교합니다. YAML의 중첩 구조로 표현한
demo.label도 properties의demo.label과 같은 설정 키로 비교해야 합니다. -
프로파일별 파일, 외부 설정 파일, 환경변수, 시스템 프로퍼티, 명령행 인자 등에서 같은 키를 지정했는지 확인합니다. 이들이 개입하면 두 기본 파일만으로 최종 값을 판단할 수 없습니다.
특히 spring.config.name이나 spring.config.location을 지정한 실행 환경에서는 두 파일이 실제로 로딩되는지 먼저 확인해야 합니다. 파일이 저장소에 있다는 사실만으로 로딩을 보장하지는 않습니다.
예제: 중복 키와 YAML에만 있는 키 구분하기
다음은 두 파일이 모두 클래스패스 루트에 포함되어 Spring Boot의 설정 데이터로 로딩되는 상황을 가정한 예제입니다. 프로파일별 파일이나 추가 설정 가져오기, 외부 파일, 환경변수와 실행 인자 등에서는 아래 키를 별도로 지정하지 않는 것이 전제입니다.
application.properties:
demo.label=from-properties
같은 위치의 application.yaml:
demo:
label: "from-yaml"
description: "sample"
이 조건에서 Spring의 Environment로 조회할 때 기대되는 값은 다음과 같습니다. 아래 표는 실행 기록이 아니라 문서의 우선순위 규칙에 따른 예상 해석입니다.
| 설정 키 | 예상 값 | 해석 |
|---|---|---|
demo.label |
from-properties |
두 파일에 있으므로 properties 값이 우선합니다. |
demo.description |
sample |
YAML에만 정의되어 있어 해당 값을 사용합니다. |
이 상태에서 properties 파일을 단순히 삭제하면 demo.label은 from-yaml로 바뀝니다. 형식 정리와 설정값 변경을 함께 의도한 것인지 확인해야 합니다.
기존 값을 보존하면서 한 형식으로 정리하기
Spring Boot 문서는 애플리케이션 전체에서 설정 형식을 하나로 통일할 것을 권장합니다. YAML로 정리한다면 다음 순서로 진행할 수 있습니다.
- 두 파일의 키를 비교해 중복 키와 각 파일에만 있는 키를 구분합니다.
- 중복 키마다 유지할 값을 결정합니다. 기존 파일 간 우선순위에 따른 값을 보존하려면 properties의 값을 YAML에 옮깁니다.
- properties에만 있는 키도 YAML로 옮긴 뒤 properties 파일을 제거합니다.
- 빌드 결과물과 배포 대상에도 제거한 파일이 남아 있지 않은지 확인하고, 같은 실행 조건에서 설정값을 다시 확인합니다.
예제의 두 값을 그대로 보존하는 YAML 정리 결과는 다음과 같습니다.
demo:
label: "from-properties"
description: "sample"
properties로 통일할 때도 같은 원칙을 적용합니다. YAML에만 있는 demo.description=sample을 properties에 추가한 뒤 YAML 파일을 제거하면 됩니다.
형식 우선순위만으로 판단할 수 없는 경우
.properties가 모든 YAML 설정보다 항상 우선한다고 확대해서 해석하면 안 됩니다. 프로파일별 설정은 일반 설정보다 우선하며, JAR 내부와 외부 파일에도 별도의 적용 순서가 있습니다. 환경변수나 명령행 인자 역시 파일의 값을 덮어쓸 수 있습니다.
정리 후에도 예상과 다른 값이 적용된다면 파일 형식보다 실제 로딩 위치, 활성 프로파일, 실행 시 전달한 설정을 먼저 대조하세요. 중복 키의 유지 값을 명시적으로 정하고 한 형식으로 합치면, 다음 수정부터 어느 파일을 바꿔야 하는지 분명해집니다.