FireDrago
[SpringBoot] 외부설정 (properties) 본문
하나의 에플리케이션을 다양한 환경에서 사용해야 할 때가 있다.
서비스환경에서 결제 시스템과 개발환경에서 결제시스템 로직은 달라야 한다.
외부설정에 실행환경에 따라 필요한 설정값을 외부에서 불러와서 실행할 수 있도록 할 수있는데,
스프링은 크게 4가지 방식의 환경설정을 지원한다.
| 설정방식 | 설명 | 예시 |
| OS 환경변수 | ||
| 자바 시스템 속성 | JVM 안에서 접근 가능한 설정값 -D VM 옵션을 통해서 key=value 형식을 준다. |
-Durl=devdb -Dusername=dev_user |
| 커맨드 라인 인수 | 애플리케이션 실행시점에 설정값을 args 파라미터로 전달 | * java -jar project.jar dataA dataB (커맨드) * url=devdb username=dev_user password=dev_pw (IDE) |
| 설정파일 | 파일형태로 설정값을 지정한다. |


외부설정 - 스프링 통합

4가지 설정방식은 모두 key = value 형식으로 설정한다.
스프링은 Environment와 PropertySource 추상화를 통해 방식에 구애받지 않고 설정값을 읽어 올 수 있도록한다.
자바시스템 속성을 사용하다가 파일을 통한 설정으로 바꾸더라도 코드를 변경하지 않아도 된다.
PropertySource 추상클래스는 각각의 외부 설정을 조회하는 구현체가 있다. 물론 스프링이 미리 만들어둔 것이다.
로딩시점에 PropertySource 구현체를 생성하고 Environment 에서 사용할 수 있게 연결해둔다.
외부설정 - properties
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
#---
spring.config.activate.on-profile=prod
url=prod.db.com
username=prod_user
password=prod_pw
스프링은 하나의 application.properties 파일 안에서 논리적으로 영역을 구분하는 방법을 제공한다.
dev 프로필이 활성화 되면 상위 설정 데이터가 사용된다.
prod 프로필이 활성화 되면 하위 설정 데이터가 사용된다
application.properties 구분 방법 : #--- 또는 !--- (dash 3)
application.yml 구분 방법 : --- (dash 3)
스프링은 문서를 위에서 아래로 순서대로 읽으면서 설정한다.
1. 프로필이 지정되지 않은 경우, 맨 위의 기본값이 사용된다.
2. 그 다음 순서로 dev관련 논리 문서를 읽는데
만약 dev 프로필이 설정되어있다면 기존데이터를 dev 관련 논리 문서의 값으로 대체한다.
dev가 사용되지 않으면 무시된다.
3. 그 다음 순서로 prod 관련 논리 문서를 읽는데 만약 prod 프로필이 설정되어있다면
기존 데이터를 prod 관련 논리 문서의 값으로 대체한다.
<설정값 사이의 우선순위>
1. 커맨드 라인 옵션 인수
2. 자바 시스템 속성
3. OS 환경변수
4. 설정 데이터 (properties, yml)
더 유연한 것이 우선권을 가진다. 범위가 넒은 것 보다 좁은 것이 우선권을 가진다.
applicaiton.properties 에 외부 설정값들을 보관한다. 이렇게 설정 데이터를 기본으로 사용하다가
일부 속성을 변경할 필요가 있다면 더 높은 우선순위를 가지는 자바 시스템 속성이나
커맨드 라인 옵션 인수를 사용하면 된다.
'프로그래밍 > SpringBoot' 카테고리의 다른 글
| [SSE] SseEmitter로 실시간 주문 상태 업데이트 구현하기 (3) | 2025.08.09 |
|---|---|
| [SpringBoot] 다양한 외부 설정 조회방법 (0) | 2024.05.31 |
| [SpringBoot] 스프링부트와 내장톰캣 (0) | 2024.05.23 |
