서블릿(Servlet)은 Java 웹 애플리케이션의 핵심 요소로, 웹 서버에서 동작하는 자바 클래스입니다. 서블릿은 클라이언트의 요청에 따라 동적으로 처리를 수행하고, HTTP 프로토콜을 통해 클라이언트와 상호작용합니다.
스케줄링(Scheduling)은 작업을 특정 시간에 주기적으로 실행하는 기능을 의미합니다. 스케줄링은 웹 애플리케이션에서 반복적으로 수행되어야 하는 작업을 자동으로 처리할 수 있도록 도와줍니다.
서블릿 스케줄링 기능
서블릿 컨테이너(예: Apache Tomcat)는 서블릿 스케줄링을 지원하기 위해 다양한 기능을 제공합니다. 이 중에서 가장 널리 사용되는 방법은 javax.servlet.ServletContextListener
및 javax.servlet.ServletContextEvent
인터페이스를 구현하여 애플리케이션 시작 및 종료 시에 작업을 스케줄링하는 것입니다.
아래는 서블릿 스케줄링을 위한 예제 코드입니다:
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.annotation.WebListener;
@WebListener
public class MyScheduler implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// 애플리케이션 시작 시에 수행되어야 할 작업
// 예: 스케줄링된 작업 등록
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// 애플리케이션 종료 시에 수행되어야 할 작업
// 예: 스케줄링된 작업 해제
}
}
위의 코드는 MyScheduler
라는 클래스를 생성하여 ServletContextListener
를 구현합니다. contextInitialized
메서드에서는 애플리케이션 시작 시에 수행되어야 할 작업을 구현하며, contextDestroyed
메서드에서는 애플리케이션 종료 시에 수행되어야 할 작업을 구현합니다.
이제 @WebListener
애너테이션을 통해 이 클래스가 서블릿 컨테이너의 리스너로 등록되도록 지정해주면, 서블릿 스케줄링을 활용할 수 있습니다.
예제 활용
위의 예제 코드를 활용하여 주기적으로 특정 작업을 실행해보겠습니다.
public class MyScheduledJob implements Runnable {
@Override
public void run() {
// 주기적으로 실행되어야 하는 작업 구현
}
}
public class MyScheduler implements ServletContextListener {
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent sce) {
scheduler = Executors.newSingleThreadScheduledExecutor();
// 주기적으로 MyScheduledJob 실행 (예: 1분마다)
scheduler.scheduleAtFixedRate(new MyScheduledJob(), 0, 1, TimeUnit.MINUTES);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
scheduler.shutdownNow();
}
}
위의 코드에서 MyScheduledJob
클래스는 Runnable
인터페이스를 구현하여 주기적으로 실행되어야 하는 작업을 구현합니다. MyScheduler
클래스에서는 앞서 구현한 MyScheduledJob
을 스케줄링하여 실행하기 위해 Executors.newSingleThreadScheduledExecutor()
를 사용하여 ScheduledExecutorService
를 생성합니다. 그런 다음 scheduleAtFixedRate
메서드를 사용하여 주기적으로 작업을 실행하는 스케줄링을 등록합니다.
이제 애플리케이션을 시작하면 MyScheduledJob
의 작업이 1분마다 실행되는 것을 확인할 수 있습니다.
결론
서블릿을 활용하여 스케줄링 기능을 구현할 수 있습니다. 주기적으로 실행되어야 하는 작업이 있다면, ServletContextListener
인터페이스를 구현한 클래스를 생성하여 서블릿 컨테이너에서 스케줄링을 등록하면 됩니다. 이를 통해 웹 애플리케이션이 자동으로 작업을 수행할 수 있게 됩니다.
참고 자료: