디퍼드 서비스 특징

일련번호 관리

디퍼드 서비스에서는 일련번호 초기화 조건에 의해 데이터 조회하는 송신 테이블이 달라지거나 수신 테이블이 달라질 수 도 있다. 다음은 디퍼드 서비스에서 제공하는 일련번호 초기화 방식이다.

일련번호 초기화 조건

  • 사용안함(무조건증가)
    • 일련번호 초기화가 없으므로 일련번호는 계속 증가한다.
  • 시스템일자에 의한 변경
    • 시스템 일자가 바뀌면 일련번호를 초기화한다.
  • 영업일자에 의한 변경
    • 특정 조건에 의해 일자가 바뀌는 경우 일련번호를 초기화한다.
  • 최대일련번호에 의한 변경
    • 최대값에 도달하면 일련번호를 초기화한다.
  • 일마감값에 의한 변경
    • 특정 필드의 값이 조건에 부합하면 일련번호를 초기화한다.

사용안함(무조건 증가)

일련번호가 계속 증가한다.

시스템일자에 의한 변경

시스템 일자가 변경되었을 때, 시스템일자에 의해 일련번호가 초기화된다. 일련번호 초기화 시 변경 가능한 정보는 다음과 같으며 초기화 조건 모두에 공통으로 적용된다.

  • 송신테이블명
    • 송신 테이블명 관리 클래스에 의해 테이블명이 변경된다. 쿼리에 포함된 송신 테이블명을 룰에 등록할 때, #TABLE_NAME# 파라미터를 포함해서 넣어주면 치환한다.
  • 수신테이블명
    • 수신 테이블명 관리 클래스에 의해 테이블명이 변경된다. 수신 테이블명을 룰에 등록할 때, #TABLE_NAME# 파라미터를 포함해서 넣어주면 치환한다.
  • 일자
    • 데이터 조회 조건에 포함되는 정보이다.
    • 일자관리 클래스를 지정하고 조회 쿼리에 #DATE#를 포함해서 넣어주면 일자변경 시 일자관리 클래스의 수행 결과를 치환하여 데이터를 조회한다.
    • 별도의 일자관리 클래스를 지정하지 않으면 시스템일자를 사용한다.

영업일자에 의한 변경

일자 관리 클래스를 지정하여 일련번호를 초기화 한다. 일자관리 클래스가 없으면 시스템 일자를 기준으로 한다. 데이터 처리 시 일자를 조회하여 현재 일자와 다른 일자가 리턴되면 일련번호를 초기화한다. 일련번호 초기화 시 변경 가능한 정보는 시스템일자에 의한 변경 조건과 동일하다.

최대일련번호에 의한 변경

조회한 데이터의 일련번호가 최대일련번호에 도달했을 때 일련번호를 초기화한다. 데이터 조회 시 Key 필드로 등록된 컬럼의 값을 최대 일련번호와 비교하여 최대일련번호가 조회된 데이터에 포함되어 있으면 일련 번호를 초기화한다. 일련번호 초기화 시 변경 가능한 정보는 시스템일자에 의한 변경 조건과 동일하다.

일마감값에 의한 변경

조회된 결과에서 특정 필드의 값이 일마감 값과 동일한 경우 일련번호를 초기화한다. 일련번호 초기화 시 변경 가능한 정보는 시스템 일자에 의한 변경 조건과 동일하다.

일련번호 초기화 조건에 따른 관리 일자 관리 클래스

