런타임 엔진 서버 리소스

본 장에서는 AnyLink 런타임 엔진 서버의 실행에 필요한 리소스를 정의하고 관리하는 방법에 대해서 설명한다.

1. 개요

AnyLink 런타임 엔진 서버는 실행에 필요한 몇 가지 리소스들을 정의하고 관리한다.

  • 업무 혹은 거래에 관련된 비즈니스 리소스

  • 어댑터와 어댑터 엔드포인트에 관련된 어댑터 리소스

  • 스레드 풀(Thread Pool)과 시스템 로깅 등에 관련된 시스템 설정 정보

2. 비즈니스 리소스

비즈니스 리소스는 업무 혹은 거래에 관련된 리소스로 스튜디오에서 정의하는 거래와 거래그룹에 포함된 리소스들로 구성된다. 업무 개념을 구성하는 요소들이며, 여러 개의 계층으로 구성된 거래그룹과 말단 노드인 거래로 분류된다.

런타임 엔진 서버에서 비즈니스 리소스들은 기본값으로 각 서버 홈 디렉터리 아래에 위치한다.

${server.home}/repository/services

2.1. 거래 및 거래그룹

거래와 거래그룹에는 다음과 같은 비즈니스 리소스들이 존재할 수 있다. 이 리소스들은 런타임 엔진 서버 내부적으로 거래를 나타내는 특정 디렉터리 아래에 하나의 압축 파일(.iar 파일을 확장자로 가지는 zip 형태의 파일)로 만들어져 있다.

  • 거래 및 거래그룹에 대한 정의 파일(.biztx 확장자를 가지는 XML 문서 파일)

    거래 및 거래그룹은 계층 구조(트리 구조)를 가지며 요청 메시지를 파싱하여 거래를 찾을 수 있는 구조로 구성되어 있다.

    거래그룹은 하위 거래그룹과 거래들을 포함하는 부모 디렉터리로 표현되며 거래그룹에 관련된 비즈니스 리소스를 거래와 마찬가지로 .iar 아카이브 파일로 가지고 있다. 거래 및 거래그룹 정보는 .iar 아카이브 파일 안에 .biztx 확장자를 가진 XML 문서로 존재한다.

    거래는 요청 메시지, 응답 메시지, 비정상 응답 메시지 등으로 구성되며, 계층 구조 상 부모 노드에 있는 거래 그룹의 정보를 상속받는 방식으로 구성된다.

    거래 트리의 부모 노드 혹은 중간 노드에 위치하는 거래그룹은 요청 메시지를 파싱하여 하위 거래그룹이나 단말인 거래 노드를 찾기 위해 하위 거래 식별자를 가질 수 있다.

    figure biz tree parsing discriminator
    거래 트리와 메시지 파싱

    거래 트리의 기본 목적은 요청 메시지를 파싱하여 메시지 내용에 맞는 거래를 찾고 결과적으로 AnyLink 엔진 내부 서비스(서비스 플로우, 아웃바운드 룰 혹은 멀티바인딩 룰)를 호출하는 것이다.

    거래, 거래그룹 내용 중엔 해당 거래 혹은 거래그룹 노드가 참고하는 심볼릭 링크(Symbolic Link) 정보가 있다. 심볼릭 링크는 해당 거래 노드가 참고하는 리소스들이 있는 다른 거래 노드들을 링크하는 역할을 한다. 기본적으로 거래 트리 상의 부모 노드의 리소스들은 참조할 수 있지만, 부모가 아닌 다른 거래 혹은 거래그룹 노드의 리소스를 공유해야 할 때 심볼릭 링크를 유용하게 사용할 수 있다.

    AnyLink의 거래 혹은 거래그룹 노드에서 함께 관리하는 리소스에는 Java 코드로 변환되는 여러 가지 리소스가 있다. 예를 들면 메시지, 매핑, 표현식, 다양한 사용자 클래스 등이 Java 코드로 사용되는 리소스들이다.

    Java 코드들은 내부적으로 클래스 로더 개념을 통해 코드를 읽어들이게 되는데, AnyLink의 각 거래 트리는 클래스 로더 상의 부모, 자식 관계를 가지도록 설계되어 있다.

    심볼릭 링크 노드는 클래스 로더 상의 부모가 아니지만, 마치 부모인 것처럼 사용할 수 있도록 AnyLink의 클래스 로더 구현체가 지원한다.

  • 서비스 플로우 정의 파일(.sfdl 확장자를 가지는 XML 문서 파일)

    서비스 플로우 정의 파일은 AnyLink 스튜디오의 서비스 플로우 에디터에서 BPMN(Business Process Modeling Notation) 다이어그램을 사용하여 그린 서비스 플로우의 정의 문서이다. 서비스 플로우는 서비스 플로우 엔진에서 관리하며 서비스 플로우의 수신(Receive) 메시지 이벤트들이 AnyLink의 내부 서비스로 등록된다.

    가장 일반적인 AnyLink 거래 형태는 주로 인바운드 어댑터를 통해 메시지가 들어오며, 들어온 메시지는 거래 트리를 통해 파싱되어 내부 서비스를 식별하게 된다. 대부분 AnyLink 내부 서비스는 서비스 플로우의 메시지 이벤트이며 플로우에 정의된 흐름을 따라 진행 후 플로우의 서비스 액티비티를 호출하게 된다. 플로우에 그려진 서비스 액티비티는 대부분 어댑터의 아웃바운드 룰 서비스를 의미한다. 아웃바운드 룰 서비스를 통해 외부 시스템을 호출한 후 응답을 받으면 호출한 플로우로 넘겨줘서 최초 메시지를 보낸 어댑터로 응답 메시지를 보내는 것이 가장 기본적인 형태의 AnyLink 거래이다.

  • 파싱 룰

    AnyLink에서 외부로 부터 들어오는 메시지를 파싱하는 규칙인 파싱 룰은 별도의 리소스로 관리되지 않고, 거래 및 거래그룹에서 정의한다.

  • 어댑터 아웃바운드 룰(.orule 확장자를 가지는 XML 문서 파일)

    AnyLink에서 다른 시스템으로 요청을 내보내는 아웃바운드 어댑터 룰을 정의하는 문서. 각 어댑터의 프로토콜과 구현방식에 따라 설정 정보들이 달라진다. 기본 설정 정보로는 요청 메시지, 응답 메시지, 비정상 응답 메시지와 어댑터 및 엔드포인트 ID 정보가 있다.

    아웃바운드 룰은 AnyLink 내부 서비스의 하나이며 내부적으로 다른 컴포넌트에서 아웃바운드 룰 서비스를 호출하면 해당 룰에 설정된 어댑터와 엔드포인트를 식별하여 외부 시스템으로 메시지를 전송하는 방식으로 동작한다.

  • 멀티바인딩 룰(.mbind 확장자를 가지는 XML 문서 파일)

    AnyLink 내부 서비스를 경우에 따라 다르게 라우팅을 해야 할 경우 여러 서비스를 묶어서 하나의 그룹으로 보게 해주는 서비스가 멀티바인딩 라우터 룰이다. 멀티바인딩 라우터 룰은 설정에 따라 메시지의 특정 값에 따른 서비스 분기, 라운드 로빈(Round Robin)이나 가중치 기반 라운드 로빈, 시간대별, 서비스 플로우의 코릴레이션, 핸들러 등을 사용한 서비스 분기를 지시할 수 있다.

    요청, 응답, 비정상 응답 메시지와 필요 시 각 메시지에 대한 매핑 즉, 메시지 변환을 지정할 수 있다.

  • 메시지(.umsg 확장자를 가지는 XML 문서 파일)

    통합 메시지 문서인 .umsg 파일 내부에는 여러 개의 메시지가 존재할 수 있다. AnyLink는 내부적으로 입출력에 사용되는 데이터의 내부 구조를 표현하는 형태인 DTO(Data Transfer Object)와 특정 서식에 따른 메시지를 구분하는데 .umsg 파일에는 같은 데이터 구조를 가진 하나의 DTO와 여러 서식의 메시지가 함께 존재할 수 있다.

    지원하는 메시지 서식으로는 XML, 고정 길이 형태(Fixed Length), 구분 문자 형태(Delimiter), NameValue, JSON 등이 있다.

    AnyLink는 내부적으로 성능 및 효율성을 고려하여 DTO와 메시지를 Java 코드로 변환하여 관리한다. 즉, .umsg 문서에 해당하는 .java 소스 파일들을 생성한 후 컴파일한 .class 파일들이 거래 리소스에 포함되어 있다.

  • 메시지 매핑(.map 확장자를 가지는 XML 문서 파일)

    메시지 매핑 문서는 입력 메시지들을 출력 메시지들로 변환하는 규칙을 정의하는 문서이다. AnyLink는 각 입력 메시지와 출력 메시지의 필드들을 연결하는 형태로 변환 규칙을 지정하며, 입력 메시지 외에도 몇 가지 표현식을 매핑의 소스로 사용할 수 있다.

    입출력 필드간의 조합 혹은 표현식으로 구성된 매핑의 실행 속도를 개선하기 위하여 AnyLink는 내부적으로 매핑을 Java 코드로 변환하여 관리한다. 즉 메시지 파일과 마찬가지로 .java 소스 파일을 생성한 후 컴파일한 .class 파일이 거래 리소스에 포함된다.

  • 표현식(.expr 확장자를 가지는 XML 문서 파일)

    메시지의 일부를 나타내거나 함수식을 표현하기 위하여 AnyLink는 표현식(Expression)을 사용한다.

    AnyLink 표현식은 메시지의 구조를 표현할 수 있는 형태이다. 예를 들어 msg1에 field1이라는 필드가 존재한다고 하면 "msg1.field1"이라는 표현식으로 표현한다. 서비스 플로우에서는 플로우에서 선언된 변수인 DataField에 접근할 수 있는데 예를 들어 dataField1이라는 변수의 name이라는 필드에 접근하려면 "$dataField1.name"이라는 표현식으로 표현한다.

    AnyLink 표현식에서는 그룹을 표현하는 괄호를 사용할 수 있으며 Java 메소드들을 호출할 수 있다. 예를 들어 위의 변수 예에서 name이라는 필드가 Java의 String 클래스에 해당한다면 다음과 같이 앞의 두 글자만 추출할 수 있다.

    "$dataField1.name.substring(0, 2)"

    필요에 따라 변수의 Java 자료형을 명시적으로 지정할 수도 있다. 예를 들어 dataField1이라는 변수가 com.example.NamedPerson이라는 자료형을 가진다면 다음과 같이 위의 식을 고쳐쓸 수 있다.

    "$dataField1<com.example.NamedPerson>.name.substring(0,2)"

    AnyLink는 표현식의 실행 속도를 고려하여 Java 코드로 변환하여 관리한다. 잘못된 표현식이라면 스튜디오에서 배포할 때 Java 코드 변환 및 컴파일할 때에 오류가 발생하게 된다. .expr 파일도 메시지, 매핑 파일과 마찬가지로 컴파일된 .class 파일이 거래 리소스에 포함되어 관리된다.

    AnyLink에서 표현식은 서비스 플로우의 분기 조건문을 나타내거나 코릴레이션 계산식, 멀티바인딩 라우터의 룰 등에서 사용된다.

    메시지 매핑의 소스 정보를 표현할 때 사용할 수 있는 표현식은 매핑의 특성을 지원하기 위해 즉, 비어있는 소스의 객체 레퍼런스가 있으면 빈 객체를 만들어준다거나, 배열 형태의 매핑을 지원하는 등의 특성을 지원하기 위해 조금 다른 형태를 가진다.

2.2. 거래 및 거래그룹 환경설정

다음은 거래 및 거래그룹에 대한 환경설정 파일에 대한 설명이다.

  • 거래 및 거래그룹에 대한 환경설정(.bizcfg 확장자를 가지는 XML 문서 파일)

    거래 및 거래그룹의 환경설정 문서는 직접적으로 거래 정보와는 상관이 없으나 거래의 환경에 해당하는 정보들을 저장하는 문서이다. 거래 및 거래그룹 리소스들은 각 노드별로 하나의 .iar 파일에 관리되지만 거래 노드의 환경설정 문서 파일은 해당 거래 혹은 거래그룹 노드를 나타내는 디렉터리 아래에 .bizcfg 확장자를 가지는 문서 형태로 별도로 존재한다.

    환경설정 문서에는 거래 트레이스 로그 레벨과 아웃바운드 룰별 트레이스 로그 레벨을 설정할 수 있다. 그외 해당 거래 노드의 서비스 플로우 등이 사용할 스레드 풀을 지정할 수 있다.

2.3. Java 클래스 로더와 거래 트리 클래스 로딩 방식

거래 및 거래그룹을 나타내는 비즈니스 리소스에는 사용자 클래스나 핸들러 등의 Java 코드 외에도 자동으로 생성되는 메시지, 매핑, 표현식 등의 Java 코드들이 포함되어 있다. 앞에서 심볼릭 링크를 설명하면서 언급하였듯이 각 Java 코드들은 Java의 특성에 따라 클래스 로더 구성에 의한 코드 참조 구조를 따르게 된다.

