데이터 게더링(Gatering)과 바인딩(Binding)
거래 메시지는 무엇일까요?
거래 메시지는 요청 주체(클라이언트)와 응답 주체(서버)간의 데이터를 주고 받는 "계약"된 데이터 단위를 의미합니다.
법률용어사전에서는 계약을 "서로 대립하는 두 개 이상의 의사표시의 합치"로 성립하는 법률행위로 합리적인 거래 관계의 발생을 목적으로 한다고 정 의합니다.
HandStack 에서는 업무를 처리하는 구현의 방법과는 상관없이 클라이언트와 서버가 반드시 준수 해야 할 전문 프로토콜을 정의하여 거래 메시지를 전달합니다.
전문 프로토콜을 준수 한다면 클라이언트와 서버는 서로 다른 언어, 플랫폼, 기술을 사용하여도 서로 통신이 가능하며, JSON, CSV, Binary 등 데이터 포맷에 상관없이 서로 다른 업무를 처리하는 서버와 클라이언트가 서로 통신이 가능하도록 하는 것을 의미합니다.
거래 메시지의 구성
논리적인 관점에서 거래 메시지는 요청과 응답으로 구성됩니다. 이것을 프로그램 관점에서는 Request와 Response로 구분하여 사용하거나 Input과 Output으로 구분하여 사용합니다.
요청과 응답은 각각의 메시지에 대한 고유한 ID를 가지고 있으며, 이것을 통해 서버는 클라이언트의 요청에 대한 적절한 응답 처리를 하게 되며, 거래 메시지에 대한 추적이 가능하게 되어 이슈 발생시 빠르게 대응을 할 수 있습니다.
거래는 하나의 요청에 하나의 응답을 가지고 있으며 요청에 따라 응답이 여러개인 경우도 있습니다. 그래서 요청 데이터가 단일 값인지 여러 값인지 응답 데이터가 단일 값인지 여러 값인지에 따라 클라이언트 화면과 서버 기능이 처리해야 할 코드가 달라집니다.
일반적으로 어떠한 기술과 프로토콜을 이용하여 개발을 하던 요청과 응답을 개별적으로 만듭니다. 이것은 클라이언트와 서버가 서로 밀접하게 통합 되는 하는 것을 의미하며, 스케일 업과 스케일 아웃 비용을 증가시키는 원인이 됩니다.
요청 값은 Row, List로 구분하여 전달되며, 응답 값은 Form, Grid으로 구분하여 사용합니다. 그리고 응답 값에는 부가적인 기능을 위해 Dynamic, Addition 형식으로 데이터를 전달 할 수 있다면 개발 및 운영 비용을 절감할 수 있다는 아이디어에서 데이터의 게더링과 바인딩을 구성합니다.
inputs : 사용자의 입력 데이터를 Row 또는 List 형식으로 지정합니다.
| input type | 내용 |
|---|---|
| Row | 하나의 데이터 셋을 데이터로 넘길 때 사용 |
| List | 여러 개의 데이터 셋을 데이터로 넘길 때 사용 |
outputs : 서버에서 내려받는 응답 데이터를 Form 또는 Grid 형식으로 지정합니다.
| output type | 내용 |
|---|---|
| Form | 화면내 서식에 바인딩할 경우에 사용 하며, 단일 건의 데이터 셋이 응답 |
| Grid | Grid, Chart, List 형식의 컨트롤에 사용 되며, 여러 건의 데이터 셋이 응답 |
HandStack에서는 한 거래에 여러 건의 inputs와 outputs의 데이터 셋이 클라이언트에서 거래 메시지로 전달됩니다. 서버에서는 거래 메시지를 정의하여 개발자가 거래 메시지를 정의하고, 이를 기반으로 단일 EndPoint로 클라이언트와 서버가 최소한의 통신으로 거래가 이뤄지도록 합니다.