온라인 서비스 특징

동기 방식 인터페이스

동기 방식 인터페이스는 그 응답 방식에 따라 두 가지 종류로 나뉜다.

동기 요청/동기 응답

송신 시스템, 수신 시스템 모두 동기 방식으로 인터페이스를 수행한다. 송신 시스템은 요청을 보내고 응답을 대기하며 수신 시스템은 처리 결과(result value)를 응답으로 보낸다.

수신 시스템이 1개 이상인 경우 응답 메시지는 매핑을 통해 송신 시스템의 요청 메시지와 수신 시스템의 응답을 조합하여 생성할 수 있다. 조합(assemble)의 의미는 합치는(merge) 것이 아니라 각 메시지의 특정 필드들을 추출하여 새로운 메시지를 생성하는 것을 의미한다.

동기 요청/비동기 응답

수신 시스템에서의 응답은 비동기 응답으로 되돌아온다. 송신 시스템은 지정한 타임아웃 동안 비동기 응답이 되돌아 오기를 대기한다. 비동기 응답은 어플리케이션 관점에서는 요청 거래와 동일하다. 메시지의 내용에만 응답으로 표시되어 있다.

비동기 방식 인터페이스

송신 시스템, 수신 시스템 모두 비동기 방식으로 인터페이스를 수행한다. 송신 시스템은 메시지를 보내고 수신 시스템은 받은 메시지를 처리한다. 비동기 방식의 인터페이스는 두 가지가 가능하다. 하나는 단방향으로(one-way) 전송하는 방식이고 다른 하나는 요청과 응답이 각각 비동기로 전송되는(two-way) 방식이다.

단방향 전송

단방향 전송은 송신 시스템은 메시지를 보내고 응답을 받지 않는 것을 의미한다.
단방향 전송은 기본적으로 순차로 처리한다. 각 수신 시스템 별로 요청된 순서대로 메시지를 처리하며 병렬 처리를 지원한다. 병렬 처리인 경우는 순서가 보장되지 않는다.

비동기 요청/응답

송신 시스템, 수신 시스템 모두 비동기로 요청을 보내고 비동기로 응답을 받는다. 요청 거래는 메시지의 내용에 요청으로 표시되어 있고, 응답 거래는 메시지의 내용에 응답으로 표시되어 있다.

비동기 요청/동기 응답

송신 시스템은 비동기로 요청을 보내고 비동기로 응답을 받는다. 수신 시스템은 요청에 대해 동기 방식으로 응답을 되돌려 준다.

라우팅

송신 시스템에서 요청된 메시지에 포함된 필드(들)의 값에 따라 여러 수신 시스템 중 조건에 맞는 수신 시스템으로 요청을 전달한다. 수신 시스템을 결정하는 방법은 특정 필드의 값, 패턴 또는 여러 필드를 조합하여 연산을 수행한 결과등을 사용할 수 있다.

라우팅 기능에서 사용하는 라우팅 방법은 다음과 같다.

  • Value
    • 특정 필드의 값에 따라 수신 시스템을 결정한다.
  • Pattern
    • 특정 필드의 값의 패턴에 따라 수신 시스템을 결정한다. 패턴은 regular expression에서 사용하는 것과 동일한 패턴을 사용한다.
  • All
    • 값에 상관없이 해당 수신 시스템으로 요청을 전달한다.
  • Method
    • 특정 필드(들)의 값을 입력으로 하여 라우팅 함수를 수행하여 그 결과값에 따라 수신 시스템을 결정한다.

라우팅 기능을 사용하기 위해서는 데이터 구조가 등록되어 있어야 한다.

부하 분산 규칙

일반적으로 하나 이상의 서버에서 수신 시스템의 어플리케이션들이 운영된다. ISM은 여러 서버로 요청을 분산시키기 위해 부하 분산 및 호출 분배 기능을 제공한다. ISM에서 제공하는 호출 분배 규칙은 다음과 같다

RoundRobin

등록된 시스템들에 대해 로드밸런싱 가중치(load weight)에 따라 요청을 분배하여 전달한다. 가중치는 기본적으로 모든 서버에 동일한 값을 설정하여 서버별로 동일하게 호출이 분배되도록 한다. 서버 별로 가중치를 다르게 주면 가중치에 따라 호출이 분배된다. 등록된 시스템 중 장애가 발생한 서버는 호출 비중을 계산할 때 포함되지 않는다.