AnyLink는 Java EE 환경에서 실행되므로 기본적인 클래스 로더는 다음과 같은 구조를 가진다.

figure java classloader hierarchy
Java 클래스 로더 기본 구성 계층도

AnyLink 비즈니스 클래스 로더는 하나의 클래스 로더가 아니며 루트 클래스 로더 아래에 거래 트리 형태의 클래스 로더를 자손으로 가지는 형태가 된다.

figure bizclassloader hieararchy
AnyLink 비즈니스 클래스 로더 예를 포함한 클래스 로더 계층도

클래스 로더 계층 구조 특성상 클래스 로더 여러 계층에 걸친 순환 참조를 허용하지 않는다. 이것은 심볼릭 링크를 사용할 때에도 마찬가지이다. 심볼릭 링크는 일종의 부모 클래스 로더와 같은 관계를 만들게 된다.

특정 거래 혹은 거래그룹 노드의 내용을 변경하여 재배포하게 되면 해당 거래 노드와 모든 자손 노드들이 재적재된다. 이때 재적재되는 자손 노드들은 심볼릭 링크를 통해 참조하는 논리적 자손 노드들을 포함한다.

3. 라이브러리

AnyLink 거래 트리에서 공통으로 사용하는 Java 라이브러리가 있을 경우 이 라이브러리는 거래 트리와 별도로 라이브러리 디렉터리에서 따로 관리한다.

