|
|
 |
|
![MSDN Home]() |
|
|
.NET P2P : Microsoft .NET Framework를 사용하여 피어-투-피어 네트워크로 연결된 응용 프로그램
작성 |
Lance Olson 저
|
요약? Napster나 Gnutella, Scour와 같이 정보를 공유하고 수신하는 피어로서 통신하는 피어-투-피어 응용
프로그램이 일반화되는 현재의 추세에서, 이러한 응용 프로그램은 대규모 네트워크에 연결된 사용자가 다양한 리소스를 활용할 수 있는 수단이 되고
있습니다. Microsoft .NET Framework는 P2P 응용 프로그램 구축을 위해 풍부한 플랫폼을 제공합니다.
이
문서에서는 피어-투-피어 응용 프로그램을 구성하고 있는 개념에 대해 설명합니다. 피어-투-피어 응용 프로그램 모델과 다른 피어의 파악 작업,
피어를 쿼리하여 정보를 확인하는 작업 등에 대해 구체적으로 설명하고 있습니다. 여기서는 인터넷 프로토콜 사용을 위한 System.Net 이름
공간과 웹 서비스 표시를 위한 System.Web.Services 이름 공간, 방화벽, 포트 등의 문제에 대해서도 다루고 있습니다. 끝으로,
강력한 피어-투-피어 응용 프로그램을 간단하게 설계하는 데 있어서 .NET Framework의 역할에 대해서도 언급하고 있습니다.
|
Microsoft® .NET Framework SDK는 응용 프로그램을 구축하는
데 풍부한 플랫폼을 제공하기 위해 설계된 클래스의 공통 프레임워크입니다. 이 문서에서는 이러한 프레임워크를 사용하여 피어-투-피어(P2P) 응용
프로그램을 만드는 방법에 대해 설명하고, P2P 응용 프로그램을 작성할 때 고려해야 할 점에 대해서 논의하고자 합니다. 그림?1에 나타나 있는 특정 기능에 대한 .NET Framework의 지원 내용에 대해 살펴 본 후, 이러한
내용이 사용자에게 어떠한 도움을 주는지에 대해서도 다루게 됩니다.
피어-투-피어 응용 프로그램이란 무엇인가?
거의 모든 응용
프로그램 유형을 작성하는 데 있어서 가장 중요한 요소가 되는 것이 바로 통신의 문제입니다. 어떤 응용 프로그램이든지 인터넷이나 인트라넷 상에서
잘 분산되어 있고 다른 리소스와 상호 작용을 유연하게 수행할 수 있을 때 큰 가치를 갖는다고 할 수 있습니다. 현재 인터넷을 통한 통신에 있어서
가장 공통적으로 사용되는 모델은 클라이언트/서버로서, 여기에는 정보를 요청하고 서버에 정보를 게시하는 방법을 잘 알고 있는 클라이언트와
클라이언트로부터 요청된 정보에 응답하는 방법을 잘 알고 있는 서버가 존재하게 됩니다. 이러한 모델에 대한 일반적인 예로서 웹 서버와 연결되어
있는 브라우저를 들 수 있겠습니다. 즉, 브라우저에서는 웹 서버에 요청을 보내고, 해당 서버는 이러한 요청에 귀를 기울여 각각의 내용에 응답을
보내거나 정보를 보내는 방식(주로 웹 페이지의 형태로 보냄)을 취하는 것으로 맡은 임무를 수행하게 됩니다. 이 모델에서는 웹 서버가 자의적으로
브라우저에 접촉할 수는 없으며, "대화"는 언제나 클라이언트쪽에서 시작하게 되어 있습니다.
피어-투-피어 응용 프로그램은
클라이언트와 서버의 두 가지 모두의 역할에 관여한다는 점에서 일반적인 클라이언트/서버 모델과는 다릅니다. 즉, 다른 서버로부터 정보 요청을 받을
수 있는 동시에, 서버로서의 역할을 수행하여 다른 클라이언트로부터 온 정보 요청에 응답할 수 있다는 의미입니다. 이러한 접근법을 통해 네트워크의
각 노드마다 추가할 수 있는 가치 수준이 높아지게 되는데, 이는 소스로부터 정보를 얻어낼 수 있을 뿐 아니라 다른 소스와 정보를 공유할 수 있기
때문입니다. 다음은 일반적인 피어-투-피어 응용 프로그램을 정의하는 데 필요한 필수 기능에 해당합니다.
다른 피어 파악
응용 프로그램은 정보를 공유하려는 다른 응용 프로그램을 파악할
수 있어야 합니다. 역사적으로는, 현재 공유하려는 응용 프로그램이 모두 목록에 포함되어 있는 중앙 서버에 등록하고, 새로운 응용 프로그램이
네트워크에 연결될 때마다 이 목록을 제공하는 방법으로 이러한 피어를 찾아 내는 방법을 사용해 왔습니다. 그러나, 네트워크 브로드캐스팅이나 검색
알고리즘 같은 다른 방법을 사용할 수도 있습니다.
피어 쿼리로 컨텐트
확인
이러한 피어를 검색해 낸 다음에는 해당 응용 프로그램에서 원하는 컨텐트가 무엇인지 확인합니다. 컨텐트
요청은 사용자에게서 비롯되는 경우가 많지만, 해당 컴퓨터에서 사용자가 수행한 특정 요청이 아니라 피어-투-피어 응용 프로그램이 자체적으로
실행되어 쿼리를 수행하고 그 결과로 기타 네트워크에서 내 놓은 요청을 처리하기도 합니다.
다른 피어와 컨텐트 공유
피어가 다른 피어에게 컨텐트를 요청하는 것과 같은
방식으로, 피어를 파악하고 난 이후에 컨텐트를 공유할 수도 있습니다.
.NET Framework를
사용하여 피어-투-피어 응용 프로그램을 디자인할 때 고려해야 할 디자인 옵션은 매우 많습니다. 피어-투-피어 응용 프로그램의 아키텍처에 대해
어떠한 결정을 내리느냐에 따라 이 응용 프로그램이 제공할 수 있는 기능의 유형과 이 응용 프로그램을 사용하는 사용자가 갖게 될 경험에 중대한
영향을 미치게 되는 것입니다. 이러한 영역에 있어서 응용 프로그램의 범위는 순수한 피어-투-피어라고 할 수 있는 것으로부터 클라이언트/서버에
이르기까지 연속되는 개념으로 인식될 수 있습니다. 다음 단원에서는 이러한 선택 사항 중 몇 가지에 대해 살펴 보겠습니다.
순수한 피어-투-피어
순수한 피어-투-피어 응용
프로그램에는 그림?2에서 보는 바와 같이 중앙 서버에 해당하는 사항이 없습니다. 순수한
피어-투-피어 응용 프로그램은 네트워크 상의 다른 피어를 바로 검색하여 각각 상호 작용을 통해 컨텐트를 주고 받습니다. 이러한 유형의 강점으로는
다른 피어가 찾을 수 있도록 어느 한 서버에 의존하여 그 위치를 등록할 필요가 없다는 데 있습니다. 이와 함께, 중앙 검색 서버가 존재하지
않음으로 인해, 검색할 수 있는 클라이언트의 수가 상대적으로 적어지고 이에 따라 응용 프로그램의 범위가 제한된다는 문제도 나타날 수 있습니다.
이 시나리오에서 피어는 로컬 구성 스키마로부터 정보를 사용하여 클라이언트를 검색(예를 들어 누가 연결되어 있는지를 나타내는 구성 항목 사용)할
수도 있고, 네트워크 브로드캐스팅과 IP 멀티 캐스트와 같은 검색 기술을 사용하여 다른 피어를 찾을 수도 있습니다.

