본문 바로가기
Springboot Study

스프링부트의 RunListener

by xogns93 2024. 10. 24.

스프링부트에서 RunListener는 애플리케이션의 라이프사이클 이벤트를 처리하기 위해 사용되는 컴포넌트입니다. Spring Boot는 애플리케이션이 시작되고 실행되기까지 여러 단계를 거치며, 이러한 각 단계에서 특정 이벤트를 발생시킵니다. RunListener는 이러한 이벤트들을 수신하고 처리할 수 있도록 해주는 역할을 합니다.

1. SpringApplicationRunListener

SpringApplicationRunListener스프링 애플리케이션이 시작되면서 발생하는 다양한 이벤트를 수신하고 대응하는 인터페이스입니다. 이 인터페이스는 스프링 애플리케이션의 실행 흐름을 제어하거나, 특정 단계에서 추가 작업을 수행하고 싶을 때 사용됩니다.

주요 역할

스프링 부트 애플리케이션이 실행될 때 여러 단계에서 발생하는 이벤트들을 처리합니다. 이 이벤트들은 주로 애플리케이션의 초기화, 환경 설정, 컨텍스트 준비 등의 중요한 단계들을 나타냅니다.

주요 메서드

SpringApplicationRunListener 인터페이스에서 제공하는 주요 메서드는 다음과 같습니다:

  1. starting()

    • 애플리케이션이 막 시작하려고 할 때 호출됩니다.
    • 애플리케이션의 초기 설정 작업을 할 때 사용될 수 있습니다.
  2. environmentPrepared(ConfigurableEnvironment environment)

    • Environment가 준비되었을 때 호출됩니다.
    • 여기서 사용자는 환경 변수프로퍼티를 수정할 수 있습니다.
  3. contextPrepared(ConfigurableApplicationContext context)

    • ApplicationContext가 생성되었지만, 빈이 로드되기 전 호출됩니다.
    • ApplicationContext에 대한 사전 설정을 할 때 유용합니다.
  4. contextLoaded(ConfigurableApplicationContext context)

    • 모든 빈들이 로드되었지만, 아직 ApplicationContext가 초기화되기 전 호출됩니다.
    • 추가적인 빈 등록이나 컨텍스트 설정을 수행할 수 있습니다.
  5. started(ConfigurableApplicationContext context)

    • ApplicationContext완전히 초기화된 후 호출됩니다. 모든 빈이 초기화되고 애플리케이션이 실행 준비가 되었을 때 사용됩니다.
  6. running(ConfigurableApplicationContext context)

    • 애플리케이션이 정상적으로 실행을 시작한 후 호출됩니다.
    • 이 단계에서는 애플리케이션이 모든 설정을 마치고 서비스 준비가 완료된 상태입니다.
  7. failed(ConfigurableApplicationContext context, Throwable exception)

    • 애플리케이션이 실행 도중 오류가 발생했을 때 호출됩니다.
    • 이 메서드는 오류 로깅 또는 복구 절차를 수행할 수 있는 곳입니다.

2. 스프링 부트에서 RunListener 사용 예

RunListener의 실제 사용은 주로 특정 애플리케이션의 실행 단계에서 특정 작업을 수행하려고 할 때 이루어집니다. 이를 위해 커스텀 리스너를 등록하거나, 특정 기능을 로깅하는 등의 작업이 필요할 수 있습니다.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringApplicationRunListener;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;

public class CustomRunListener implements SpringApplicationRunListener {

    public CustomRunListener(SpringApplication application, String[] args) {
        // RunListener의 생성자, application과 args를 파라미터로 받음
    }

    @Override
    public void starting() {
        System.out.println("애플리케이션 시작 중...");
    }

    @Override
    public void environmentPrepared(ConfigurableEnvironment environment) {
        System.out.println("환경 준비됨. 프로파일: " + environment.getActiveProfiles());
    }

    @Override
    public void contextPrepared(ConfigurableApplicationContext context) {
        System.out.println("ApplicationContext 준비됨");
    }

    @Override
    public void contextLoaded(ConfigurableApplicationContext context) {
        System.out.println("ApplicationContext 로딩 완료");
    }

    @Override
    public void started(ConfigurableApplicationContext context) {
        System.out.println("애플리케이션 시작됨");
    }

    @Override
    public void running(ConfigurableApplicationContext context) {
        System.out.println("애플리케이션 실행 중");
    }

    @Override
    public void failed(ConfigurableApplicationContext context, Throwable exception) {
        System.err.println("애플리케이션 실행 실패: " + exception.getMessage());
    }
}

이러한 방식으로 RunListener를 구현하면 스프링 애플리케이션의 라이프사이클 단계별로 원하는 작업을 실행할 수 있습니다. 이와 같이 각 단계에서 이벤트를 캡처하여 추가 작업을 수행하거나 상태를 로깅하는 데 사용할 수 있습니다.

3. SpringApplicationRunListener 등록 방법

RunListener를 스프링 부트 애플리케이션에서 사용하려면, META-INF/spring.factories 파일을 사용하여 등록해야 합니다. 이 파일에 SpringApplicationRunListener를 정의하여 스프링 부트가 해당 리스너를 찾고 사용할 수 있도록 합니다.

# spring.factories 파일에 RunListener 등록
org.springframework.boot.SpringApplicationRunListener=com.taehun.demo.CustomRunListener

위와 같이 spring.factories 파일에 정의하면, 스프링 부트 애플리케이션이 실행될 때 CustomRunListener가 자동으로 인식되고 실행됩니다.

4. RunListener의 활용 사례

  • 애플리케이션 진단 및 로깅: 각 실행 단계에서 로그를 남겨 애플리케이션의 상태를 추적하고 문제를 파악할 수 있습니다.
  • 커스텀 초기화 로직: 애플리케이션 시작 전에 환경을 설정하거나 특정 자원을 준비해야 하는 경우에 유용합니다.
  • 애플리케이션 실행 오류 처리: 애플리케이션이 실행되지 않거나 실패할 경우 오류 처리를 위한 로직을 추가할 수 있습니다.

5. Spring Boot 자동 구성과 연관성

스프링 부트의 자동 구성 메커니즘은 다양한 컴포넌트와 빈을 자동으로 설정하여 개발자가 손쉽게 프로젝트를 구성할 수 있도록 도와줍니다. RunListener는 이러한 자동 구성의 다양한 단계에서 개입하여 개발자가 직접 제어하고자 하는 부분을 설정할 수 있도록 합니다.

요약

  • SpringApplicationRunListener스프링 부트 애플리케이션의 실행 단계에서 발생하는 여러 이벤트들을 수신하여 처리할 수 있는 인터페이스입니다.
  • 각 단계마다 실행 흐름을 제어하거나 초기화 작업을 추가할 수 있도록 메서드를 제공합니다.
  • 이를 통해 애플리케이션 진단, 추가적인 초기화 로직 추가, 실행 실패 시 복구 절차 등을 쉽게 구현할 수 있습니다.
  • spring.factories 파일을 통해 애플리케이션에 등록하여 사용할 수 있습니다.

'Springboot Study' 카테고리의 다른 글

페이지네이션(Pagination)과 소팅(Sorting)  (3) 2024.11.08
페이지네이션(Pagination)과 스크롤링(Scrolling)  (3) 2024.11.05
SLF4J  (0) 2024.10.24