브라우저 인터페이스 : NCSA Mosaic CCI와 NCAPI

신명기
305-350 대전광역시 유성구 가정동 161번지
한국전자통신연구소 프로토콜기술연구실
E-mail : mkshin@pec.etri.re.kr
URL : http://pec.etri.re.kr/~mkshin/
Abstract:
WWW은 인터넷상에서 현재 가장 많이 이용되고 있는 하이퍼미디어 정보검색 시스템으로서 그 기능은 단순히 정보검색 도구 차원을 넘어 인터넷에서 사용되는 모든 응용의 GUI로 점차 확산되어 가고있는 추세이다. 특히 최근에는 WWW 동기식 공동작업(synchronous collaboration)에 관한 중요성이 크게 대두되고 있으며, 외부 응용과의 통합과 이를 위한 원격 제어를 위해서 클라이언트측에서 어떻게 API를 지원할 것인가에 대한 연구가 활발히 진행되고 있다. WWW의 대표적 브라우저인 NCSA Mosaic과 Netscape는 이러한 WWW 클라이언트측의 기능 확장을 위해 각각 CCI(Common Client Interface)와 NCAPI(Netscape Client API)란 인터페이스로 API를 사용한다. 본 발표에서는 최근 WWW 관련 연구중 많은 비중을 차지하고 있는 NCSA Mosaic CCI와 NCAPI를 분석하고, 이를 이용한 앞으로의 전망과 현재 개발된 응용 프로그램들을 소개한다.
Keywords:
NCSA Mosaic CCI(Common Client Interface), NCAPI(Netscape Client API), API(Application Programming Interface), Synchronous Collaboration

1. 서론

인터넷은 전세계 4천만명이 넘는 사용자에게 다양한 정보를 제공하고 있다. WWW은 인터넷상에서 현재 가장 많이 사용되는 하이퍼미디어 정보검색 시스템으로 그 기능은 단순히 정보검색 도구 차원을 넘어 인터넷상에서 사용되는 모든 서비스(응용)의 GUI로 점차 확산돠어 가고 있는 추세이다. 최근 W3C를 중심으로 한 WWW NG(Next Generation)의 연구분야와 주요 경향은 다음과 같다.
외부 응용과 WWW 클라이언트(브라우저)의 통합, 이를 위한 공동작업(collaboration), 원격제어(remote control)를 위해서는 API(Appplication Programming Interface)가 이용되며, 현재 WWW과 관련한 분야중 많은 연구가 이루어지고 있는 분야중 하나이기도 하다. 본 발표에서는 최근 WWW 관련 연구중 많은 비중을 차지하고 있는 NCSA Mosaic CCI와 NCAPI를 분석하고, 이를 이용한 앞으로의 전망과 현재 개발된 응용 프로그램들을 소개한다.

2. CGI의 제약과 API

CGI(Common Gateway Interface)는 HTTP 서버로부터 게이트웨이 프로그램을 실행시킴으로서 information request를 처리하는 단순하고 사용하기 편리한 방법으로, 서버 기능 확장을 위한 게이트웨이 역할로서 많이 사용되어 왔다. 그러나 이러한 장점에도 불구하고 다음과 같은 몇가지 제약을 가지고 있다. 따라서 최근에도 응용 통합과 이를 위한 원격제어를 위해 API를 이용한 연구가 이루어지기 시작했으며, 기존의 브라우저를 이용한 보다 확장된 응용 개발을 위하여 NCSA Mosaic에서는 CCI를, Netscape에서는 NCAPI란 인터페이스로 API를 사용한다. API는 결국 제3의 응용에 의하여 브라우저를 원격으로 제어하는 방식으로, 플랫폼에서 제공하는 IPC(InterProcess Communication) 메카니즘을 이용하여 구현하게 된다.

3. NCSA Mosaic CCI

외부 응용과 WWW 클라이언트의 통합, 이를 위한 공동작업, 원격제어를 위해서 NCSA Mosaic은 CCI란 개념을 도입했다. CCI의 기본 개념을 그림으로 나타내면 [그림 1]과 같다.


[그림 1] CCI의 기본개념

[그림 1]에서 볼 수 있듯이 CCI의 기본 개념은 NCSA Mosaic과 기존에 존재하는 다른 응용들, 예를들면 응용을 CCI란 하나의 인터페이스를 통하여 제어하고, 결국 NCSA Mosaic을 데스크탑의 통합 GUI로 확장시키고자 하는데 있다.

CCI는 외부의 응용이 TCP/IP를 통하여 NCSA Mosaic의 동작중인 세션과 통신할 수 있도록 하는 것으로, CCI API는 프로그래머에게 Mosaic과 통신하기 위한 루틴들의 라이브러를 제공한다. 즉, 응용은 URL을 펫치하기 위해 Mosaic을 사용할 수 있고, 사용자에 의해 선택된 URL에 대한 결과를 Mosaic에 요청할 수 있다. 또한 응용은 web으로부터 데이타를 자신의 프로그램 공간에 가져올 수 있다. CCI를 통하여 NCSA Mosaic과 통신하는 모든 클라이언트 응용 프로그램은 통신 포트 번호를 지정하기 위한 자신의 메카니즘을 가지고 있어야 한다.

X Mosaic의 경우는 2.5 이후 버젼에서 제공되며, CCI를 지원하기 위해서는 먼저 File 메뉴 아래에 있는 CCI 에서 CCI port 번호를 지정하게 되어 있으며, 이는 1024에서 65533 까지 임의로 가능하다. Windows 버젼은 2.0.0 버젼에서 CCI v0.11를 OLE2.0으로 제공한다. 본 절에서는 현재 활발한 연구 개발이 진행중인 X Mosaic CCI와 Windows Mosaic CCI를 중심으로 설명한다

3.1 CCI Protocol Specification 1.1

Mosaic CCI는 Mosaic과 외부 응용간에 사용되는 프로토콜을 정의한다. 이것을 이용하여 web으로부터 정보를 검색하는 것과 동일하게 외부 응용은 Mosaic을 제어한다. Mosaic CCI를 사용하기 위한 일반적인 요구사항은 다음과 같다. 먼저 Unix 플랫폼에서는 TCP/IP와 PC 플랫폼에서는 TCP/IP와 DDE, 혹은 OLE, Mac 플랫폼에서는 TCP/IP와 Apple Event를 사용할 수 있어야 한다. Mosaic CCI는 RFC 822에 따른 ASCII 기반 프로토콜이고, 데이타는 RFC 1521에서 정의된 MIME 1.0을 따른다. Mosaic CCI는 확장기능하며, 각각의 request에 대해 브라우저는 numeric한 return code를 반환한다

CCI Request

Return Code

 
   1xx
       Informative message
   2xx
       Command ok
   3xx
       Command ok, additional output follows
   4xx
       Client error: request has bad syntax,
               not authorized, etc
   5xx
       Server(browser) error.
         Command unimplemented, cannot be
         performed, or a serious program error
         occured.
   x9x
       Debugging output
Mosaic CCI Specification는 95년 7월 현재까지 발표된 사항을 정리한 것이며, 조만간 새로운 버젼이 제시될 예정이다. 다음에 발표될 스펙에서는 추가로 GETWINDOWLIST, WINDOWINFO, DOCOMMAND 등이 확장될 예정이다.

3.2 Unix를 위한 CCI Application Programmer's Interface(API)

NCSA Mosaic CCI API는 Mosaic과의 상호작용 프로그램 작성을 위한 C 라이브러리로 구현되어 있다. CCI 라이브러리를 다운로드하여 사용하는 방법은 다음과 같다. 이때 CCI를 이용한 응용 프로그램은 항상 cci.h를 include 하여야 한다. 다음은 cciClient.c 화일에 정의되어 있는 라이브러리에서 사용가능한 C 함수이며 constant는 cci.h에 정의되어 있다.
 #define MCCI_OK                0
 #define MCCI_FALL              1
 #define MCCI_OUTOFMEMORY       2
 #define MCCI_REQUEST_FALL      3
 #define MCCI_NETWORK_ERROR     4