그림 2 순수한
P2P
IP 멀티 캐스트 사용의 경우,
인터넷에는 널리 구축되어 있지 않다는 점에서 문제가 될 수도 있지만, 네트워크의 통제가 비교적 잘 정비되어 있고 멀티 캐스트에 필요한 하부
구조가 존재하고 있는 것으로 알려져 있는 인트라넷 시나리오에서는 상당히 유용하다고 볼 수 있습니다. 순수한 피어-투-피어는 멀티 캐스트가 아닌
스키마를 사용하여 피어를 검색하는 경우 인터넷에도 구축되어 있는 상태입니다. 이러한 경우에는 응용 프로그램에서 다른 스키마를 사용하게 되는데,
이러한 스키마로는 각 피어가 다른 피어를 하나 이상 알고 있고 이러한 지식을 다른 피어와 공유하여 여러 노드에 느슨하게 연결되어 있는 형태를
취하게 되는 잘 알려진 노드 접근법을 들 수 있습니다.
단일 검색 서버를 사용하는 피어-투-피어
그림?3에서 볼 수 있는 이 아키텍처는 순수한 피어-투-피어 아키텍처와 거의 동일하게 작동되지만, 다른
피어를 찾는 데 중앙 서버를 사용한다는 점이 다릅니다. 이 모델에서는 응용 프로그램이 시작 시간(또는 로그인 시간)에 중앙 서버를 인식하게
됩니다. 피어 응용 프로그램은 이 서버를 사용하여 네트워크에 참여하고 있는 다른 피어의 목록을 다운로드하고 컨텐트 쿼리에 사용하게 됩니다.
컨텐트가 필요한 경우에는 목록을 훑어 보고 각 피어를 개별적으로 접촉하여 확인합니다.

