관리 메뉴

제뉴어리의 모든것

application.yml 을 공통 내용과 환경별 파일로 나누기 본문

Spring Boot

application.yml 을 공통 내용과 환경별 파일로 나누기

제뉴어리맨 2022. 11. 4. 20:35

전체 항목

  • 다양한 방법의 application 파일 나누기
  • 결론

다양한 방법의 application 파일 나누기

 

1. 하나의 yml 파일에 다 넣어서 관리하기

#application.yml 의 내용입니다

spring:
  config:
    activate:
      on-profile: dev # 해당 내용의 설정은 dev 라고 properties를 활성화 시킬때 적용시킴을 나타냄
server:
  port: 9189
my:
  nickname: 9189멤버
---                         # 한파일내에서 각각의 설정 파일임을 나누는 기준선
spring:
  config:
    activate:
      on-profile: prod # 해당 내용의 설정은 prod 라고 properties를 활성화 시킬때 적용시킴을 나타냄
server:
  port: 8901
my:
  nickname: 8901멤버

위와 같이 하나의 yml 파일에 모든 내용을 넣는것이다.

 

--- 를 기준으로 마치 위아래의 내용을 각각 하나의 yml 파일로써 인식해준다. 

참고로 --- 로 나누는 기준은 스프링에서 공식으로 지원하기 때문에 인식하는것이다.

그래서 위와같이 하나에 다 정의를 해놓고, IDE에서 실행시킬때나 빌드된 jar파일을 -jar 명령어를 사용하여 실행시킬때 적용 시킬 수 있다.

 

  • IDE에서 적용하는 법 (Intellij 2022.2.3 Ultimate 기준)

1. IDE우측 상단에 존재하는, 아래와 같은 메뉴에서 Edit를 클릭한다

 

 

2. Active profiles 항목에서 원하는 properties 파일 이름을 입력

위에서 보았던 application.yml 파일 내에 정의된 dev라는 키워드를 입력하였다.

 

- application.yml 의 내용-

spring:
  config:
    activate:
      on-profile: dev

 

3. 실행 결과 확인하기

아래 화면에서 보이듯이,

dev에서 설정했던 Port 번호로 서버가 잘 열렸다.

결과 화면은 없지만

물론 프로퍼티 값으로 설정했던

my:

    nickname:

값도 아래와 같이 잘 가져올것이다.

참고로 @Value 는 import org.springframework.beans.factory.annotation.Value; 를 사용할것.

@Value("${my.nickname}")
private String nickname;

 

 

2. 공통 내용의 application.yml 하나와 환경별 application.yml 여러개

아래와 같이 resources 내에 공통내용 (application.yml) 설정파일 하나와

어플리케이션이 구동되는 환경에 따른 설정값이 저장된 분기 (application-{환경}.yml) 설정 파일들이다.

 

  • application.yml 내용
# application.yml, 공통 내용

server:
  port: 9090

 

  • application-dev.yml
#application-dev.yml, 개발환경시 적용 내용

my:
  nickname: DEV USER!!!

 

  • application-prod.yml
#application-prod.yml, 출시버전 적용 내용

my:
  nickname: PROD USER!!!

 

  • IDE에서 적용하는 법 (Intellij 2022.2.3 Ultimate 기준)

위에서 했던 방법과 동일하다.
사진처럼 해당 메뉴를 클릭하고, 적용하고 싶은 환경을 입력하여 주면 된다. ( ex: dev, prod...)

 

1. 결과 화면

dev 로 적용되었고, 필자가 테스트를 위해 찍어둔

my:
  nickname: 

에 대한 값이 찍힌것을 볼 수 있다.

 

  • BUILD 시 적용하는 법

현재 파일의 구조는 "2. 공통 내용의 application.yml 하나와 환경별 application.yml 여러개" 의 상황과 동일하다.

