Skip to content

ezoneproject/FlatMessage.java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flat Message Processor

데이터에 포맷 정보가 없는 평문 문자열로 구성된 전문 메시지와 Java 클래스 Object간 직렬화/역직렬화를 구현하는 라이브러리

Table of Contents

What is telegram?

Cobol언어의 변수는 전역 메모리에 고정된 영역을 할당하고, 변수에 문자열 값을 저장하면 0x00과 같은 종료 코드 없이 메모리의 남는 부분을 공백으로 채워 저장하고, 숫자 값은 integer 등 CPU가 직접 연산할 수 있는 원시(primitive) 자료형을 사용하지 않고 사람이 인식할 수 있는 아스키 문자열로 오른쪽부터 저장하면서 왼쪽의 남은 메모리를 '0'으로 채우는 특징이 있다.

금융권에서는 통상적으로 이러한 Cobol언어의 특징을 가진 변수의 집합(구조체)을 전문(電文,telegram)이라 부른다.

평문 문자열은 일반적으로 고정된 길이를 가지므로 필요한 메모리 및 네트워크 소모량과 요구 성능 예측이 쉽고, (과거) 금융권에서 사용되었던 Cobol언어는 특별한 처리 없이 메모리에 직접 매핑하여 변수에 접근할 수 있으며, C언어의 경우에도 char[] 배열 기반의 구조체(struct)에 직접 매핑하거나 미리 계산한 오프셋 테이블을 활용하여 필요한 항목만 추출하여 변수로 변환하여 이용할 수 있는 장점이 있다.

그러나 필드의 시작과 종료, 자료형 등 자료 구조를 알려주는 부가 정보가 데이터에 존재하지 않아 별도의 설계서가 없으면 데이터 활용이 어렵고, 프로그램 오류나 버전 불일치, 기타 오류 또는 해킹 등으로 발생하는 변조에 대한 검증이 어려우며, 정의한 포맷과 다른 변조된 데이터가 투입될 경우 개발자의 역량과 구현하는 방법에 따라 메모리가 파괴되는 취약점이 발생할 우려도 있으며, 하나의 메시지에서 필요한 요건에 따라 다양한 구조를 선택해서 표현하기가 매우 난해하고(금융권의 대표적인 예로 N##E사의 1F003), 요구사항 변경으로 구조 변경이 발생하면 취급하는 시스템 전체의 구성을 동시에 갱신해야 하는 유연성이 부족한 점 등 많은 단점이 존재하여, 새로운 시스템을 개발할 때는 XML이나 Json 등 데이터에 자료 구조에 대한 부가 정보 포함되어 있는 구조를 표준으로 채택하는 추세이고 평문 메시지 형태는 점차 도태되고 있다.

Issue on new generation languages

Java는 C언어와 달리 byte[] 배열을 메모리복사 등을 통해 구조체로 직접적인 상호 변환이 불가능하여 각각의 필드 항목별로 변환 처리가 불가피하고, byte[] 배열을 String으로 전환시 JVM에서 내부 인코딩을 UTF-16으로 처리하는 특징이 있어 비영어권 문자는 인코딩 오류의 가능성이 있고, 비영어권 문자의 byte[] 배열과 String의 길이가 일치하지 않는 이슈, 패딩을 처리하기 위한 추가 작업 등에 대한 고려가 필요하다.

또한 새로운 새로운 시스템을 구축할 때는 기존의 시스템에서 수용하기 어려웠던 복잡하고 다양한 요구사항이 추가되는 것이 일반적이므로, 덩달아 자료 구조도 복잡한 구조를 가지게 되지만 데이터에 부가정보가 없는 구조적 한계로 인해 직렬화/역직렬화에 복잡한 구현이 필요하고, 거래 확인 또는 디버깅을 하려면 바이트 단위로 셈하거나 이용자가 볼 수 있는 유틸리티를 별도로 작성해야 하는 어려움이 발생하게 된다.

이 라이브러리는 Java의 객체와 평문 문자열간 직렬화/역직렬화를 지원하는 라이브러리로, 다소 오버헤드를 감수하는 대신 클래스의 필드에 선언한 어노테이션을 통해 byte[] 배열을 객체에 직접 매핑하여 개발자가 구현해야 할 부분을 단순화하고, 자료 구조 변화에 유연하게 대응하며, 유지보수를 수월하게 하는 것을 목적으로 한다.

Features

  • Java 언어로 다른 라이브러리의 의존성 없이 구현
  • 어노테이션 태그를 활용 (requires 1.8+)
  • 배열(테이블) 및 중첩된 배열 지원
  • 클래스 상속 및 중첩 지원

Usage

Releases

  • 0.3.0 기본 기능 구현 완료
  • 0.4.0 음수 처리 추가 및 String.format 메서드 사용 개선

License

This software is licensed under the Apache License.

About

Serialize/deserialize library for flat message (a.k.a telegram)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages