Spring/Spring

Spring Profile마다 Application.* 다르게 사용하기 [미완]

backend dev 2023. 1. 20.

현재 배포환경이

 local인지

개발서버인 dev인지

프로덕션서버인 prod인지 등 

 

서버의 배포환경에 따른 설정값들이 다를것이다 (

 

 

 

Spring Profile 마다 application.* 매핑하기 (파일이름으로 매핑)

application.properties를 사용한다고 할때

application-local.properties

application-dev.properties

application-prod.properties

이런식으로 파일을 추가적으로 만든다고하면

 

Spring profile이 local일때는 application-local.properties를 가지고 서버 동작시키고

Spring profile이 dev일때는 application-dev.properties를 가지고 서버 동작시키고

Spring profile이 prod일때는 application-prod.properties를 가지고 서버 동작시킨다.

 

application.yml를 사용한다면

application-local.yml

application-dev.yml

application-prod.yml 처럼 만들면 해당 Profile에 대한 스프링환경설정파일로 인식하고

해당 파일을 가지고 서버를 동작시킨다.

 

주의할점!!:

application-프로필.yml들은 application.yml에 설정된 값들을 가지고있다.

application.yml에 기본적으로 설정된값들과 다른값을 가지고 싶다면 

application-프로필.yml에서 한번더 설정해서 , 그 값을 덮어씌울 수 있다.

테스트해보기

application-prod.yml를 만들고

logging:
  level:
    hello:
      springmvc: WARN

다음과 같이 hello.springmvc 패키지와 그 하위패키지의 로그레벨을 WARN으로 지정했다.

 

로그를 찍어볼 로그테스트컨트롤러 코드는 다음과 같다.

package hello.springmvc.basic;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController

public class LogTestController {

    @GetMapping("/log-test")
    public String logTest() {
        String name = "Spring";
        String name2 = "Spring2";

        log.trace("trace log={}, {}", name, name2);
        log.debug("debug log={}, {}", name, name2);
        log.info("info log={}", name);
        log.warn("warn log={}, {}", name, name2);
        log.error("error log={}, {}", name, name2);

        return "OK";
    }


}

Spring Profile을 prod로 설정하고 서버를 킨후 로그테스트를 진행하면 

application-prod.yml에서 로그레벨을 WARN으로 설정했으니까.

WARN이상의 로그만 보여야 할것이다.

Spring Profile를 prod로 설정하고 서버를 킨다.
로그 테스트를 진행

WARN이상의 로그만 보인다.

 

Spring Profile에 따라  다른 application.* 실행시키기 (application.yml 설정으로)

spring:
  profiles:
    active: local

    group:
      prod:
        - db-prod
        - aws-prod
    include: 
      - mylocaldb
      - mylocalaws

spring.profiles.active로 현재 서버를 어떤 profile로 동작시킬건지 설정가능하다.

spring.profiles.include로 어떤 Profile이든 "항상" 포함될 환경설정파일(yml)을 지정할 수 있다.

spring.profiles.group 으로 어떤 Profile일 경우 포함되어야할 환경설정파일(yml)을 지정할 수 있다.

 

 

위에 코드를 보면 어떤 profile이든 application-mylocaldb.yml 과 application-mylocalaws.yml는 같이 항상 실행될것이고

profile이 prod인 경우 application-db-prod.yml , application-aws-prod.yml도 같이 실행될것이다.

 

 

하나의 application.yml에서 profile마다 설정 다르게하기

기본으로 있는 application.yml에서 spring profile마다 설정을 다르게 진행할 수 있다.

#어떤 Profile이든 적용되는 공통설정
logging:
  level:
    hello:
      springmvc: warn
server:
  port: 8080

---
spring:
  config:
    activate:
      on-profile: alpha

logging:
  level:
    hello:
      springmvc: info
server:
  port: 8081

---
spring:
  config:
    activate:
      on-profile: beta

logging:
  level:
    hello:
      springmvc: error
server:
  port: 8082

윗부분에는 모든 프로필에 적용될 공통설정을 적고, 

--- 와 spring.config.activate.on-profile을 이용하여 각 프로필별 설정을 다르게할 수있다.

 

테스트를 해본결과 alpha라는 profile로 실행시

spring:
  config:
    activate:
      on-profile: alpha

logging:
  level:
    hello:
      springmvc: info
server:
  port: 8081

부분 설정이 적용되어 8081포트로 서버가 동작하였다.

---와 spring.config.activate.on-profile를 이용하여 프로필별 설정을 하나의 yml파일안에서 설정할 수 있다.

이런식으로 하나의 db profile의 yml를 생성해서 공통으로 쓰이는부분은 위쪽에 적어두고

각 profile마다 다른 설정을 적어두면 좋을거같다.

 

Profile에 따라 선별적으로 Bean 등록하기

@Profile 어노테이션을 이용하여 스프링컨테이너에 등록될 빈을 profile에 따라 다르게 등록 할 수 있다.

 

추가공부가 필요함.

 

Spring Profile 지정해서 서버 동작시키기

1. 인텔리제이 환경

상단의 Edit Configurations 선택
Active profiles에 값을 넣어주면 된다.

2. application.yml에서 설정

spring:
  profiles:
    active: prod

다음과 같이 active할 profile의 이름을 적어주면 해당 profile로 서버가 동작한다.

 

 

3. Jar 실행할때

java -jar -Dspring.profiles.active=local 파일이름.jva

 

 

4. 운영체제에 환경변수로 등록해서 사용하기.

 추가 공부가 필요함.

 

 

 

 

Spring Boot profiles 설정하기

📎 Spring Boot profiles 설정하기 안녕하세요, 이번 포스팅에서는 스프링 부트에서 여러 profile을 설정하고, 설정 값들을 객체에 바인딩하는 방법에 대해 살펴보겠습니다. 실제 개발을 진행하고 운영

zzang9ha.tistory.com

 

 

Spring Boot | profile설정 ( + 2.4이상 버전 변경내용 추가 )

Spring Profiles는 애플리케이션 설정을 특정 환경에서만 적용되게 하거나, 환경 별(local, test, production 등)로 다르게 적용할 때 사용된다. properties를 사용하면, 환경별로 각각 다른 파일을 만들어 설

gaemi606.tistory.com

 

https://www.baeldung.com/spring-profiles

댓글