[Spring] 스프링 @Profile 어노테이션을 통한 환경 설정(Spring Environment Configuration, @Profile)

| 스프링 환경설정(Spring Environment Configuration)


스프링에서는 프로필(Profile)을 통해 런타임 환경을 설정할 수 있는 기능을 제공한다. 이 기능을 이용하여 테스트환경에서 여러 테스트를 돌리고 난 다음 프로덕션 환경으로 전환하는 것을 어렵지 않게 할 수 있다.


스프링이 동작할 때 해당 환경(프로필)이 어떤 것인지를 알기 위해서는 ApplicationContext 인터페이스의 구현 객체에서 getEnvironment 매서드를 통해 Environment 객체를 뽑아낸 뒤 확인이 가능하다.

@Component
public class AppRunner implements ApplicationRunner {

@Autowired
ApplicationContext ctx;

@Autowired
BookRepository bookRepository;

@Override
public void run(ApplicationArguments args) throws Exception {
Environment environment = ctx.getEnvironment();
System.out.println(Arrays.toString(environment.getActiveProfiles()));
System.out.println(Arrays.toString(environment.getDefaultProfiles()));
}
}
[]
[default]

현재 활성화된 프로필이 없으므로 빈 배열을 반환한다. 또한 Default 프로필은 default 값이라는 것을 확인할 수 있다. 


| @Profile 어노테이션을 통한 프로필 설정


@Profile 어노테이션을 통해 스프링 환경설정을 할 수 있다. 자바 설정 파일을 통해 설정하는 방법은 다음과 같다.

@Configuration
@Profile("test")
public class TestConfiguration {

@Bean
public BookRepository bookRepository(){
return new TestBookRepository();
}
}

위 코드는 스프링 프로필이 test일 시, @Bean 어노테이션이 붙은 bookRepository 빈이 컨테이너에 등록이 된다는 것을 뜻한다. 


그 다음 JVM의 옵션에 해당 프로파일을 지정하는 옵션을 설정한다.

-Dspring.profiles.active="test"


참고로 설정파일에 직접 명시하지 않아도 POJO 클래스에 @Profile 어노테이션을 붙이면 위와 같이 test 프로필 환경에서 등록되는 스프링 빈을 구현할 수 있다.

@Repository
@Profile("test")
public class TestBookRepository implements BookRepository{
}


@Profile 어노테이션에서 ! 와 같은 NOT 표현식이나 &, | 과 같은 논리연산자도 쓸 수 있다.

@Repository
@Profile("!prod | saelobi")
public class TestBookRepository implements BookRepository{
}


다시 AppRunner을 가동하면 다음과 같이 출력된다.

[test]
[default]

이 글을 공유하기

댓글(0)

Designed by JB FACTORY