결론부터 말하자면, 정확하게 말해서 포럼의 impboard.dll은 CGI가 아니라 ISAPI입니다. 제가 직접 만든 거구요.
그리고 윈도우 환경에서는 ISAPI보다 성능상 더 뛰어난 웹서버 프로그래밍 방식은 존재하지 않습니다. 단지 ASP나 JSP같은 웹서버 스크립트 기술들보다 어렵기 때문에 개발자들이 많이 쓰지 않는 것 뿐입니다.
CGI 기술 전체를 비판적으로 보는 것은 좀 무리가 있습니다. 모든 웹서버 프로그래밍 기술은 기본적으로 CGI에서 파생된 것입니다. ASP나 JSP, PHP, ISAPI, 서블릿 등등 그 모두가 CGI에서 파생된 것입니다.
CGI가 어떤 조건에서는 성능상 마이너스가 있기는 하지만, 그 대부분은 윈도우 환경이라서 그렇습니다. CGI는 기본적으로 개별 프로세스인데(윈도우에서는 exe), 윈도우 OS의 특성상 유닉스 계열에 비해 프로세스 생성시의 리소스 소모가 매우 큰 편입니다. 그리고 CGI는 처음 윈도우에서 등장한 것이 아니라 유닉스 계열 OS에서 시작된 것이기 때문에 그렇게 심각한 편은 아닙니다.
윈도우에서 프로세스의 자원 소모가 너무 크기 때문에 그 대안으로 나온 것이 ISAPI입니다. ISAPI는 exe인 CGI와는 달리 dll 형태로 만들게 되고, 실행시에는 각 요청에 대해 새 쓰레드를 만들어 처리합니다. 그 때문에 최강의 성능을 보입니다.
ISAPI가 윈도우에서 다른 어떤 웹 서버 프로그래밍 방식보다 더 빠르다는 것은, 상식적으로 생각해보면 누구나 짐작할 수 있습니다.
ASP는 스크립트지요? 그러면 이 스크립트를 처리해주는 엔진이 어딘가에 있겠지요? 그 엔진이 asp.dll이고 윈도우 서버의 기본 웹서버인 IIS에 포함되어 있습니다. 그리고 이 asp.dll 자체가 ISAPI입니다. 생각해보세요. ISAPI에서 직접 처리하는 것과 ISAPI인 엔진이 다른 스크립트 파일을 읽어서 처리하는 방식 중 어느쪽이 빠를지.
JSP의 경우는 당연히 서블릿보다 느리니까 서블릿과만 비교해보지요. 서블릿은 기술적으로 ISAPI와 동등한 레벨의 기술입니다. 그런데 아시다시피 서블릿은 JVM 위에서 동작하고, 요즘 대부분 서블릿 컨테이너까지 필요합니다. 당연히 네이티브에서 동작하는 ISAPI보다 빠를 수가 없습니다. ASPX의 경우도, 기본적인 기술적 아이디어는 JSP와 비슷하므로 역시 성능에선 ISAPI를 따라갈 수 없습니다.
ISAPI는 기술적으로 CGI와 동등한 레벨이면서 논리적으로는 웹서버의 프로세스 내에서 동작하므로 웹서버와의 데이터 교환에도 가장 빠르며, 네이티브 바이너리이므로 전달받은 데이터를 처리하는 속도도 가장 빠릅니다. 또 프로세스 대신 쓰레드로 동작하기 때문에 자원을 덜 소모하며 시간도 덜 잡아먹고, 스크립트가 아닌 바이너리라서 파싱 시간도 전혀 필요없습니다. 당연히 최강의 성능을 보이겠지요?
그런데 이런 ISAPI가 성능상 가장 뛰어난 것은 사실이지만, 개발과 디버깅은 다른 기술들에 비해 어려운 편입니다. 스크립트보다 어려울 것은 당연하겠고, 쓰레드 방식이므로 개별 프로세스인 CGI보다도 어렵습니다. 그래서 많은 개발자들이 ISAPI보다는 다른 기술을 많이 선택하고, 특히 개발하기 편한 스크립트 기반을 많이 선호하지요.
이렇게 ISAPI가 개발이 좀 어렵지만... 특히 MS에서 제공한 ISAPI API 기술을 그대로 쓴다면 더욱 어렵지만, 델파이나 C++빌더에서 제공하는 기반 기술을 활용하면 훨씬 쉽게 개발할 수 있습니다. 델파이와 C++빌더에서는 ISAPI 개발을 쉽게 해주는 두가지 방법이 있는데, 하나는 웹브로커이고 다른 하나는 웹스냅입니다. 이들 기술을 쓰면 웹 개발을 상당 부분 컴포넌트 기반으로 할 수 있고요. 이 게시판 모듈 impboard.dll은 웹브로커 기반으로서 VCL에서 제공하는 컴포넌트와 제가 직접 만든 컴포넌트들을 이용해서 만들었습니다.
그럼...
지나면서 님이 쓰신 글 :
: 이게 말로만 듣던 C를 이용한 CGI라는 건가요?
: ASP만을 공부한지 1주일 조금넘어갑니다.
:
: 어느 웹페이지를 방문하든 대부분 JSP, PHP, ASP, ASPX 뭐 이런 확장자를 가지고 있잖아요?
: 대부분 이걸사용하는데, 물론 운용자님 맘이겠지만, 왜 CGI를 사용하는 건지 모르겠습니다.
:
: 제가 배우기론 ASP 는 웹서버에서 스레드방식으로 작동하기에 메모리도 적게 사용하지만, C 와 같은 언어로
: CGI를 만들어 쓰면 프로세스방식이기에 메모리 고갈이 심해서 적은 유저접속만으로도 더이상 서비스가
: 안된다고 하셨는데........
: 볼렌드포럼 유저가 적지 않을것 같은데,,, 제가 잘못이해 하고 있나요?
: 몹시 궁금합니다.
|