AnyLink 비즈니스 클래스 로더 계층 구조 상 라이브러리는 최상위 비즈니스 클래스 로더에서 읽어들이게 된다. 운영할 때에 라이브러리를 배포할 경우 클래스 로더 최상위 노드에서 라이브러리 코드를 적재하는 특성 상, 자손 노드들인 전체 거래 트리의 클래스 로더를 다시 적재하게 된다.

런타임 엔진 서버에서 라이브러리 파일들은 기본값으로 각 서버 홈 디렉터리의 아래에 위치한다.

${server.home}/repository/lib

4. 어댑터 리소스

AnyLink 런타임 엔진에서는 다양한 프로토콜 및 애플리케이션과 통신을 담당하는 어댑터에 필요한 설정 정보와 어댑터 통신 엔드포인트 등의 리소스를 관리한다. 어댑터 관련 리소스는 크게 어댑터 설정 정보와 엔드포인트 및 엔드포인트 그룹으로 구분할 수 있다.

런타임 엔진 서버에서 어댑터 리소스들은 기본값으로 각 서버 홈 디렉터리의 아래에 위치한다.

${server.home}/repository/adapters

다음은 어댑터 리소스의 종류이다.

  • 어댑터

    어댑터 설정 정보 파일은 .adt 확장자를 가지는 XML 문서로 프로토콜 정보, 사용하는 스레드 풀 ID, 트레이스 로그 레벨, 클러스터링 정보 등을 설정한다.

    AnyLink에서는 각 업무별로 트레이스 로그와 트랜잭션 로그를 설정하고 남길 수 있다. 이 로그들은 내부적으로는 로그 어댑터에서 처리한다. 이 기능에 대한 자세한 설명은 어댑터 안내서를 참고한다.

  • 엔드포인트 및 엔드포인트 그룹

    엔드포인트 정보 파일은 .ep 확장자를 가지는 XML 문서로 통신 방향, 동기 모드, 거래 노드 ID, 연결 타임아웃, 스레드 풀 ID, 트레이스 로그 레벨, 아웃바운드 엔드포인트 로그 레벨, 클러스터링 정보, 시스템 오류 메시지 등의 정보를 설정한다.

    엔드포인트 그룹은 여러 개의 엔드포인트를 그룹화하여 처리하는 개념을 가지고 있으며 .epg 확장자를 가지는 XML 문서에 설정된다. 하위에 속한 엔드포인트와 엔드포인트 그룹으로 라우팅을 분기하기 위한 방법을 설정한다. 예를 들어 라운드 로빈, 최소 요청, 핸들러, 연결 전담형 라운드 로빈 등의 라우팅 방법을 지원한다. 엔드포인트 그룹은 하위 엔드포인트 그룹 혹은 엔드포인트를 가지는 부모 디렉터리로 표현된다.