Failover

등록된 시스템들 중 마스터(Master)로 등록된 서버로만 요청을 전달한다. 마스터 서버에 장애가 발생하면 백업 어플리케이션으로 등록된 서버로 요청을 전달한다. 마스터 서버가 정상화되면 다시 마스터 서버로 요청을 전달한다.

Master

시스템 등록 정보들에 무관하게 요청 메시지 parser에서 리턴하는 서버로 요청을 전달한다. Parser에서 리턴하는 서버에 장애가 발생해도 해당 서버로 요청을 전달한다.

Dedicated

등록된 시스템들 중 마스터로 등록된 서버로만 요청을 전달한다. 마스터 서버에 장애가 발생해도 마스터 서버로만 요청을 전달한다.

시스템 장애 감지/복구

수신 시스템의 특정 서버에 장애가 발생되면 수신 인터페이스 프로세스는 해당 서버에 대한 복구 감지 활동을 수행한다. 주기적으로 해당 서버에 헬스 체크 전문을 전송하여 정상 응답이 되돌아오면 해당 서버가 정상화된 것으로 판단한다. 정상 여부 감지 활동은 헬스 체크 주기에 따라 이루어진다. 장애 감지/복구 기능은 설정에 따라 실행 여부가 결정된다.(depends on the property value in server)

서버 상태

각 서버가 가질 수 있는 상태는 다음과 같다.

  • 실행
    • 서버가 정상적으로 운영 중
  • 백업
    • 유지 보수 작업이 진행 중
  • 실행 안함
    • 헬스체크 대상이 아님. 헬스 체크 대상이 아니면 장애가 발생여부를 고려하지 않는다
  • 다운
    • 장애 상태.

장애 감지/복구

인터페이스 대상 시스템 별로 장애 감지/복구를 위한 플래그를 설정할 수 있다.

  • 헬스 체크 사용
    • 장애 감지를 목적으로 한다.
    • 사용하는 것을 기본으로 한다.
    • 사용하지 않도록 설정되면 서버 상태가 ‘실행 안함’과 동일하다.
  • 자동 복구 사용
    • 복구 감지를 목적으로 한다.
    • 사용하는 것을 기본으로 한다.
    • 사용하지 않도록 설정되면 복구되더라도 장애 상태로 남아 있다.

도메인 Failover

이 기능은 BusinessWare 환경일 때만 사용된다.

온라인 서비스에는 송신 인터페이스와 수신 인터페이스를 담당하는 프로세스가 각각 존재하고 하나의 서비스 요청에는 1개의 송신 인터페이스 프로세스와 최소 1개의 수신 인터페이스 프로세스가 관여한다. 온라인 서비스는 기본적으로 active-active 방식으로 구성된다. 서비스 요청을 처리하는 과정에서 수신 인터페이스 프로세스에 장애가 발생하면 송신 인터페이스 프로세스는 동일한 기능을 수행하는 백업 도메인(들)에서 실행되는 수신 인터페이스 프로세스로 요청을 failover한다. 현재 도메인의 수신 인터페이스 프로세스가 정상화되면 서비스 요청은 다시 현재 도메인의 수신 인터페이스 프로세스로 전달된다. 백업 도메인은 1개 이상 가능하다. 송신 인터페이스 프로세스의 장애 시는 송신 어플리케이션에서 failover를 수행하여야 한다.

시스템 인터페이스 패턴

송신 시스템 및 수신 시스템에 사용 가능한 인터페이스 패턴은 다음과 같다.

동기구분 요청/전송 구분 비고
동기 요청 동기 방식으로 요청을 보내고 응답을 대기한다.
비동기 요청 비동기 방식으로 요청을 보내고 비동기 방식으로 응답을 받는다.
ACK 요청 비동기 방식으로 요청을 보내고 비동기 방식으로 응답을 받는다. 비동기 요청에 대해 정상 수신 여부 확인을 위한 ACK를 받는다.
비동기 전송 비동기 방식으로 메시지를 전송한다.
ACK 전송 비동기 방식으로 메시지를 전송한다. 비동기 전송에 대해 정상 수신 여부 확인을 위한 ACK를 받는다.

