들어는 봤나! Firefox PlugIn (2)

PlugIn의 Life Cycle을 이해하자

Life Cycle이란 인스턴스가 처음으로 생성되는 시점에서부터, 인스턴스가 소멸할 때까지의 시점을 이야기 합니다. Standalone 어플리케이션 경우에는 인스턴스가 생성되고 소멸되는 시점이 프로그램 내부에서 조절 가능하기 때문에 중요하지 않지만, PlugIn 이나 Applet의 경우에는 인스턴스를 제어하는 주체가 브라우저이거나 다른 프로그램이기 때문에 Life Cycle을 이해하는 것이 중요합니다.


그림 1 PlugIn Runtime Model


EntryPoint?

위 테이블에 있는 함수의 실체는 어디에서 정의되는 것인가? 라는 것부터 확실히 하고 함수들의 역할을 이해해야 합니다. 위 함수들은 PlugIn이 가지고 있는 함수이며, 브라우저가 호출하는 함수들입니다. 이들을 EntryPoint 함수라고 하기도 합니다.


그림 2 EntryPoint?

눈치가 있는 사람이라면 윈도우에서 EntryPoint 구조를 가지려면 최소한 DLL 형태가 되야 된다는 사실을 알 수 있습니다. 그렇습니다. 윈도우에서 플러그인 파일은 DLL 입니다.


다시 Life Cycle로 돌아와서…

브라우저 내부에는 여러 개의 플러그인 인스턴스가 있을 수 있습니다. 같은 플러그인일지라도 여러 개가 로드 될 수 있습니다. 이런 경우에 가장 첫 플러그인 인스턴스가 생성되는 시점에 호출되는 함수가 NP_Initialize() 입니다. 이 후에 새로운 플러그인 인스턴스가 생성되어도 NP_Initialize() 함수는 다시 호출되지 않습니다. 이 함수에는 보통 플러그인들끼리 공유하는 전역 변수 등을 초기화 하는 코드가 들어갑니다. NP_Shutdown() 함수는 마지막 플러그인이 종료되는 경우에 호출됩니다.

NPP_New() 함수는 플러그인 인스턴스가 생성될 때마다 호출되는 함수 입니다. NPP_Destroy()는 플러그인 인스턴스가 소멸될 때마다 호출되는 함수 입니다.


최소한 PlugIn이 되기 위한 조건?

최소한 PlugIn으로 동작하기 위해서는 NP_Initialize()와 NP_Shutdown() 함수 2개만 정의되어 있으면 됩니다. DLL로 만들고 NP_Initialize(), NP_Shutdown() 함수들을 Export 시키면 최소한의 요건을 갖춘 PlugIn이 됩니다. 간단하죠?


본 글의 출처는 다음과 같습니다.

작성자 : 이은규
홈페이지 : http://unkyulee.net
작성일 : 2006-02-20
블로그 이미지

맨오브파워

한계를 뛰어 넘어서..........

,