| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 실전 자바 고급 1편
- java
- 스레드
- Kubernetes
- mysql
- 쓰레드
- 자료구조
- 멀티 쓰레드
- 도커
- 김영한
- 도커 엔진
- 알고리즘
- lambda
- 람다
- SQL
- replicaset
- RDB
- Thread
- db
- 컨테이너
- 시작하세요 도커 & 쿠버네티스
- 데이터베이스
- 자바
- 자바 입출력 스트림
- 동시성
- 함수형 인터페이스
- 인프런
- 쿠버네티스
- Docker
- container
- Today
- Total
쌩로그
YML 파일 설정 본문
목록
- 포스팅 개요
- 본록
- 요약
1. 포스팅 개요
이전부터 yml을 통해서 애플리케이션의 값들을 세팅했고, local, dev, prod 와 같이 프로필을 나눠서 yml을 작성했다.
그런데 사내 프로젝트를 진행하면서,
local의 yml과 dev의 yml을 나눴다.
local에는 값이 존재하고, dev에는 작성하지 않은 값이 있었다.
"당연히 dev에선 안 나오겠지"하고 생각했지만, 값이 나오는 것을 확인했고, 해당 값은 local에 대한 값이었다.
이를 이해하여 정리하고자 하는 포스팅이다.
2. 본론
먼저 yml 테스트를 위해 작성한 클래스들을 살펴보면 다음과 같이 했다.
@ConfigurationPropertiesScan 애너테이션이 있는데, 이 애너테이션이 선언되어 있어야 @ConfigurationProperties 애너테이션을 읽을 수 있다.
그리고 prefix로 yml을 뒀는데, 이는 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을 기준으로 덮어씌이는 것이다.
'Spring Project > 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 |