ActiveX Component Tech & Usage

하창석

서울시 강납구 역삼동 738-37 아이네트 빌딩

(주) 아이네트 개발실 WebProject팀

E-mail : hacs@nuri.net

URL : http://hacs.nuri.net

Abstract:

최근 부상하는 ActiveX Component 및 Server Side Component에 관한 내용을 이해하고, 직접 MFC를 이용하여 자신의 Module을 Convert하여 Web Browser상에서 ActiveX Control으로 구현하고, 또한 자신의 Component을 등록하여 타인에게 보일 수 있도록 해보자.

차례:

1. 서론

2. Microsoft ActiveX Platform

Active Platform 이란?

Active Server

Active Client

ActiveX Core Technology

ActiveX Controls

3. Component Object Model과 Distribute COM

Distributing ActiveX Server Component

4. ActiveX Component 개발 및 적용

Visual-C++, Visual-Basic

MFC를 이용한 Control 생성

5. Six Steps to Signing Your Control

Internet Explorer 3.0x이상의 최신 Version을 Down 받을 것

Certificate Authority(이하 CA)로부터 인증서를 받기

ActiveX SDK의 최신 Version을 Down받을 것

여러분의 Control을 등록 받기위한 준비

당신의 Control을 등록하기

Control의 등록 확인

6. 결론

1. 서론

Server Side Application인 ActiveX Component를 이해하도록하고 ActiveX의 구성 및 기본 개념을 살펴보도록 하자. 또한 이를 Web상에 적용시켜 보도록 한다.

2. Microsoft ActiveX Platform

Microsoft ActiveX Platform의 근간은 OLE(Object Linkage Embedding) 2.0 Spec이다. OLE에서 OLE Control이라는 개념이 발생되었고, 또한 이를 확장시킨 COM(Component Object Model)이라는 개념도 생겨났으며, 현재 Microsoft사가 적극적으로 추진하고 있는 것 중의 하나가 바로 Component란 개념이다. 그리고 이러한 개념을 바탕으로 Web에 적용 시킨 것이 ActiveX Platform이다. ActiveX Platform의 구성요소 들은 크게 세가지로 분류할 수 있다. Active Server, Active Client, 그리고 ActiveX Core Technology이다.

2.1 Active Platform 이란?

Active Platform을 다시 상세히 살펴보자. 아래의 그림에서와 같이 HTML, Script언어, Component이러한 기술들을 조합하여 Client의 Web상에 어떠한 결과를 Active하게 표현하고, 저장하는 것이 Active Client이며, 똑같이 이러한 결과를 Server상에 저장하여 두어 수시로 Client쪽에서 유동적으로 이용할 수 있게하는 것이 Active Server인 것이다.

그림 1. ActiveX Server/Client Platform

예를 들어 Server상의 Data를 표현하고자 할 때, 다양한 개발Tool을 이용하여 Data를 표현하기 위한 ActiveX Component를 개발할 것이다. 개발된 ActiveX Component는 HTML, Script언어, ASP(Active Server Page)등 다양한 Web언어로 구현된다. 즉 HTML + Scripting + Component가 기본적으로 구성되는 것이다.

이제 세가지로 분류된 Active Server, Client, ActiveX Core Technology에 관해 알아보자.

2.2 Active Server

Active Server는 Component를 만들기위해서 필요하고 Server상에서 쉽게 Web-Based application을 실행시키기 위한 Active Platform의 기본적인 것을 제공한다.

Active Server는 다음과 같은 다양한 기능을 제공한다.

2.2.1 다양한 Web Service

IIS(Interner Information Server)3.0을 통하여 Server-Based Programming이 가능하다. 즉 Client에서 보지 못하도록 Code(Script, ASP Code)를 숨길 수 있는 것이다.

또한 NetShow Server를 이용하여 Sound 및 Video와 같은 Streaming media service를 가능하게 해준다. 그리고 Index Server를 이용한 여러가지 indexing기능, FrontPage(Server Side)를 이용한 쉬운 Site관리 기능등을 제공하는 것이다.