CCI 함수

MCCIInitialize()
CCI 라이브러리 초기화 함수
MCCIPort MCCIConnect(server Address, port, callBackData)
    char *serverAddress;
    int port;
    void (*callBack)();
    void *callBackData;
동작중인 Mosaic session에 초기 connect한다.
int MCCIGetSocketDescriptor(serverPort) 

	MCCIPort serverPort;
serverPort로 부터 socket descriptor를 extract한다.
int MCCIIsConnected(serverPort) MCCIPort serverPort;
serverPort의 network connection이 살아있으면 1, 그렇지 않으면 0을 return 한다.
int MCCIPoll(serverPort)
    MCCIPort serverPort;
incoming data가 있으면 처리후 1을 return하고, 연결이 종료되었으면 -1을 반환한다.
int MCCISendAnchor(serverPort, status, callBack, callBackData)
   MCCIPort serverPort;
   int status;
   void (*callBack)();
   void *callBackData;
새로운 anchor가 activat될때마다 client program에 notify한다.
int MCCIGet(serverPort, url, output, absRelative, additionalHeader)
    MCCIPort serverPort;
    char *url;
    int output;
    int absRelative;
    car *additionalHeader;
user가 한것과 동일하게 Mosaic이 URL을 페치하도록 한다.
int MCCINBGet(serverPort, url, output, absRelative, addtionalHeader)
    MCCIPort serverPort;
    char *url;
    int output;
    int absRelative;
    car *additionalHeader;
Mosaic이 주어진 url를 fetch하는 동안 block되지 않는다는 점을 제외하고 MCCIget()과 동일하다.
int MCCIPost(serverPort, url, contentType, data, dataLength, output)
    MCCIPort serverPort;
    char *url;
    char *contentType;
    char *data;
    int dataLength;
    int output;
Mosaic이 HTTP server에게 데이타를 보내도록 지시한다.
int MCCISendOutput(serverPort, mimeType, callBack, callBackData)
    MCCIPort serverPort;
    char *mimeType;
    void (*callBack)();
    void *callBackData;
특정 MIME type의 모든 output이 client program에 reroute되도록 한다.
int MCCISendOutputStop(serverPort, mimeType)
    MCCIPort serverPort;
    char *mimeType;
Mosaic이 client program에 mimeType의 sending output를 정지시키도록 지시한다.
int MCCIDisconnet(serverPort)
    MCCIPort serverPort;
active한 CCI connection을 종료한다.

3.3 예: Unix용 CCI 응용 프로그램

현재까지 발표된 대부분의 CCI 응용 프로그램은 X/Motif 환경에서 구현된 것이 많으며, 특히 sharing에 기반을 둔 동기식 공동작업에 관한 연구가 이루어 지고있다. 현재까지 소개된 대표적인 CCI를 이용한 프로그램의 예는 다음과 같다. 이중에서 CCI에 대한 이해를 돕고자 WWW 동기식 공동작업과 관련한 연구중 최근 많은 관련연구가 이루어지고 있는 Webcast에 대해 간단히 설명한다. Webcast는 [그림 2]에서 보듯이 MBone과 Mosaic 사이의 전달자 역할을 하며, 여러명의 Mosaic 사용자가 하나의 페이지를 공유할 수 있도록 Sharing URL를 제공한다.


[그림 2] MBone상에서의 Mosaic과 webcast와의 관계

Webcast와 Mosaic 사이의 연결은 CCI를 사용한다. Mosaic은 [그림 3]에서 보는바와 같이 화일 메뉴 아래의 CCI 란에 CCI 포트 주소를 입력하여 request를 기다리고, Webcast는 다음과 같은 형태로 띄우면 된다.


