쌩로그
YML 파일 설정 본문
목록
- 포스팅 개요
- 본록
- 요약
1. 포스팅 개요
이전부터 yml을 통해서 애플리케이션의 값들을 세팅했고, local, dev, prod 와 같이 프로필을 나눠서 yml을 작성했다.
그런데 사내 프로젝트를 진행하면서,
local의 yml과 dev의 yml을 나눴다.
local에는 값이 존재하고, dev에는 작성하지 않은 값이 있었다.
"당연히 dev에선 안 나오겠지"하고 생각했지만, 값이 나오는 것을 확인했고, 해당 값은 local에 대한 값이었다.
이를 이해하여 정리하고자 하는 포스팅이다.
2. 본론
먼저 yml 테스트를 위해 작성한 클래스들을 살펴보면 다음과 같이 했다.
![](https://velog.velcdn.com/images/tjdtn4484/post/793f8d90-e4cb-4cc8-ab91-71f1d6d5d961/image.png)
@ConfigurationPropertiesScan
애너테이션이 있는데, 이 애너테이션이 선언되어 있어야 @ConfigurationProperties
애너테이션을 읽을 수 있다.
![](https://velog.velcdn.com/images/tjdtn4484/post/cdf11237-8807-4f32-a7f2-8631669e4ff0/image.png)
그리고 prefix
로 yml
을 뒀는데, 이는 yml에 yml로 시작하는 값들을 읽는다는 의미다.
참고 : @Value 도 있지만..
참고로 yml의 값을 읽어오기 위한 방법 중 내가 아는 건 현재 2가지다.
지금의 방식과 많이 쓰이는 것이 @Value
를 활용한 것으로 알고있다.
그런데 @Value
를 사용하면 스프링이 실행되고, 모든 Bean들이 스프링 컨테이너에 올라간 다음에 값을 읽는 특징이 있다.
현재 나는 그럴 필요가 없고, 그냥 빈이 주입될 때 이미 세팅된 상태에서 스프링 컨테이너에 올라가길 원하기 때문에 현재의 방식을 사용했다.
초기에 작성한 yml은 다음과 같다.
application.yml
이다.
![](https://velog.velcdn.com/images/tjdtn4484/post/96e08b14-9b3c-4358-8210-2efbf22f02d3/image.png)
현재 이 상태에서 실행하면 다음과 같은 결과가 나온다.
![](https://velog.velcdn.com/images/tjdtn4484/post/77060315-5c1b-4b01-9e1f-43ffadf3be82/image.png)
profile은 default, 그리고 current-yml은 local, override는 true
(참고로 값의 key는 내가 임의로 지정했다.)
그리고 이제 dev라는 프로필로 실행해보자.
dev로 설정하는 법은 다음과 같다.인텔리제이 기준이다.
![](https://velog.velcdn.com/images/tjdtn4484/post/5697ed66-9b58-4ef8-a632-9207c02bbbcd/image.png)
![](https://velog.velcdn.com/images/tjdtn4484/post/5735d969-a94d-4dd5-b2d0-d48210f6faa2/image.png)
![](https://velog.velcdn.com/images/tjdtn4484/post/e1f831d5-1dcf-4a74-bfa6-440f2128bf2e/image.png)
![](https://velog.velcdn.com/images/tjdtn4484/post/bc07a6f8-4848-423e-84eb-a36eea996536/image.png)
이렇게 설정하고, 실행하면 dev 프로필로 실행된다.
![](https://velog.velcdn.com/images/tjdtn4484/post/4250a40c-37d6-4cbb-9b56-183bb47e79bf/image.png)
참고로 application-dev.yml
파일은 위와 같다.
처음에 개요에서 말한 것처럼 override값은 없으니 당연히 값이 안 출력될 줄 알았다.
(현재 상태라면 NPE를 기대할 수 있을 것이다.)
그러나 예상과 다르게 나오는 것을 확인할 수 있다.
![](https://velog.velcdn.com/images/tjdtn4484/post/e63914f4-36fa-41fd-b318-fd7c44e75637/image.png)
프로필이 별도로 분리되는 것이 아니라,
기존의 default yml을 기준으로 값이 덮어쓰이는 구조다.
그렇기 때문에 dev에서 override 값은 없음에도 불구하고, application.yml
의 override값인 true가 나오는 것을 확인할 수 있다.
그래서 application-dev.yml
에 override값을 다음과 같이 주었다.
![](https://velog.velcdn.com/images/tjdtn4484/post/3d2ab22c-4d40-46d7-a905-365cea9d2a94/image.png)
그러면 값이 다음과 같이 나온다.
![](https://velog.velcdn.com/images/tjdtn4484/post/a84c1b73-4932-4d54-b642-d58780ed9c82/image.png)
그리고 현재 dev 프로필로 애플리케이션이 실행되는 상태인데, appication-dev.yml
파일을 지우고 실행하면 어떻게 될까?
![](https://velog.velcdn.com/images/tjdtn4484/post/7ef6f30a-fcc5-44ac-9770-f64acf67a157/image.png)
yml을 지웠다.
그리고 실행하면 다음과 같이 나온다.
![](https://velog.velcdn.com/images/tjdtn4484/post/27d1c558-07ab-45cf-a682-9a9092569e4c/image.png)
표시된 lodal과 ture는 application.yml
이다.
![](https://velog.velcdn.com/images/tjdtn4484/post/96e08b14-9b3c-4358-8210-2efbf22f02d3/image.png)
마지막으로 yml은 ---
(하이폰 3개)로 프로필을 나눌 수 있다.
그래서 application.yml
파일에서 다음과 같이 프로필을 나눴다.
![](https://velog.velcdn.com/images/tjdtn4484/post/66e08480-1d3b-43c5-be4a-df6bb16e7918/image.png)
그리고 dev로 실행해보면 위에서 설정한 dev의 프로필 값으로 설정됨을 확인할 수 있다.
![](https://velog.velcdn.com/images/tjdtn4484/post/8c921a1e-0257-4549-95a7-22f2fc684e69/image.png)
3. 요약
yml은 profile에 따라 분리된 파일들이 각각 별도로 나뉘는 것이 아니라, default yml인 application.yml
을 기준으로 덮어씌이는 것이다.
'Spring > Spring & Spring Boot' 카테고리의 다른 글
스프링 MVC 2편 - Ch05. 검증2 - Bean Validation (5) | 2024.06.23 |
---|---|
스프링 MVC 2편 - Ch04. 검증1 - Validation (1) | 2024.06.18 |
스프링 MVC 2편 - Ch03. 메시지, 국제화 (0) | 2024.05.07 |
스프링 MVC 2편 - Ch02. 타임리프 - 스프링 통합과 폼 (0) | 2024.05.06 |
스프링 MVC 2편 - Ch01. 타임리프 - 기본기능 (1) | 2024.05.01 |