728x90
반응형
728x90
외부 설정
- 하나의 애플리케이션을 다른 환경에서 사용하기 위해 각각 환경에 따른 설정값을 주입하는 방식
설정 값 내부 포함
- 각 환경에 맞는 설정 값으로 빌드하는 방식
단점
- 각 환경마다 별도의 빌드 필요
- 각 환경마다 빌드 결과물이 다름
- 최종 빌드 결과물을 다른 환경에서 사용할 수 없음
실행 시점 외부 주입
- 배포 환경과 무관한 하나의 결과물을 생성하고 실행 시점 외부에서 설정 값을 주입하는 방식
장점
- 하나의 동일한 빌드 파일을 여러 환경에서 사용 가능
- 새로운 환경 추가 시 추가 빌드 없이 새로운 설정 값 주입으로 사용 가능
설정 방법
- OS 환경 변수: OS에서 지원하는 외부 설정, 해당 OS를 사용하는 모든 프로세스에서 사용
- 자바 시스템 속성: 자바에서 지원하는 외부 설정, 해당 JVM안에서 사용
- 자바 커맨드 라인 인수: 커맨드 라인에서 전달하는 외부 설정, 실행 시 main(args) 메서드에서 사용
- 외부 파일(설정 데이터): 프로그램에서 외부 파일을 직접 읽어서 사용
1. OS 환경 변수
- OS의 환경 변수 설정을 통한 방식으로 해당 OS를 사용하는 모든 프로그램에서 읽을 수 있는 방식
사용법
- OS 환경 변수를 설정하고 필요한 곳에서 System.getenv()를 사용
2. 자바 시스템 속성
- 실행한 JVM 안에서 접근 가능한 외부 설정으로 자바 프로그램이 실행될 때 사용
- OS 환경 변수 보다 우선으로 적용
사용법
- JVM을 실행할 때 -D 옵션으로 속성을 지정
- 설정된 값은 애플리케이션 코드 내에서 접근할 수 있음
3. 자바 커맨드 라인 인수
- 애플리케이션 실행 시점에 외부 설정값을 main(args) 메서드의 args 파라미터로 전달하는 방법
- -- 또는 - 로 시작하는 형식으로 전달
- 가장 우선순위가 높은 방식
사용법
- java -jar 명령어를 사용하여 애플리케이션을 실행할 때 -- 또는 - 형식으로 전달
- 인수는 공백을 통해 구분
3.1 커맨드 라인 옵션 인수
- 파라미터로 인수 전달 시 - (dash)를 두 개 붙인 -- 형식으로 전달하는 방식
- -- 방식으로 전달 시 key=value 형태로 지정
- 하나의 키에 여러 값 지정 가능
- 스프링 부트가 옵션 인수를 key, value 형태로 사용 가능하게 해 줌
4. 외부 파일
- 설정 값을 파일에 넣어 관리하는 방식
- 애플리케이션 로딩 시점 파일을 읽어 들여 사용
사용법
- 각 환경마다 동일한 이름의 application.properties 파일 생성
- application.properties의 파일을 자바 실행 위치에 배치
- 스프링이 해당 파일을 읽어 들이는 PropertySource 구현체를 제공
5. 우선순위
- 더 유연하고 범위가 좁은 것이 우선
- 커맨드 라인 인수
- 자바 시스템 속성
- OS 환경 변수
- 외부 파일
외부 설정 통합
- 스프링 부트가 각 설정 방식을 추상화하여 제공
- Environment를 통해 특정 설정 방법에 종속되지 않고 일관성 있게 접근 가능
- 설정 방식이 변경되어도 코드의 변화가 없음
내부 파일 분리
- 설정 파일을 외부에 두고 관리하지 않고 프로젝트 내부에 두고 분리하여 관리하는 방식
- 프로젝트 내 각각 환경에 필요한 설정 파일들을 두고 사용
사용법
- 각 환경 설정에 프로필을 지정
- 애플리케이션 실행 시점 프로필의 정보를 넘겨 원하는 환경의 설정을 사용
- 각 환경마다 설정 파일을 분리하여 사용 가능
- 하나의 파일에 나누어 설정 가능
데이터 설정 기준
- 스프링은 문서를 위에서부터 아래로 읽으며 값 들을 설정
- 기존 데이터가 있다면 덮어씀
- 프로필을 조건문이라 봤을 때 조건에 맞다면 해당 값들을 사용
- 밑에 조건 없는 설정 값들이 존재한다면 덮어씌워짐
#기본값
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
#---
url=hello.db.com
#적용 순서 - profile=dev
#기본값
url=local.db.com
username=local_user
password=local_pw
#profile=dev -> true
url=dev.db.com
username=dev_user
password=dev_pw
#profile=prod -> false
url=dev.db.com
username=dev_user
password=dev_pw
#url적용
url=hello.db.com
username=dev_user
password=dev_pw
#최종값
url=hello.db.com
username=dev_user
password=dev_pw
설정 파일 우선순위
- 내부 -> 외부
- 내부 application.properties 파일
- 내부 application -{profile}.properties 파일
- 외부 application.properties 파일
- 외부 application -{profile}.properties 파일
스프링 부트 - 핵심 원리와 활용 강의 | 김영한 - 인프런 강의 내용 참고
728x90
'백엔드 > Spring' 카테고리의 다른 글
[Spring] 모니터링 환경 구성 (0) | 2024.10.12 |
---|---|
[Spring] Actuator (0) | 2024.10.08 |
[Spring] Jar & SpringBoot Jar (0) | 2024.09.28 |
[Spring] 스프링 부트 (2) | 2024.09.27 |
[Spring] Querydsl DTO & 동적 쿼리 (1) | 2024.09.26 |