|
끔직이 님이 쓰신 글 :
: 안녕하세요?
:
: 다름이 아니라 필요한 소스를 델파이문서를 참조하면서 보다가 한가지 의문이 생기더라고요...
: 델파이에서는 ISAPI/CGI의 전환을
: "//{$ifdef dll}"부분의 주석처리 여부에 따라 CGI/ISAPI의 최종생성물이 달라지는 빌더에는 이와 유사한 것을 사용자가 고쳐서 쓸 수 있는 부분이 있나요?
:
임펠리테리입니다.
결론부터 말씀드리면, 가능은 합니다만, 간단히는 되지 않습니다. 어딘가(Dr.Bob이었던가?)의 팁을 보시고 하시는 말씀이신 것 같은데, 델파이에서도 그렇게 하는 것은 일종의 편법입니다. 편법이라도 가능한 이유는, 델파이의 CGI나 ISAPI 지원은 상당부분이 추상화되어 있어 프로젝트 소스 부분이 얼마 되지 않을 뿐 아니라, 생성되는 프로젝트 소스가 다행히도 적당히 컴파일러 디렉티브로 가려주거나 살려주면 왔다갔다 할 수 있도록 소스 라인수에서 조금밖에 차이가 나지 않기 때문에 가능한 것입니다.
이에 반해, C++Builder의 경우에는, CGI와 ISAPI가 모두 표준의 C/C++코드를 그대로 따르고 있습니다. 예를 들어, CGI로 만들었을 경우에는 main() 함수를 그대로 구현하고, ISAPI로 만든 경우에는 GetExtensionVersion() / HttpExtensionProc() / TerminateExtension() 함수를 모두 구현합니다. 델파이에서 자동으로 만드는 코드를 보면, 황당하게도 두가지 경우가 거의 차이가 나지 않는데, ISAPI에서 필요한 위와 같은 함수들이 모두 숨겨져 있기 때문입니다.
어쨌든.. 델파이에서도 ISAPI와 CGI를 오갈 수 있도록 쉽게 지원을 해주었던 것이 아니라, 단지 코드가 몇줄밖에 차이나지 않으므로 누군가가 잔머리를 굴려서 거기다가 컴파일러 디렉티브를 써서 조건부 컴파일이 되도록 한 것 뿐입니다. C++Builder에서도 그런 처리가 불가능하지는 않습니다만.. 별로 필요하진 않습니다.
필요가 없다고 말씀드리는 이유에 대해서 설명하죠. 보통 CGI와 ISAPI 사이를 전환해야 할 필요가 생기는 것은, 일반적으로 CGI가 더 디버깅이 쉽다고 생각하기 때문입니다. 이것은 두가지 이유 때문인데, 첫번째는, CGI는 실행 프로그램이므로 그냥 컴맨드라인에서 실행시켜볼 수 있다던가.. 하는 거겠죠. 기본적으로는 맞는 생각입니다만, 실제로 웹프로그래밍을 하다보면 CGI를 그냥 실행시켜서 테스트하는 것은 오히려 더 번거로울 뿐 아니라 정확한 필드테스트가 되기 힘듭니다. 두번째 이유는 아마도 ISAPI가 웹서버에서 캐시가 되므로 매번 웹서버를 올렸다 내렸다 해주어야 파일을 다시 컴파일할 수 있다는 걸 겁니다. 그렇지만 이 경우에도 IIS에서 ISAPI 캐시를 설정하지 않으면 됩니다. 결론적으로, 어차피 ISAPI로 개발할 거라면 굳이 CGI로 왔다갔다 하면서 디버깅하는 것은 오히려 더 불편하고 비효율적이라는 말입니다.
그럼 참고하시길...
|