프로토콜 어댑터 개발하기

넥사크로에서 기본적으로 제공하는 데이터 통신 방식은 HTTP 프로토콜을 사용해 요청과 응답을 처리합니다. 이 과정에서 데이터 자체를 변환하지는 않습니다. 하지만 사용 환경에 따라 데이터를 암호화하거나 특정 형식의 데이터를 수신하고 변환하는 과정이 필요할 수 있습니다.

프로토콜 어댑터를 사용하면 간단한 설정만으로 데이터를 암호화하거나 데이터 구조를 변환해 원하는 동작을 구현할 수 있습니다.

프로토콜 어댑터 모듈 만들고 앱에서 사용하기

프로토콜 어댑터를 사용하기 위해서는 넥사크로 모듈 디벨로퍼에서 모듈을 만들고 넥사크로 스튜디오에 작성된 모듈을 등록하고 프로토콜, 서비스를 추가해야 합니다.

프로토콜 어댑터 모듈 만들기

1

넥사크로 모듈 디벨로퍼에서 새로운 프로젝트를 만듭니다. 메뉴에서 [File > New > Project]를 선택합니다.

2

Project Wizard가 열리면 Module 항목에서 "Protocol Adaptor"를 선택합니다.

3

프로젝트 ID를 입력하고 [Next] 버튼을 클릭합니다.

4

Object ID를 입력하고 FinalClass 항목을 true로 변경합니다.

5

프로젝트가 생성되고 basicPtAdp.js 파일이 편집창에 표시됩니다.

프로토콜 어댑터 모듈 편집하기

프로토콜 어댑터 모듈을 새로 만들면 기본적으로 4개의 함수가 생성됩니다.

Function

설명

initialize

오브젝트가 생성되는 시점에 initialize 함수가 호출됩니다.

외부 모듈이 필요한 경우 initialize 함수 내에서 모듈을 생성하거나 초기화합니다.

finalize

오브젝트가 삭제되는 시점에 finalize 함수가 호출됩니다.

외부 모듈을 생성했거나 마무리가 필요한 경우 finalize 함수 내에서 생성된 모듈을 삭제하고 메모리에 남지 않도록 처리합니다.

encrypt

통신이 실행되기 전에 encrypt 함수가 호출됩니다. 전송할 데이터를 암호화하거나 원하는 형태로 변환할 수 있습니다.

decrypt

통신이 끝난 후에 decrypt 함수가 호출됩니다. 응답으로 수신한 데이터를 복호화하거나 원하는 형태로 변환할 수 있습니다.

initialize

nexacro.basicPtAdp.prototype.initialize = function()		
{	
    trace("basicPtAdp initialize");
};

외부 플러그인 모듈을 사용한 경우에는 아래와 같이 PluginElement를 사용해 초기화합니다.

nexacro.basicPtAdp.prototype.initialize = function()		
{	
    this._plugin = new nexacro.PluginElement();
	this._plugin.setElementClassId("Microsoft.XMLDOM");
    //this._plugin.setElementClassId("{7E9FDB80-5316-11D4-B02C-00C04F0CD404}");
    this._plugin.create();  
};

finalize

nexacro.basicPtAdp.prototype.finalize = function()		
{	
    trace("basicPtAdp finalize");
};

initialize 함수에서 생성한 외부 모듈을 삭제 처리합니다.

nexacro.basicPtAdp.prototype.finalize = function()
{
	this._plugin.destroy();            
	delete this._plugin;  
}

encrypt

전송할 데이터를 변환하고 return 하는 문자열 변수에 담아서 처리합니다.

nexacro.basicPtAdp.prototype.encrypt = function(strUrl, strData)		
{	
	trace("encrypt url=" + strUrl + ";data=" + strData);
	return strData;
};

decrypt

응답으로 받은 데이터를 변환하고 호출한 앱에 전달합니다.

nexacro.basicPtAdp.prototype.decrypt = function(strUrl, strData)		
{
	trace("decrypt url=" + strUrl + ";data=" + strData);
	return strData;
}

프로토콜 어댑터 모듈 배포하기

1

넥사크로 모듈 디벨로퍼 메뉴[Deploy > Module Package]를 선택하고 Deploy Wizard를 실행합니다.

2

Module Information에서 Type 항목을 "protocoladaptor"으로 변경합니다.

3

[Deploy] 버튼을 클릭해 모듈을 배포합니다.

모듈 설치하고 프로토콜 서비스 등록하기

1

넥사크로 스튜디오 메뉴[File > Install Module]을 선택하고 Install Module Wizard를 실행합니다.

2

