메시지 에디터
본 장에서는 AnyLink 스튜디오에 내장된 메시지 에디터의 기능과 사용법에 대해 설명한다.
1. 메시지 생성
Message(이하 메시지)는 전문을 추상화(abstraction)시킨 객체이다.
AnyLink의 어댑터는 메시지 객체를 이용하여 DataObject를 네트워크로 내보낼 바이트형 배열을 생성하고, 네트워크에서 수신한 바이트형 배열은 DataObject로 변환하여 플로우로 넘겨준다. 이때 DataObject를 바이트형 배열로 생성하는 과정을 Marshal이라고 하며, 반대로 바이트형 배열을 DataObject로 변화하는 과정을 Unmarshal이라고 한다.
메시지는 왼쪽 네비게이터의 거래(그룹) 리소스 컨텍스트 메뉴에서 [새로만들기] > [메시지]를 선택한다. 메시지 생성 다이얼로그에서 생성할 [거래/거래그룹]을 선택한 후 항목을 입력하고 [Finish] 버튼을 클릭한다.
항목 | 설명 |
---|---|
메시지 아이디 |
메시지의 아이디를 입력한다. 영어, 숫자, 특수문자(_)만 사용이 가능하며 첫 글자는 대문자로 입력한다. |
메시지 이름 |
메시지의 이름을 입력한다. 한글, 영어, 숫자, 특수문자 입력이 가능하다. 메시지 이름은 XML Naming Convention을 따른다. |
2. 메시지 에디터
메시지 리소스가 생성되면 메시지 에디터 화면으로 이동해서 해당 메시지의 정보를 관리할 수 있다.
-
메시지 정의
항목 설명 메시지 ID
메시지를 생성할 때 입력한 메시지 아이디이다.
메시지 이름
메시지를 생성할 때 입력한 메시지 이름이다.
설명
메시지에 대한 설명을 입력한다. 편의상 입력하는 것으로 입력하지 않아도 무방하다.
-
메시지 설정
메시지 설정 영역은 메시지 목록과 메시지 타입별 설정 영역으로 구성된다. 각 메시지 유형별 설정에 대한 자세한 설명은 메시지 설정을 참고한다.
-
메시지 구성
메시지 구성 영역은 메시지 설정 영역에서 추가한 메시지를 구성하는 영역이다. 각 메시지 유형별 구성 항목이 달라진다. 메시지 구성에 대한 자세한 설명은 메시지 구성을 참고한다.
2.1. 메시지 설정
메시지 에디터 화면의 메시지 설정 영역은 메시지 목록과 메시지 타입별 설정 영역으로 구성된다. 메시지 목록의 [+추가] 버튼을 클릭해서 메시지를 생성한다. 메시지 생성 다이얼로그에서 각 항목을 입력한 후 [OK] 버튼을 클릭한다.
다음은 입력항목에 대한 설명이다.
항목 | 설명 |
---|---|
메시지 타입 |
AnyLink에서는 다양한 메시지 타입을 선택한다. 메시지 타입에 따라 메시지 타입별 설정에 항목이 달라진다.
|
메시지 아이디 |
메시지를 생성할 때 정의한 메시지 아이디에 메시지 타입이 추가되어 기본 생성된다. '메시지 타입'을 선택하면 '메시지 아이디'는 '리소스이름 + 메시지 타입’으로 생성된다. (수정 가능) |
Namespace 생성 안함 |
체크할 경우 XML NameSapce를 생성 하지 않는다. '메시지 타입' 항목을 'XML’로 선택한 경우에만 설정 가능하다. |
Namespace 직접 입력 |
체크할 경우 XML NameSapce를 자동으로 생성해주지 않고 직접 입력한다. '메시지 타입' 항목을 'XML’로 선택한 경우에만 설정 가능하다. |
메시지 필드 구성을 추가한 후 메시지 목록에서 추가해야 메시지를 생성시킬 수 있다. |
메시지를 생성한 후 메시지를 설정한다.
다음은 각 타입별 메시지 설정 항목에 대한 설명이다.
-
공통 항목
다음은 모든 메시지 타입에서 공통적으로 설정할 수 있는 항목이다.
항목 설명 Message Encoding
메시지의 인코딩 타입을 설정한다.
AnyLink는 다음의 인코딩 타입을 지원한다.
-
ASCII
-
EBCDIC
-
UTF-8
-
UTF-16
-
UTF-16BE
-
UTF-16LE
-
EUC-KR
-
-
Fixed Length
항목 설명 Trim
메시지 Trim 여부를 설정한다.
-
none : trim을 하지 않는다.
-
rtrim : 문자열의 오른쪽을 trim한다.
-
ltrim : 문자열의 왼쪽을 trim한다.
-
lrtrim : 문자열의 양쪽을 trim한다.
총 길이
메시지 필드들의 Length 합을 보여준다.
Include, Array 등의 설정으로 인해 총 길이의 합을 알 수 없는 경우 Unknown Length로 표시한다.
공백 Include 필드 제거
체크할 경우 배열데이터가 공백(0x20)이거나 null(0x00)일 경우 해당 필드는 객체로 생성하지 않는다.
-
-
Bitmap
메시지 타입이 Bitmap인 경우 추가 설정 항목이 존재하지 않는다.
-
Dlimeter
항목 설명 Field Delimiter
메시지 필드 구분 문자를 설정한다.
-
CSV
메시지 타입이 CSV인 경우 추가 설정 항목이 존재하지 않는다.
-
XML
항목 설명 Root Element Name
XML 메시지 Root Element Name을 설정한다.
Content Type
XML 메시지 Content Type을 설정한다.
Complex Type Name
XML 메시지 Complex Type Name을 설정한다.
Simple Type Name
Content Type이 Simple로 설정된 경우 XML 메시지 Simple Type Name을 설정한다.
UnmarshallException 무시
거래를 수행할 때 UnmarshallException이 발생하는 경우 UnmarshallException을 무시하고 거래를 진행할지 여부를 설정한다.
Namespace - Prefix 설정
Prefix를 변경할 경우 사용되는 옵션으로 변경하는 경우 Namespace와 Prefix를 입력한다.
-
JSON
항목 설명 Null 처리 방식
메시지 필드값이 null 값인 경우 처리하는 방식을 설정한다.
-
NULL : null 유지
-
EMPTY_STRING : 빈 문자열로 표시
-
SKIP : 해당 태그 제거
UnmarshallException 무시
거래를 수행할 때 UnmarshallException이 발생하는 경우 UnmarshallException을 무시하고 거래를 진행할지 여부를 설정한다.
Object 이름
Object 이름을 입력한다.
Json 객체의 Root 노드의 이름으로 Object 이름 하위 필드들로 메시지가 구성된다.
-
-
Value Object
메시지 타입이 Value Object인 경우 추가 설정 항목이 존재하지 않는다.
-
KeyValue
항목 설명 Delimiter
Delimiter로 사용할 값을 입력한다.
시작 Delimiter 제거
메시지의 앞에 Key-Value 메시지면 메시지 앞에 Delimiter를 붙이고, Key-Value 메시지가 아닐 경우에는 앞에 Delimiter를 생략한다.
Separator
Separator로 사용할 값을 입력한다.
Trim
메시지 Trim 여부를 설정한다.
-
none : trim을 사용하지 않는다.
-
rtrim : 필드의 오른쪽을 trim한다.
-
ltrim : 필드의 왼쪽을 trim한다.
-
lrtrim : 필드의 양쪽을 trim한다.
-
-
FDL(Fixed Definition Language)
메시지 타입이 FDL인 경우 추가 설정 항목이 존재하지 않는다.
-
FML(Fixed Manipulation Language)
메시지 타입이 FML인 경우 추가 설정 항목이 존재하지 않는다.
-
ISO8583
메시지 타입이 ISO8583인 경우 공통 설정과 추가 설정 항목이 존재하지 않는다.
2.2. 메시지 구성
메시지 에디터 화면의 메시지 구성 영역은 메시지 타입별로 항목 구성이 달라진다.
-
메시지 구성
다음은 모든 타입의 메시지에 공통으로 들어가는 항목에 대한 설명이다. 메시지 타입별 항목에 대한 자세한 내용은 "메시지 타입별 메시지 구성 항목"을 참고한다.
항목 설명 Physical Name
각 필드의 물리명을 공백을 제외한 영문으로 입력한다.
Java의 변수명 규약과 동일하다.
Logical Name
각 필드의 논리명을 입력한다.
Java의 변수명 규약을 따르지 않고, 한글 입력도 가능하다.
Field Type
각 필드의 자료형을 선택한다.
-
binary : Base64 방식으로 인코딩된 2진 데이터 타입
-
BigDecimal : java.math에 포함되어 있는 BigDecimal 클래스 타입
-
BigInteger : java.math에 포함되어 있는 BigInteger 클래스 타입
-
bit : 0과 1만 값만 가지는 2진 데이터 타입
-
bitmap : 0과 1만 표현 가능한 Map 형식의 2진 데이터 타입
-
boolean : Java에서 사용하는 boolean 타입과 동일
-
byte : Java에서 사용하는 Byte 타입과 동일
-
char : Java에서 사용하는 char 타입과 동일
-
Calendar : java.util에 포함되어 있는 Calendar 클래스 타입
-
date : java.util에 포함되어 있는 Date 클래스 타입
-
double : Java에서 사용하는 double 타입과 동일
-
float : Java에서 사용하는 float 타입과 동일
-
int : Java에서 사용하는 int 타입과 동일
-
integer : java.lang에 포함되어 있는 Integer 클래스 타입
-
include : 다른 메시지를 포함하는 경우 사용하는 타입
-
long : Java에서 사용하는 long 타입과 동일
-
number : java.lang에 포함되어 있는 Number 클래스 타입
-
short : Java에서 사용하는 short 타입과 동일
-
string : java.lang에 포함되어 있는 String 클래스 타입
Included Str. Name
Included Str. Path
'Field Type' 항목이 'Include’일 경우, Include된 메시지의 이름과 위치를 보여준다. 직접 입력할 수는 없다.
Array Size
메시지의 필드가 배열의 형태로 여러 개 입력되는 경우 배열의 개수를 넣는다. 입력하지 않으면 배열이 아니라고 간주한다.
숫자를 입력하면 숫자가 배열의 크기가 되며, 같은 메시지 내의 필드명을 입력하면 해당 필드의 값을 배열의 크기로 설정할 수 있어서 가변배열 설정이 가능하다. 가변배열의 크기로써 설정하는 필드는 반드시 숫자 타입이어야 한다. 'unbounded’를 입력하는 경우 배열의 크기를 지정하지 않고 사용이 가능하다.
Comment
필드에 대한 설명을 입력한다. 입력하지 않아도 무방하다.
Mask
해당 메시지의 내용을 볼 때 마스크가 입력된 필드는 해당 마스크로 대체되어 보여진다.
마스킹을 사용하기 위해서는 WebAdmin의 [운영관리] > [마스킹 설정]에서 업무시스템 또는 거래그룹/거래별로 마스킹 설정 정보를 설정해주어야 한다. 패스워드 같은 중요한 정보를 가리기 위해서 사용된다.
-
Mask 문자열이 한 글자인 경우 해당 문자로 원본 메시지를 변경한다.
예)
Mask 문자 : 'x' 원본 메시지 : 'abcd' --------------------- 결과 : 'xxxx'
-
'?'의 경우 원본 메시지를 마스킹하지 않는다.
예)
Mask 문자 : ‘???-xxxx-????’ 원본 메시지 : '010-1111-2222' --------------------- 결과 : '010-xxxx-2222'
-
Mask 문자열로 '?'를 사용하는 경우 '?' 앞에 '\'를 추가한다.
예)
Mask 문자 : ‘?\??-xxxx-?\???’ 원본 메시지 : '010-1111-2222' --------------------- 결과 : '0?0-xxxx-2?22'
[참고]
'\' 문자의 경우 Java에서 Escape 문자로 구분되기 때문에 실제 입력할 때 '\\'로 입력한다.
Corr. Field
코릴레이션으로 사용되는 필드인지 설정한다.
해당 항목을 'true’로 설정하면 MappingHandler에서 API를 통해 해당 항목의 값을 불러올 수 있다.
메시지 필드의 타입을 설정했을 때만 설정할 수 있다.
-
-
버튼
다음은 메시지 구성 영역에 존재하는 버튼에 대한 설명이다.
항목 설명 [추가]
[추가] 버튼을 클릭하면 필드를 추가할 수 있다.
[복수 필드 추가]
[복수 필드 추가] 버튼을 클릭하면 여러 개의 필드를 추가할 수 있다.
[삭제]
필드가 선택된 경우 활성화되며 선택된 필드를 삭제하는 경우 사용한다.
[검색]
필드 타입이 Include인 경우 활성화되며 버튼을 클릭할 때 Include할 메시지를 선택할 수 있는 다이얼로그가 생성된다.
[XML 변환]
XML 메시지를 초기화하는 경우 사용한다.
[VO Export]
메시지의 .java 파일과 .class 파일을 사용자가 지정한 경로에 Export한다. 각 파일명은 메시지 아이디와 동일하다.
[유효성검사]
서버에 등록된 메시지 유효성 검사 핸들러를 호출하여 각 필드의 유효성을 판단한다. 핸들러 생성 방법은 핸들러를 참고한다.
메시지 타입별 메시지 구성 항목
다음은 메시지 타입별 메시지 구성의 항목에 대한 설명이다.
-
Fixed Length
항목 설명 Length
'FixedLength' 타입에서 가장 중요한 설정이다.
메시지의 길이는 디폴트로 10이 지정되어 있으며 실제로 원하는 길이를 설정하기 위해서는 'Length' 항목을 변경해야 한다. 가변길이 설정을 위해서는 가변배열의 경우와 마찬가지로 숫자형 필드의 이름을 사용할 수 있다.
Offset
필드가 시작될 Offset을 나타내는 값으로 자동 계산되어 임의로 설정할 수 없다. 앞의 필드들의 Length를 모두 합친 값으로 계산되며, 앞의 필드 중에 Length가 동적으로 변하는 필드가 존재할 경우 Unknown으로 나타난다.
Align, Fill
DataObject 필드를 바이트형 배열로 Marshaling할 때 DataObject 필드 길이가 설정한 'Length’의 값보다 짧은 경우 좌/우를 맞춘(align) 후 나머지 위치에는 'Fill' 항목에 설정한 문자로 채워넣는다.
Decimal
숫자 타입(Numeric type)인 경우 소수점 아래 몇 자리까지 보존할 것인지 설정한다.
-
dto numeric 필드 값이 123.4321xxxx일 경우 이 필드에 해당하는 메시지 필드의 decimal =1이면 Marshal될 때 123.4로 Marshal되어 나간다. 즉, decimal=4이면 123.4321이 된다.
-
fixedLength 필드 길이가 6으로 지정되어 있다고 가정하고 decimal=4라고 한다. decimal=4이므로 소수점 4번째 자리까지 보존하면 123.4321이 되는데, 이 문자의 길이는 8(점(.) 포함)이므로 소수점 아래를 보존하도록 동작하여 3.4321로 Marshal된다. 즉, Decimal에 우선적으로 적용된다.
-
decimal=-1로 주는 경우 정수자리를 최대한 보존하고 남는 자리수만큼 소수점 자리를 찍는다. 위의 예에서 decimal=-1이라면, 123.43로 Marshal된다. 정수자리 123 보존, 그 후에 소수점 자리 찍을 수 있는 만큼 Marshal된다.
Point
Decimal과 함께 사용하며 Mainframe에서 사용되는 가상소수점(또는 fixed point, 소수점의 위치가 약속되어 있는 형식)을 지원한다.
예를 들어 fixed point 위치가 뒤에서 3번째라고 하면 decimal=3, point=false로 설정한다.
Sign
Mainframe의 가상 소수점을 사용하는 comp3, unpacked decimal encoding을 사용하는 필드에서 주로 사용된다. 인코딩 값에 따라 C, D, F의 값이 붙는다.
-
sign = true이면 dto 필드 값의 음수 및 양수에 상관없이 무조건 sign을 붙인다.
-
sign = false이면 dto 필드 값이 음수(-)일 때만 sign을 붙인다.
Encode(FixedLength)
메시지 필드의 개별 인코딩 타입이다.
인코딩 종류는 다음과 같다.
-
Char
-
KoreanSingleByte
-
KoreanDoubleByte
-
KoreanSpace
-
CharSOSI
-
CharSingleByte
-
AsciiSOSIInsert
-
NoConversion
-
COMP
-
COMP-2
-
COMP-3
-
UnpackedDecimal
-
BCD
-
IEEE754SinglePrecision
-
IEEE754DoublePrecision
-
Two’s_Complement
Trailer
메시지 필드 타입이 'String’이거나 숫자형이고 인코딩 옵션이 BCD일 때, 최하위 4bit padding이 필요한 경우 Trailer 값으로 채워준다.
Date Pattern(yyyy-MM-dd)
메시지 필드 타입이 'Date’이거나 'Calendar’일 경우에 활성화되며, Date Format을 지정한다. (예: yyyyMMdd, yyyy-MM-dd, yy-MM-dd)
Endian
레코드가 저장되는 머신의 레코드 저장 방식을 다음 중에 선택한다.
-
Big Endian : 레코드의 순서와 동일하게 메모리에 저장하는 방식
-
Little Endian : 레코드의 끝부터 메모리에 저장하는 방식
EOD
EOD(End Of Data)는 맨 마지막 필드인 경우만 '참’이 되고, 나머지 필드는 '거짓’이 되어야 한다.
EOD가 '참’인 경우 필드 값을 'Length’에 맞추어 자르지 않고 모두 바이트형 배열로 만든다.
Unsigned
Unsigned 값인지 설정한다.
-
-
Bitmap
항목 설명 Length
메시지의 길이는 디폴트로 10이 지정되어 있으며 실제로 원하는 길이를 설정하기 위해서는 'Length' 항목을 변경해야 한다.
가변길이 설정을 위해서는 가변배열의 경우와 마찬가지로 숫자형 필드의 이름을 사용할 수 있다.
EnCode(BitMap)
메시지 필드의 개별 인코딩 타입이다.
BitMap NO.
각 필드에 고유의 Bitmap 번호를 할당한다.
여러 개의 필드 중 특정 필드들만을 사용할 경우에 필드의 인덱스 역할을 수행한다.
NO. fields in BitMap
FieldType이 Bitmap일 경우에만 입력할 수 있는 값으로 Bitmap으로 사용할 필드의 개수를 입력한다.
-
Delimiter
항목 설명 Delimiter
메시지 필드가 Array로 설정된 경우 사용한다.
'a', 'b', 'c’처럼 직접 문자열을 입력하거나 '\n','\t' 같은 특수문자를 입력한다. 단, 인쇄할 수 없는 문자(Unprintable character)인 경우 '\u0000', '\u0020'(공백문자)와 같이 '\u' 유니코드 형태로 입력한다.
EOD
EOD(End Of Data)는 맨 마지막 필드인 경우만 '참’이 되고, 나머지 필드는 '거짓’이 되어야 한다.
-
CSV
메시지 타입이 CSV인 경우 추가 설정 항목이 존재하지 않는다.
-
XML
항목 설명 Is Element
해당 필드가 엘리먼트인지 속성인지 나타낸다.
-
true : 엘리먼트를 의미한다.
-
flase : 속성을 의미한다.
Attribute Name
이 이름을 입력한 필드는 속성으로 지정된다.
'Is Element'의 값이 'false’일 경우에만 유효하다.
Attr Use
필드가 속성일 경우에만 활성화되며 다음과 같은 옵션 중에서 선택할 수 있다. XSD에서의 'use' 속성과 동일한 역할을 한다.
-
optional : 해당 필드는 선택적으로 값을 할당할 수 있다.
-
required : 해당 필드에 무조건 값이 할당되어야 한다.
-
prohibited : 해당 필드에 값이 할당되어서는 안 된다.
Element Name
이 이름을 입력한 필드는 엘리먼트로 지정된다.
'Is Element'의 값이 'true’일 경우에만 유효하다.
XML Type
선택된 필드의 타입에 해당되는 XML 타입을 QName 형식으로 표현한다.
(예: {http://www.tmax.co.kr/test}tesType)
Min Occurs
Max Occurs
XSD에서의 'minOccurs','maxOccurs' 속성과 동일한 역할을 한다.
Max Occurs를 unbounded로 사용할 수도 있다.
Nillable
'true’일 경우 해당 필드에 null 값이 할당되어도 된다는 것을 의미한다.
Date Pattern(yyyy-MM-dd)
메시지 필드 타입이 'Date’이거나 'Calendar’일 경우에 활성화되며, Date Format을 지정한다.
-
-
JSON
항목 설명 EnCode(JSON)
메시지 필드의 개별 인코딩 타입이다.
Date Pattern(yyyy-mm-dd)
메시지 필드 타입이 'Date’이거나 'Calendar’일 경우에 활성화되며, Date Format을 지정한다.
JsonKey
파싱할 JsonKey를 입력한다. 입력되어 있지 않을 경우 Physical Name으로 파싱한다.
-
Value Object
메시지 타입이 Value Object인 경우 추가 설정 항목이 존재하지 않는다.
-
KeyValue
항목 설명 Date Pattern(yyyy-mm-dd)
메시지 필드 타입이 'Date’이거나 'Calendar’일 경우에 활성화되며, Date Format을 지정한다.
Trim
메시지 Trim 여부를 설정한다.
-
none : trim을 사용하지 않는다.
-
rtrim : 필드의 오른쪽을 trim한다.
-
ltrim : 필드의 왼쪽을 trim한다.
-
lrtrim : 필드의 양쪽을 trim한다.
Null Value
입력한 값과 실제 들어온 value가 일치할 경우 Marshal 시 값이 일치하는 key-value에 대해 포함하지 않고 전문을 생성한다.
값이 설정되어 있지 않거나 일치하지 않을 경우에는 포함하여 전문을 생성한다.
-
-
FDL(Fixed Definition Language)
항목 설명 Field Key
기본적인 필드 정보와 필드 키를 입력한다.
AnyLink와 연동할 Tmax(FDL의 경우) 에 미리 등록되어 있는 필드 키 값을 사용해야 한다.
-
FML(Fixed Manipulation Language)
항목 설명 Field Key
기본적인 필드 정보와 필드 키를 입력한다.
AnyLink와 연동할 Tuxedo(FML의 경우)에 미리 등록되어 있는 필드 키 값을 사용해야 한다.
-
ISO8583
항목 설명 Length
메시지의 길이는 디폴트로 10이 지정되어 있으며 실제로 원하는 길이를 설정하기 위해서는 'Length' 항목을 변경해야 한다.
가변길이 설정을 위해서는 가변배열의 경우와 마찬가지로 숫자형 필드의 이름을 사용할 수 있다.