그림 3 단일 검색 서버를
사용하는 P2P
여러 경우에 있어서 이 솔루션
범위를 순수한 피어-투-피어 옵션보다 좋게 구성하기가 훨씬 쉽습니다. 그것은 중앙 서버에 오직 하나의 요청만 요구함으로써 여러 가지 검색의
문제를 피할 수 있기 때문입니다. 순수한 피어-투-피어 솔루션의 범위를 잘 구성하는 것도 가능하기는 하지만, 기본적인 작업(예: 검색)에 대해
서버 하나에 의존할 경우 개발 시간이라는 측면에서 저렴한 비용으로 높은 확장성을 얻을 수 있는 것입니다. 그러나, 이러한 접근법은 중앙 서버의
사용 가능성에 따라 달라집니다. 즉, 중앙 서버를 사용할 수 없는 경우에는 피어-투-피어 응용 프로그램에서 다른 피어를 찾을 수 없게
됩니다.
또한, 개별 피어로부터 컨텐트를
요청하는 것은 네트워크 리소스 관점에서 볼 때 상당한 비용이 듭니다. 물론, 네트워크를 통해 상호 작용하는 피어의 수가 적을 때는 큰 문제가
아닐 수도 있지만, 응용 프로그램이 인터넷이나 대규모 기업 환경에서 사용되도록 작성되는 경우에는 이 문제가 상당히 심각한 문제로 증폭될 수
있습니다.
검색 및 조회 서버를 사용하는 피어-투-피어
이 모델은 그림?3에 나타나 있는 바와 같이, 검색 서버를 확장하여 컨텐트 조회 서비스도 포함되도록 합니다. 이러한
경우, 피어 응용 프로그램은 검색 서버를 통해 등록할 뿐 아니라 정기적인 간격으로 컨텐트 목록을 업로드합니다. 응용 프로그램에서 특정 컨텐트를
찾을 때는 각 클라이언트에 쿼리를 보내기 보다는 중앙 서버를 쿼리하게 됩니다. 중앙 서버는 요청된 컨텐트를 보유하고 있는 클라이언트 목록을
제공하고 피어 응용 프로그램은 이들 클라이언트에 직접 접촉하여 해당 컨텐트를 검색할 수 있습니다.
이러한 접근법은
네트워크에 나타나는 쿼리의 수를 줄이므로(가장 부족한 리소스 중 하나에 해당) 이전 옵션보다 확장성이 뛰어납니다. 그러나, 이러한 절감으로 인해
서버 비용이 발생하게 됩니다. 현재 서버는 컨텐트 공유 과정에 더 많이 관여되어 있는 형편이며, 피어의 요구로 리소스를 상당히 사용하게
됩니다.
검색, 조회, 컨텐트 서버를 사용하는 P2P
실제로 원래 상태로
돌아올 수 있다는 사실을 보여 주기 위해, 피어에서 서버에 컨텐트를 업로드할 수 있도록 시스템이 디자인되게 선택(그림?4 참조)할 수 있습니다. 이러한 접근법은 더 이상 컨텐트를 위해 피어 간에 접촉이 이루어지지
않는다는 점에서 효과적인 클라이언트/서버 모델이 됩니다. 각 피어는 서버(필요에 따라)를 사용하여 등록하고 서버를 쿼리하여 정보를 확인하며
서버로부터 원하는 컨텐트를 전송 받습니다. 문제는 컨텐트를 모든 클라이언트로부터 다운로드할 때 서버가 병목 현상을 일으키는 경우가 많고
피어(클라이언트)에 의해 압도되기 쉽다는 점에 있습니다.