넥사크로 모듈 디벨로퍼에서 만든 모듈 설치 파일을 선택하고 설치합니다.

모듈 메타인포 속성 중 registration 속성값이 기본값("deny")으로 설정됐기 때문에 설치될 모듈 목록이 보이지는 않습니다.

3

Project Explorer에서 TypeDefinition 항목을 선택하고 컨텍스트 메뉴에서 [Add > Protocol]을 선택합니다.

4

New Protocol Wizard에서 Protocol ID와 Prefix ID를 설정합니다.

5

[Next] 버튼을 클릭하고 Web Browser 항목을 체크하고 ClassName을 입력합니다.

프로토콜 어댑터를 통해 서비스 호출하기

transaction 메소드 실행 시 아래와 같이 strURL 파라미터에 프로토콜 어댑터 URL 형식을 적용하면 통신 요청이 바로 서버로 전달되지 않고 프로토콜 어댑터를 거치게 됩니다.

this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
	this.transaction("srv00", "basicPtAdp://127.0.0.1:4098/test.xml", "","dsOut=Dataset00","value=a","fnCallback");
};

this.fnCallback = function(id, code, message)
{
	trace("Error["+code+"]:"+message);
}

Button 클릭 시 아래와 같은 순서로 프로토콜 어댑터 동작이 처리되는 것을 확인할 수 있습니다.

  1. initialize

    예제에서는 초기화는 없고 trace 메소드만 실행합니다.

  2. encrypt

    strArgument 파라미터로 전달한 값이 처리되는 것을 확인합니다.

  3. decrypt

    요청에 대한 응답 데이터를 확인합니다.

  4. CallbackFunc

    정상 처리 후 콜백 함수가 동작하는 것을 확인합니다.

basicPtAdp initialize

encrypt url=basicPtAdp://127.0.0.1:8080/test.xml;data=<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns="http://www.nexacroplatform.com/platform/dataset">
    <Parameters>
        <Parameter id="value">b</Parameter>
    </Parameters>
</Root>

decrypt url=basicPtAdp://127.0.0.1:8080/test.xml;data=<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="http://www.nexacroplatform.com/platform/dataset" ver="5000" >
     <Parameters>
          <Parameter id="ErrorCode" type="int">0</Parameter>
          <Parameter id="ErrorMsg" type="string">SUCC</Parameter>
     </Parameters>
     <Dataset id="customers">
          <ColumnInfo>
               <Column id="id" type="STRING" size="4"/>
...

Error[0]:SAUCC

추가로 설정할 수 있는 인터페이스 함수

프로토콜 어댑터에서는 추가로 설정할 수 있는 인터페이스 함수를 제공합니다.

재정의할 수 있는 인터페이스 함수

상속받은 nexacro.ProtocolAdp에서 제공하는 함수를 재정의할 수 있습니다. 속성창에서 추가해 사용할 수 있습니다.

Function

설명

getUsingProtocol

프로토콜로 사용할 문자열을 설정합니다.

getCommunicationHeaders

통신 시 쿠키에 정보를 추가로 설정합니다.

getCommunicationHeaders 함수는 아래와 같이 설정할 수 있습니다.

nexacro.basicPtAdp.prototype.getCommunicationHeaders = function (strUrl)
{
	var ret = nexacro.ProtocolAdp.prototype.getCommunicationHeaders.call(this, strUrl);
	ret.push({id:"PHPSESSID", value:"298zf09hf012fh2"});
	ret.push({id:"csrftoken", value:"u32t4o3tb3gg43"});
	return ret;
};

통신 시 쿠키 정보가 추가로 설정된 것을 확인할 수 있습니다.

메소드로 추가하는 함수

Project Explorer에서 오브젝트를 선택하고 컨텍스트 메뉴에서 Method를 추가해 설정합니다.

Function

설명

getHTTPHeader

HTTP 헤더값을 설정합니다. 원하는 헤더값의 id, value 값을 지정할 수 있습니다.

version

getHTTPHeader 함수를 사용하기 위해서는 "1.1"보다 큰 값으로 version 함수를 설정해주어야 합니다.

getHTTPHeader, version 함수는 아래와 같이 설정할 수 있습니다.

nexacro.basicPtAdp.prototype.initialize = function()		
{	
	this._httpheaders = [];
	this._httpheaders.push({ id: "Accept", value: "application/json, text/json, */*"});
};	

nexacro.basicPtAdp.prototype.version = function ()
{
	return "1.1";
};	
	
nexacro.basicPtAdp.prototype.getHTTPHeader = function ()
{
	return this._httpheaders;
};

통신 시 헤더 Accept 정보가 변경된 것을 확인할 수 있습니다.