제1장 소개

내용 목차

1.1. 개요
1.2. Scheduler 컴포넌트 구조
1.3. Scheduler 서버

본 장에서는 JEUS Scheduler의 기능과 사용 가능한 환경, 수행 방식에 대해 설명한다.

1.1. 개요

JEUS Scheduler는 정해진 시간에 수행되거나 반복적으로 수행되는 작업을 scheduling할 수 있는 기능을 제공한다.

Scheduler는 JEUS의 확장된 기능으로 정해진 시간이나 주기적으로 작업을 수행해야 할 때 사용할 수 있다. EJB의 경우 Timer Service와 같은 기능을 제공하는데 이와 유사한 목적을 지니고 있으며 EJB 환경이 아니더라도 사용할 수 있다. 예를 들어 주기적으로 임시 파일을 삭제한다거나, 주기적으로 데이터베이스 커넥션을 체크하는 등의 시스템 관리에 사용할 수도 있다.

Java EE 환경에서 Timer Service를 이용할 때 Java SE Timer(java.util.Timer)를 직접 사용할 수 없으므로 EJB Timer Service를 사용하거나 JEUS에서 제공하는 JEUS Scheduler를 사용해야 한다. EJB Timer Service는 EJB 환경에서만 사용할 수 있는데 반하여 JEUS Scheduler는 모든 Java EE 환경에서 사용할 수 있고 일반 Java SE 애플리케이션에서도 사용이 가능하다.

JEUS Scheduler는 Java SE Timer(java.util.Timer)와 유사하기 때문에 Java SE Timer에 익숙하다면 JEUS Scheduler를 쉽게 사용할 수 있다. 또한 Java SE Timer에는 없는 작업 종료 시점(end time)과 최대 수행 횟수(max count)를 지정할 수 있는 기능도 제공한다.

JEUS Scheduler는 다음과 같이 다양한 환경에서 사용이 가능하다.

  • Java SE 애플리케이션에서 Standalone Scheduler 사용

  • Java EE 애플리케이션 클라이언트에서 Standalone Scheduler 사용

  • JEUS 서버 Scheduler Service를 원격에서 접속하여 사용

  • JEUS 서버 설정 파일에 Job을 등록해서 사용

  • JEUS 서버 Scheduler Service를 Java EE 컴포넌트에서 사용

1.2. Scheduler 컴포넌트 구조

JEUS Scheduler는 사용자 애플리케이션 내에서 사용할 수도 있고 JEUS 서버에서 사용할 수도 있다. JEUS 서버는 원격에서 접속할 수 있는 Scheduler Service를 구동시킬 수 있으며 설정 파일을 통해 scheduling될 작업을 등록할 수도 있다.

JEUS Scheduler의 컴포넌트는 다음과 같은 구조를 갖는다.

[그림 1.1] JEUS에서의 Scheduler 컴포넌트

JEUS에서의 Scheduler 컴포넌트

1.3. Scheduler 서버

Scheduler 서버의 종류에 따라 Scheduler의 수행 방식이 달라지고, Scheduler Service가 구분된다.

다음은 Scheduler 서버의 종류에 따른 수행 방식을 나타낸다.

[그림 1.2] Scheduler 서버별 수행 방식

Scheduler 서버별 수행 방식

다음은 각각의 Scheduler Service를 사용하는 경우에 대한 설명이다.

  • 서버 Scheduler Service

    항상 주기적으로 수행되어야 할 작업을 scheduling할 때 사용한다. 서버에서 항상 수행되어야 할 주기적인 작업이 있다면 Job-list에 미리 등록하여 서버가 구동할 때 수행되도록 할 수도 있다.

    Java EE 컴포넌트들(Servlet, JSP, EJB 등)이 주기적으로 수행되는 작업을 scheduling할 때 주로 사용을 scheduling할 때 주로 사용한다. 또한 JNDI 저장소에 등록되어서 원격 클라이언트에서도 사용할 수 있다.

  • 클라이언트 Scheduler Service

    애플리케이션 클라이언트에서 Standalone 방식으로 구동되는 JEUS Scheduler Service는 애플리케이션 클라이언트 내부에서 어떠한 작업을 주기적으로 수행하는 경우 주로 사용한다. 또한 애플리케이션 클라이언트가 종료되면 더 이상 수행될 필요가 없는 작업인 경우에 사용한다.