미국 마이크로소프트사의 웹 서버인 인터넷 정보 서버(IIS)가 구비되어 있으며, 외부 프로그램을 기동하기 위한 인터페이스. WWW 서버는 클라이언트로부터 데이터베이스 접속 등의 요구가 오면 외부 게이트웨이 프로그램을 기동시켜 그 요구를 처리한다.

외부 프로그램을 기동하는 방법으로는 공통 게이트웨이 인터페이스(CGI)가 유명한데,
복수의 WWW 클라이언트로부터의 접속 요구가 동시에 실행되는 경우는 특히 부하가 큰
프로세스 생성 처리를 수반한다.
반면, ISAPI를 이용하면 IIS가 제공하는
응용 프로그램 인터페이스(API)를 이용해서 웹 서버 기능을 정교하게 제어할 수 있으며, 실행 시의 부하도 경감할 수 있다.
ISAPI를 이용한
확장 프로그램에는 ISAPI Extension과 ISAPI Filter가 있다.

ISAPI 필터란?
ISAPI 필터는 인터넷 정보 서버의 앞단에 위치하면서 인터넷 정보 서버로 들어온 모든 request에 대해 가장 먼저 처리할 권한과, 인터넷 정보 서버가 생성한 response를 클라이언트에 보내주기 전에 가공할 수 있는 권한을 갖는다.
ISAPI 필터를 작성할 때 잊지 말아야 할 것은 가능한 한 최소한의 작업을 이 곳에서 처리해야 한다는 사실이다. 웹 사이트에 대한(가상 디렉터리가 아닌 웹 사이트 전체이다!) 모든 request가 ISAPI 필터를 거칠 수 있기 때문에 과도한 작업을 필터에 걸어주게 되면 웹 사이트 전체의 퍼포먼스에 심각한 영향을 끼치게 된다.

ISAPI 필터의 동작 원리
ISAPI 필터는 웹 서비스가 시작될 때 인터넷 정보 서버와 같은 프로세스 공간에 로딩되는데, 이 때 ISAPI 필터는 자신이 처리할 이벤트 정보를 인터넷 정보 서버에게 알려준다. 클라이언트로부터 request가 들어오고 response를 전송할 때 인터넷 정보 서비스는 ISAPI 필터가 등록한 이벤트 정보를 사용해 각각의 필터에게 특정 이벤트가 발생하였음을 알려주고, ISAPI 필터는 이벤트 핸들러에서 원하는 처리를 한다.

1) 웹 서비스가 시작될 때 ISAPI 필터는 자신이 처리할 이벤트를 인터넷 정보 서버에게 알린다.
2) 클라이언트로부터 request가 들어왔을 때 인터넷 정보 서버는 request와 관련된 이벤트를 알려줄 ISAPI 필터가 있는지 확인하고, 그러한 필터가 존재한다면 request에 대한 정보를 ISAPI 필터에게 전달한다.
3) ISAPI 필터는 이벤트 핸들러에서 request에 대한 작업을 수행하고 제어권을 다시 인터넷 정보 서버로 넘긴다.
4) 인터넷 정보 서버는 response를 생성한 후 response와 관련된 이벤트를 알려줄 ISAPI 필터가 존재하는지 확인하고, 그러한 필터가 있으면 response에 대한 정보를 ISAPI 필터에게 전달한다.
5) ISAPI 필터는 이벤트 핸들러에서 response에 대한 작업을 수행하고 response를 클라이언트에게 전달한다.

이러한 과정을 수행하면서 인터넷 정보 서버와 ISAPI 필터는 HFC(HTTP_FILTER_CONTEXT)라는 구조체를 사용해 상호간에 정보 교환을 한다.

+ Recent posts