해당 글을 읽기전에 아래 글을 읽고 오시는 걸 추천합니다.
https://pjstudyblog.tistory.com/70
[Spring Boot] 다양한 외부 설정 방법 #1
≣ 목차 외부설정이란?외부 설정은 애플리케이션이 실행되거나 빌드될 때 외부에서 설정 값을 주입 받는 있는 기능을 의미합니다. 그렇다면 애플리케이션 실행에 필요한 설정값을 외부에서 어
pjstudyblog.tistory.com
외부 설정 일관성 문제 해결
스프링은 외부 설정의 일관성 문제를 Environment와 PropertySource를 통해 해결했습니다. 이를 통해 다양한 설정 소스를 통합하고, 일관된 방식으로 프로퍼티를 관리할 수 있게 도와줍니다.
외부 설정 일관성 문제에 대해서는 위에 게시글에 있습니다.
Environment
특정 외부 설정 코드에 종속되지 않고, 외부 설정 값을 key=value 형식으로 접근할 수 있도록 도와주는 인터페이스입니다.
Environment의 특징
- 프로퍼티 조회: 다양한 소스(예: 설정 파일, 시스템 환경 변수 등)에서 프로퍼티 값을 조회할 수 있습니다.
- 프로파일 관리: 애플리케이션의 다양한 실행 환경(예: 개발, 테스트, 프로덕션)에 따라 활성화할 프로파일을 관리합니다.
- PropertySource 관리: 여러 PropertySource를 포함하여, 우선순위에 따라 프로퍼티를 조회합니다.
PropertySource
PropertySource라는 추상 클래스를 통해 각 외부 설정을 조회하는 XxxPropertySource 구현체를 제공합니다. 이를 통해 스프링 로딩 시점에 필요한 PropertySource 구현체를 생성하고, Environment와 연결합니다. 만약 여러 PropertySource가 존재할 경우, 우선순위에 따라 프로퍼티를 조회할 수 있습니다.
설정 파일(application.properties)
스프링에서는 일관성 문제를 비롯한 다양한 문제를 해결하기 위해 스프링 프로필 기능을 제공합니다. 이 기능도 PropertySource와 Environment를 통해 구현되어 있어 있습니다.
스프링 프로필이란?
스프링 프로필(Spring Profiles)은 애플리케이션의 다양한 환경(예: 개발, 테스트, 운영)에 따라 설정을 다르게 적용할 수 있도록 도와주는 기능입니다.
프로필 설정 방법
프로필을 설정하지 않으면 기본 파일인 application.properties / yml이 적용되며, 여러 개 프로필을 설정할 수 있습니다.
1. application.properties
- 기본 설정 파일로, 여기에 프로필 관련 설정을 추가할 수 있습니다.
2. IDE에서 커맨드 라인 옵션 인수
- --spring.profiles.active=xxx
3. IDE에서 자바 시스템 속성
- -Dspring.profiles.active=xxx
4. Jar 명령어 시 옵션 추가
java -Dspring.profiles.active=dev -jar xxx-SNAPSHOT.jar
java -jar xxxSNAPSHOT.jar --spring.profiles.active=dev
프로필 특징
스프링은 설정 파일을 읽을 때 위에서 아래로 순차적으로 읽습니다. 즉 하위 설정이 상위 설정을 덮어쓰는 방식으로 동작합니다.
application.properties
spring.profiles.active=dev, prod // 프로필 설정
url=local.db.com
username=local_user
password=local_pw
#--- // 파일 분할
spring.config.activate.on-profile=dev // 프로필 추가 설정
url=dev.db.com
username=dev_user
password=dev_pw
#---
--------- prod 프로필 관련 설정 시작 -----------
spring.config.activate.on-profile=prod
url=prod.db.com
username=prod_user
--------- prod 프로필 관련 설정 끝 -----------
#---
url=end
스프링은 설정 파일을 읽을 때 위에서 아래로 순차적으로 읽습니다. 따라서, 하위 설정이 상위 설정을 덮어쓰는 방식으로 동작합니다.
결과
결과를 살펴보면, dev와 prod 두 가지 프로필이 적용된 것을 확인할 수 있습니다. 그러나 마지막 프로필을 지정하지도 않고 적용하지도 않았습니다. 이 설정은 프로필 설정에 관계없이 항상 적용되는 값으로 설정됩니다.
주의 사항
설정 파일을 분할할 때는 #--- 주석을 사용하여 파일을 구분할 수 있습니다. 이때 주의할 점은 주석 위와 아래에 다른 주석을 적지면 안됩니다. 왜냐하면 스프링이 설정 파일을 올바르게 읽지 못할 수 있습니다.
인텔리제이의 무료 버전에서는 컴파일 오류가 발생한 것처럼 빨간 줄이 표시될 수 있습니다. 하지만 실행할 때 오류가 발생하지 않으니, 이 부분은 걱정하지 않으셔도 됩니다.
해당 기능도 우선 순위가 존재하며, 아래 링크를 참조
https://docs.spring.io/spring-boot/reference/features/external-config.html
'Spring' 카테고리의 다른 글
[Spring Boot] spring.jpa.open-in-view is enabled by default 경고 메시지 (1) | 2024.10.15 |
---|---|
[Spring Boot] 다양한 외부 설정 방법 #4 - @Profile (1) | 2024.10.15 |
[Spring Boot] 다양한 외부 설정 방법 #1 (2) | 2024.10.13 |
[Sprign Boot] Auto Configuration 정리 - @Conditaional (2) | 2024.10.10 |
[Spring Boot + Java] JAR와 WAR 간단 정리 (1) | 2024.10.06 |