본문 바로가기
프로그래밍/ASP

[본문스크랩] ATL ASP Component (1)

by 백룡화검 2010. 4. 23.

ATL ASP Component (1) : 개요


ATL ASP Component란?

ASP Component란 ASP에서 생성하여 사용할 수 있는 서버용 COM 객체이다. ASP에서 메일 발송을 위해 CDONTS 객체를 사용하거나, 데이터베이스에 연결하기 위하여 ADODB 객체를 사용해본 독자들이 꽤 있을 텐데 CDONTS나 ADODB가 바로 이런 ASP Component이다.

ASP Component는 COM(Component Object Model)의 틀에 의해 작성되며 DLL 혹은 EXE 파일의 형태로 작성된다. ASP가 가지고 있는 기능상의 혹은 성능상의 한계를 극복하기 위해 사용하며 ASP Extension이라고도 부른다. ASP는 스크립트의 용이함 때문에 많은 웹 개발자들이 사용하고 있지만 몇 가지 단점도 있다.

1) 속도가 느리다. ASP 필터가 모든 request에 대해 ASP 코드를 인터프리트하여 실행시키는 방식이기 때문이다.
2) 유지 보수가 어렵다. 사용자에게 보여주는 HTML과 서버 코드가 혼재되어 있어 개발자 입장에서 소스의 가독성이 떨어진다.
3) 소스 해킹의 위험이 존재한다. OS 레벨에서의 패치 작업으로 그 위험성은 줄어들었으나 ASP 자체가 텍스트 방식이기 때문에 근본적인 위험 요소는 늘 존재한다.

ASP Component를 사용하면 이러한 문제들이 모두 해결된다.

1) 컴파일된 바이너리 모듈이기 때문에 처리 속도가 뛰어나다.
2) 바이너리 모듈로 만들어지기 때문에 ASP 소스가 유출되더라도 실제 비지니스 로직은 드러나지 않는다.
3) ASP는 스크립트에서 지원하는 함수만 사용할 수 있는 반면 ASP Component는 일반 어플리케이션과 마찬가지로 Win32 API를 모두 사용할 수 있어 저수준의 제어까지 가능해진다.
4) ASP Component는 ASP 엔진에 대한 인터페이스를 사용할 수 있어 ASP에서 제공하는 기능을 내부적으로 모두 사용할 수 있다.

모든 COM 모듈이 그러하듯이 ASP Component도 대개 DLL 모듈로 만든다. DLL로 만들게 되면 호출자와 같은 메모리 공간에서 동작하기 때문에 빠른 성능을 보인다.
EXE 혹은 EXE 서비스 형태로도 만들 수 있는데 이런 경우에는 호출자와 RPC(Remote Procedure Call)를 사용해 통신해야 하기 때문에 성능이 저하된다. EXE 서비스 형태로 만들었을 때의 장점은 서비스 유지 보수에서의 유리함이다. DLL형태의 ASP Component는 인터넷 정보 서비스가 모듈 자체를 물고 있기 때문에 모듈의 업데이트를 위해서는 인터넷 정보 서비스 자체를 중지시켜야 하며 일부 기능을 위한 COM 모듈 때문에 전체 웹 서비스를 내려야 한다는 것은 사실 큰 부담이 된다. 반면 서비스 형태의 COM의 경우에는 해당 서비스만을 중지시키고 모듈을 업데이트한 후 다시 서비스를 시작시키면 되기 때문에 전체 웹 서비스 운영에는 지장이 없다.
ASP Component를 COM+ 서비스(NT 4.0의 트랜잭션 서버)에 등록시켜 사용할 수 있는데 이런 경우 시스템 자원 관리를 트랜잭션 서버(혹은 COM+ 서비스)에서 해주기 때문에 안정성이 높아진다.

가장 권장되는 ASP 프로그래밍 방식은 복잡한 수행문과 DB 쿼리를 사용하는 루틴의 경우 ASP Component 모듈로 작성하고 ASP에서 불러서 사용하는 것이다. 모든 경우에 ASP Component를 작성하라는 의미가 아니며, ASP Component를 생성하는데에는 나름대로의 부하가 걸리기 때문에 간단한 DB 쿼리 정도는 ASP에서 모두 처리를 하는 것이 좋다.

ASP Component는 COM을 지원하는 어떤 개발 도구로도 만들 수 있으며 .NET의 CLR을 대상으로 하지 않는Unmanaged Code이다. 우리는 Visual C++에서 제공하는 ATL(Active Template Library)를 사용하여 ASP Component를 만들 것인데 이러한 형태의 모듈을 ATL ASP Component라고 부른다.

ASP Component 의 동작 원리

1) 클라이언트가 ASP에 대해 request를 요청한다.
2) 인터넷 정보 서버에 물려있는 ASP 필터(ASP.DLL)가 작동하여 해당 ASP를 인터프리트한다.
3) ASP 필터는 해당 COM 객체를 생성하여 사용한다.
4) ASP Component를 담고 있는 모듈이 DLL이면 해당 DLL이 ASP 필터와 같은 메모리에 로딩되며 EXE라면 독립적인 메모리 공간에 로딩되어 ASP 필터와 RPC(Remote Procedure Call)를 사용해 통신한다.
5) ASP Component는 ASP 필터에게 수행 결과를 전달한다.
6) ASP 필터는 수행 결과를 인터넷 정보 서버로 넘긴다.
7) 인터넷 정보 서버는 클라이언트에게 response를 전송한다.

ASP Component의 작동 과정을 그림으로 보면 다음과 같다.