배치처리

배치처리 서비스는 일괄처리 업무 구현에 필요한 기능을 제공한다.

배치 실행환경 소개

전자정부 표준프레임워크는 대용량 데이터 처리 지원을 위해 작업 수행, 결과 관리, 스케줄링 관리 기능을 제공한다.

Job

Job은 배치 작업 전체를 캡슐화하는 개념으로, 여러 Step을 포함하며 배치 작업 실행을 의미한다. Job은 각 JobParameters에 따라 JobInstance를 생성하고, Job 시도마다 JobExecution을 생성하여 작업을 처리한다.

Step

Step은 Job 내에서 배치 작업을 정의하고 제어하는 독립적이고 순차적인 단계를 캡슐화하는 도메인 객체이다. 모든 Job은 최소 하나 이상의 Step으로 구성되며, 각 Step은 입력, 처리, 출력 자원 설정을 포함하여 작업을 처리한다. StepExecution은 JobExecution과 대응되며, 각 Step은 순차적으로 실행된다.

ItemReader

ItemReader는 다양한 데이터 타입(플랫 파일, XML, 데이터베이스)을 처리하며, 데이터를 한 항목씩 읽고 모두 소진되면 Null을 반환하는 인터페이스이다. 플랫 파일, XML, 데이터베이스 각각에 맞는 방식으로 데이터를 읽고 처리할 수 있도록 지원한다.

ItemWriter

ItemWriter는 다양한 데이터 타입에 상관없이 한 번에 여러 항목(Chunk)을 쓰는 역할을 하며, ItemReader와 유사하지만 데이터를 쓰는 반대의 동작을 수행한다. 이를 통해 데이터를 효과적으로 처리하고 저장할 수 있다.

Resource Variable

사용자 정의 리소스 변수 선언 후 Setp에서 ItemReader, ItemWriter에서 사용자 정의 리소스를 사용할 수 있도록 EgovResourceVariable를 통해서 지원한다.

JobRepository

JobRepository는 배치 작업 중의 정보를 저장하는 역할을 한다. 어떠한 Job이 언제 수행되었고, 언제 끝났으며, 몇 번이 실행되었고 실행에 대한 결과가 어떤지 등의 배치 작업의 수행과 관련된 모든 meta data가 저장되어 있다.

JobLauncher

JobLauncher는 배치작업을 실행시키는 역할을 한다. Job과 Job Parameters를 이용하여 요청된 배치 작업을 수행한 후 JobExecution을 반환한다.

JobRunner

JobRunner는 외부 실행 모듈과 JobLauncher를 연결해주는 모듈로, 용도에 맞게 구현이 필요하다. 전자정부 표준프레임워크에서는 작업실행 유형에 따라 미리 JobRunner를 미리 구현한 표준 Batch Runner를 제공한다.

JobRegistry

JobRegistry는 생성된 Job을 자동으로 Map형태로 저장하여 관리한다. JobRegistry는 context에서 Job을 추적하거나 다른 곳에서 생성된 Job을 application context의 중앙에 모을 때 유용하게 사용할 수 있다. 등록된 Job의 이름과 속성들을 조작할 수 있으며, job name과 job instance의 Map의 형태로 이루워져 있다.

JobExplorer

JobExplorer는 실행 중인 Job 및 Step을 검색하기 위한 시작지점으로서, Repository에 접근하여 배치의 정보를 얻는다.

JobOperator

JobOperator는 Job을 제어하는 모니터링 작업을 위해 사용된다. JobOperator는 JobRegistry, JobExplorer, JobLauncher, JobRepository 클래스의 설정이 필수적이며, Job의 InstanceId, ExecutionId, JobName을 이용하여 Job을 제어한다.

Skip/Retry/Repeat

Skip, Retry, Repeat은 효율적인 배치수행을 위해 필요한 기능들이다. Repeat 정책에 따라 Step과 Chunk가 반복적으로 수행되면서 데이터 Read, Process, Write 과정이 일어나는데, 여기서 Skip과 Retry 이용해 배치작업을 효율적으로 수행할 수 있다. 각 기능이 쓰이는 위치는 다음 그림을 참고한다.

MultiDataProcessing

배치 수행 시 여러 리소스를 처리해야 할 경우, 전자정부 배치 프레임워크는 MultiData Processing을 통해 다수의 리소스를 읽고 다수(N→N) 또는 하나(N→1)의 결과로 처리하는 기능을 제공한다. MultiResourceItem은 여러 리소스를 읽어 각각의 결과를 생성하고, CompositeItem은 여러 리소스를 하나의 결과로 처리한다.

History Management

배치작업 처리 중의 정보는 JobRepository의 JobInstance, JobParams, JobExecution, StepExecution, key-value 쌍으로 값을 보관할 수 있는 공간인 ExecutionContext에 저장 및 갱신되어 history를 관리한다.

동기/비동기 처리 예제

일괄(배치)처리 작업 수행 시, 작업처리가 종료될 때까지 대기하는 동기방식 처리와 작업처리의 종료를 Callback매커니즘을 이용하여 전달받는 비동기처리에 대한 예제를 보여준다.

Listener (Pre/Post Processing)

Listener는 배치 작업의 각 단계(Job, Step, Chunk 등)에서 이벤트 설정을 통해 추가 구성을 할 수 있으며, 설정된 이벤트를 실행 중에 처리한다. JobListener는 Job의 라이프사이클 동안 다양한 이벤트를 감지하고, 사용자 정의 코드를 실행할 수 있도록 지원한다.

병행처리

배치 작업에서 병렬처리를 통해 Job의 구성요소들을 여러 쓰레드로 분산 실행하여 빠르고 효율적으로 작업을 완료할 수 있다. 스프링 배치에서는 멀티쓰레드, Parallel 방식, 파티셔닝 방식 등 다양한 병렬처리 방식을 지원하며, 멀티쓰레드는 Step의 에 TaskExecutor를 추가해 간단히 구현할 수 있다.

Code Base Exception

배치 처리 시 EgovBatchException을 통해 Code 기반으로 에러를 처리할 수 있으며, 이를 사용하려면 먼저 데이터베이스 에러 코드 관리 테이블과 에러 코드 데이터를 등록해야 한다. 이 서비스를 통해 에러 처리의 효율성을 높일 수 있다.

센터 컷(CenterCut)

전자정부 표준프레임워크에서의 큐(Queue)를 사용하여 대용량 데이터 처리를 위해 센터 컷 방식의 배치 작업수행을 위한 가이드를 제공한다.

이벤트알림 템플릿 관리

전자정부 표준프레임워크의 배치 수행중 특정시점에 이벤트가 발생하는 경우 EventNoticeTrigger 인터페이스를 활용하여 SMS, Email 등을 통해 정보를 전달할 수 있는 추상화된 외부알림 access 관리기능이다.

Flow Control

Job 내부에는 여러 Step 들이 존재할 수 있고, 각 Step 사이의 흐름을 관리할 필요가 있다. Step 내의 next 설정과 Desision 설정으로 Job을 수행하다 한 Step의 처리결과에 따라 다른 Step을 선택하여 수행할 수 있고, 특정 Step의 실패가 Job 전체의 실패로 이어지지 않도록 구성할 수 있다.