IIS 4.0으로 파일 전송하기

일반입력 :2000/01/09 00:00

Susie Adams

마이크로소프트의 SDK를 이용해 자신이 제작하는 ASP 응용 프로그램에 서버측으로 파일을 전송하는 기능을 추가하는 방법에 대해 알아 보자. 사용자가 원격지 서버에 컨텐츠를 제공할 수 있게 해 주는 웹 응용 프로그램을 개발하는 것이 언뜻 생각하면 상당히 복잡한 프로그래밍 작업으로 보일 수 있다. 처음 시작하는 경우에는 먼저 하나 또는 복수의 로컬 파일을 지정하기 위한 사용자 인터페이스를 제작해야 한다. 그런 후에 서버측에서는 클라이언트측에서 전송된 파일을 어떤 방법으로든 해석하고 적절한 대상 파일 서버로 옮겨서 저장해야 한다.사실 대부분의 개발자들이 컨텐츠 배포 기능(content publishing)에 대해 말할 때는 항상 “그건 사이트 서버의 기능이다”라고 말한다. 이 말이 틀린 것은 아니며 마이크로소프트 사이트 서버에서는 파일 전송을 위한 인터페이스를 제공하기도 한다. 하지만 컨텐츠 전송 기능을 가지는 웹 응용 프로그램을 만들기 위해 반드시 사이트 서버를 설치해야 하는 것은 아니다.마이크로소프트 웹 배포 SDK마이크로소프트 웹 배포 소프트웨어 개발 킷(Microsoft Web Publishing Software Development Kit)에서도 개발자들이 자신의 ASP 응용 프로그램에 컨텐츠 배포 기능을 포함할 수 있도록 해 주는 기능을 제공하고 있다. 이 SDK는 두개의 서로 다른 인터페이스로 구성된다.첫번째는 클라이언트측 응용 프로그램 프로그래밍 인터페이스(API)이다. API는 사이트(sites)라고 불리우는 다수의 배포 대상을 관리하며 서버측의 COM 인터페이스를 호출하며 이는 서비스 프로바이더 인터페이스(Service Provider Interface, SPI)를 호출해 네트워크를 통해 파일을 전송한다. API는 여러가지 SPI를 지원하는데 가장 많이 사용되는 것은 CRS(Content Replication System), FTP 그리고 HTTP의 포스트(Post)이다.이 글에서는 HTTP 포스트 또는 포스팅 억셉터 SPI에 대해 설명할 것이다. 특히 컨텐츠를 선택하고 원격지 서버로 전송하기 위해 액티브X 업로드 컨트롤를 이용하는 간단한 HTTP 포스트 SPI를 제공하는 ASP 응용 프로그램을 만들어 볼 것이다.포스팅 억셉터(Posting Acceptor) 1.x 버전은 윈도 NT 4.0 옵션팩에 포함되어 있다. 버전 2.0은 비주얼 스튜디오 6.0 엔터프라이즈 에디션(Visual Studio 6.0 Enterprise Edition)에 포함되어 있다. 이 글에서 설명하는 예제를 만들기 위해서는 비주얼 스튜디오 6.0 백오피스 설치 프로그램으로 설치된 2.0 버전을 사용하기로 한다.이 소프트웨어를 설치하기 위해서는 비주얼 스튜디오 6.0 설치 프로그램에서 백오피스 메뉴를 선택해야 한다. 이때 나오는 대화상자에서 커스텀(Custom) 옵션을 선택하고 포스팅 억셉터 2.0을 메뉴에서 선택한다. 이렇게 하면 서버에 여러가지 파일이 설치될 것이다. 여러분이 사용할 파일은 /scripts/Cpshost.dll(Posting Acceptor ISAPI dll파일)과 /scripts/PostInfo.asp파일이다. (PostInfo 파일은 WebPost에서 컨텐츠 배포를 위해 클라이언트 소프트웨어를 자동으로 설정하는데 사용된다.)참고: 만약 포스팅 억셉터를 사이트 서버 익스프레스(Site Server Express) 또는 사이트 서버(Site Server)와 함께 설치했다면 각 파일의 위치와 내용이 조금씩 달라 질 수 있다. 이와 관련된 상세한 내용은 각 사이트 서버의 설명 문서를 참조하기 바란다. 마지막으로 필요한 파일은 Flupl.cab라는 이름으로 액티브X 업로드 컨트롤(ActiveX Upload Control) CAB파일이다. 이 파일을 설치하려면 사이트 서버 익스프레스를 설치하거나 마이크로소프트의 웹 사이트로부터 다운로드 해야 한다.포스트 억셉터를 설치하는 과정에서 자동으로 몇 가지 파일들이 설치된다. 이들 중에서 cpshost.dll이라는 파일은 포스트 억셉터의 서버측 ISAPI의 DLL이다. 이 서버측 컴포넌트에는 원격지 서버로 파일을 전송하는데 필요한 메쏘드가 포함되어 있다. 이 파일은 IIS 4.0 서버에서 /scripts라는 이름의 가상 디렉터리(virtual directory)에 설치된다.두 번째 파일은 PostInfo.asp이며 이 파일 역시 /scripts 라는 가상 디렉터리에 설치되고 포스팅 프로토콜과 정책에 대한 세부 내용을 포함하고 있다. Flupl.cab 파일은 우리가 필요로 하는 세 번째 파일이며 여기에는 액티브X 업로드 클라이언트측 액티브X 컨트롤(ActiveX Upload client-side ActiveX control)이 포함되어 있다. 자 그럼 이제까지 설명한 파일들이 어떻게 동작하는지 알아보자. 리스트 A에 나와 있는 PostInfo.asp를 보자.이 파일은 각 항목으로 나뉘어 필요한 정보가 담겨 있는 텍스트 파일이다. 이 파일의 가장 앞에는 버전 넘버(version number)가 반드시 와야 하며 그 뒤에는 전송 타입이나 프로토콜을 지정하는 항목들이 이어지게 된다. 각 서버는 여러가지 프로토콜을 동시에 지원할 수 있다. 프로토콜을 정의하기 위해서는 PostInfo.asp 파일에 각 프로토콜에 대한 정보를 입력해야 한다.각 항목은 반드시 ‘<’와 ‘>’문자로 둘러 쌓인 전송 타입(transfer type)과 프로토콜 제공자에 의해 요구되는 키(key)로 시작되어야 한다. 전송 타입은 우선순위에 의해 명시 되어야 하며 그 순서를 기준으로 웹 배포 클라이언트에서 사용된다. 전송 타입은 프로그램 ID나 컴포넌트의 GUID로 지정할 수 있다.최근에 나온 포스팅 억셉터에서는 새로운 META 태그를 지원하며 이는 서버에서 PostInfo.asp의 이름과 위치를 지정하는데 사용된다.