Gradle을 이용하여 Build를 하고 생성된 ~.jar 파일에 특정 application.yml을 적용하고 싶은 경우에 사용 하는 방법이다

2가지 경우가 있다.

 

 

build (1) 를 이용하는 방법

 

1.

우선 build를 진행하려면 

설정파일의 기본이 되는 application.yml에 아래처럼 내용을 넣는다

server:
  port: 9090

spring:   # 추가 된 내용
  profiles:
    include:
      - dev

 

2.

Gradle 탭에서 build를 눌러서 build를 진행한다. ( => jar 파일 생성 )

해당 jar 파일을 java -jar  를 이용하여 실행할때 아래처럼 vm 옵션을 추가하여 실행한다.

 

java -jar -Dspring.profiles.active=prod application-test-0.0.1-SNAPSHOT.jar

 

3. 결과 화면

사진을 보면 dev, prod 두개가 적용됬다고 나온다.

하지만 application-dev.yml 과 application-prod.yml의 내용이 동일하기 때문에,

직접 vm 옵션을 준 prod의 내용으로 모두 적용된다.

그러한 증거로, 마지막 줄 "PROD USER!!! =============" 라는 출력 메세지가 보일것이다. 필자가 확인을 위해 넣은 

my:
  nickname 

에 대한 콘솔 로그이다.

 

 

bootJar (2) 를 이용하는 방법

build 와 다르게 

application.yml 에 아래의 내용을 추가 할 필요없다.

 

spring:   # 추가 된 내용
  profiles:
    include:
      - dev

 

그냥 bootJar로 jar 파일을 만들고, 

위와 동일하게 

java -jar -Dspring.profiles.active=prod application-test-0.0.1-SNAPSHOT.jar

명령어를 넣어주면 된다.

 

 

 

 

 

 


결론

의외로 알아보면서 시간이 오래 걸렸다....

그래서 그런지 뭔가 더 집착을 하게 되서 여러가지를 알아보고 테스트 했지만,

 

"2. 공통 내용의 application.yml 하나와 환경별 application.yml 여러개"

항목의 

build (1) 를 이용하는 방법

방식으로 하면 될거 같다....

 

평상시에는 

application.yml에 아래와 같이 넣어서 쓰고,,,

server:
  port: 9090

spring:   # 추가 된 내용
  profiles:
    include:
      - dev

build 진행해서 jar파일로 배포를 해서

해당 jar 파일을 실행 시킬때,

아래의 명령어를 이용하여 service를 등록하든 하면 될것 같다...

java -jar -Dspring.profiles.active=prod application-test-0.0.1-SNAPSHOT.jar

 

 


참조 

https://adg0609.tistory.com/m/61

 

[IntelliJ] IntelliJ profiles 옵션 지정하기

[IntelliJ] IntelliJ profiles 옵션 지정하기 - IntelliJ local, dev 옵션 지정하기 - 개발을 하다보면 local에서 1차 테스트 후, 2차로 dev 서버에 올리는 경우가 있는데 application.yml 에 -dev, -local 이라 명명한 뒤 sp

adg0609.tistory.com

https://joomn11.tistory.com/110

 

[Spring] Spring Boot Profile 환경별 설정 (2.4버전)

기존 설정 # application.yml # default spring: profiles: active: test --- spring: profiles: test include: - common # 기타 설정 .. --- spring: profiles: prod # 기타 설정 .. --- spring: profiles: dev # 기타 설정 .. spring.profiles 설정을

joomn11.tistory.com

https://backtony.github.io/spring/2021-08-21-spring-start-8/

 

Spring Boot 2.4 profile 환경별 설정하기

Java, JPA, Spring을 주로 다루고 공유합니다.

backtony.github.io

https://codingdog.tistory.com/entry/spring-boot-profile-%EC%84%A4%EC%A0%95-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EB%B6%84%EB%A6%AC%ED%95%B4-%EB%B4%85%EC%8B%9C%EB%8B%A4