1.프로토콜 어댑터

Edit

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

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

1.1프로토콜 어댑터

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

1.1.1모듈 JSON, JS 파일

TypeDefinition에 등록할 모듈을 생성합니다. 모듈로 추가할 JSON파일과 JS파일을 작성합니다. 작성될 파일과 폴더는 아래와 같습니다.

[Base Library Path]

component

Xecure


Xecure.json

Xecure.js

아래와 같은 형태로 JSON 파일을 작성합니다. 파일명은 "Xecure.json"으로 저장합니다. 'scripts' 항목에 지정된 자바스크립트 경로는 [Base Library Path > component] 폴더 아래 해당 폴더와 스크립트 파일이 있어야 합니다.

{
    "name": "Xecure",
    "version": "17.0.0.1",
    "description": "nexacro platform XecureAdp Protocol Library",
    "license": "",
    "scripts": [
        "Xecure/Xecure.js", 
    ]
}
//@ sourceURL=Xecure.json

아래와 같은 형태로 JS 파일을 작성합니다. [Base Library Path > component] 폴더 아래 "Xecure"라는 폴더를 만들고 파일명은 "Xecure.js"로 저장합니다. 여기에서는 기본적인 동작 방식만을 설명합니다.

if (!nexacro.XecureAdp)
{
    nexacro.XecureAdp  = function ()
    {
        
    };
        
    var _pXecureAdp = nexacro._createPrototype(nexacro.ProtocolAdp);
    nexacro.XecureAdp.prototype = _pXecureAdp;

    _pXecureAdp._type = "nexacroXecureAdp";
    _pXecureAdp._type_name = "XecureAdp";

    _pXecureAdp.encrypt= function(url, data)
    {
        trace("encrypt url=" + url + ";data=" + data);
        return data;
    };

    _pXecureAdp.decrypt = function (url, data)
    {
        trace("decrypt url=" + url + ";data=" + data);
        return data;
    };

    _pXecureAdp.initialize = function ()
    {
        
       trace("_pXecureAdp.initialize");
    };

    _pXecureAdp.finalize = function ()
    {
     trace("_pXecureAdp.finalize");
    };

    delete _pXecureAdp;
}

등록할 모듈은 넥사크로 스튜디오에서 Base Library Path로 지정된 경로 아래 [component] 폴더 하위 경로에 파일이 있어야 합니다.

기본 설정은 넥사크로플랫폼 설치 경로 아래 nexacro17lib 폴더입니다.

Base Library Path는 넥사크로 스튜디오 메뉴 [Tools >Options > Project > General > Base Library Path]에서 다른 경로로 변경할 수 있습니다.

1.1.2모듈 등록

넥사크로 스튜디오 [Project Explorer]에서 TypeDefinition 아래 Objects 항목을 더블 클릭합니다. [Modules] 목록 아래에 있는 "+" 버튼을 클릭하면 생성된 모듈 파일 중 JSON 파일을 선택할 수 있습니다. "Xecure.json" 파일을 선택하고 등록합니다.

1.1.3프로토콜, 서비스 등록

넥사크로 스튜디오 [Project Explorer]에서 TypeDefinition 아래 Protocols 항목을 더블 클릭합니다. "Protocol ID"와 서비스로 등록할 "PrefixID"를 입력합니다.

Finish 버튼을 클릭하고 HTML5 항목에 ClassName을 입력합니다.

프로토콜에 연결되어 등록한 서비스는 TypeDefinition 아래 Services 항목에서는 보이지 않습니다.

1.1.4서비스 호출

등록한 서비스를 호출하게 되면 해당 프로토콜을 거쳐 통신이 진행됩니다.

nexacro.getApplication().transaction("MyService01", "xecuredata::localhost/test.jsp", "dsIn=dsIn:A","dsOut=dsIn","a=b","fnCallback");

프로토콜로 등록된 모듈 내에 정의된 인터페이스를 해당 시점에 맞게 호출하는 방식으로 동작합니다. 모듈 내부의 동작방식은 아래와 같습니다.

1

등록된 프로토콜이 처음 호출되는 시점에 ProtocolAdp 오브젝트를 생성합니다. 해당 오브젝트는 앱이 종료되기 전까지 통신이 호출되는 시점에 사용됩니다.

var _pXecureAdp = nexacro._createPrototype(nexacro.ProtocolAdp);    
nexacro.XecureAdp.prototype = _pXecureAdp;

2

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

_pXecureAdp.initialize = function ()            
{    
    trace("_pXecureAdp.initialize");
};

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

_pXecureAdp.finalize = function ()            
{            
    trace("_pXecureAdp.finalize");    
};

3

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

_pXecureAdp.encrypt= function(url, data)
{
        trace("encrypt url=" + url + ";data=" + data);
        return data;
};

encrypt 함수는 요청 방식(Request Method)이 POST 방식일 때만 호출됩니다.

transaction이나 load 메소드 사용 시 GlobalVariables와 관련된 별도 설정이 없다면 POST 방식으로 동작합니다.