5. 업무시스템 정보 설정

업무시스템은 개별 런타임 엔진 서버 또는 런타임 엔진 서버의 클러스터 단위로 구성된다.

AnyLink의 기반이 되는 Java EE 서버의 클러스터에 속한 서버들은 같은 업무시스템에 속하게 된다. AnyLink에서는 업무시스템별로 거래 트리 정보 등을 공유하므로 AnyLink에서 실행되는 애플리케이션 개념의 기본 배포 단위는 업무시스템 단위라고 생각할 수 있다. 즉, 업무시스템이 다르면 배포되는 거래 등 업무들도 다르게 구성된다.

AnyLink 런타임 엔진의 시스템 관련 설정은 업무시스템 공통과 개별 런타임 엔진 서버별 설정이다. 주로 스레드 풀과 로깅, Java EE 서버 도메인 사용자 ID와 암호 등의 정보를 설정하고 그외에 특별한 설정이 없을 경우 시스템에서 기본적으로 사용할 스레드 풀 ID와 기본 서비스 타임아웃 값 등을 설정한다.

해당 파일에 스레드 풀과 신뢰 전송 큐 정보, 시스템의 기본 트레이스 로그 수준을 설정한다. 이외에도 설정 파일에는 내부적으로 런타임 엔진 서버에서 필요한 몇 가지 추가 설정들을 가지고 있다. 본 절에서는 주요 설정 내역에 대해서 설명한다. 각 세부 내역에 대한 설명은 해당 절의 설명을 참고한다.

업무시스템 설정 정보는 각 서버별로 다음의 경로에 저장된다.

${server.home}/repository/bizsystem/bizsystem.config

<bizsystem.config>

