spring.profiles.active = dev
설정을 하면 스프링부트는 profile
로 dev
를 활성화한다는 의미이다. 이때, application.yml
과 application-dev.yml
두 개를 인식하게 된다.
해당 클래스에서는 스프링부트 어플리케이션이 시작될 때 member1, 2 객체를 만들어서 db에 저장한다. 이때 @Profile({"dev", "test"})
어노테이션이 설정되어 있기 때문에 dev나 test가 활성화되어 있으면 해당 class가 실행되고 member1과 member2 객체는 활성화된 profile의 db환경에 맞게 저장된다.
나는 application-dev.yml을 따로 만들진 않았지만, application.yml에서 dev profile을 활성화 시켰기 때문에 당연히 데이터가 만들어져서 db에 저장되어야 하지만 db에 저장되질 않았다.
혹시 Insert
가 들어가는 상황에서 @Transactional
처리가 안되어서 db에 저장이 안되는건 아닐까? 하고 어노테이션을 붙여봤지만 상황은 그대로였다.
@Transactional
을 붙여도 의미가 없는 이유는 스프링 데이터 jpa를 사용하기 때문이다. 스프링 데이터 jpa가 엔티티가 생성되고 저장될 때 알아서 트랜잭션을 시작하고 커밋해주기 때문이다.
application-dev.yml
을 따로 만들어서 application.yml
에 있던 내용을 그대로 복붙을 시도해봤다. 하지만 이것 또한 의미 없다. 애초에 application.yml
에서 dev profile이 활성화되었다는 것은 application.yml
과 application-dev.yml
모두 실행하기 때문에 application.yml
에 있는 설정 내용들이 애초에 반영되었어야 하기 때문이다.
NotProd
클래스에 있는 @Profile({"dev", "test"})
를 지워봤다.
이러니까 db에 값이 저장이 됐다. 즉 이 말은 dev profile이 현재 활성화가 안되어있다는 뜻이다. 분명 application.yml
에서 활성화를 시켜줬는데도 말이다.
구글링을 해본 결과 Edit Configurations
설정에서도 profile
을 active
할 수 있다는 정보를 얻었고 혹시나 하고 들어가봤는데 Active Profiles
가 secret
으로 설정되어있었다. 나는 분명 건드린적이 없는데 뭐지?? 내가 뭔가 잘못 알고 있는 걸까??
그래서 결국, 이 secret
을 제거하니 모든게 정상적으로 작동하기 시작했다.
아마 이 곳에서 설정하는 것이 우선순위가 더 높아서 secret
만 profile
이 활성화되어 있었던 것은 아닐까??
혹시 보시면서 제가 잘못 설명한 부분에 대해 코멘트 달아주시면 감사드립니다.