@Profile 인식이 안되는 경우에 대해

큰모래·2023년 5월 17일
0
post-thumbnail

상황

application.yml

spring.profiles.active = dev 설정을 하면 스프링부트는 profiledev를 활성화한다는 의미이다. 이때, application.ymlapplication-dev.yml 두 개를 인식하게 된다.



NotProd.class

해당 클래스에서는 스프링부트 어플리케이션이 시작될 때 member1, 2 객체를 만들어서 db에 저장한다. 이때 @Profile({"dev", "test"}) 어노테이션이 설정되어 있기 때문에 dev나 test가 활성화되어 있으면 해당 class가 실행되고 member1과 member2 객체는 활성화된 profile의 db환경에 맞게 저장된다.



나는 application-dev.yml을 따로 만들진 않았지만, application.yml에서 dev profile을 활성화 시켰기 때문에 당연히 데이터가 만들어져서 db에 저장되어야 하지만 db에 저장되질 않았다.


시도 1

혹시 Insert가 들어가는 상황에서 @Transactional 처리가 안되어서 db에 저장이 안되는건 아닐까? 하고 어노테이션을 붙여봤지만 상황은 그대로였다.

@Transactional을 붙여도 의미가 없는 이유는 스프링 데이터 jpa를 사용하기 때문이다. 스프링 데이터 jpa가 엔티티가 생성되고 저장될 때 알아서 트랜잭션을 시작하고 커밋해주기 때문이다.

시도 2

application-dev.yml을 따로 만들어서 application.yml에 있던 내용을 그대로 복붙을 시도해봤다. 하지만 이것 또한 의미 없다. 애초에 application.yml에서 dev profile이 활성화되었다는 것은 application.ymlapplication-dev.yml 모두 실행하기 때문에 application.yml에 있는 설정 내용들이 애초에 반영되었어야 하기 때문이다.

시도 3

NotProd 클래스에 있는 @Profile({"dev", "test"})를 지워봤다.
이러니까 db에 값이 저장이 됐다. 즉 이 말은 dev profile이 현재 활성화가 안되어있다는 뜻이다. 분명 application.yml에서 활성화를 시켜줬는데도 말이다.


해결

구글링을 해본 결과 Edit Configurations 설정에서도 profileactive 할 수 있다는 정보를 얻었고 혹시나 하고 들어가봤는데 Active Profilessecret으로 설정되어있었다. 나는 분명 건드린적이 없는데 뭐지?? 내가 뭔가 잘못 알고 있는 걸까??
그래서 결국, 이 secret을 제거하니 모든게 정상적으로 작동하기 시작했다.
아마 이 곳에서 설정하는 것이 우선순위가 더 높아서 secretprofile이 활성화되어 있었던 것은 아닐까??

혹시 보시면서 제가 잘못 설명한 부분에 대해 코멘트 달아주시면 감사드립니다.

profile
큰모래

0개의 댓글