[그림 3]Mosaic CCI 포트 주소 입력하기

% webcast -dest [ip_multicast addr]
          -port [port no]
          -t [ttl]
          -mosaic [host addr]
          -cci [cci addr]
Webcast를 띄운 결과 화면은 [그림 4]와 같으며, Setup 화면은 [그림 5]와 같다. [그림 4]에서 URL은 공유하는 페이지를 가리키게 된다.


[그림 4] Webcast의 main 화면 [그림 5] Webcast의 Setup 화면

3.4 Windows를 위한 CCI v0.11

windows를 위한 Mosaic CCI는 지역 응용 프로그램을 위해서는 OLE 2.0 Automation을, 원격 응용 프로그램을 위해서는 위에서 설명한 TCP/IP CCI의 일반적인 소켓 프로그램 방식을 사용할 수 있다. OLE Automation을 사용하는 것은 MicroSoft Excell과 같은 비쥬얼 베이직으로 구현되어 OLE Automation 기능을 갖는 응용과 통신하는 단순한 방~법과, Visual Basic, 또는 Visual C++로 독립적인 새로운 응용을 구현하여 통신하는 방법이 있다.

OLE Automation을 위한 CCI 함수는 다음과 같다.

4. Netscape Client API(NCAPI)

Netscape는 API를 클라이언트 부분과 서버 부분으로 기능을 나누어 NCAPI(Netscape Client API), NSAPI(Netscape Server API)란 이름으로 각각 지원한다.NCAPI는 기존의 브라우저를 이용한 보다 확장된 응용 개발을 위하여 제 3의 응용이 원격으로 Netscape Navigator 클라이언트를 제어할 수 있도록 설계된 것이다 Netscape 1.0N과는 동작하지 않으며, 1.1N 이상의 버젼에서 계속적으로 기능이 추가될 예정이다. NCAPI는 IPC를 이용하게 되는데, Unix 버젼은 X properties에 의해 제어되고, Windows 버젼은 DDE, 또는 OLE에 의해 지원되며, Macintosh 버젼은 AppleEvent를 이용한 원격제어 기능에 의해 사용가능하다.

4.1 Unix Netscape를 위한 원격제어

Unix Netscape Navigator가 -remote 아규먼트와 함께 invoke되면 새로운 윈도우를 생성하는 것이 아니라 기존의 Netscape 프로세스의 연결과, 이에 따른 제어를 한다. 예를 들면 현재 Window 상의 Netscape에서 URL을 bookmark에 추가하는 일을 command line에서 netscape -remote 'addBookmark()' 명령어에 의해 원격으로 수행시킬 수 있다.

Netscape에서 지원하는 수행가능한 action은 다음과 같다.

이밖에 -id 옵션을 사용하여 윈도우를 지정할 수 있다. (-id 옵션이 지정되지 않으면, 최초로 발 견된 netscape navigator 윈도우가 선택됨)
% netscape -id 0x3c00124 -remote 'openURL(http://pec.etri.re.kr/)'
또한 -remote 옵션은 -raise/-noraise 옵션을 같이 사용함으로서 Netscape 윈도우가 해당되는 윈도우의 raise 여부를 제어할 수 있다. 외부 응용 프로그램에 의한 원격제어는 Unix의 X property를 기본적으로 사용한다. Netscape 원격제어 프로토콜에 의해 사용되는 property는 _MOZILLA_COMMAND, _MOZILLA_RESPONSE, _MOSILLA_VERSION, _MOZILLA_LOCK 이 있다.

Unix Netscape를 위한 원격 제어 프로토콜은 다음과 같은 두단계를 따른다.

두단계 사이에는 lock이 존재하며, 이것의 동일 서버의 제어를 수행하고자 하는 다중 클라이언트 문제를 해결할 수 있다. 두 client와 server간의 전형적인 세션은 다음과 같은 과정을 갖는다. (여기에서 client는 응용 프로그램, server는 Netscape Navigator를 가리킨다.)

