본문 바로가기

Spring

[Spring] @Profile

@Profile

@Profile 은 애플리케이션의 환경별로 다른 빈을 등록하고, 환경에 따라 다른 설정을 적용할 수 있도록 도와주는 기능이다.

이를 통해 개발, 테스트, 운영 환경별로 다른 설정을 쉽게 관리할 수 있다.

환경은 사용자가 정의하기 나름이지만 dev(개발), test(테스트), local(로컬), prod(운영) 등이 사용된다.

환경별로 다른 파일을 만드는 경우 무조건 application-{사용할 환경 이름}.properties 형식으로 파일 이름을 지정해야한다.

 

 

@Profile 사용

  • @Profile을 사용하여 특정 빈을 특정 프로파일에서만 활성화할 수 있다.
  • 예를 들어, @Profile("dev")로 설정된 빈은 dev 프로파일이 활성화된 경우에만 생성되고 등록된다.
  • 이를 통해 환경별로 필요한 빈을 분리해 등록

 

적용 예시

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
public class AppConfig {

    @Bean
    @Profile("dev")
    public DataSource devDataSource() {
        // 개발 환경에 맞는 DataSource 설정
    }

    @Bean
    @Profile("prod")
    public DataSource prodDataSource() {
        // 운영 환경에 맞는 DataSource 설정
    }
}
  • @Configuration 클래스나 특정 빈 메서드에 @Profile 애너테이션을 붙여 사용
  • 예시로 개발 환경에서 사용하는 DataSource 설정과 운영 환경에서 사용하는 DataSource 설정을 각각 정의할 수 있다.

 

활성화 방법

  • 프로그램 실행 시 설정: spring.profiles.active 속성을 통해 활성화할 프로파일을 지정할 수 있다.

application.properties 설정

  • .properties 로는 각 profile 에 맞는 파일을 모두 생성해야 한다.
  • profiles 를 설정은 application.properties 파일에 spring.profiles.active={활성화할 환경} 을 통해 할 수 있다.
  • 설정 후에 프로그램을 run 하면 profile이 동작하는 것을 확인할 수 있다.

 

다중 프로파일

@Profile({"dev", "prod"})
  • 여러 프로파일을 동시에 지정할 수도 있다.
  • 예를 들어 @Profile({"dev", "test"})라고 지정하면 dev 또는 test 프로파일이 활성화된 경우 해당 빈이 등록된다.

application.yml 설정

# applicaton.yml
server:
  port: 8080
  
spring:
  profiles:
    active: local
    
---
# applicaton-local.yml
spring:
  config:
    activate: 
      on-profile: local
      
---
# applicaton-dev.yml
spring:
  config:
    activate: 
      on-profile: dev

server:
  port: 8081
      
---
# applicaton-prod.yml
spring:
  config:
    activate: 
      on-profile: prod

 

 

활성화 방법

spring:profiles:active: local
  • 활성화할 프로파일을 지정하는 속성
spring:config:activate:on-profile: dev

 

  • 특정 프로파일이 활성화될 때만 해당 설정을 적용하도록 조건부로 설정
  • 만약 active가 dev로 프로파일 설정되어 있다면 서버 포트가 8081로 설정
  • 그렇지 않으면 서버 포트가 8080으로 설정

 

특징

  • .yml 타입의 파일로는 더욱 간편하게 profile 을 설정할 수 있다.
  • --- 프로파일 영역별 경계를 설정하는 것이 가능하다.
  • 즉, 하나의 yml 파일로 여러가지 프로파일의 경계를 설정할 수 있다.

 

다중 프로파일

# application.yaml
spring:
  profiles:
    active: dev

# application-dev.yaml
spring:
  profiles:
    include:
      - "prod"
      - "local"
  • 위 예제에서 dev 프로파일이 활성화되면, prod와 local 프로파일의 설정도 함께 로드된다.