2.2.2 Component Service

ActiveX Control(뒷 부분 - 2.5 ActiveX Control - 에서 상세히 설명), Component들을 Web 상에서 쉽게 이용할 수 있다는 점이다.

2.2.3 Data Managment Service

ODBC, OLE DB에 기반을 둔 ActiveX Data Object통한 쉬운 Server-Side Data 관리가 쉽다는 점.

2.2.4 DCOM(Distribute COM) Service

각각의 Server에 분산되어 있는 COM을 이용, 필요한 Client에게 쉽게 제공해 주는 기능.

2.3 Active Client

Active Client에서는 앞서말한 Server가 제공하는 다양한 기능을 보기위해 Browser(Inernet Explore 3.01 or High 이하, IE)가 필요할 것이다. 즉, Client IE에서는 Active Server가 제공하는 다양한 Service를 화면을 통해 제공하는 것이다.

2.4 ActiveX Core Technology

이 강의의 주된 부분인 ActiveX는 COM object의 집합체라고 볼 수 있다.

지금까지의 설명을 Web Application중심으로 보면 아래 그림과 같다.

그림 2. Usage of Web application component

즉, Client상에서는 ActiveX Control들, Java applets들과 같은 Client-side Application 들은 Browser내에서 실행된다. 그리고 Client page들은 Browser내에서 VBScript, JavaScript과 같은 Script언어를 실행시킬 수 있다. 그리고 Web Server는 Client쪽에서 요청하는 결과를 제시하기 위해 Database Server, Server-side Program들을 Call하여 Client상에 HTML형태로 결과를 제공하게 된다.

2.5 ActiveX Controls

앞의 내용 중 OLE Control(다시 정확히 표현하면, OLE Control Extention이다.)이란 무었인가부터 잠시 살펴보자. OLE Control(이하, OCX)은 작은 하나의 독립적인 실행 Module이다. 이러한 OCX들은 재사용이 가능하며, 우리가 OLE를 이용하여 Word 프로그램에서 Paint프로그램 또는 다른 OLE 프로그램을 쉽게 붙였다 땔 수 있는 것처럼 여러 가지 응용프로그램에 쉽게 붙였다 뗄수 있다.

다시 말해, 작고 강력한 독립형 실행 Module이라는 것이다.

이제 그럼 여기서 ActiveX Control이라는 것을 잠시 짚고 넘어 가자. ActiveX Control이란 개념은 이미 많이 알려져 있는 상태이며, 대다수의 개발자는 익히 들어 본 바가 있을 듯 하다. 그러나 다시 한 번 정리해 보도록 하자. ActiveX Control이란 쉽게 표현해서 앞서 언급한 OCX를 Web으로 옮겨놓은 것이다.(참고로 최근 출시된 Visual-Tool들(C++5.0, Basic 5.0 등)에서는 OCX용어는 없어지고 ActiveX Control이라는 용어가 쓰인다.)

즉, OCX가 바로 ActiveX Control인 것이다.

3. Component Object Model 과 Distribute COM

앞서 말했듯이, COM의 근간은 OLE 2.0 Spec이다. 각각의 Server Component와 Client 는 IUnknown, Query Interface를 통해 서로의 정보를 교환하고, Client에서는 여러 가지 Server Component중, 자신에게 정확히 맞는 Component를 이용하는 것이다.

즉 Client에서는 여러 가지 의 Server Component들을 마음껏 붙였다 뗄수 있는 것이다. 그리고 이러한 Server Component들은 상당히 많을 것이다. 또한 Server Component들은 하나의 Server상에서만 존재하지는 않는다. 그럼 이렇게 퍼져있는 Component를 Client는 어떻게 찾을 것인가?에 대한 문제가 제기될 것이다. 이러한 문제점은 앞서 언급한 Interface를 통해서 가능해지게 된다. 그리고 이렇게 퍼져있는 Component들을 Client에서는 알맞은 Interface를 통해서 자신에게 맞는 정확한 COM을 쉽게 가져올 수 있는 것이다.