<?xml version="1.0" encoding="UTF-8"?>
<ns0:bizSystemInfo xmlns:ns2="http://www.tmaxsoft.com/schemas/AnyLink/reliableQueue/"
xmlns:ns1="http://www.tmaxsoft.com/schemas/AnyLink/common/"
xmlns:ns3="http://www.tmaxsoft.com/schemas/AnyLink/serverPlugin/"
xmlns:ns0="http://www.tmaxsoft.com/schemas/AnyLink/">
<ns0:sysId>IFL_SYS</ns0:sysId>
   <ns0:id>IFL_SYS</ns0:id>
   <ns0:name>IFL_SYS</ns0:name>
   <ns0:version>4</ns0:version>
   <ns0:registererdDate>2014-10-13 12:54:03.514</ns0:registererdDate>
   <ns0:registeringUser>admin</ns0:registeringUser>
   <ns0:modificationDate>2014-11-10 20:20:09.829</ns0:modificationDate>
   <ns0:user>administrator</ns0:user>
   <ns0:passwd>ba05778dea933f47bc150c743b122336</ns0:passwd>
   <ns0:bizSystemDefaultThreadPoolId>bizSystemDefaultThreadPool
</ns0:bizSystemDefaultThreadPoolId>
   <ns0:threadPool>
      <ns0:id>bizSystemDefaultThreadPool</ns0:id>
      <ns0:name>bizSystemDefaultThreadPool</ns0:name>
      <ns0:queueFullPolicy>SystemError</ns0:queueFullPolicy>
      <ns0:useVipThread>false</ns0:useVipThread>
      <ns0:threadPriority>-1</ns0:threadPriority>
      <ns0:vipThreadPriority>-1</ns0:vipThreadPriority>
      <ns0:commonSetting>
         <ns0:queueSize>-1</ns0:queueSize>
         <ns0:min>60</ns0:min>
         <ns0:max>100</ns0:max>
         <ns0:keepAliveTime>300</ns0:keepAliveTime>
         <ns0:vipThreadCount>10</ns0:vipThreadCount>
      </ns0:commonSetting>
   </ns0:threadPool>
   <ns0:systemLogging>
      <ns0:fileLocation>${server.home}/logs/AnyLink_rte_%d{1}.log</ns0:fileLocation>
      <ns0:logLevel>FINEST</ns0:logLevel>
      <ns0:logger>
         <ns0:name>com.tmax.anylink.dis.level</ns0:name>
         <ns0:logLevel>INFO</ns0:logLevel>
      </ns0:logger>
   </ns0:systemLogging>
   <ns0:nodeList>
      <ns0:node>
         <ns0:name>server1</ns0:name>
      </ns0:node>
   </ns0:nodeList>
   <ns0:clusterGroup>
      <ns0:adapterClusterGroup>
         <ns0:adapterCluster>
            <ns0:clusterId>TCP_ADT</ns0:clusterId>
            <ns0:activeCount>2</ns0:activeCount>
            <ns0:construction>
               <ns0:serverId>server4</ns0:serverId>
               <ns0:priority>0</ns0:priority>
               <ns0:clusterMember>true</ns0:clusterMember>
            </ns0:construction>
            <ns0:construction>
               <ns0:serverId>server5</ns0:serverId>
               <ns0:priority>1</ns0:priority>
               <ns0:clusterMember>true</ns0:clusterMember>
            </ns0:construction>
            <ns0:construction>
               <ns0:serverId>server6</ns0:serverId>
               <ns0:priority>2</ns0:priority>
               <ns0:clusterMember>false</ns0:clusterMember>
            </ns0:construction>
         </ns0:adapterCluster>
      </ns0:adapterClusterGroup>
   </ns0:clusterGroup>
   <ns0:deploymentPolicy>allowPartialDeploy</ns0:deploymentPolicy>
   <ns0:encryptAlgorithm>AES128</ns0:encryptAlgorithm>
   <ns0:debuggingMode>false</ns0:debuggingMode>
