흰 스타렉스에서 내가 내리지

설정 파일 프로필 별 분리 본문

Spring

설정 파일 프로필 별 분리

주씨. 2023. 11. 8. 20:41
728x90

개발용 설정 파일: application-dev.properties
운영용 설정 파일: application-prod.properties

 

빌드 시점에 개발, 운영 설정 파일을 모두 포함해서 빌드한다.

spring.profiles.active 외부 설정에 값을 넣으면 해당 프로필을 사용한다고 판단한다.

 

)

- spring.profiles.active=dev

    - dev 프로필이 활성화 되었다.

    - application-dev.properties 를 설정 데이터로 사용한다.

 

- spring.profiles.active=prod

    - prod 프로필이 활성화 되었다.

    -application-prod.properties 를 설정 데이터로 사용한다.

 

 

실행

IDE에서 커맨드 라인 옵션 인수 실행

     →  --spring.profiles.active=dev

 

IDE에서 자바 시스템 속성 실행

     → -Dspring.profiles.active=dev

 

Jar 실행
    → ./gradlew clean build
    build/libs
로 이동
    java -Dspring.profiles.active=dev -jar external-0.0.1-SNAPSHOT.jar

    java -jar external-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

 

 

 


 

설정 파일 프로필별 합체

 

- 스프링은 하나의 application.properties 파일 안에서 논리적으로 영역을 구분하는 방법을 제공한다.

 

- application.properties 라는 하나의 파일 안에서 논리적으로 영역을 나눌 수 있다.

       → application.properties 구분 방법 #--- 또는 !--- (dash 3)

       → application.yml 구분 방법 --- (dash 3)

 

 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

 

실행

IDE에서 커맨드 라인 옵션 인수 실행

     →  --spring.profiles.active=dev

 

IDE에서 자바 시스템 속성 실행

     → -Dspring.profiles.active=dev

 

Jar 실행
    → ./gradlew clean build
     build/libs 
로 이동
     java -Dspring.profiles.active=dev -jar external-0.0.1-SNAPSHOT.jar

     java -jar external-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

 

 


프로필을 적용하지 않고 실행하면 해당하는 프로필이 없으므로 키를 각각 조회하면 값은 null 이 된다.

프로필을 지정하지 않고 실행하면 스프링은 기본으로 default 라는 이름의 프로필을 사용한다.

 

 

기본값

PC에서 개발하는 것을 보통 로컬( local ) 개발 환경이라 한다. 이때도 항상 프로필을 지정하면서 실행하는 것은 상당히 피곤할 것이다.
설정 데이터에는 기본값을 지정할 수 있는데, 프로필 지정과 무관하게 이 값은 항상 사용된다.

 

  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.yml

 my:
    datasource:
      url: local.db.com
      username: local_user
      password: local_pw
      etc:
        maxConnection: 2
        timeout: 60s
        options: LOCAL, CACHE
        
--- 
spring:
    config:
      activate:
        on-profile: dev
  my:
    datasource:
      url: dev.db.com
      username: dev_user
      password: dev_pw
      etc:
        maxConnection: 10
        timeout: 60s
        options: DEV, CACHE
        
--- 
spring:
    config:
      activate:
        on-profile: prod
  my:
    datasource:
      url: prod.db.com
      username: prod_user
      password: prod_pw
      etc:
        maxConnection: 50
        timeout: 10s
        options: PROD, CACHE

 

 

여기서 처음에 나오는 다음 논리 문서는 spring.config.activate.on-profile 와 같은 프로필 정보가 없다.

따라서 프로필과 무관하게 설정 데이터를 읽어서 사용한다.

이렇게 프로필 지정과 무관하게 사용되는 것을 기본값이라 한다.

 

 

프로필을 준 부분이 기본값 보다는 우선권을 가진다.

 

 

- yml은 --- (dash 3개)를 사용해서 논리 파일을 구분한다.

- spring.config.active.on-profile 을 사용해서 프로필을 적용할 수 있다. 

 


설정 데이터 적용 순서 

 

사실 스프링은 단순하게 문서를 위에서 아래로 순서대로 읽으면서 사용할 값을 설정한다.

 

단순하게 문서를 위에서 아래로 순서대로 읽으면서 값을 설정한다.

이때 기존 데이터가 있으면 덮어쓴다.

논리 문서에 spring.config.activate.on-profile 옵션이 있으면 해당 프로필을 사용할 때만 논리 문서를 적용한다.