요컨데, DCOM이란 Application Server들 상에서 존재하는 조그만 독립형 실행 Module 들인 것이다.

3.1 Distributing ActiveX Server Component

다음의 그림에서처럼 Application Server는 Client가 용청하는 Component를 제공하기 위해 각각의 Appliation Server에 분산되어 있는 Component중 정확한 Component와 연결시킨다. 그리고 ASP, Script와 같은 Active Server Application을 통해 HTTP상으로 Client쪽에 결과를 제공하게 되는 것이다.

그림 3. Web Application with Distribute COM

4. ActiveX Component 개발 및 적용

4.1 Visual-C++, Visual-Basic

ActiveX Control을 개발하고자 하는 사람은 Microsoft에서 제공하는 Visual-C++ 4.0 or High, Visual-Basic 5.0을 이용할 수 있을 것이다. 여기서는 Visual-C++ 즉, MFC(Microsoft Foundation Class)에서의 Control 생성 방법을 잠시 언급하도록 한다. (Visual-Basic Control 생성법은 상대적으로 쉬우며 또한 MFC를 이용하는데에 이로운 점(3.2 MFC를 이용한 Control 생성 참조)이 있으므로 생략토록 한다.

4.2 MFC를 이용한 Control 생성

MFC는 Win32와 ActiveX 기술을 지원하는 C++ Class, Function, Macro, Variable들의 집합체이다. 우리는 이러한 MFC가 제공하는 기능 및 편리한 IDE환경인 Visual-C++ IDE를 이용하여 쉽게 ActiveX Control을 개발할 수 있다.

MFC는 기본적으로 Single-inheritance 구조를 지니고 있다. 가장 상위 Class는 CObject 이며, 대부분의 MFC Class들은 CObject로부터 상속된다. 그리고 또다른 기본 Class인 CWinApp Class가 있다. 그런데 ActiveX Component 개발자들에게 가장 중요한 Class는 COleControl Class일 것이다. 이 Class는 CWnd로부터 상속되며, OLE Control에 Message와 Event를 Dispatch한다. 다음은 MFC를 이용하여 ActiveX Control을 생성하는 순서이다.

4.2.1 Application Wizard를 이용하여 ActiveX Control 생성하기

Application Wizard를 실행시킨다음, Create a new project workspace를 선택한다. MFC Control을 생성하기위해 ActiveX Control Wizard를 선택한다. 기본적인 사항을 선택후 최종적으로 Frame Source Code가 생성된다. 물론 여기에는 COleControl Class가 포함되어 있을 것이다.

4.2.2 여러분이 생성한 Control에 속성(Property)추가하기

1)번 항목에서는 가장 기본이 되는 SourceCode가 생성되었을 것이다. 이제는 여러분들이 추가하고 싶은 부분을 Coding하고, 외부(엄밀히 말해 container)로부터 어떠한 속성(Property)값을 받아 처리하는 Code를 삽입해야 한다. 삽입시 Class Wizard를 이용하여 당신의 Control에 속성(Property)을 설정할 수 있다. 이러한 속성(Property)들의 이름은 Container(Visual Basic Application 또는 Internet Explorer와 같은 Application이 Container로 사용되어 진다.)를 통해 사용되어 질 수 있다.

4.2.3 Class Wizard Method를 추가하기

이제 여러분이 필요로 하는 기능을 수행하기 위한 Method를 추가해야 한다.

4.2.4 Event를 추가하기

Event를 추가해 보도록하자. Method가 Container에서 Control에게 가하는 일종의 Message와 같은 것이라면 Event는 단대의 개념이라 볼 수 있다. 즉 Control에게 어떠한 Event가 발생시(예를 들면 버튼을 Click할 때) 당신의 Control은 Container가 인지할 수 있도록 Event에 관한 내용은 "Fire"XXX라는 접두어가 붙어서 해당 Event를 Container에게 넘겨주게 된다.