</ns0:bizSystemInfo>

5.1. 스레드 풀

런타임 엔진에서 사용할 수 있는 스레드 풀들을 지정한다. 스레드 풀 세부 설정 정보들은 업무시스템별로 공통이거나 개별 런타임 엔진 서버별로 일부 다르게 설정할 수 있다.

다음은 설정 예와 각 항목에 대한 설명이다.

<ns0:threadPool>
   <ns0:id>bizSystemDefaultThreadPool</ns0:id>
   <ns0:name>bizSystemDefaultThreadPool</ns0:name>
   <ns0:queueFullPolicy>SystemError</ns0:queueFullPolicy>
   <ns0:useVipThread>false</ns0:useVipThread>
   <ns0:threadPriority>-1</ns0:threadPriority>
   <ns0:vipThreadPriority>-1</ns0:vipThreadPriority>
   <ns0:commonSetting>
      <ns0:queueSize>-1</ns0:queueSize>
      <ns0:min>60</ns0:min>
      <ns0:max>100</ns0:max>
      <ns0:keepAliveTime>300</ns0:keepAliveTime>
      <ns0:vipThreadCount>10</ns0:vipThreadCount>
   </ns0:commonSetting>
</ns0:threadPool>
속성 설명

id

스레드 풀 아이디이다.

name

스레드 풀 이름이다.

queueFullPolicy

Queue가 Full이 되는 경우 정책을 설정한다.

  • SystemError : 시스템 오류 처리

  • CallerThread : 호출자 스레드

useVipThread

일정 개수의 VIP 스레드를 둘 것인지 여부를 설정한다.

threadPriority

일반 스레드의 우선순위를 설정한다. (기본값: 6)

vipThreadPriority

VIP 스레드의 우선순위를 설정한다. (기본값: 3)

queueSize

스레드 풀에서 대기하는 작업 큐의 최대 크기를 설정한다. (서버별 설정 가능)

max

일반 스레드 풀의 최대 크기이다. (서버별 설정 가능)

min

일반 스레드 풀의 최소 크기이다. (서버별 설정 가능)

keepAliveTime

작업이 할당되지 않았을 때 할당된 스레드를 취소시키지 않는 기본 유지 시간이다. (서버별 설정 가능)

vipThreadCount

VIP 스레드 개수(고정)이다. (서버별 설정 가능)

5.2. 시스템 로깅

업무시스템 설정 정보에는 시스템 로깅 정보를 지정할 수 있다. 시스템 로깅은 AnyLink 런타임 엔진 서버의 내부 로그를 나타내는 것으로 설정을 통해 출력 및 기본 로그 수준과 로거별 로그 수준을 지정할 수 있다. 로거별 로그 수준 지정은 서버별로 다르게 지정할 수도 있다.

로그 파일이 저장될 위치를 나타내는 fileLocation에는 다음과 같은 미리 정의된 변수 값을 사용할 수 있다.

<ns0:systemLogging>
   <ns0:fileLocation>${server.home}/logs/AnyLink_rte_%d{1}%h{1}%m{30}.log</ns0:fileLocation>
   <ns0:logLevel>FINEST</ns0:logLevel>
   <ns0:logger>
      <ns0:name>com.tmax.anylink.serviceflow.level</ns0:name>
      <ns0:logLevel>INFO</ns0:logLevel>
   </ns0:logger>
   <ns0:logger>
      <ns0:name>com.tmax.anylink.runtime.level</ns0:name>
      <ns0:logLevel>FINE</ns0:logLevel>
   </ns0:logger>
</ns0:systemLogging>
속성 설명

server.home

AnyLink 런타임 엔진 서버별 홈 디렉터리 위치를 나타낸다.

domain.home

AnyLink 도메인별 홈 디렉터리 위치를 나타낸다.

install.root

AnyLink 바이너리가 설치된 루트 디렉터리 위치를 나타낸다.

