Spring EventListener와 Profile

hoyong.eom·2023년 8월 20일
0

스프링

목록 보기
33/59
post-thumbnail

Spring

Spring

EventListener

프로젝트를 진행하다가 보면 Spring에서 EventListener 애노테이션을 볼 수 있다.
실제 김영한님의 강의에서는 아래와 같은 애노테이션이 사용되었다.

    @EventListener(ApplicationReadyEvent.class)
    public void initData() {
        log.info("test data init");
        itemRepository.save(new Item("itemA", 10000, 10));
        itemRepository.save(new Item("itemB", 20000, 20));
    }

@EventListener(ApplicationReadtEvent.Class) 라는 애노테이션이 사용되었다.

@EventListener(ApplicationReadtEvent.Class)

  • 스프링 컨테이너가 완전히 초기화를 다 끝내고, 실행 준비가 되었을때 발생하는 이벤트이다. 스프링이 이 시점에 해당 애노테이션이 부튼 initDate()메서드를 호출해준다.
  • 참고로 이 기능 대신 @PostConstructor를 사용할 경우 AOP 같은 부분이 아직 다 처리 되지 않은 시점에서 호출 될 수 있기 때문에 간혹 문제가 발생할 수 있다.예를 들어, @Transactional과 관련된 AOP가 적용되지 않은 상태로 호출될 수 있다.
  • @EventListenr(ApplicationReadyEvent.class)는 AOP를 포함한 스프링 컨테이너가 완전히 초기화된 이후에 호출되기때문에 이런 문제가 발생하지 않는다.

Profile

스프링은 로딩 시점에 application.properties의 spring.profiles.active 속성을 읽어서 프로필로 사용한다.
이 프로필은 로컬, 운영환경, 테스트 실행 등등 다양한 환경에 따라 다른 설정을 사용하는 정보이다.
예를 들어, 로컬 PC에서는 로컬 PC에 설치된 데이터베이스에 접근해야하고 운영 환경에서는 운영 데이터베이스에 접근해야한다면 서로 설정 정보가 달라야 한다.

// application.properies
spring.profiles.active=local
  • /src/main/resources 하위의 application.properties는 /src/main 하위의 자바 객체를 실행할때 동작하는 스프링 설정이다. spring.profiles.active=local이라고 하면 슾링은 local이라는 프로필로 동작한다. 따라서 앞서 작성한 코드중에서 @Profile("local")이 돚악하고 testDataInit이 스프링빈으로 등록된다.

참고로 프로필을 지정하지 않으면 디폴트(default) 프로필이 실행된다.

test profile

/src/test/resources 하위의 application.properties

spring.profiles.active=test
  • 이 위치의 application.properties는 /src/test 하위 자바 객체를 실행할때 동작하는 스프링 설정이다.
  • 주로 테스트 케이스를 실행할때 동작한다.
  • spring.profiles.active=test 로 설정하면 스프링은 test 라는 프로필로 동작한다. 이 경우 직전에
    설명한 @Profile("local") 는 프로필 정보가 맞지 않아서 동작하지 않는다. 따라서 testDataInit
    이라는 스프링 빈도 등록되지 않고, 초기 데이터도 추가하지 않는다.

참고

해당포스팅은 아래의 강의를 공부하여 정리한 내용입니다.
김영한님의 SpringDB2

0개의 댓글