이러한 Event를 추가하기 위해서 여러분은 Visual-C++ IDE상의 Class Wizard를 실행한 뒤 OLE Event Tab을 선택한 다음 Add Event 버튼을 Click하면 된다.

4.2.5 여러분의 Control을 등록하기

여러분이 생성한 Control을 사용하기 위해서 일단 여러분의 System에 ActiveX Control을 등록(Register)해야 한다. 그러나 이는 여러분의 System상에서만 구현이 가능한 것이다. 그래서 이러한 Server-Side Control을 Client의 Web Browser에서 사용 가능하도록 하려면 여러분의 ActiveX Control을 Sign하고 Mark해야 한다. 상세한 내용은 5.Signing and Marking ActiveX Comtrol 부분을 참고하기 바란다.

4.2.6  Visual Basic 또는 Internet Explorer를 이용하여 Control을 Display하기

당신의 ActiveX Control이 당신의 System에 등록되어 있다면 당신은 쉽게 Control을 이용할 수 있다. 만약 Control이 등록되지 않았으면 반드시 등록을 해주어야 한다.

4.3 Insert ActiveX Control in your Web Page

MFC Class Library와 Control Wizard를 이용하면 쉽게 ActiveX Control을 제작할 수 있다. ActiveX Control은 처음에도 언급했듯이 OLE Control로 사용될 수 있으며 OLE Control 또한 ActiveX Control로 사용될 수 있다. ActiveX Control은 그 자체로서는 별 의미가 없다. 따라서 Control을 이용할 수 있는 Container Application이 필요하다. 즉 바로 Web Browser가 Container Application이 되는 것이다.

ActiveX Control을 Web 문서에 붙이는 경우 ActiveX Control의 Property, Method, Event 등을 호출하고 접수하여 처리할 수 있는 기능은 HTML에 정의되어 있지 않다. 따라서 다른 방법을 생각해야 하는데 그 해결책이 바로 ActiveX Script 이다. 좀더 구체적으로 ActiveX Control을 Web 문서에 포함시키는 방법을 살펴보자.

ActiveX Control과 통신을 하기 위해서는 Script언어(VBScript, JAVAScript)가 필요하다. 일단 ActiveX Control을 Web Page에 포함시키기 위해서 <OBJECT> Tag를 이용하여 ActiveX Control을 삽입할 수 있다. 이때 반드시 넣어주어야할 항목은 System Registry에 저장된 Class ID(CLSID)이다. 다음에 예제가 있다.

(예)

<OBJECT ID "TEST" WIDTH=200 HEIGHT=100

CLASSID="CLSID:8730AD2-382B-11D0-96E2-B1995BD4CD3A">

<PARAM NAME="BackColor" VALUE="12048">

</OBJECT>

위와 같이 HTML작성자가 한줄씩 Coding해도 되지만 많은 Control들이 등록되어 있는 Web Page라면, 사정이 달라질 것이다. 그래서 MS(MicroSoft)사에서 제공하는 ActiveX Control Ped 또는 FrontPage Application을 이용하면, 쉽게 ActiveX Control을 붙였다 뗄 수 있다.

지금까지의 내용을 Server Component 및 Script언어, DB와 같이 합하여 아래에 그림으로 나타내었다. 아래의 그림에서 WebServer상에서 COM은 ActiveX Component(Control)을 접목하고 또한 이 Component는 ODBC를 통해 기존의 DB에 연결된다. 그리고 학장자가 ASP인 파일들은 Active Server Page파일로 ServerSide Script언어이며, 이들은 Client Browser상에서 나타나지 않는다.

그림  4. COM and .ASP files on the WebServer

5. Six Step to Signing Your Code