server.name

현재 AnyLink 서버명을 나타낸다.

adminServer.name

AnyLink의 데이터 통합 서버명을 나타낸다.

5.3. 클러스터 설정

클러스터를 사용하는 업무시스템의 어댑터별 클러스터 설정을 나타낸다. 아무런 설정을 하지 않을 경우 모든 어댑터가 활성화되어 동작한다.

다음은 설정 예와 각 항목에 대한 설명이다.

   <ns0:clusterGroup>
      <ns0:adapterClusterGroup>
         <ns0:adapterCluster>
            <ns0:clusterId>TCP_ADT</ns0:clusterId>
            <ns0:activeCount>2</ns0:activeCount>
            <ns0:construction>
               <ns0:serverId>server4</ns0:serverId>
               <ns0:priority>0</ns0:priority>
               <ns0:clusterMember>true</ns0:clusterMember>
            </ns0:construction>
            <ns0:construction>
               <ns0:serverId>server5</ns0:serverId>
               <ns0:priority>1</ns0:priority>
               <ns0:clusterMember>true</ns0:clusterMember>
            </ns0:construction>
            <ns0:construction>
               <ns0:serverId>server6</ns0:serverId>
               <ns0:priority>2</ns0:priority>
               <ns0:clusterMember>false</ns0:clusterMember>
            </ns0:construction>
         </ns0:adapterCluster>
      </ns0:adapterClusterGroup>
   </ns0:clusterGroup>
속성 설명

clusterId

클러스터 아이디이다.

activeCount

최대 활성 노드 수이다.

construction

서버 노드별 클러스터 우선순위 및 멤버를 설정한다.

  • serverId : 서버 아이디를 설정한다.

  • priority : 서버 우선순위를 설정한다.

  • clusterMember : 클러스터에 포함될지 여부를 설정한다.

5.4. 배포 정책 설정

기본적으로 리소스 배포는 모든 서버에 배포가 성공하지 못할 경우 실패 처리를 하게 된다. 하지만 클러스터 환경에서 일부 서버의 동작에 이상이 있을 경우, 부분적인 서버에 대한 배포에 대한 허용을 옵션으로 선택하여 동작한다.

다음은 설정 예와 각 항목에 대한 설명이다.

<ns0:deploymentPolicy>allowPartialDeploy</ns0:deploymentPolicy>
속성 설명

deploymentPolicy

배포 정책을 설정한다.

  • allOrNothing : 전부 성공하지 못하면 실패 처리한다.

  • allowPartialDeploy : 살아있는 서버에 대해서만 배포를 허용하고, 배포가 되지 않은 서버가 기동될 때에 자동 동기화한다.

5.5. 암호화 알고리즘 설정

인피니링크 내부에서 사용하는 공용 암호화 알고리즘을 설정한다.

다음은 설정 예와 각 항목에 대한 설명이다.

<ns0:encryptAlgorithm>AES128</ns0:encryptAlgorithm>
속성 설명

encryptAlgorithm

암호화 알고리즘을 설정한다.

  • AES128 : AES128을 사용하여 암호화한다. 별도 설정이 필요하지 않다.

  • AES256 : AES256을 사용하여 암호화한다. JRE에서 해당 암호화 알고리즘을 사용할 수 있도록 설정해야 한다.

5.6. 디버깅 모드 설정

해당 업무시스템에서 플로우 디버깅 사용을 허용할 것인지에 대한 설정이다.

다음은 설정 예와 각 항목에 대한 설명이다.

<ns0:debuggingMode>false</ns0:debuggingMode>
속성 설명

debuggingMode

디버깅 모드를 설정한다.

  • true : 디버깅 모드를 허용한다. 스튜디오에서 기 배포된 리소스에 대한 플로우 디버깅을 사용할 수 있다.

  • false : 디버깅 모드를 허용하지 않는다. 플로우 디버깅을 사용할 수 없다.