일자 관리 클래스는 항상 현재 일자를 리턴하여야 한다. 구현 방법은 Custom Handlers 가이드(ISM:Customs#디퍼드 일자 관리 클래스)를 참조한다.

커스텀 일자 관리 클래스를 호출하는 시점

1. 시스템일자에 의해 일련번호 초기화

  • 대상 없음.

2. 영업일자에 의한 일련번호 초기화

  • 작업 시작(start) 시
    • 작업 등록
  • 작업 초기화(clear) 시
    • 최초 일자 등록
  • 데이터 조회 시
    • 데이터 조회 결과가 0이면 영업일자 변경 여부 확인을 위해 호출
  • 데이터 반영 시
    • 데이터 반영 후 현재 일자와 다음 영업일자 비교 위해 호출

3. 최대값에 의한 일련번호 초기화

  • 작업 시작(start) 시
    • 작업 등록
  • 작업 초기화(clear) 시
    • 최초 일자 등록
  • 데이터 조회 시
    • 호출하지 않는다.
  • 데이터 반영 시
    • 데이터 반영 후 최대값에 도달하면 다음일자 얻기 위해 호출

4. 구분값에 의한 일련번호 초기화

  • 작업 시작(start) 시
    • 작업 등록
  • 작업 초기화(clear) 시
    • 최초 일자 등록
  • 데이터 조회 시
    • 호출하지 않는다.
  • 데이터 반영 시
    • 데이터 반영 후 구분값을 만나면 다음일자 얻기 위해 호출
  • 최초 일자 등록이나 초기화 시 일자 정보가 null이 전달된다.
  • 일자관리 클래스가 최초 작업을 시작할 때 지정되어 있지 않았다면 일련번호 초기화 조건에 도달하기 전에는 호출되지 않는다.

일련번호 자동 생성

송신 테이블에 일련번호에 해당하는 컬럼이 존재하지 않을 때, 일련번호 컬럼을 지정하여 일련번호를 생성할 수 있다. 일련번호 컬럼은 이미 존재하는 컬럼이 될 수도 있고 없을 경우 별도로 컬럼을 추가하여야 한다. 일련번호는 일반 select 쿼리로 데이터를 조회한 순서대로 부여한다. 일련번호 자동 생성 시 사용하는 컬럼은 일련번호 컬럼과 일자 컬럼이다. 일자 컬럼이 존재하면 일련번호는 시스템일자 단위로 초기화된다.

디퍼드 주기 관리

디퍼드 조회 주기는 룰에 등록된 Fetch Interval에 의해 결정된다. 조회 주기를 지정하지 않으면 기본 30초를 interval로 사용한다. 데이터 조회 중 조회한 결과 데이터 건수가 룰에 지정한 Fetch Count와 같으면 데이터가 더 존재하는 것으로 판단하고 데이터 조회 주기를 1초로 자동 조정한다. 조회 결과 데이터 건수가 Fetch Count보다 작으면 1초로 조정되었던 조회 주기는 다시 룰에 등록된 Fetch Interval로 되돌아간다.

  • 단 이를 위해서는 룰에 Fetch Count가 반드시 지정되어 있어야 한다. Fetch Count가 지정되어 있지 않으면 실제 처리는 최대 1000건을 기준으로 하지만 조회 결과 데이터가 1000건에 도달해도 Fetch Interval은 변경되지 않는다.

순차 처리

디퍼드 서비스는 송신에서 조회한 데이터를 반영해야 하는 수신 시스템이 여러 대일 경우 전체 수신 시스템에 대하여 하나의 트랜잭션으로 처리하기 위해 순차 처리를 수행한다. 순차 처리는 동기 방식으로 데이터를 처리하며 순차 처리는 디퍼드 서비스의 기본 처리 흐름이다. 순차 처리는 한 번 데이터를 조회하고 그 조회한 데이터를 여러 수신 시스템에 각각 순서대로 반영한 후 다음 데이터를 처리한다.

병렬 처리

디퍼드 서비스로 처리해야 하는 데이터 중 처리 대상 데이터 건수가 지극히 많고 성능에 대한 요구 수준이 높아서 순차 처리로 처리할 경우 처리 지연이 발생할 수 있는 데이터에 대해 병렬로 처리할 수 있다. 병렬 처리 시에는 데이터의 순서 보장을 위해 데이터의 순서를 보장하기 위한 체크 포인트를 설정하고 그 체크 포인트에 따라 순서를 보장한다. 병렬처리는 하나의 수신 시스템만 허용한다. 병렬 처리에서는 순차 처리와 달리 비동기 방식으로 데이터를 처리한다.

체크 포인트 설정

체크 포인트는 수신 시스템에 반영하기 전에 수선 확인을 위해 사용하며 체크 포인트의 위치는 다음의 세 가지이다.

체크 포인트 위치 설정값 설명
순서 상관없음 0 순서에 상관없이 각 프로세스들이 받은 데이터를 처리한다.
데이터 반영 시작 전 1 조회한 데이터를 수신 시스템으로 전송하기 위해 조회한 데이터를 읽어들인 직후 순서를 확인한다.
데이터 반영 직전 2 데이터의 대한 변환 작업을 완료한 후 수신 시스템에 데이터를 반영하기 직전에 순서를 확인한다.

수신 시스템이 DB인 경우, 데이터 반영을 위한 쿼리를 모두 생성한 후 쿼리를 수행하기 직전에 순서를 확인한다. 수신 시스템이 파일인 경우, 데이터 반영을 위하여 변환을 완료한 후 수신 시스템으로 파일을 전송하기 직전에 순서를 확인한다.

데이터 반영 후 3 데이터를 수신 시스템에 전송 또는 반영한 후 순서를 확인한다.

수신 시스템이 DB인 경우, 데이터 반영을 완료한 후 커밋하기 직전에 순서를 확인한다. 수신 시스템이 파일인 경우, 파일을 전송한 직후 순서를 확인한다.

체크 포인트는 ism.xml에 설정하며 기본적으로 전체 디퍼드 서비스에 적용된다. 전체 디퍼드 서비스에 적용하기 위해서는 다음과 같이 설정한다.

<deferred>
<multisequence checkpoint="2" committimeout="30000" handler="com.ism.deferred.process.DefaultSequenceHandler"/>
</deferred>

특정 서비스에 적용하기 위해서는 다음과 같이 설정한다.

<multisequence checkpoint="2" committimeout="30000" handler="com.ism.deferred.process.DefaultSequenceHandler">
<integrationservice_id checkpoint="0"/>
</multisequence>

직전의 순서에 해당하는 데이터가 처리될 때까지 대기하는 시간은 ism.xml에 설정된 committimeout 값(밀리세컨드)을 사용하며 지정하지 않을 경우 기본값(60초)을 사용한다. 병렬 처리인 경우 동시 처리 및 순서 확인을 위해 처리 대상 데이터를 연속된 구간으로 분할한다. 이 연속된 구간 번호에는 누락되는 번호가 없어야 한다. 연속 구간 번호는 별도로 지정하지 않을 경우 기본 구간 분할 클래스( com.ism.deferred.process.DefaultSequenceHandler)를 사용한다.

후처리

후처리에서 사용 가능한 파라미터는 다음과 같다.

파라미터명 설명
TGT_FILE_NAME 수신 파일명 디렉토리 정보가 포함되어 있다.
SRC_TABLE_NAME 송신 테이블명
TGT_TABLE_NAME 수신 테이블명
PROC_START_TIME 작업 시작 시간. 데이터 조회 시작 시간
PROC_END_TIME 작업 완료 시간. 데이터 반영 완료 시간
SERVICE_ID 통합 서비스 ID
PROC_DT 처리 일자. 시스템일자가 아니라 디퍼드 서비스에서 관리하는 일자정보이다.
START_SEQ 시작 일련번호
END_SEQ 종료 일련번호
DATA_COUNT 처리한 데이터 건수
FILE_SIZE 수신 파일 크기
JOB_ORDER 작업 순서. 디퍼드 서비스에서 관리하는 일자단위로 작업 순서는 초기화된다. 작업 순서는 작업이 성공적으로 완료되었을 때 1씩 증가한다. 시작 번호는 1이다.
END_REACHED 일마감 상태에 도달했는 지 여부. true/false

디퍼드 작업 제어

디퍼드 작업은 웹 콘솔을 통해 작업을 제어한다. 디퍼드 작업 제어 내용은 다음과 같다.

작업 내용

작업 시작

디퍼드 작업을 시작한다.

작업 일시 중지

디퍼드 작업을 일시 중지한다.

작업 재개

일시 중지된 작업을 재개한다.

작업 중지

디퍼드 작업을 중지하고 정보를 삭제한다. 중지된 작업은 작업 정보가 삭제되므로 재시작하는 것은 새로운 작업을 시작하는 것이다.

일련번호 변경

일련번호를 이전 혹은 이후의 번호로 변경한다. 일련번호 변경은 작업을 일시 중지해 놓고 수행한다.

일자 변경

작업이 수행되는 일자 정보를 변경한다. 일자 정보 변경 시 작업을 일시 중지해 놓고 수행한다.

초기화

작업 정보를 초기화한다. 일련번호를 0으로 초기화하고 일자 정보도 초기화한다.

작업 방법

웹 콘솔을 통해 작업을 수행한다. 작업관리 -> 디퍼드 작업 관리 메뉴에서 현재 처리 중인 작업을 조회한 후 작업이 없으면 신규 작업을 등록한다.