Backend/SpringBoot

생명주기 Event들 활용 하기

Dean83 2025. 9. 1. 15:35

생명주기 Event들을 활용해야 할 때가 있다. 예를들어 유니티와 WPF 에서는 어플리케이션이 오류로 죽어 버릴 경우 죽기전에 이벤트를 캐치 하여 임시 파일을 저장한다든지, 로깅을 추가 한다든지 하는 경우가 있었다. 

 

또는 예외처리를 벗어난 예외가 발생하였을때, 로깅을 하고 프로그램을 닫거나 팝업으로 이용자에게 안내를 하는 등 해당 경우가 있다.

따라서 생명주기 Event들을 활용방법을 아는것도 중요하다. 

 

일단 이벤트 종류 몇개를 보면, 

  • ApplicationStartingEvent (빈 등록 이전, 시작할때 이벤트 발생)
  • ApplicationReadyEvent (빈 등록이 끝나고 모든 초기화 완료시 발생)
  • ApplicationPreparedEvent (빈 등록전 이벤트)
  • ApplicationFailedEvent (실행 실패시 발생하는 이벤트)

등이 있다. 사실 이 중, ApplicationReadyEvent 나 StartingEvent 정도가 중요하지 싶다. 다른 항목들은 필요할때마다 찾아보면 될 듯 하다.  빈 등록전 이벤트와 등록 후 이벤트를 활용하는 방법이 다르다.

 

1. ApplicationReadyEvent 예시 (빈 등록 완료 후 모든 초기화 완료시)

@Component
public class ReadyEventListener {

    @EventListener(ApplicationReadyEvent.class)
    public void onReady() {
        System.out.println(">>> 애플리케이션 실행 완료 후 작업 실행!");
        // DB 초기화, 캐시 로딩 등
    }
}

 

2. ApplicationStartingEvent (빈 등록전 이벤트)

//1. 이벤트 캐치를 위한 클래스 등록

public class MyStartingEventListener implements ApplicationListener<ApplicationStartingEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartingEvent event) {
        System.out.println(">>> 애플리케이션 시작 직전: 초기화 작업 실행!");
        // 여기에 로그 설정, 외부 환경 준비, 별도 초기화 코드 등 작성
    }
}

...

//2. Main 함수 내부에 이벤트 리스너 등록

SpringApplication app = new SpringApplication(어플리케이션클래스명.class);


// ApplicationStartingEvent 리스너 등록
    app.addListeners(new MyStartingEventListener());

    app.run(args);
...