Cient

Server

Cient

Server

Cient

4.2 Windows API를 위한 DDE/OLE

4.2.1 Netscape DDE(Dynamic Data Exchange) Implementation

본 절에서는 Windows에 따른 Netscape Navigator DDE implementation을 기술한다. DDE는 프로세스간의 통신을 위한 방식으로, 응용간의 데이타 교환을 위한 공유 메모~리와 데이타 전송을 동기화 하기위한 프로토콜을 사용한다. DDE 응용은 다른 DDE 응용과의 구별을 위하여 application name, topic name, item name을 사용한다.

Netscape를 위한 DDE 서비스 name은 NETSCAPE이다. Netscape window를 참조하는 어떠한 식별자(dwWindowID)도 Windows OS가 window management를 수행하는 방식에 관계되지 않는다. 특정 Netscape window를 addressing하는 모든 window 식별자의 값은 Netscape DDE Implementation에 의해 return되는 값들을 가져야 한다. 일반적으로 싱글 파라미터를 가지는 return value는 double word(dw)용 4 바이트, 혹은 불리언(bl)용 2 바이트의 바이너리 표현이 된다. TRUE의 불리언 data는 0x0001, FALSE는 0x0000을 표현된다. Netscape DDE에서 사용하는 topic은 다음과 같은 것들이 있으며, 자세한 format은 Garrett Arch Blythe의 "Netscape's DDE Implementation"을 참조하면 된다.

        WWW_Activate
        WWW_Alert
        WWW_BeginProgress
        WWW_CancelProgress
        WWW_EndProgress
        WWW_Exit
        WWW_GetWindowInfo
        WWW_ListWindows
        WWW_MakingProgress
        WWW_OpenURL
        WWW_ParseAnchor
        WWW_QueryURLFile
        WWW_QueryViewer
        WWW_RegisterProtocol
        WWW_RegisterURLEcho
        WWW_RegisterViewer
        WWW_RegisterWindowChange
        WWW_SetProgressRange
        WWW_ShowFile
        WWW_UnRegisterProtocol
        WWW_UnRegisterURLEcho
        WWW_Version
        WWW_ViewDocFile
        WWW_WindowChange

4.2.1 Netscape OLE(Object Linking \& Embedding) Automation

OLE는 DDE 프로토콜을 사용한다. 즉 OLE 프로토콜은 DDE Execute command의 집합이다.

Netscape automation object는 naming convention을 따라야 한다. automation object name은 Application.Purpose.Version으로 시스템내에 사용된다. 열거된 모든 automation object method와 property는 visual C++로 선언되어 있다.

Netscape.Network.Automation object

다른 응용에 network 접근과 화일 검색을 제공하며, method와 property는 다음과 같다.
 
        short BytesReady();
        vode Close();
        Cstring GetContentEncoding();
        long GetContentEncoding();
        long GetContentLength();
        Cstring GetContentType();
        Cstring GetErrorMessage();
        Cstring GetExpires();
        BOOL GetFlagFancyFTP();
        BOOL GetFlagFancyNews();
        BOOL GetFlagShowAllNews();
        BOOL GetLastModified();
        Cstring GetPasswd();
        short GetServerStatus();
        long GetStatus();
        Cstring GetUsername();
        BOOL IsFinished();
        BOOL Open(LPCTSTR pURL, short
          METHOD, LPCTSTR pPostData, long
          lPostDataSize,
          LPCTSTR pPostHeaders);
        short Read(BSTR* pBuffer, shor iAmount);
        Cstring Reslove(LPCTSTR pBase,
          LPCTSTR, pRelative);
        void SetFlagFancyFTP(BOOL);
        void SetFlagFancyNews(BOOL);
        void SetFlagShowAllNews(BOOL);
        void SetPassword(LPCTSTR);
        void Username(LPCTSTR);

Netscape.Repostry.1 automation object

