티스토리 뷰
Spring Profile 알아보기
Profile 이란?
- Profile은 Bean들의 그룹이라고 생각하면 쉽다!
- ApplicationContext의 getEnvironment()를 통해 가져올 수 있다!
- Environment의 역할은 활성화할 Profile을 확인하고 설정해준다!
- 위의 실행결과는 아래와 같다! 현재 활성화된 Profile은 없고 default는 언제나 적용된다
- 그럼 이걸 언제쓸까?
Profile을 언제쓸까?
- 아직 내가 직접적으로 사용해 본 적은 없다..!
- Profile은 각각의 환경에 따라 다른 Bean을 써야하는 경우
- 혹은 특정한 Bean들을 써야하는 경우에 사용된다
- 예를들어 테스트 환경에서는 A라는 Bean을 사용하고, 배포 환경에서는 B라는 Bean을 쓰고싶다면
- Profile을 통해 설정해 줄 수 있다!
Profile 정의하기
- 그럼 profile을 정의해보자
- Profile은 @Profile("name") 애너테이션을 통해 name이라는 profile로 설정 해줄 수 있다!
- 위와 같이 Profile을 클래스 또는 메서드에 정의할 수 있다!
- 그림은 Test라는 Profile을 생성했다
- test라는 profile이 활성화 될 때만 bean이 생성된다!
- 그럼 test profile을 활성화 시켜보자!
Profile 설정하기
- Profile을 active시키기 위해서는 2가지의 방법이 있다!
- 일단 스프링부트 Application -> Edit Configuration에 들어가자!
- 그럼 위와같이 Active profiles에 test를 넣어줄 수 있다!
- 근데 이건 인텔리제이 버전에 따라 다르다고 한다
- 그래서 다른 방법이있는데 위의 창에서 맨위로 올리면 VM options이 나온다
- 바로 active profile을 설정해 주는 것이다!
- -Dspring.profiles.active=test 로 active되는 profile을 설정해 줄 수 있다!
- 아직 스프링의 이런 명령어에 익숙하지 않아서 이러한 명령어들을 정리해서 한번 올려야겠다..!
- 그럼 test를 추가하고 한번 active된 profile들을 출력해보자
- 그럼 아까 빈칸이였던 활성화된 profile에 test가 나온다!!
- 그럼 진짜 test때에만 bean이 생성되는지 확인해보자!
- 먼저 test profile에서만 생성되는 TestBookRepo를 하나 만들었다
- 그 후 @Autowired를 통해 BookRepo를 주입하고 실행시켜 결과를 확인해보자!
- test profile이 active이기 때문에 잘 주입된다! 결과도 잘 나온다
- 그럼 이번에는 VM options에 넣어준 -Dspring.profiles.active=test를 지우고 실행시켜보자!
- 그럼 다음과 같이 빌드에 실패한다! 이유는 BookRepository가 test Profile에서만 생성되기 때문이다
- 현재는 test가 active하지 않기 때문에 Bean이 생성될 수 없고
- @Autowired는 Bean을 찾지 못하면 오류가 나기 때문에(required = true 때문에!) Bean을 못찾고 오류가 난다!
Profile 표현식
- Profile을 선언할때도 표현식이 가능하다
- !(not) , &(and), |(or) 를 사용할 수 있다
- 예를들어 위의 상황에서 아래와 같이 !test로 쓴다면? test가 아닐때만 Bean을 생성한다
- 그리고 실행시켜보면?
- 다음과 같이 잘 실행된다! 그리고 active한 profile은 없지만 현재 test가 아니기 때문에 Bean이 잘 주입된다!
- 이런 표현식도 잘 활용하면 좋을 것 같다!
Profile에 대해 알아봤는데 아직 실습하면서 제대로 써본 기억이 없다
특정한 상황에만 Bean을 생성했어야 하는 상황을 못만나서 그런 것 같다
다음에 Profile을 쓸때가 온다면 기억해서 써먹어버려야지..!
'Spring > Spring IoC' 카테고리의 다른 글
ApplicationEventPublisher에 대해 알아보자! (0) | 2020.05.19 |
---|---|
Bean의 스코프에 대해 알아보자 (3) | 2020.05.17 |
@ComponentScan에 대해 알아보자 (0) | 2020.05.17 |
@Autowired 를 알아보자 (0) | 2020.05.16 |
스프링 Bean 설정방법 (2) | 2020.05.15 |
댓글