META 태그는 설치 과정에서 웹 사이트의 기본 페이지(default.asp)에 자동으로 삽입된다. 이 파일이 처리되는 시점에서 WebPost API는 서버에서 PostInfo.asp의 위치를 찾기 위해 TargerURL 서버의 가상 루트에 대한 GET을 수행한다. 그런 후에 WebPost API는 검색된 파일을 읽어 PostingURL과 TargetURL 서버를 해석해 낸다.PostingURL 또는 TargetURL 서버가 지정되어 있지 않은 경우에는 컨덴츠 제공자(파일을 업로드 하는 클라이언트)측에서 이 정보를 직접 입력해야 한다. 개발자는 이 값을 실행 시점에서 전달인자로 직접 설정하도록 할 수도 있다.포스팅 억셉터는 IIS에서 HTTP의 multipart/form-data 메쏘드를 이용해 웹 컨텐츠를 포스팅 할 수 있도록 파일을 수신해 주는 기능을 제공한다. 이 포스트 메쏘드를 이용하는 클라이언트에는 인터넷 익스플로러 3.02과 이 이후 버전 그리고 넷스케이프 네비게이터 2.02 그 이후 버전 그리고 마이크로소프트 액티브X 업로드 컨트롤이 있다.ASAPI 응용 프로그램으로 만들게 되면 포스팅 억셉터는 전송될 컨텐트를 위한 TargetURL을 포함하는 HTTP기반의 POST 요청을 접수한다. 이를 접수하고 난 후에는 URL을 해석해 전송될 사이트의 기본 주소로 참조한다. 이런 동작은 적합한 결과가 나올 때까지 맵핑 모듈에 질의를 하는 과정으로 이뤄진다.맵핑 모듈(mapping modules)은 수신된 파일을 목적지로 전달해 준다. 포스팅 억셉터는 물리적인 위치가 되돌려질 때까지 질의를 계속한다. 만약 모든 맵핑 모듈에서 적합한 결과가 되돌려 지지 않은 경우에는 포스팅 억셉터에서 자동으로 IIS 서버에게 주어진 URL에 대한 물리 주소를 요청하게 되어 있다. 우리의 예제에서는 맵핑 모듈을 사용하지 않을 것이며 IIS 서버를 직접 사용하게 될 것이다. 참고: CRS에서 볼 수 있는 것과 같은 맵핑 모듈(mapping modules)에 대한 보다 자세한 내용은 그에 해당하는 마이크로소프트 문서를 참조하기 바란다. 포스팅 억셉터와 액티브X 업로드 컨트롤을 설치하고 나면 서버 환경을 수정해 익명 사용자에 대한 인증(authentication)을 허용해야 한다. 배포자에 대한 인증은 윈도 NT서버에서 제공하는 방법과 클라이언트측에서 지원하는 방법에 의해 여러가지를 선택할 수 있다. 이런 예로는 기본 인증, NTML, MSN, DPA 그리고 마이크로소르트 멤버쉽(Microsoft Membership)도 사용될 수 있다.클라이언트는 단순히 웹 서버에 대한 인증을 수행하며 인증 대상 사용자의 계정이 대상 디렉터리에 적절한 쓰기 권한을 가지고 있다는 것이 인증되고 나면 포스팅을 수행할 수 있다. 사용자들이 파일을 올릴 수 있는 디렉터리는 서버 사이트의 대상 디렉터리에 억세스 컨트롤 리스트(Access Control Lists, ACLs)를 적용해 제어할 수 있다. 만약 서버에 증명(Certificates)기능을 설치해 놓았다면 클라이언트 사용자가 SSL을 지원하는 것으로 전재하고 HTTPS를 통해 파일을 업로드 받을 수도 있다.기본적으로 포스팅 억셉터는 익명 접속(anonymous access)을 허용하지 않는다. 우리가 만들 예제에서는 우리의 사이트에 대해 익명 접속을 허용할 것이다. 이렇게 하기 위해서는 다음에 설명하는 각 단계를 수행해야 한다.●프로젝트 디렉터리가 이와 연결된 가상 디렉터리(virtual directory)를 가지고 있는지 확인한다. (Visual InterDev에서 생성했다면 이미 지정되어 있을 것이다)●포스팅 억셉터가 설치된 게스트 계정을 위해 IIS 4.0이 /scripts 디렉터리에 익명 접속을 허용하도록 설정한다. 이 설정은 IIS의 MMC에서 보안 설정을 변경하면 된다. IIS의 MMC에서 스크립트 디렉터리에 오른쪽 마우스 클릭을 한 후에 나타난 대화 상자에서 Edit Security 탭을 선택하고 Anonymous Access 체크 박스를 선택해 준다.●다시 한번 IIS의 MMC를 이용해 인터넷 게스트 계정 또는 IUSER_에게 TargetURL 서버에 대한 쓰기 접근 권한을 부여한다. 우리 예제에서는 UploadFiles라는 이름의 새로운 가상 디렉터리를 만들 것이며 이 디렉터리는 C:UploadedFiles라는 로컬 디렉터리를 가리키게 될 것이다.●RegEdit를 이용해 HKLMSoftwareMicrosoftWebPostAcceptorsCPSHost에 AllowAnonymous라는 이름으로 REG_DWORD 형태의 변수를 만들고 그 값을 1로 설정한다.●컴퓨터를 재시동 한다.웹 사이트에 대한 파일 업로드 기능을 추가하는 가장 쉬운 방법은 액티브X 업로드 컨트롤(ActiveX Upload control)을 이용하는 것이다. 업로드 컨트롤은 웹 서버에 파일을 업로드 하기 위해 웹 배포 API(Web Publishing API)를 이용한다. 이 컨트롤은 클라이언트 응용 프로그램 페이지에서 사용할 수 있으며 사용자가 컨텐츠를 마우스로 드래그해서 컨트롤로 옮기거나 로컬 파일을 선택할 수 있는 대화 상자를 출력해 그곳에서 마우스로 파일을 선택할 수 있게 해 준다. 컨트롤 위에서 마우스 오른쪽 마우스를 클릭하면 설정 정보를 지정하는 화면을 볼 수 있을 것이다.컨트롤을 구현하기 위해서는 먼저 ASP 페이지를 만들고 컨트롤을 위한 적절한 OBJECT 태그를 삽입한다. 액티브X 업로드 컨트롤을 이용한 스크립트는 리스트 B에 나와 있다.리스트를 보면 눈에 띄이는 것은 아마도 PaSetup.inc라는 이름의 파일에 대한 참조 부분일 것이다. 이 인클루드 파일에는 이 응용 프로그램이 실행되는데 필요한 몇 가지 일반적인 설정값들이 들어있다. 그 내용은 리스트 C와 같다.대상 서버에 파일이 업로드 될 때마다 UploadFile이 호출된다. UploadComplete는 모든 파일의 업로드가 종료되고 나면 호출될 것이다.컨텐츠를 불러 오고 서버측으로 전송하기 위해서는 리스트 C에 나와 있는 것과 같은 두개의 페이지를 만들고 나서 이들을 Visual InterDev 웹 프로젝트에 추가해야 한다. 이 페이지를 불러 들이고 나면 업로드 컨트롤에 파일을 마우스로 끌어다 놓을 수 있을 것이다. 선택된 컨텐츠가 성공적으로 전송되고 나면 그림 A와 같은 메시지 대화 상자가 출력되어야 한다.결론 몇 가지 사실을 명심하고 있다면 원격지 서버로 파일을 전송하는 작업은 그리 어렵지 않다. 첫번째로 기억해야 할 내용은 파일을 전송할 대상 서버의 디렉터리에 대한 적절한 읽기/쓰기 권한을 가지고 있어야 한다는 것이다. 두 번째는 서버에 포스팅 억셉터를 설치해야 한다는 것이다. 마지막으로 기억해야 할 사항은 사용자가 브라우저를 이용해 전송할 파일을 선택하고 전송하기 위해 포스팅 억셉터 프로토콜을 지원하는 사용자 인터페이스를 만들어야 한다는 것이다.지금까지 여러 가지 내용에 대해서 설명했지만 이 외에도 파일을 전송하기 위한 방법은 여러 가지가 있다. 여기에서는 이런 수 많은 방법들 중에서 극히 일부만을 설명했을 뿐이다. 예를 들어 우리는 액티브X 컨트롤을 이용하는 페이지를 만들었다. 하지만 클라이언트측에서 넷스케이프 네비게이터를 사용하고 있다면 어떻게 될까? 아마도 정상적인 동작을 기대하기는 힘들 것이다. 이에 대한 대안으로 “넷스케이프 네비게이터에서 파일 전송(Publishing files with Netscape Navigator)”을 참고하기 바란다.원문 작성일자 : 1999/09/16