티스토리 뷰

Spring

[Spring] 활성 프로파일(Profile)의 관리를 위한 @Profile과 @ActiveProfiles

망나니개발자 2021. 8. 1. 17:17
반응형

개발을 하다 보면 서로 다른 환경을 운영해야 한다. 이번에는 이와 관련되어 Spring이 지원해주는 기술들에 대해 알아보도록 하자.

 

 

 

1. 활성 프로파일과 @Profile, @ActiveProfiles


 

[ 환경의 분리 ]

개발을 하다 보면 여러 개의 환경을 관리해야 한다. 예를 들어 테스트 코드를 위한 테스트 환경, 개발을 하고 테스트를 하기 위한 알파 환경, 실제 운영 환경과 동일하게 맞춰두고 QA 등을 진행하는 스테이지 환경, 실제 서비스가 운영되는 운영 환경 등이 있다.

그렇기 때문에 각각의 환경들에 맞게 서로 다르게 빈 또는 프로퍼티들을 정의해야 할 수 있다. 예를 들어 개발을 위해서는 로컬 또는 내장 캐시를 이용할 수 있지만 실제 운영을 위해서는 외부 캐시를 이용하는 것이 대표적인 경우이다.

Spring은 3.1부터 환경에 따라 빈 정보가 달라져야 하는 경우에 파일을 여러 개로 분리하는 대신 빈 구성이 달라지는 내용을 프로파일로 정의해서 만들어두고, 실행 시점에 어느 프로파일의 빈 설정을 사용할 지 지정할 수 있도록 도와주고 있다. 즉, 환경에 따라 서로 다르게 빈을 정의할 수 있도록 환경을 분리하는 기술을 제공하는데, 이와 관련된 기술이 @Profile과 @ActiveProfle 이다.

 

 

[ 활성 프로파일을 지정하기 위한 @ActiveProfiles 어노테이션 ]

활성 프로파일이란 스프링 컨테이너를 실행할 때 실행 환경을 지정해주는 속성으로, 환경을 구분하기 위해 사용된다. 프로파일은 JVM의 옵션으로도 설정을 할 수 있고, 스프링에서도 설정을 할 수 있다.

JVM 옵션으로 프로파일을 설정하기 위해서는 다음의 옵션을 지정해줄 수 있다.

-Dspring.profiles.active=dev

 

 

그리고 JVM이 아닌 스프링에서 현재의 프로파일(환경)을 지정하도록 도와주는 어노테이션이 @ActiveProfiles 이다.

예를 들어 테스트 환경에서는 현재의 프로파일을 test로 설정해주어야 하는데, 다음과 같이 @ActiveProfiles를 설정해주면 해당 프로파일로 스프링 컨테이너가 실행된다.

@ActiveProfiles("test")
public class UnitTestConfig {

}

 

만약 활성 프로파일이 test라면 test 프로파일이 아닌 다른 프로파일을 위해 등록된 빈들이나 설정 파일들은 모두 무시(비활성화) 될 것이다.

 

 

 

[ 특정 프로파일에 활성화하기 위한 @ActiveProfiles 어노테이션 ]

예를 들어 Redis 캐시 설정은 운영 환경(prod)에서만 사용하기를 원할 수 있다. 그럴 때 해당 설정 클래스가 원하는 환경에서만 등록(활성화)되도록 설정을 해줄 수 있는데, 이를 위해 사용되는 것이 @Profile 어노테이션이다.

@Profile("prod")
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60 * 60 * 24 * 30)
public class RedisConfig extends AbstractHttpSessionApplicationInitializer {

    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(host, port);
        return new LettuceConnectionFactory(redisStandaloneConfiguration);
    }

    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
        return serializer;
    }

}

 

위와 같은 설정 클래스는 @Profile이 prd로 설정되어 있기 때문에 현재의 프로파일(환경)이 prd인 경우에만 활성화된다. 만약 prd가 아닌 경우에만 사용하기를 원한다면 !prd 와 같이 설정할수도 있다.

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함