일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자료구조
- java socket
- 도커
- 동시성
- 쿠버네티스
- 인프런
- Thread
- 시작하세요 도커 & 쿠버네티스
- 자바 입출력 스트림
- Collection
- java
- 멀티 쓰레드
- 쓰레드
- 스레드
- 실전 자바 고급 1편
- filewriter filereader
- Docker
- 도커 엔진
- LIST
- java network
- 리스트
- 알고리즘
- 컨테이너
- 자바
- Kubernetes
- 자바 io 보조스트림
- 스레드 제어와 생명 주기
- Java IO
- 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 |