쌩로그

YML 파일 설정 본문

Spring/Spring & Spring Boot

YML 파일 설정

.쌩수. 2024. 6. 10. 13:16
반응형

목록

  1. 포스팅 개요
  2. 본록
  3. 요약

1. 포스팅 개요

이전부터 yml을 통해서 애플리케이션의 값들을 세팅했고, local, dev, prod 와 같이 프로필을 나눠서 yml을 작성했다.

그런데 사내 프로젝트를 진행하면서,
local의 yml과 dev의 yml을 나눴다.
local에는 값이 존재하고, dev에는 작성하지 않은 값이 있었다.
"당연히 dev에선 안 나오겠지"하고 생각했지만, 값이 나오는 것을 확인했고, 해당 값은 local에 대한 값이었다.

이를 이해하여 정리하고자 하는 포스팅이다.

2. 본론

먼저 yml 테스트를 위해 작성한 클래스들을 살펴보면 다음과 같이 했다.

@ConfigurationPropertiesScan 애너테이션이 있는데, 이 애너테이션이 선언되어 있어야 @ConfigurationProperties 애너테이션을 읽을 수 있다.

그리고 prefixyml을 뒀는데, 이는 yml에 yml로 시작하는 값들을 읽는다는 의미다.

참고 : @Value 도 있지만..

참고로 yml의 값을 읽어오기 위한 방법 중 내가 아는 건 현재 2가지다.

지금의 방식과 많이 쓰이는 것이 @Value를 활용한 것으로 알고있다.

그런데 @Value를 사용하면 스프링이 실행되고, 모든 Bean들이 스프링 컨테이너에 올라간 다음에 값을 읽는 특징이 있다.

현재 나는 그럴 필요가 없고, 그냥 빈이 주입될 때 이미 세팅된 상태에서 스프링 컨테이너에 올라가길 원하기 때문에 현재의 방식을 사용했다.

초기에 작성한 yml은 다음과 같다.

application.yml이다.

현재 이 상태에서 실행하면 다음과 같은 결과가 나온다.

profile은 default, 그리고 current-yml은 local, override는 true
(참고로 값의 key는 내가 임의로 지정했다.)

그리고 이제 dev라는 프로필로 실행해보자.

dev로 설정하는 법은 다음과 같다.
인텔리제이 기준이다.

이렇게 설정하고, 실행하면 dev 프로필로 실행된다.

참고로 application-dev.yml 파일은 위와 같다.

처음에 개요에서 말한 것처럼 override값은 없으니 당연히 값이 안 출력될 줄 알았다.
(현재 상태라면 NPE를 기대할 수 있을 것이다.)

그러나 예상과 다르게 나오는 것을 확인할 수 있다.

프로필이 별도로 분리되는 것이 아니라,
기존의 default yml을 기준으로 값이 덮어쓰이는 구조다.
그렇기 때문에 dev에서 override 값은 없음에도 불구하고, application.yml의 override값인 true가 나오는 것을 확인할 수 있다.

그래서 application-dev.yml에 override값을 다음과 같이 주었다.

그러면 값이 다음과 같이 나온다.

그리고 현재 dev 프로필로 애플리케이션이 실행되는 상태인데, appication-dev.yml파일을 지우고 실행하면 어떻게 될까?

yml을 지웠다.
그리고 실행하면 다음과 같이 나온다.

표시된 lodal과 ture는 application.yml이다.

마지막으로 yml은 --- (하이폰 3개)로 프로필을 나눌 수 있다.

그래서 application.yml파일에서 다음과 같이 프로필을 나눴다.

그리고 dev로 실행해보면 위에서 설정한 dev의 프로필 값으로 설정됨을 확인할 수 있다.

3. 요약

yml은 profile에 따라 분리된 파일들이 각각 별도로 나뉘는 것이 아니라, default yml인 application.yml을 기준으로 덮어씌이는 것이다.

728x90
Comments