외부 응용과의 통합된 인터페이스 제공하며, method와 property는 다음과 같다.
   BOOL RegisterViewer(LPCTSTR,
     pMIMEType, LPCTSTR pRegistryName);
   BOOL RegisterProtocol(LPCTSTR,
     pProtocol, LPCTSTR pRegistryName);

4.2.3 예: Netscape Bookmark manager-SmartMarks

First Floor사에서 개발하여 Netscape사에 제공한 SmartMarks는 NCAPI를 이용한 Windows Netscape의 Bookmark mamager이다. 모양새는 [그림 6]과 같으며, Netscape Navigator를 제어할 수 있다.


[그림 6] Netscape Smartmarks

5. 결론과 향후전망

본고에서는 WWW과 다른 응용과의 원격제어를 지원하는 API에 관하여 기술하였다. 기존의 브라우저(클라이언트)의 기능확장을 위해 NCSA Mosaic은 CCI, Netscape은 NCAPI란 인터페이스로 이를 제공하며, 현재 많은 CCI, NCAPI 응용 프로그램들이 개발되었거나, 개발중에 있다.

현재까지 개발된 프로그램을 보면, Unix 환경에서는 주로 Webcast와 같은 Synchronous Collaboration 툴이나 멀디미디어 텔리컨퍼런싱을 위해 사용되는 통합 브라우저를 제어하는 패널등이 많으며, Windows 환경에서는 Global History Manager, Bookmark Manager(SmartMarks, Sextant), Chatting System(Powwow)와 같은 WWW 브라우저의 액세서리 역할을 하는 프로그램들이 많이 개발되었다.

이런한 인터페이스를 이용하여 실제로 구현을 위해서는 각 플랫폼 특성에 맞는 메카니즘을 사용하여야 한다. Unix 플랫폼에서는 TCP/IP와 X Property, 혹은 라이브러리 형태의 API를 사용하며, Windows에서는 TCP/IP와 OLE/DDE를, Macintosh에서는 역시, TCP/IP와 Mac Events를 이용한다. 각 플랫폼마다 적용되는 메카니즘의 차이로 인해 프로그래머의 로드는 증가되겠지만, 실제 클라이언트측에서는 기존의 WWW 브라우저 하나로 자신의 데스크탑의 모든 응용 프르그램을 제어할 수 있다는 커다란 장점을 가지고 있다.

참고문헌(References)

[NCSA 95a]
NCSA Mosaic Common Client Specification, version 1.1, 1995.3
URL: http://www.ncsa.uiuc.edu/SDG/Sotfware/Mosaic/CCI/cci-speech.html
[NCSA 95b]
Application Programmer's Interface for the NCSA Mosaic Common Client Inferface(CCI), 1995.3
URL: http://www.ncsa.uiuc.edu/SDG/Sotfware/XMosaic/CCI/cci-api.html
[NCSA 95c]
Common Client Interface Protocol Specification : Proposed Mosaic CCI, 1995.4
URL: http://www.ncsa.uiuc.edu/SDG/Sotfware/XMosaic/CCI/cci-spec.html
[Sanderson 95]
Briand Sanderson, Tom Magliery, The Common Client Interface(CCI) Interfacing with NCSA Mosaic, WWW'95 Tutorial, 1995.4.
[Netscape 95a]
Netscape Communications Corporation, Remote Control of Unix Netscape, 1995
URL: http://home.netscape.com/newsref/std/x-remote.html
[Netscape 95b]
Netscape Communications Corporation, Remote Control of Unix Netscape : Protocol Detail, 1995
URL: http://home.netscape.com/newsref/std/x-remote-proto.html
[Netscape 95c]
Netscape Communications Corporation, DDE Implementation for Windows API, 1995
URL: http://home.netscape.com/newsref/std/ddeapi.html
[Netscape 95d]
Netscape Communications Corporation, OLE Automation for Windows API, 1995
URL: http://home.netscape.com/newsref/std/oleapi.html