ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • .NET 리모팅 http://msdn.microsoft.com/ko-kr/library/2e7z38xb.aspx
    .NET/NetWork 2008. 12. 17. 16:06
    반응형
    http://msdn.microsoft.com/ko-kr/library/2e7z38xb.aspx



    .NET Framework Remoting 아키텍처

    .NET Remoting 인프라는 프로세스 간 통신에 대한 추상적인 접근 방법입니다. 값으로 전달하거나 복사할 수 있는 개체는 다른 응용 프로그램 도메인이나 다른 컴퓨터의 응용 프로그램 간에 자동으로 전달됩니다. 이렇게 하려면 사용자 지정 클래스를 serializable로 표시합니다.

    그러나 원격 시스템의 중요한 장점은 다른 응용 프로그램 도메인의 개체나 다른 전송 프로토콜, serialization 형식, 개체 수명 체계 및 개체 생성 모드를 사용하는 프로세스 간의 통신을 지원하는 기능에 있습니다. 또한 원격 서비스를 사용하면 통신 프로세스의 거의 모든 단계에 개입할 수 있습니다.

    여러 개의 분산 응용 프로그램을 구현한 경우이든, 프로그램 확장성을 높이기 위해 구성 요소를 다른 컴퓨터로 이동하려는 경우이든 원격 시스템을 이해할 때 대부분의 시나리오를 쉽게 처리하는 기본 구현이 포함된 프로세스 간 통신의 일반 시스템으로 생각하면 이해하기가 쉽습니다. 다음 단원에서는 먼저 원격 서비스를 사용하는 프로세스 간 통신의 기본 사항에 대해 설명합니다.

    복사본 및 참조

    프로세스 간 통신을 수행하려면 프로세스 외부의 호출자에 해당 기능을 제공하는 서버 개체, 서버 개체를 호출하는 클라이언트 및 한쪽에서 다른 쪽으로 호출을 전달하는 전송 메커니즘이 필요합니다. 서버 메서드의 주소는 논리적이며, 한 프로세스에서는 올바로 작동하지만 다른 클라이언트 프로세스에서는 작동하지 않습니다. 이 문제를 줄이기 위해 클라이언트는 개체의 전체 복사본을 만들고 클라이언트 프로세스로 이동하여 서버 개체를 호출할 수 있습니다. 이 경우 클라이언트 프로세스에서 복사본의 메서드를 직접 호출할 수 있습니다.

    그러나 많은 개체는 실행을 위해 복사하여 다른 프로세스로 이동할 수 없거나 이동하면 안 됩니다. 많은 메서드가 있는 큰 개체는 복사하거나 값으로 다른 프로세스에 전달하면 안 됩니다. 일반적으로 클라이언트는 서버 개체의 하나 또는 몇몇 메서드가 반환하는 정보만 필요로 합니다. 클라이언트의 요구 사항과 관련이 없는 많은 양의 내부 정보나 실행 파일 구조를 포함하여 전체 서버 개체를 복사하는 경우 대역폭과 클라이언트 메모리 및 처리 시간을 낭비하게 됩니다. 또한 많은 개체는 공용 기능을 노출하지만 내부 실행을 위해 전용 데이터가 필요합니다. 이러한 개체를 복사하면 권한이 없는 클라이언트가 내부 데이터를 확인할 수 있으므로 잠재적으로 보안 문제가 발생할 수 있습니다. 마지막으로 일부 개체는 이해할 수 있는 방식으로 복사할 수 없는 데이터를 사용합니다. 예를 들어 FileInfo 개체는 서버 프로세스의 메모리에 고유 주소가 있는, 운영 체제 파일에 대한 참조를 포함합니다. 이 주소는 복사할 수 있지만 다른 프로세스에서 유효하지 않습니다.

    이 경우 서버 프로세스에서 개체의 복사본이 아니라 서버 개체에 대한 참조를 클라이언트 프로세스에 전달해야 합니다. 클라이언트는 이 참조를 사용하여 서버 개체를 호출할 수 있습니다. 이러한 호출은 클라이언트 프로세스에서 실행되지 않습니다. 대신 원격 시스템이 호출에 대한 모든 정보를 수집하여 서버 프로세스로 보내면 여기서 이 정보를 해석하고, 올바른 서버 개체를 찾고, 클라이언트 개체를 대신하여 서버 개체를 호출합니다. 호출 결과는 다시 클라이언트 프로세스로 전송되어 클라이언트에게 반환됩니다. 대역폭은 호출, 호출 인수, 반환 값 또는 예외 같은 중요한 정보에만 사용됩니다.

    단순한 원격 아키텍처

    원격 서비스의 핵심은 개체 참조를 사용하여 서버 개체와 클라이언트 간에 통신하는 기능입니다. 그러나 원격 아키텍처는 프로그래머에게 보다 기본적인 프로시저를 제공합니다. 클라이언트를 올바르게 구성하는 경우 new(또는 관리되는 프로그래밍 언어의 인스턴스 생성 함수)를 사용하여 원격 개체의 새 인스턴스를 만들기만 하면 됩니다. 클라이언트가 서버 개체에 대한 참조를 받은 다음 개체가 별도 컴퓨터에서 실행되지 않고 사용자 프로세스에 있는 것처럼 해당 메서드를 호출할 수 있습니다. 원격 시스템은 프록시 개체를 사용하여 서버 개체가 클라이언트 프로세스에 있는 것 같은 환경을 만듭니다. 프록시는 자신을 다른 개체로 표시하는 개체입니다. 클라이언트가 원격 형식의 인스턴스를 만들면 원격 인프라가 클라이언트에 원격 형식처럼 표시되는 프록시 개체를 만듭니다. 클라이언트가 해당 프록시에서 메서드를 호출하면 원격 시스템에서 호출을 받아 서버 프로세스로 라우팅하고, 서버 개체를 호출하고, 반환 값을 클라이언트 프록시로 반환합니다. 그런 다음 클라이언트 프록시가 그 결과를 클라이언트로 반환합니다.

    어떤 방식으로든 클라이언트와 서버 프로세스 간에 원격 호출이 전달되어야 합니다. 직접 원격 시스템을 빌드하는 경우 먼저 네트워크 프로그래밍과 다양한 프로토콜 및 serialization 형식 사양에 대해 알아볼 수 있습니다. .NET Remoting 시스템에서는 네트워크 연결을 열고 특정 프로토콜을 사용하여 바이트를 수신 응용 프로그램으로 보내는 데 필요한 내부 기술의 조합이 전송 채널로 표시됩니다.

    채널은 데이터 스트림을 사용하고, 특정 네트워크 프로토콜에 따라 패키지를 만들고, 패키지를 다른 컴퓨터로 보내는 형식입니다. 어떤 채널은 정보를 받을 수만 있고 어떤 채널은 정보를 보낼 수만 있지만, 기본 TcpChannel 및 HttpChannel 클래스와 같은 채널은 양방향으로 사용할 수 있습니다.

    서버 프로세스는 각 고유 형식에 대한 모든 사항을 알고 있지만 클라이언트는 다른 컴퓨터에 있을 수도 있는 다른 응용 프로그램 도메인의 개체에 대한 참조가 필요하다는 것만 알고 있습니다. URL은 서버 응용 프로그램 도메인의 외부에서 개체를 찾습니다. 외부에 고유 형식을 나타내는 URL은 원격 호출이 올바른 형식에 대해 수행되도록 하는 활성화 URL입니다. 자세한 내용은 활성화 URL을 참조하십시오.

    전체 원격 시스템 디자인

    한 컴퓨터에 응용 프로그램이 실행되고 있으며 다른 컴퓨터에 저장된 형식으로 노출된 기능을 사용하려고 한다고 가정합니다. 다음 그림은 일반적인 원격 프로세스를 보여 줍니다.

    원격 프로세스


    .NET Remoting 아키텍처

    관계의 양쪽을 올바르게 구성하면 클라이언트는 서버 클래스의 새 인스턴스를 만듭니다. 원격 시스템은 클라이언트를 나타내는 프록시 개체를 만들고 프록시에 대한 참조를 클라이언트 개체에 반환합니다. 클라이언트가 메서드를 호출하면 원격 인프라가 호출을 처리하고, 형식 정보를 확인하며, 채널을 통해 호출을 서버 프로세스로 보냅니다. 수신 대기 채널이 요청을 수집하여 서버 원격 시스템으로 전달하며, 여기서 요청된 개체를 찾거나 필요한 경우 새로 만들어 호출합니다. 그런 다음 프로세스가 반대로 수행되어 서버 원격 시스템이 응답을 모아서 메시지를 작성하며 서버 채널이 이 메시지를 클라이언트 채널로 보냅니다. 마지막으로 클라이언트 원격 시스템이 프록시를 통해 호출 결과를 클라이언트 개체에 반환합니다.

    이 작업에 필요한 실제 코드는 거의 없지만 관계를 디자인하고 구성할 때 몇 가지 사항에 주의해야 합니다. 코드가 올바른 경우에도 URL이나 포트 번호가 잘못되어 실패할 수 있습니다. 자세한 내용은 구성을 참조하십시오.

    원격 프로세스의 고수준 개요는 비교적 단순하지만 저수준 세부 사항은 매우 복잡할 수 있습니다. 원격 서비스의 주요 요소에 대한 자세한 내용은 다음 참고 항목 섹션에 나열된 것처럼 다른 항목에서 제공됩니다.












    반응형

    댓글

Designed by Tistory.