백엔드/Spring

[Spring] Spring Boot 외부 설정

kwang2134 2024. 10. 5. 15:18
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. 우선순위

  • 더 유연하고 범위가 좁은 것이 우선
    1. 커맨드 라인 인수
    2. 자바 시스템 속성
    3. OS 환경 변수
    4. 외부 파일

외부 설정 통합

  • 스프링 부트가 각 설정 방식을 추상화하여 제공
  • 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

 

설정 파일 우선순위

  • 내부 -> 외부
    1. 내부 application.properties 파일
    2. 내부 application -{profile}.properties 파일
    3. 외부 application.properties 파일
    4. 외부 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