ACK는 송신, 수신 시스템 기준으로 업무 처리 결과가 아니라 통신 상의 규칙으로서 사용한다. ACK가 지정되면 ISM은 송신 시스템으로 ACK 메시지를 생성하여 되돌려 주고, 수신 시스템으로 부터 ACK 메시지가 되돌아 오기를 기다린다.

가변 길이 데이터 처리

개요

'가변길이 필드'란 필드의 길이가 사전에 정의되지 않고 실행중에 정의되며, 해당 필드의 길이가 다른 필드의 값에 의해 정의 되는 것을 말한다.

설정

'가변길이 필드'는 데이터 구조 정의 시점에서 필드의 길이를 알 수 없으므로, 필드를 생성할 때 필드 길이를 ‘0’으로 설정한다. 또한 필드의 길이값을 가지고 있는 '길이 필드'는 가변길이 필드를 포함하는 필드 그룹에 정의한다. 길이 필드의 정보는 길이필드가 있는 필드 그룹의 데이터 인덱스, 길이필드가 있는 필드 그룹의 디테일 인덱스, 필드 그룹에서의 길이필드의 필드 인덱스, 해당 길이 필드 값에 대한 보정 값으로 구성이 된다. <그림 추가 필요>

위의 예시 그림을 통해 설명을 하면, 가변길이필드는 ‘Field 10’ 이고 길이 정보를 가지고 있는 필드는 ‘Field 5’ 이다. 가변 길이 필드를 사용하기 위해서는 ‘Field 10’은 길이값을 ‘0’으로 설정한다. 또한 FieldGroup C를 구성할 때 Field 10의 구성 정보를 아래처럼 설정한다.

1. 길이 필드 데이터 인덱스

  • 해당 필드의 길이를 가지고 있는 길이필드 ‘Field 5’가 첫 번째 Data의 마스터에 존재하고 있으므로 해당 데이터의 인덱스인 ‘0’을 설정하도록 한다. 만약 헤더에 있는 필드라면 ‘-1’을 설정하여 헤더의 필드에서 길이를 참조하도록 설정할 수 있다.

2. 길이 필드 디테일 인덱스

  • 길이 필드가 마스터에 위치하고 있으므로 ‘-1’로 설정한다. 만약 해당 길이 필드가 마스터가 아닌 디테일에 위치하고 있다면 해당 디테일의 인덱스를 설정하게 된다.

3. 길이 필드 필드 인덱스

  • 해당 길이 필드의 ’FieldGroup B’에서의 인덱스를 설정한다. ‘Field 5’가 두번째에 존재 하므로 ‘1’을 설정한다. ( 모든 인덱스는 0부터 시작한다. )

4. 차이값

  • 길이필드에 있는 값과 실제 필드와의 길이 차이를 설정한다. 예를 들어 ‘Field 5’에 ‘FieldGroup C’의 전체 길이 값이 있고, ‘Field 10’을 제외한 길이 값이 ‘100’ 일 경우, 실제 ‘Field 10’의 길이는 ‘Field 5의 값 – 100’ 이 될 것이다. 이와 같은 보정을 위해 차이값에 100을 설정하여 이를 보정할 수 있도록 한다. 만약 ‘Field 5’의 값이 ‘Field 10’의 길이 값만을 가진다면, 설정하지 않거나 0을 설정하면 된다.

반복 데이터 처리

개요

구간 반복(block repetition)이란, 메시지의 일부분을 구성하는 필드들이 일정한 수 만큼 반복이 되는 경우를 의미한다. 반복 횟수는 데이터 구조를 등록할 때 정의되어 있을 수도 있으며, 혹은 메시지를 생성할 때 마다 가변적으로 변할 수도 있다.

설정

메시지의 반복되는 부분은 데이터 구조의 디테일로 정의한다. 가변적으로 특정 구간이 반복되는 경우는 반복횟수를 반드시 마스터에 있는 필드에 설정한다. 반복 횟수를 나타내는 필드는 반복되는 데이터가 나오기 전에 있어야 한다.