| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 도커 엔진
- 알고리즘
- 멀티 쓰레드
- lambda
- RDB
- 실전 자바 고급 1편
- Thread
- Docker
- 쿠버네티스
- 김영한
- 스레드
- 시작하세요 도커 & 쿠버네티스
- Java IO
- 자료구조
- 동시성
- Kubernetes
- mysql
- 람다
- 자바 입출력 스트림
- 데이터베이스
- java
- db
- 도커
- 인프런
- container
- SQL
- 자바
- 컨테이너
- 함수형 인터페이스
- 쓰레드
- 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' 카테고리의 다른 글
| 스프링 캠프 전체 영상 URL (0) | 2024.08.30 |
|---|---|
| @Builder패턴 클래스에 선언시 참조형이 null로 초기화되는 이유(feat. Jpa Entity에서 List호출시 NPE 발생 원인) (4) | 2023.12.08 |
| 스프링에서 AWS S3를 위한 파일업로드 코드 (1) | 2023.12.07 |
| Transacitinal 오개념 바로잡기 (0) | 2023.11.19 |
| Spring Controller 계층에서 파일 입력받기 (3) | 2023.11.19 |