4

내부에서 실제 통신이 끝난 후에 decrypt 함수가 호출됩니다. 수신한 데이터를 복호화하거나 원하는 형태로 변환합니다.

_pXecureAdp.decrypt = function (url, data)
{
        trace("decrypt url=" + url + ";data=" + data);
        return data;
};

1.2HTTP 헤더 설정

데이터 형식에 따라 HTTP 헤더를 설정해야 하는 경우에는 아래와 같이 모듈 JS 파일을 작성하고 서비스를 호출할 수 있습니다.

1.2.1서비스 호출

HTTP 헤더 설정을 위해 JS 파일에서 달라지는 부분만 설명합니다.

1

등록된 프로토콜이 처음 호출되는 시점에 ProtocolAdp 오브젝트를 생성합니다. _createPrototype 함수 호출 시 파라미터 값으로 생성할 클래스명을 지정합니다.

var _pXecureHttp = nexacro._createPrototype(nexacro.ProtocolAdp, nexacro.XecureHttp);
nexacro.XecureHttp.prototype = _pXecureHttp;

2

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

_pXecureHttp._httpheaders = [];
_pXecureHttp._httpheaders.push({ id: "X-Requested-With", value: "XMLHttpRequest"});
_pXecureHttp._httpheaders.push({ id: "Accept", value: "application/json, text/json, */*"});
_pXecureHttp._httpheaders.push({ id: "Content-Type", value: "application/json"});

3

프로토콜 어댑터 버전 정보를 제공합니다. 이 함수가 없으면 "1.0"으로 인식합니다. getHTTPHeader 함수를 사용하기 위해서는 version 함수를 지정해야 하며 "1.1" 이상의 값을 가져야 합니다. version 함수가 없거나 값이 "1.1"보다 작으면 getHTTPHeader() 함수를 처리하지 않습니다.

_pXecureHttp.version = function ()
{
    return "1.1";
};

4

HTTP 통신 헤더 정보를 제공합니다. _httpheaders는 HTTP 헤더 정보를 담고있는 배열 오브젝트입니다.

_pXecureHttp.getHTTPHeader = function ()
{
    return this._httpheaders;
};

5

서비스 호출 후 HTTP 헤더를 확인해보면 설정한 값이 적용된 것을 확인할 수 있습니다.

1.3PluginElement

데이터 처리 시 외부 플러그인을 연동해야 하는 경우 PluginElement를 사용할 수 있습니다. 외부 플러그인 적용은 해당 솔루션에서 제공하는 규칙에 따라 추가적인 코드가 필요할 수 있습니다. 아래 설명은 일반적으로 PluginElement를 사용하는 가이드를 제공합니다.

아래 설명은 웹 구간 암호화 처리를 위해 제큐어웹(XecureWeb)을 적용하는 경우에 대한 설명입니다.

참고로 작성된 예제로 일부 내용이 누락됐을 수 있습니다.

제품에 대한 자세한 내용은 아래 링크(한국어)를 참고하세요.

http://www.hsecure.co.kr/solutions/solution_list.php?cate_cd=010103

NRE 버전을 사용하는 경우 외부 플러그인은 앱 최초 실행 시 설치 웹페이지를 불러와 설치하는 형태를 권장합니다.

설치 시 문제가 발생했을 때 웹브라우저를 통해 설치해야 플러그인 문제인지 넥사크로플랫폼 문제인지 확인할 수 있습니다.

1.3.1서비스 호출

PluginElement를 사용할 때 프로토콜 어댑터를 사용하는 방식은 같고 프로토콜로 등록되는 JS 코드 일부만 변경합니다.

1

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

내부에서 사용하는 플러그인은 nexacro.PluginElement를 사용할 수 있습니다. Parent_element 없이 생성해 프레임워크 내부 hidden 영역에 추가해 화면에 나타나지는 않습니다.

_pXecureAdp.initialize = function ()    
{    
    trace("_pXecureAdp.initialize");
    var parent_elem = null;
    this.xecure = new nexacro.PluginElement();
    this.xecure.setElementClassId("{7E9FDB80-5316-11D4-B02C-00C04F0CD404}");
    this.xecure.create();  
};

2

통신 시 사용할 프로토콜은 getUsingProtocol 함수에서 반환합니다. 기본값으로 설정된 프로토콜은 http입니다.

_pXecureAdp.getUsingProtocol = function (url)            
{            
    return "http"; 
};

통신 시 추가로 쿠키에 들어갈 정보는 getCommunicationHeaders 함수에서 반환합니다.

_pXecureAdp.getCommunicationHeaders = function (url)            
{            
    var headers = [];        
    headers.push({id:"test", value:"test1"});        
    return headers;        
};

3

오브젝트가 삭제되는 시점에 finalize 함수가 호출됩니다. 앱이 내려가는 시점에 호출되며 생성된 플러그인을 제거해주는 코드를 처리해주어야 합니다.

_pXecureAdp.finalize = function ()            
{            
    this.xecure.destroy();            
    delete this.xecure;            
};