여러분들이 개발한 ActiveX Control을 Web상에서 나타내기 위해서는 개발한 Control을 Sign해야한다. MicroSoft사의 Authenticode technology는 End User들이 Internet으로부터 ActiveX Control을 Down받을 때, Control Application개발자가 누구인지 또는 안전한지 등에 관한 정보를 벋게 된다. 이제 여러분이 개발한 ActiveX Control을 Web상에 등록하는 절차를 살펴보자.

5.1 Internet Explorer 3.0x이상의 최신 Version을 Down 받을 것.

Internet Explorer 3.0 build수가 1154이 후의 Version은 여러분의 Control이 등록이 되었는지를 인증 할 수있다.

5.2 Certificate Authority(이하 CA)로부터 인증서를 받기.

CA기관(예, Verisign사)의 Web Site를 방분한다. 당신의 Control이 Commercial Software Publisher certificate인지, Individual Software Publisher certificate인지를 선택한다. CA부터 인증을 받는데는 약 일주일 가량이 소모된다. 인증 후, Credential과 Private Key를 받게 될 것이다. 이들은 여러분의 Control을 등록 하는데 필요하다.

5.3 ActiveX SDK의 최신 Version을 Down받을 것.

Microsoft사의 Site에서 ActiveX SDK를 Down받아야 한다. 여기에는 여러 가지 ActiveX Control Sample들과 Control을 Client에서 Down받는 시간을 줄이기 위해 앞축하고(*.cab file),  Web상에 여러분의 Control을 등록하는 Tool들이 포함되어있다.

5.4 여러분의 Control을 등록 받기위한 준비.

여러분이 개발한 ActiveX Component가 실행되는데 필요한 파일을 선정한다. 이들은 같이 cab 파일로 앞축되어 묶여진다. (Cab파일 생선방법은 ActiveX SDK 참조.)

5.5 당신의 Control을 등록하기.

여러분은 여러분의 Exe파일, Cab파일, DLL파일, OCX파일을 등록 시킬 수 있다. (참고로 현제는 32-bit file들만 등록이 된다.) 다음에 여러분의 Control을 등록하기위한 형식이 있다.

< Sign Code Program을 이용한 Control 등록 >

signcode -prog "filename" -name "displayname" -info http://"www.yourcompany.com" -spc "credentials.spc" -pvk "privatekey.pvk"

위에서 filename은 여러분이 등록하고자하는 파일 이름이다.

displayname은 인증로고를 표시할 때 보여질 이름이다.

http://www.yourcompany.com은 여러분의 등록 프로그램에 관한 정보를 얻을 수 있는 여러분의 Web 주소이다.

credentials.spc는 CA로부터 얻어온 인증서 파일이다.

privatekey.pvk는 Application(ActiveX Control)이 실행될 때 CA로부터 인증을 받기위한 Private Key 파일이다.

5.6 Control의 등록 확인

등록된 .exe, .dll, .ocx들을 Test하기위해 다음의 실행파일을 실행시킨다.

--- chktrust "filename" ---

(예) chktrust mycontrol.ocx

그리고 만약 .cab 파일을 Test하기위해서는 다음과 같은 형식으로 Test한다.

--- chktrust -c "cabfilename.cab"

(예) chktrust -c mycontrol.cab

6. 결론

지금까지 우리는 Component를 작성하고 등록도 해 보았다. 이제는 VBScript에서 Fire함수를 Call하여 쓰는 문제는 여러분에게 맡기도록 한다. 그리고 여유가 있으신 분은 자신의 Control을 Verisign에 등록하여 자신의 Control을 Web상에 올리는 것도 좋은 일이겠지요.

References

1. [Microsoft Visual-InerDev]

http://www.microsoft.com/vinterdev

2. [Inside COM]

by Dale Rogerson "Microsoft Press" 1997.

3. [ActiveX Control Inside Out]

by David Chappell "Microsoft Press" 1996.

4. [Signing and Marking ActiveX Controls]

http://www.microsoft.com/workshop

5. [ActiveX SDK]

http://www.microsoft.com/sitebuilder

6. [Internet Information Server]

http://www.microsoft.com/backoffice