그림 4 검색, 조회,
컨텐트 서버를 사용하는 P2P
이에 대해서는 비디오 컨텐트를
공유하는 피어-투-피어 응용 프로그램을 생각해 볼 수 있습니다. 응용 프로그램에서 100,000개까지 피어를 지원하고 각각 메가바이트에 이르는
데이터를 보유한다고 합시다. 어느 한 피어에 사용할 수 있는 컨텐트의 전체 양은 곧 수백 테라바이트에 이를 수 있습니다. 서버 용량이 계속하여
증가된다고 해도, 서버에 이러한 분량을 요구하는 것은 비용이 많이 들고 심각한 병목 현상과 네트워크의 안정성 문제를 일으킬 수 있습니다. 서버에
이 모두를 요구하게 되면 피어-투-피어 모델에서 활용되도록 클라이언트에서 사용할 수 있는 실질적인 리소스가 클라이언트/서버 모델에서 낭비될
가능성이 있습니다.
피어-투-피어를 위한 응용 프로그램 모델
.NET Framework는
여러분이 만들 수 있는 응용 프로그램 유형에 해당되는 선택의 범위가 매우 다양합니다. 피어-투-피어 응용 프로그램을 직접 작성할 때, 유의해야
할 점은 어떻게 사용될 것인가 하는 문제입니다. 이로 인해 어떠한 .NET 응용 프로그램 모델을 사용할 것인지 쉽게 결정할 수 있게 됩니다.
피어-투-피어의 경우, 네 가지 응용 프로그램 모델(또는 응용 프로그램 유형)을 사용할 수 있습니다. 다음은 이러한 네 가지 모델에 대한 간단한
개요입니다.
Web
Services
System.Web.Services 이름 공간에서 볼 수 있는 Web Services 기술은
피어-투-피어 응용 프로그램에 대해 등록과 검색, 컨텐트 조회를 처리하는 멋진 방법을 제공합니다. Web Service를 사용하면 들어 오는
요청을 경청하고 요청이 도착할 때 바로 처리하며 피어 응용 프로그램이 쉽게 이해하는 개체 형식으로 유용한 정보를 되돌려 보내도록 클래스를 빠르게
작성할 수 있습니다. 이 문서의 후반부에 제시되어 있는 예를 통해 피어-투-피어 응용 프로그램에 대한 Web Service가 어떠한 방법으로
구현되는지 알 수 있습니다.
Windows
Forms
System.WinForms 이름 공간에서 볼 수 있는 Windows® Forms는 피어-투-피어의
기능을 더욱 멋지게 제공하도록 Windows 기반의 GUI 응용 프로그램 유형을 풍부히 작성하는 .NET Framework 솔루션입니다.
Windows Forms는 사용자가 로그인하고 컨텐트를 요청 및 공유하도록 하는 피어에 대해 GUI를 작성하는 데 이상적인 기술입니다.
Web Forms
System.Web 이름 공간에서 볼
수 있는 Web Forms 기술을 사용하면 피어 응용 프로그램에 HTML 컨텐트를 쉽게 반환할 수 있습니다. 이 기술은 이 서비스를 사용하는 데
대한 광고나 서비스에 대한 일반 컨텐트로 피어-투-피어 응용 프로그램을 활기 있게 만들려는 경우 특히 유용합니다. 피어-투-피어 응용 프로그램이
시작하여 Web Service로 등록할 때, Web Forms 응용 프로그램을 호출하여 서버로부터 최신 HTML 컨텐트를 얻을 수도 있습니다.
서비스 프로세스
System.ServiceProcess
이름 공간에서 볼 수 있는 서비스 프로세스(Windows NT® 서비스라고도 함)는 수명이 긴 검색 서버로서 피어-투-피어 시나리오에
유용합니다. 대부분, 검색 서비스(앞서 언급한 바 있음)의 역할을 이행하는 데는 Web Service가 더 좋지만, 검색 메커니즘에서 HTTP
프로토콜을 사용하지 않는 경우에는 기타 프로토콜에 반응하는 서비스 프로세스를 사용하는 것이 최상의 방법이 될 수 있습니다.
응용
프로그램 모델에 대해 여러 가지 선택 사항을 제공하는 것 외에 .NET Framework는 System.Net 이름 공간과
System.Web.Services 이름 공간에서 볼 수 있는 클래스를 통해 피어-투-피어 응용 프로그램 작성에 있어서 네트워킹의 측면을
단순화합니다. 이러한 이름 공간과 이들이 제공하는 클래스, 각각에 따라 구축된 응용 프로그램 등에 대해 자세히 살펴보도록
하겠습니다.
System.Web.Services 이름 공간
System.Web.Service 이름 공간에는 Web Service를 소비하고 표시하는 클래스가 들어 있습니다. .NET
Framework의 Web Service는 프로그램이 가능한 응용 프로그램 논리로서 SOAP(Simple Object Access
Protocol)를 통해 액세스할 수 있습니다. SOAP는 W3C 실행 노트로서 표준 기반의 기술(전송에는 HTTP, 데이터 설명에는 XML에
해당)을 사용하여 응용 프로그램 데이터를 인코딩하고 전송합니다. Web Service의 소비자들은 이 서비스를 구현하는 데 사용된 플랫폼이나
개체 모델, 프로그래밍 언어 따위에 대해서는 전혀 알지 못해도 관계 없고, 오직 SOAP 메시지를 보내고 받는 방법(HTTP를 통해 보낸
XML로 단순 구성됨)만 이해하면 됩니다.
.NET Framework를
사용하여 Web Service를 만드는 것은 서버의 페이지에 클래스를 만드는 것만큼이나 간단합니다. 마찬가지로, 피어 응용 프로그램으로부터
Web Service를 소비하는 것은 매우 쉬우며, .NET Framework SDK의 Visual Studio.NET이나
WebServiceUtil.exe 프로그램을 사용하여 만든 프록시 클래스에서 메서드를 호출하는 방법으로 완성할 수 있습니다. Web
Services의 작동 방법에 대한 자세한 내용은 SDK의 QuickStart 설명서를 참조하십시오.
그림?5에서는 Web Service에 작성할 수 있는 코드를 보여주고 있는데, 이 코드를 통해 등록과 파일
조회를 위해 피어 응용 프로그램에서 호출하도록 서버에 API를 표시할 수 있습니다. 이러한 경우, 클라이언트/서버 기술과 피어-투-피어 개념을
혼합함으로써 클라이언트/서버의 본질과 같이 매우 간단하면서도 네트워크에 등록된 모든 피어의 리소스를 사용할 수 있을 만큼 강력한 기능을 갖춘
응용 프로그램을 만들 수 있게 됩니다.
먼저, P2PService를
호출한 클래스를 확인하게 됩니다. 이 클래스에는 서비스와 상호 작용하도록 호출하게 될 메서드가 포함되어 있습니다. 생성자와 함께, 그림?6에 설명되어 있는 클래스의 메서드도 볼 수 있습니다.
또한, 단순한 PeerFile
클래스를 확인할 수 있습니다. 이 클래스는 피어 파일 정보의 저장을 단순하게 하는 컨테이너로서 사용됩니다. 여기에는 다음과 같은 내용이
포함됩니다.
- IpAddress로서, 피어의 IP 네트워크 주소를 나타냄
- 이름으로서, 파일의 이름을 의미함
- 연결로서, 피어가 연결되는 속도와 연결 유형을 의미함
- 크기로서, 파일의 크기를 의미함
너무
복잡해질 경향이 있기 때문에, 이 문서에서는 대체로 이러한 메서드의 구현에 대해 언급하지 않고 있습니다. 그러나, 제공한 ShareBaby
샘플(이 문서의 맨 위에 있는 링크로부터 다운로드할 수 있음)에는 이러한 구현 작업이 모두 포함되어 있습니다.
둘째로, 그림?7의 해당 클라이언트 코드는 WebServiceUtil.exe 도구를 사용하거나 Visual
Studio.NET에서 Web Reference를 사용하여 Web Service에 대해 구축된 프록시 클래스를 나타내고 있습니다.
System.Net 이름 공간
System.Net 이름 공간에는
인터넷 프로토콜을 사용하여 데이터를 주고 받는 응용 프로그램을 만드는 데 필요한 지원을 제공하는 클래스가 들어 있습니다. Net 클래스는
레이어된 접근법을 사용하여 응용 프로그램에서 필요에 따라 여러 단계의 컨트롤을 사용하여 네트워크를 액세스할 수 있도록 합니다. 이러한 단계에서
다루고 있는 범위에는 소켓에 따라 세밀하게 조정된 컨트롤부터 일반 요청/응답 모델에 이르기까지 현재 인터넷에서 사용되는 거의 모든 시나리오가
포함되어 있습니다. 더구나, 이러한 모델은 확장이 가능하므로 인터넷이 발전됨에 따라 사용자의 응용 프로그램과 함께 계속하여 작동될 수 있습니다.
Net 클래스의 작동 방법에 대한 자세한 내용은 SDK의 QuickStart 설명서에서 Networking을 참조하십시오.
그림?8과 그림?9에서는 Net 클래스를 사용하여 피어 간에 파일을 전송하는 방법을 볼 수 있습니다. 이 코드는 두 가지
메서드로 구분되어 있는데, 처음 메서드는 그림?8에 나타나 있는 것으로서, ListenForPeers라고 합니다. 이 메서드는 피어 응용 프로그램을 수신
모드에 두어 다른 피어가 통신을 시도할 때 응답할 수 있도록 합니다. 다른 피어가 접촉해 온 다음에는 수신 피어가 요청된 파일의 이름에서 읽기
작업을 수행하고 요청된 파일을 나타내는 데이터를 되돌려 작성합니다. 응용 프로그램 형식의 기본 부분에서 이 코드를 실행하면 피어가 접촉해 오기를
기다리는 동안 이 메서드가 처리를 막기 때문에 도착할 요청을 기다리는 동안 응용 프로그램이 중지된 것처럼 보일 수 있습니다.
ShareBaby에서는 이 메서드가 주 피어와 구별되어 있는 스레드에서 호출되므로 컨텐트 요청이 처리되지 않을 때도 사용자 응용 프로그램은 응답
상태에 있게 됩니다.
둘째 메서드는 그림?9에 나타나 있는 것으로서, DownloadToClient라고 합니다. 이 메서드는 피어(요청 수신 중인
피어)와 접촉하여 특정 파일을 전송하도록 요청을 발행합니다. 수신 피어에 파일이 있을 때는 DownloadToClient를 사용하여 요청하면서
피어 응용 프로그램에 해당 컨텐트가 전송됩니다.
피어 응용 프로그램은 분산 정보를
공유하는 데 유용한 도구이며, 일반적인 웹 브라우징 기술과 통합되어 사용자가 HTML 컨텐트 사용을 경험할 수 있도록 합니다. 이로써, 이 응용
프로그램은 브라우저와 피어 응용 프로그램을 혼합한 새로운 종류로 거듭나게 됩니다. 예를 들어, 피어-투-피어 응용 프로그램이 피어-투-피어
서비스에 대한 최신 시각 정보를 포함하거나 여러분의 서비스를 지원하는 광고 도구로서의 기회를 제공하도록 할 경우가 많이 있습니다. 회사 정보를
공유하기 위해 피어-투-피어 응용 프로그램을 구축할 수도 있습니다. 이 때, 문서와 프레젠테이션은 피어 서비스를 통해 공유되지만, 복리 후생이나
인력 관리 정보와 같은 일반 회사 정보는 일반적인 브라우저 창으로 표시될 수 있습니다. 그림?10의 코드를 통해 웹 서버로부터 HTML 컨텐트를 다운로드하는 데 System.Net의
WebRequest 클래스와 WebResponse 클래스가 사용되는 방법을 확인할 수 있습니다.
방화벽과 포트
여기서 제시한 예에서 피어 응용
프로그램은 8081 포트에서 연결을 수신하고 있습니다. 특정 포트에서만 통신을 허용하도록 방화벽을 디자인하는 경우가 많기 때문에 응용 프로그램
디자인에 있어서 피어가 사용하는 포트와 프로토콜에 대한 선택은 중요하게 고려해야 할 사항이 됩니다. ShareBaby의 경우, 8081 포트는
특정 네트워크나 인터넷에서 직접 컨텐트를 주고 받는 데 적합하지만, 회사 방화벽을 통해서는 작동되지 않을 수 있습니다. 그 이유는 이 포트가
비공개되어 있기 쉽기 때문입니다. 여러분이 회사 환경에 맞게 직접 피어-투-피어 응용 프로그램을 디자인하는 경우에는 어떤 포트가 공개되어 있는지
또는 응용 프로그램 용도에 적합한 포트는 무엇인지에 대해 네트워크 관리자와 상의하는 것이 좋습니다. 다른 피어를 찾는 데 있어서 방화벽을 통하지
않는 사용자를 위해 응용 프로그램을 디자인할 경우에는 다른 프로토콜에 이미 예약되어 있지 않은 포트라면 무엇이나 잘 작동됩니다. 일반적으로,
포트 번호는 다음 세 가지 범위로 구분됩니다.
- 잘 알려진 포트(0-1023)
- 등록된 포트(1024-49151)
- 동적 및 개인 포트(49152-65535)
잘 알려진 포트와 등록된 포트의 목록을 보려면 http://www.iana.org/numbers.htm에서
IANA 포트 지정 목록을 참조하십시오. 대부분의 경우, 인터넷에서 일반적으로 사용하기 위한 응용 프로그램은 동적 범위나 개인 범위의 포트나
등록된 포트를 사용해야 합니다.
확장성
이 문서에 언급되어 있는 옵션 중
일부는 피어 응용 프로그램의 확장성에 영향을 줍니다. 네트워크 대역폭은 피어-투-피어 응용 프로그램에서 가장 부족한 리소스(따라서 병목 현상
발생)가 됩니다. 피어 응용 프로그램의 유연성 간에 발생되는 거래에 주의를 기울여 다른 피어를 검색하고 이를 쿼리하여 컨텐트를 확인하며 응용
프로그램의 기능을 수십만 클라이언트까지 확장하도록 해야 합니다. 그러나, 이러한 문제에 대한 심층적인 논의는 이 문서에서 언급하기에는 너무
복잡한 내용이므로 다루지 않겠습니다.
피어-투-피어 응용 프로그램 샘플
ShareBaby 응용 프로그램은
검색/조회 서버를 사용하는 피어-투-피어의 작업 예입니다. 이 프로그램은 System.Web.Service 이름 공간을 사용하여
ShareBaby 피어 응용 프로그램에서 소비하는 ShareBaby Web Service를 표시하는 내용에 대해 설명합니다. 이러한 피어에서는
ShareBaby 서비스를 사용하여 공유할 파일의 이름을 등록하고 다른 피어가 획득하려는 파일의 위치에 대해 쿼리를 시행합니다.
ShareBaby 피어 응용 프로그램을 나타내기 위해 ShareBaby 샘플은 앞서 언급한 Windows Forms 응용 프로그램 모델의 사용을
보여 줍니다. 마지막으로, ShareBaby에서는 피어 간에 컨텐트가 전송되는 방법을 표시하기 위해 System.Net 이름 공간을 사용합니다.
결론
인터넷과 같이 규모가 큰
네트워크에 적용되는 피어-투-피어 응용 프로그램 모델은 이제껏 실현된 바가 없는 스케일로 네트워크에서 정보와 컨텐트를 공유하는 기회를
제공합니다. .NET Framework와 Visual Studio.NET를 사용하면 풍부한 UI 클라이언트 프로그래밍 모델과 확장할 수 있는 웹
서비스에 대한 지원 기능, 사용하기 쉬운 네트워킹 클래스, 강력한 개발 환경의 모든 것을 제공함으로써 피어 응용 프로그램을 쉽게 작성할 수 있게
됩니다.
Lance Olson은 Microsoft .NET Framework 팀의
수석 프로그램 관리자로서 .NET Framework에 대한 네트워킹 및 웹 서비스 기술을 관리 제공하는 책임을 맡고
있습니다.
? 최종수정일: 2001년 3월 12일
|
Top of Page
|