본문으로 건너뛰기

아키텍처

MCI 아키텍처는 인터페이스를 처리하는 온라인 아키텍처와 세션을 관리하는 세션 아키텍처로 구분되며, 로깅 시 필요한 로깅 아키텍처 및 L4 Switch역할을 하는 폴링 아키텍처로 구성되어 있다.

온라인 아키텍처

APtoAP 등의 일반 거래 인터페이스가 실행되는 환경으로, 게이트웨이 컴포넌트인터페이스 컴포넌트로 구성된다.

게이트웨이 컴포넌트

☑ 통신프로토콜 처리

통신 프로토콜 처리를 위해 커넥션 정보와 커넥션그룹 정보를 관리한다.

커넥션 정보는 연결대상의 접속정보 및 통신 처리를 위한 상세 속성이고, 커넥션그룹은 동일 인터페이스를 여러 커넥션이 처리할때, 각 커넥션의 부하분산 정책을 관리한다.

커넥션정보의 상세한 설정은 커넥션 설정을 참조한다.

☑ 전문 전송

연계대상으로부터 수신한 전문을 인터페이스 컴포넌트로 전달하거나, 인터페이스 컴포넌트에서 수신한 전문을 연계대상으로 송신한다. 이 때 캐릭터셋 인코딩/디코딩 처리 및 전체전문 암복호화 처리를 수행한다.

인터페이스 컴포넌트

인터페이스 컴포넌트는 인터페이스 처리를 담당하고, 이벤트핸들러처리플로우로 구성된다.

☑ 이벤트핸들러

이벤트핸들러는 게이트웨이 컴포넌트에서 비동기 방식으로 전달된 전문을 해석하여, 인터페이스ID와 요청/응답을 구분한다. 또한 인터페이스 제어 상태를 확인하고, 처리플로우로 전달한다.

☑ 처리플로우

처리플로우는 전문변환 등 인터페이스 처리를 수행한다.

요청 처리를 담당하는 요청플로우와 응답 처리를 담당하는 응답플로우가 있고, 인터페이스별로 정의한다. 각각의 플로우는 다수의 라우터로 구성된다.

- 플로우

Apache Camel의 라우터 그룹을 의미한다. 각각의 단위 기능인 라우터를 순차적으로 호출하여 온라인 인터페이스를 처리한다.

BXI에서는 전문변환 등 인터페이스 처리시 필요한 기본 플로우를 제공한다. 특화된 인터페이스 요건을 처리하기 위해 플로우를 개발하여 적용할 수 있다.

- 라우터

Apache Camel의 Route를 의미하고, 플로우에서 처리되는 단위 기능이다.

예를 들어, 전문을 맵으로 변환하는 Unmarshal은 하나의 라우터에서 제공하는 기능이다. BXI는 인터페이스 거래 처리에서 일반적으로 사용되는 라우터를 제공한다.

제공된 라우터의 기능을 벗어나는 추가적인 기능이 필요하다면, 신규 라우터를 개발하여 적용할 수 있다. 개발방법은 Customizing을 참조한다.

세션 관리 아키텍처

MCI는 IMDG(In-Memory Data Grid)인 Infinispan을 Embedded 모드로 사용하여 세션 정보를 관리한다.

Engine의 온라인 인스턴스가 여러개 실행되는 경우, Infinispan은 자동으로 클러스터를 구성하고 세션 정보를 서로 공유한다.

Infinispan은 클러스터 구성을 위해 JGroups 메시징 라이브러리를 사용한다. BXI는 기본적으로 TCP 방식과 UDP 방식을 지원하며, 온라인 인스턴스 기동 쉘(container.sh)에 JVM 옵션으로 bxi.infini.config에 제공하는 TCP 또는 UDP 설정파일을 세팅하여 선택할 수 있다.

TCP

세션 관리 아키텍처 - TCP 방식

인스턴스의 각 Embedded Infinispan은 listen 상태의 소켓을 오픈하여 서로를 발견하여 클러스터를 구성하고 데이터를 공유한다. TCP 방식은 다른 네트워크상의 존재하는 노드와 클러스터 구성을 할 수 있다.

UDP

세션 관리 아키텍처 - UDP 방식

UDP 방식은 고정 포트로 멀티캐스트를 전송하여 서로를 발견한다.

그 후 서로의 특정 포트(무작위 결정)를 향해 유니캐스트를 이용하여 데이터를 공유한다. 이를 위해 UDP방식은 노드 간 이용 포트가 모두 오픈되어야 하며, 또한 멀티캐스팅을 이용하기 때문에 동일한 서브넷 상에 존재해야 한다.

통신 방식은 사이트 환경 및 보안 정책에 따라 선택 가능하다.

로깅 아키텍처

BXI의 로그 처리 방식은 온라인 인스턴스가 직접 로깅하는 로컬(L)방식과 별도의 로깅 아키텍처를 활용한 리모트(R) 방식으로 구분된다.

로컬(L)방식

인스턴스가 온라인 인터페이스를 처리하면서 직접 DB/파일에 로그를 적재하는 방식이다. 온라인 거래량이 많지 않을 경우 사용한다.

리모트(R)방식

인터페이스 처리시 발생하는 로그 데이터를 비동기로 로깅한다. 온라인 거래량이 많은 경우 인터페이스 처리 성능 향상을 위해 사용된다.

비동기 로깅 아키텍처에서 로그 데이터는 Apache Kafka에 비동기로 전달되고, 리시버 컴포넌트, 로깅 컴포넌트로 구성된 별도의 로깅 인스턴스를 통해 DB/File에 기록된다.

☑ Apache Kafka

대용량의 실시간 로그처리에 특화된 아키텍처를 제공하는 오픈소스 소프트웨어이다.

☑ 로깅 인스턴스

로깅 인스턴스는 아래의 컴포넌트로 구성된다.

  • 리시버 컴포넌트: 리시버 컴포넌트는 Kafka에 적재된 로그를 Kafka 컨슈머를 통해 읽어와 로깅 컴포넌트에 전달한다.
  • 로깅 컴포넌트: 로깅 컴포넌트는 DB나 파일에 로그정보를 적재하는 역할을 담당한다. 로그 설정 및 로그관리는 로그관리를 참조한다.

폴링 아키텍처

BXI에서는 시스템과의 연계 시에 L4 Switch를 사용하지 않는 경우, L4 Switch의 Fail-Over 기능을 대신할 수 있는 기능을 제공한다.

주기적인 메시지 폴링 방식을 통해 이를 지원하며, 인터페이스 처리를 수행하는 인스턴스 외에 별도의 시스템 폴링 인스턴스가 필요하다. 인터페이스 처리를 수행하는 온라인 인스턴스는 시스템 폴링 인스턴스의 시스템 상태정보를 이용하여 거래를 처리한다.

시스템 폴링 인스턴스

HTTP로 시스템과 주기적으로 메시지를 주고 받으며 상태를 확인한다.

상태 정보는 메모리 상에 관리되며, 별도의 DB동기화 스레드가 시스템 폴링 상태를 DB에 동기화한다.

온라인 인스턴스

주기적으로 DB의 시스템 폴링 상태 정보를 메모리에 동기화하고, 이 상태 정보를 사용하여 정상적으로 거래 처리가 가능하다고 판단되는 시스템으로 거래를 요청한다.

시스템 폴링 인스턴스는 노드별로 하나만 등록할 수 있으며, 하나의 시스템 폴링 인스턴스 정보로 여러 노드에서 사용할 수 있다. 폴링 아키텍처를 사용하기 위한 자세한 설정은 시스템폴링을 참조한다.