닷넷 리모팅
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
닷넷 리모팅은 .NET 애플리케이션에서 다른 애플리케이션 도메인, 프로세스 또는 네트워크로 연결된 컴퓨터에 있는 객체를 사용할 수 있게 해주는 기술이다. 클라이언트-서버 모델을 기반으로 작동하며, 채널 객체를 통해 통신하며, TCP, HTTP, 명명된 파이프 등의 전송 방식을 지원한다. 닷넷 리모팅은 객체 직렬화 및 마샬링을 관리하며, 형식 안전성을 제공하지만, 구성 및 관리의 복잡성, 다른 플랫폼과의 상호 운용성 제한 등의 한계로 인해, 마이크로소프트는 닷넷 프레임워크 3.0부터 WCF(Windows Communication Foundation)를 도입하여 대체하고 있다.
더 읽어볼만한 페이지
- 원격 프로시저 호출 - D-Bus
D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다. - 원격 프로시저 호출 - DCE/RPC
DCE/RPC는 분산 컴퓨팅 환경에서 원격 프로시저 호출을 가능하게 하는 프로토콜로, 오픈 소프트웨어 재단에서 개발되었으며, 다양한 운영체제와 환경에서 사용된다. - 마이크로소프트 API - 윈도우 API
윈도우 API는 마이크로소프트 윈도우 운영 체제에서 응용 프로그램이 시스템 기능에 접근하도록 돕는 인터페이스 집합이며, 다양한 버전으로 발전해 왔고, 현재 Win32가 널리 사용되며, 유연성을 제공하지만 복잡하다는 단점을 보완하기 위해 다양한 래퍼 라이브러리가 개발되었다. - 마이크로소프트 API - WinFS
WinFS는 마이크로소프트가 개발한 파일 시스템으로, 검색 기능 내장 및 메타데이터 관리를 통해 데이터 관리 효율성을 높이는 것을 목표로 했으나 별도 제품으로 출시되지는 못하고 핵심 기능들이 윈도우 비스타 이후 기술에 통합되었다.
닷넷 리모팅 | |
---|---|
.NET Remoting 정보 | |
종류 | API |
개발 | 마이크로소프트 |
개요 | |
용도 | 프로세스 간 통신 |
기반 기술 | COM |
특징 | |
통신 방식 | 다양한 프로토콜 지원 (TCP, HTTP 등) |
객체 수명 관리 | 클라이언트-서버 간 객체 생명 주기 관리 지원 |
보안 | 다양한 보안 메커니즘 지원 |
기술적 상세 | |
메시지 형식 | SOAP 기반 메시지 교환 |
직렬화 | 객체 직렬화/역직렬화 지원 |
관련 기술 | |
상위 기술 | .NET Framework |
대체 기술 | WCF |
2. 닷넷 리모팅의 기본 원리
닷넷 리모팅은 클라이언트-서버 모델을 기반으로 작동한다. 닷넷 리모팅은 애플리케이션이 다른 애플리케이션 도메인, 프로세스 또는 네트워크로 연결된 다른 컴퓨터에 있는 객체(리모팅 가능 객체)를 ''리모팅 경계''를 넘어 사용할 수 있게 해준다.[4]
== 구성 요소 ==
닷넷 리모팅 런타임은 서버 애플리케이션의 응용 프로그램 도메인에서 객체에 대한 요청의 리스너를 호스팅한다. 클라이언트 측에서는 Channel
객체를 통해 모든 요청이 프록시되는데, 여기에는 TCP 스트림, HTTP 스트림 및 이름 지정된 파이프가 포함된다.[4]
리모팅 가능 객체는 ''활성화 URL''로 식별되며, URL에 대한 연결을 통해 인스턴스화된다.[5] 객체에 대한 리스너는 서버가 리모팅 가능 객체에 연결하는 데 사용되는 채널을 등록할 때 리모팅 런타임에 의해 생성된다. 클라이언트 측에서 리모팅 인프라스트럭처는 리모팅 가능 객체의 유사 인스턴스 역할을 하는 proxy
를 만든다. 객체에 대해 수행된 모든 메서드 호출은 바이트 스트림으로 직렬화되어 채널을 통해 서버 측의 수신자 프록시 객체로 전송된다 ("마샬링").[5] 서버 측에서 프록시는 스트림을 읽고 클라이언트를 대신하여 리모팅 가능 객체를 호출한다. 결과는 직렬화되어 클라이언트로 전송되며, 프록시는 결과를 호출 애플리케이션에 전달한다.[5]
리모팅 가능 객체가 클라이언트 객체에 콜백을 수행해야 하는 경우 클라이언트 애플리케이션은 이를 리모팅 가능으로 표시하고 리모팅 런타임이 리스너를 호스팅하도록 해야 한다.[5] 채널은 여러 개의 서로 다른 채널 객체로 구성될 수 있으며, 서로 다른 이기종 전송이 가능하다. 형식 안전성은 CTS 및 .NET 리모팅 런타임에 의해 적용된다. 원격 메서드 호출은 본질적으로 동기적이며, 비동기 호출은 스레딩 라이브러리를 사용하여 구현할 수 있다. 사용자 지정 채널을 사용하거나 IIS에서 리모팅 가능 객체를 호스팅하여 클라이언트에 대한 인증 및 액세스 제어를 구현할 수 있다.[6]
== 동작 방식 ==
.NET 리모팅 런타임은 서버 애플리케이션의 애플리케이션 도메인에서 객체에 대한 요청의 리스너를 호스팅한다. 클라이언트 측에서는 리모팅 가능 객체에 대한 모든 요청이 실제 전송 모드를 캡슐화하는 Channel
객체를 통해 .NET 리모팅 런타임에 의해 프록시된다. 여기에는 TCP 스트림, HTTP 스트림 및 이름 지정된 파이프가 포함된다. 결과적으로 적절한 Channel
객체를 인스턴스화하면 .NET 리모팅 애플리케이션이 애플리케이션을 다시 컴파일하지 않고도 다양한 통신 프로토콜을 지원하도록 만들 수 있다. 런타임 자체는 클라이언트와 서버 응용 프로그램 도메인 간의 객체 직렬화 및 마샬링 작업을 관리한다.[4]
.NET 리모팅은 리모팅 가능 객체에 대한 참조를 클라이언트 애플리케이션에서 사용할 수 있게 하며, 클라이언트 애플리케이션은 이를 로컬 객체인 것처럼 인스턴스화하고 사용한다.[4] 그러나 실제 코드 실행은 서버 측에서 발생한다. 리모팅 가능 객체는 ''활성화 URL''로 식별되며, URL에 대한 연결을 통해 인스턴스화된다.[5] 객체에 대한 리스너는 서버가 리모팅 가능 객체에 연결하는 데 사용되는 채널을 등록할 때 리모팅 런타임에 의해 생성된다.
클라이언트 측에서 리모팅 인프라스트럭처는 리모팅 가능 객체의 유사 인스턴스 역할을 하는 proxy
를 만든다. 이 객체는 리모팅 가능 객체의 기능을 구현하지 않지만, 유사한 인터페이스를 제공한다. 따라서 리모팅 인프라스트럭처는 리모팅 가능 객체의 공개 인터페이스를 미리 알고 있어야 한다. 메서드의 ID 및 전달된 모든 매개변수를 포함하여 객체에 대해 수행된 모든 메서드 호출은 바이트 스트림으로 직렬화되어 통신 프로토콜에 종속적인 Channel
을 통해 채널의 전송 싱크에 기록하여 서버 측의 수신자 프록시 객체로 전송된다 ("마샬링").[5] 서버 측에서 프록시는 스트림을 싱크에서 읽고 클라이언트를 대신하여 리모팅 가능 객체를 호출한다. 결과는 직렬화되어 싱크를 통해 클라이언트로 전송되며, 여기에서 프록시는 결과를 읽어 호출 애플리케이션에 전달한다.[5]
리모팅 가능 객체가 일부 서비스를 위해 클라이언트 객체에 콜백을 수행해야 하는 경우 클라이언트 애플리케이션은 이를 리모팅 가능으로 표시하고 리모팅 런타임이 리스너를 호스팅하도록 해야 한다.[5] 서버는 다른 채널 또는 기본 연결이 양방향 통신을 지원하는 경우 기존 채널을 통해 연결할 수 있다.[5] 채널은 여러 개의 서로 다른 채널 객체로 구성될 수 있으며, 서로 다른 이기종 전송이 가능하다. 따라서 리모팅은 인터넷을 포함한 이기종 네트워크의 상호 연결을 통해 분리된 시스템에서도 작동할 수 있다.[6]
2. 1. 구성 요소
닷넷 리모팅은 응용 프로그램이 다른 응용 프로그램 도메인, 프로세스 또는 네트워크로 연결된 다른 컴퓨터에 있는 객체(''리모팅 가능 객체'')를 ''리모팅 경계''를 넘어 사용할 수 있게 해준다.[4] 닷넷 리모팅 런타임은 서버 애플리케이션의 응용 프로그램 도메인에서 객체에 대한 요청의 리스너를 호스팅한다. 클라이언트 측에서는Channel
객체를 통해 모든 요청이 프록시되는데, 여기에는 TCP 스트림, HTTP 스트림 및 이름 지정된 파이프가 포함된다.[4]리모팅 가능 객체는 ''활성화 URL''로 식별되며, URL에 대한 연결을 통해 인스턴스화된다.[5] 객체에 대한 리스너는 서버가 리모팅 가능 객체에 연결하는 데 사용되는 채널을 등록할 때 리모팅 런타임에 의해 생성된다. 클라이언트 측에서 리모팅 인프라스트럭처는 리모팅 가능 객체의 유사 인스턴스 역할을 하는
proxy
를 만든다. 객체에 대해 수행된 모든 메서드 호출은 바이트 스트림으로 직렬화되어 채널을 통해 서버 측의 수신자 프록시 객체로 전송된다 ("마샬링").[5] 서버 측에서 프록시는 스트림을 읽고 클라이언트를 대신하여 리모팅 가능 객체를 호출한다. 결과는 직렬화되어 클라이언트로 전송되며, 프록시는 결과를 호출 애플리케이션에 전달한다.[5]리모팅 가능 객체가 클라이언트 객체에 콜백을 수행해야 하는 경우 클라이언트 애플리케이션은 이를 리모팅 가능으로 표시하고 리모팅 런타임이 리스너를 호스팅하도록 해야 한다.[5] 채널은 여러 개의 서로 다른 채널 객체로 구성될 수 있으며, 서로 다른 이기종 전송이 가능하다. 형식 안전성은 CTS 및 .NET 리모팅 런타임에 의해 적용된다. 원격 메서드 호출은 본질적으로 동기적이며, 비동기 호출은 스레딩 라이브러리를 사용하여 구현할 수 있다. 사용자 지정 채널을 사용하거나 IIS에서 리모팅 가능 객체를 호스팅하여 클라이언트에 대한 인증 및 액세스 제어를 구현할 수 있다.[6]
2. 2. 동작 방식
닷넷 리모팅을 사용하면 애플리케이션이 다른 객체(리모팅 가능 객체)를 ''리모팅 경계''를 넘어 사용할 수 있다. 여기에는 서로 다른 애플리케이션 도메인, 프로세스 또는 네트워크로 연결된 다른 컴퓨터도 포함된다.[4] .NET 리모팅 런타임은 서버 애플리케이션의 애플리케이션 도메인에서 객체에 대한 요청의 리스너를 호스팅한다. 클라이언트 측에서는 리모팅 가능 객체에 대한 모든 요청이 실제 전송 모드를 캡슐화하는Channel
객체를 통해 .NET 리모팅 런타임에 의해 프록시된다. 여기에는 TCP 스트림, HTTP 스트림 및 이름 지정된 파이프가 포함된다. 결과적으로 적절한 Channel
객체를 인스턴스화하면 .NET 리모팅 애플리케이션이 애플리케이션을 다시 컴파일하지 않고도 다양한 통신 프로토콜을 지원하도록 만들 수 있다. 런타임 자체는 클라이언트와 서버 응용 프로그램 도메인 간의 객체 직렬화 및 마샬링 작업을 관리한다.[4].NET 리모팅은 리모팅 가능 객체에 대한 참조를 클라이언트 애플리케이션에서 사용할 수 있게 하며, 클라이언트 애플리케이션은 이를 로컬 객체인 것처럼 인스턴스화하고 사용한다.[4] 그러나 실제 코드 실행은 서버 측에서 발생한다. 리모팅 가능 객체는 ''활성화 URL''로 식별되며, URL에 대한 연결을 통해 인스턴스화된다.[5] 객체에 대한 리스너는 서버가 리모팅 가능 객체에 연결하는 데 사용되는 채널을 등록할 때 리모팅 런타임에 의해 생성된다.
클라이언트 측에서 리모팅 인프라스트럭처는 리모팅 가능 객체의 유사 인스턴스 역할을 하는
proxy
를 만든다. 이 객체는 리모팅 가능 객체의 기능을 구현하지 않지만, 유사한 인터페이스를 제공한다. 따라서 리모팅 인프라스트럭처는 리모팅 가능 객체의 공개 인터페이스를 미리 알고 있어야 한다. 메서드의 ID 및 전달된 모든 매개변수를 포함하여 객체에 대해 수행된 모든 메서드 호출은 바이트 스트림으로 직렬화되어 통신 프로토콜에 종속적인 Channel
을 통해 채널의 전송 싱크에 기록하여 서버 측의 수신자 프록시 객체로 전송된다 ("마샬링").[5] 서버 측에서 프록시는 스트림을 싱크에서 읽고 클라이언트를 대신하여 리모팅 가능 객체를 호출한다. 결과는 직렬화되어 싱크를 통해 클라이언트로 전송되며, 여기에서 프록시는 결과를 읽어 호출 애플리케이션에 전달한다.[5]리모팅 가능 객체가 일부 서비스를 위해 클라이언트 객체에 콜백을 수행해야 하는 경우 클라이언트 애플리케이션은 이를 리모팅 가능으로 표시하고 리모팅 런타임이 리스너를 호스팅하도록 해야 한다.[5] 서버는 다른 채널 또는 기본 연결이 양방향 통신을 지원하는 경우 기존 채널을 통해 연결할 수 있다.[5] 채널은 여러 개의 서로 다른 채널 객체로 구성될 수 있으며, 서로 다른 이기종 전송이 가능하다. 따라서 리모팅은 인터넷을 포함한 이기종 네트워크의 상호 연결을 통해 분리된 시스템에서도 작동할 수 있다.[5] 형식 안전성은 CTS 및 .NET 리모팅 런타임에 의해 적용된다. 원격 메서드 호출은 본질적으로 동기적이다. 비동기 호출은 스레딩 라이브러리를 사용하여 구현할 수 있다. 사용자 지정 채널을 사용하거나 IIS에서 리모팅 가능 객체를 호스팅한 다음 IIS 인증 시스템을 사용하여 클라이언트에 대한 인증 및 액세스 제어를 구현할 수 있다.[6]
3. 채널 (Channels)
닷넷 리모팅은 응용 프로그램이 원격 경계를 넘어 사용할 수 있는 객체(원격 객체)를 만들 수 있도록 한다. 이러한 원격 경계에는 다른 응용 프로그램 도메인, 프로세스, 네트워크로 연결된 다른 컴퓨터 등이 포함된다.[4] 닷넷 리모팅은 다양한 통신 프로토콜을 지원하기 위해 ''채널''이라는 추상화된 통신 메커니즘을 사용한다.
닷넷 리모팅 런타임은 서버 애플리케이션의 응용 프로그램 도메인에 있는 객체에 대한 요청을 처리하는 리스너를 호스팅한다. 클라이언트 측에서는 원격 객체에 대한 모든 요청이 채널 객체를 통해 닷넷 리모팅 런타임에 의해 프록시된다. 채널 객체는 실제 전송 모드를 캡슐화하며, TCP 스트림, HTTP 스트림, 이름 지정된 파이프 등을 포함한다.[4]
결과적으로, 적절한 채널 객체를 인스턴스화함으로써 응용 프로그램을 다시 컴파일하지 않고도 닷넷 리모팅 응용 프로그램이 다른 통신 프로토콜을 지원하도록 만들 수 있다. 런타임 자체는 클라이언트 및 서버 앱도메인에서 객체의 직렬화 및 마샬링 작업을 관리한다.[4] 채널은 서로 다른 이기종 전송을 사용하는 여러 개의 서로 다른 Channel 객체로 구성될 수 있다. 따라서 원격은 인터넷을 포함한 이기종 네트워크의 상호 연결로 분리 된 시스템에서도 작동할 수 있다.[5]
3. 1. 채널의 종류
닷넷 리모팅은 기본적으로 다른 응용 프로그램 도메인, 프로세스 또는 네트워크로 연결된 다른 컴퓨터 간의 통신을 지원한다.[4] 이러한 통신을 위해 닷넷 리모팅 런타임은 서버 애플리케이션의 응용 프로그램 도메인에서 객체에 대한 요청을 받는 리스너를 호스팅하고, 클라이언트 측에서는 `Channel` 객체를 통해 모든 요청을 프록시한다.[4]`Channel` 객체는 실제 전송 모드를 캡슐화하며, 여기에는 TCP 스트림, HTTP 스트림 및 이름 지정된 파이프가 포함된다.[4] 적절한 `Channel` 객체를 인스턴스화하면 닷넷 리모팅 애플리케이션이 애플리케이션을 다시 컴파일하지 않고도 다양한 통신 프로토콜을 지원하도록 만들 수 있다.[4] 런타임 자체는 클라이언트와 서버 응용 프로그램 도메인 간의 객체 직렬화 및 마샬링 작업을 관리한다.[4]
3. 2. 채널 구성
.NET 리모팅 런타임은 서버 애플리케이션의 응용 프로그램 도메인에서 객체에 대한 요청의 리스너를 호스팅한다. 클라이언트 측에서는 리모팅 가능 객체에 대한 모든 요청이 실제 전송 모드를 캡슐화하는 `Channel` 객체를 통해 .NET 리모팅 런타임에 의해 프록시된다. 여기에는 TCP 스트림, HTTP 스트림 및 이름 지정된 파이프가 포함된다. 결과적으로 적절한 `Channel` 객체를 인스턴스화하면 .NET 리모팅 애플리케이션이 애플리케이션을 다시 컴파일하지 않고도 다양한 통신 프로토콜을 지원하도록 만들 수 있다. 런타임 자체는 클라이언트와 서버 응용 프로그램 도메인 간의 객체 직렬화 및 마샬링 작업을 관리한다.[4]채널은 여러 개의 서로 다른 채널 객체로 구성될 수 있으며, 서로 다른 이기종 전송이 가능하다. 따라서 리모팅은 인터넷을 포함한 이기종 네트워크의 상호 연결을 통해 분리된 시스템에서도 작동할 수 있다.[5] 필요에 따라 사용자 정의 채널을 만들어 사용할 수도 있다.
4. 보안
.NET 리모팅은 보안 기능을 제공하여 원격 통신을 안전하게 보호한다.
== 인증 및 권한 부여 ==
.NET 리모팅은 사용자 지정 채널을 사용하거나 IIS에서 원격 객체를 호스팅하여 클라이언트를 인증하고 접근 제어를 구현할 수 있다.[6] IIS 인증 시스템을 사용하면 보안을 강화할 수 있다.[6]
.NET 리모팅은 리모팅 가능 객체에 대한 참조를 클라이언트 애플리케이션에서 사용할 수 있게 하며, 클라이언트 애플리케이션은 이를 로컬 객체인 것처럼 인스턴스화하고 사용한다.[4] 그러나 실제 코드 실행은 서버 측에서 발생한다. 리모팅 가능 객체는 ''활성화 URL''로 식별되며, URL에 대한 연결을 통해 인스턴스화된다.[5]
== 형식 안전성 ==
CTS 및 닷넷 리모팅 런타임에 의해 형식 안전성이 보장된다.[4]
4. 1. 인증 및 권한 부여
.NET 리모팅은 사용자 지정 채널을 사용하거나 IIS에서 원격 객체를 호스팅하여 클라이언트를 인증하고 접근 제어를 구현할 수 있다.[6] IIS 인증 시스템을 사용하면 보안을 강화할 수 있다.[6].NET 리모팅은 리모팅 가능 객체에 대한 참조를 클라이언트 애플리케이션에서 사용할 수 있게 하며, 클라이언트 애플리케이션은 이를 로컬 객체인 것처럼 인스턴스화하고 사용한다.[4] 그러나 실제 코드 실행은 서버 측에서 발생한다. 리모팅 가능 객체는 ''활성화 URL''로 식별되며, URL에 대한 연결을 통해 인스턴스화된다.[5]
4. 2. 형식 안전성
형식 안전성은 CTS 및 닷넷 리모팅 런타임에 의해 보장된다.[4]5. 닷넷 리모팅의 한계 및 WCF로의 전환
닷넷 리모팅은 구성 및 관리가 복잡할 수 있으며, 특히 보안 및 예외 처리와 관련된 설정이 까다로울 수 있다. .NET 리모팅은 애플리케이션이 다른 객체(''리모팅 가능 객체'')를 ''리모팅 경계''를 넘어 사용할 수 있게 한다.[4] 여기에는 서로 다른 응용 프로그램 도메인, 프로세스 또는 네트워크로 연결된 다른 컴퓨터도 포함된다.[4]
.NET 리모팅 런타임은 서버 애플리케이션의 응용 프로그램 도메인에서 객체에 대한 요청의 리스너를 호스팅한다. 클라이언트 측에서는 리모팅 가능 객체에 대한 모든 요청이 실제 전송 모드를 캡슐화하는 `Channel` 객체를 통해 .NET 리모팅 런타임에 의해 프록시된다. 여기에는 TCP 스트림, HTTP 스트림 및 이름 지정된 파이프가 포함된다.[4] 결과적으로 적절한 `Channel` 객체를 인스턴스화하면 .NET 리모팅 애플리케이션이 애플리케이션을 다시 컴파일하지 않고도 다양한 통신 프로토콜을 지원하도록 만들 수 있다. 런타임 자체는 클라이언트와 서버 응용 프로그램 도메인 간의 객체 직렬화 및 마샬링 작업을 관리한다.[4]
.NET 리모팅은 리모팅 가능 객체에 대한 참조를 클라이언트 애플리케이션에서 사용할 수 있게 하며, 클라이언트 애플리케이션은 이를 로컬 객체인 것처럼 인스턴스화하고 사용한다.[4] 그러나 실제 코드 실행은 서버 측에서 발생한다. 리모팅 가능 객체는 ''활성화 URL''로 식별되며, URL에 대한 연결을 통해 인스턴스화된다.[5]
메서드의 ID 및 전달된 모든 매개변수를 포함하여 객체에 대해 수행된 모든 메서드 호출은 바이트 스트림으로 직렬화되어 통신 프로토콜에 종속적인 `Channel`을 통해 채널의 전송 싱크에 기록하여 서버 측의 수신자 프록시 객체로 전송된다 ("마샬링").[5] 서버 측에서 프록시는 스트림을 싱크에서 읽고 클라이언트를 대신하여 리모팅 가능 객체를 호출한다. 결과는 직렬화되어 싱크를 통해 클라이언트로 전송되며, 여기에서 프록시는 결과를 읽어 호출 애플리케이션에 전달한다.[5]
리모팅 가능 객체가 일부 서비스를 위해 클라이언트 객체에 콜백을 수행해야 하는 경우 클라이언트 애플리케이션은 이를 리모팅 가능으로 표시하고 리모팅 런타임이 리스너를 호스팅하도록 해야 한다.[5] 서버는 다른 채널 또는 기본 연결이 양방향 통신을 지원하는 경우 기존 채널을 통해 연결할 수 있다.[5] 채널은 여러 개의 서로 다른 채널 객체로 구성될 수 있으며, 서로 다른 이기종 전송이 가능하다. 따라서 리모팅은 인터넷을 포함한 이기종 네트워크의 상호 연결을 통해 분리된 시스템에서도 작동할 수 있다.[5] 형식 안전성은 CTS 및 .NET 리모팅 런타임에 의해 적용된다. 원격 메서드 호출은 본질적으로 동기적이다. 비동기 호출은 스레딩 라이브러리를 사용하여 구현할 수 있다. 사용자 지정 채널을 사용하거나 IIS에서 리모팅 가능 객체를 호스팅한 다음 IIS 인증 시스템을 사용하여 클라이언트에 대한 인증 및 액세스 제어를 구현할 수 있다.[6]
=== 상호 운용성 문제 ===
닷넷 리모팅은 닷넷 프레임워크 기반의 응용 프로그램 간 통신에 최적화되어 있지만, 다른 플랫폼이나 기술과의 상호 운용성은 제한적이다.[4][5][6] 닷넷 리모팅은 서로 다른 응용 프로그램 도메인, 프로세스, 네트워크로 연결된 컴퓨터 간에 객체를 사용할 수 있게 한다.[4] 클라이언트 측에서는 `Channel` 객체를 통해 통신하며, TCP, HTTP, 이름 지정된 파이프 등을 지원한다.[4] 런타임은 객체 직렬화 및 마샬링을 관리한다.[4]
닷넷 리모팅은 클라이언트 애플리케이션에서 리모팅 가능 객체를 로컬 객체처럼 사용하게 하지만, 실제 코드 실행은 서버 측에서 발생한다.[4] 리모팅 가능 객체는 ''활성화 URL''로 식별되며, 클라이언트 측에서는 `proxy`를 통해 메서드 호출이 서버 측으로 마샬링된다.[5] 서버 측 프록시는 결과를 다시 클라이언트로 전송한다.[5] 클라이언트 객체에 대한 콜백이 필요한 경우, 클라이언트 애플리케이션도 리모팅 가능으로 표시해야 한다.[5] 닷넷 리모팅은 이기종 네트워크 환경에서도 작동할 수 있으며, 형식 안전성은 CTS 및 .NET 리모팅 런타임에 의해 적용된다.[5]
=== WCF로의 전환 ===
닷넷 리모팅은 응용 프로그램이 다른 응용 프로그램 도메인, 프로세스 또는 네트워크로 연결된 다른 컴퓨터에 있는 객체를 사용할 수 있도록 하는 기술이다.[4] 그러나 여러 한계점으로 인해 마이크로소프트는 닷넷 프레임워크 3.0부터 WCF (Windows Communication Foundation)를 도입하여 닷넷 리모팅을 대체하고 있다. WCF는 더 광범위한 시나리오를 지원하고 구성이 더 간단하며, 웹 서비스 표준을 준수하여 상호 운용성이 뛰어나다. 닷넷 리모팅은 TCP, HTTP 스트림, 이름 지정된 파이프등을 지원한다[4]
5. 1. 복잡성
닷넷 리모팅은 구성 및 관리가 복잡할 수 있으며, 특히 보안 및 예외 처리와 관련된 설정이 까다로울 수 있다. .NET 리모팅은 애플리케이션이 다른 객체(''리모팅 가능 객체'')를 ''리모팅 경계''를 넘어 사용할 수 있게 한다.[4] 여기에는 서로 다른 응용 프로그램 도메인, 프로세스 또는 네트워크로 연결된 다른 컴퓨터도 포함된다.[4].NET 리모팅 런타임은 서버 애플리케이션의 응용 프로그램 도메인에서 객체에 대한 요청의 리스너를 호스팅한다. 클라이언트 측에서는 리모팅 가능 객체에 대한 모든 요청이 실제 전송 모드를 캡슐화하는 `Channel` 객체를 통해 .NET 리모팅 런타임에 의해 프록시된다. 여기에는 TCP 스트림, HTTP 스트림 및 이름 지정된 파이프가 포함된다.[4] 결과적으로 적절한 `Channel` 객체를 인스턴스화하면 .NET 리모팅 애플리케이션이 애플리케이션을 다시 컴파일하지 않고도 다양한 통신 프로토콜을 지원하도록 만들 수 있다. 런타임 자체는 클라이언트와 서버 응용 프로그램 도메인 간의 객체 직렬화 및 마샬링 작업을 관리한다.[4]
.NET 리모팅은 리모팅 가능 객체에 대한 참조를 클라이언트 애플리케이션에서 사용할 수 있게 하며, 클라이언트 애플리케이션은 이를 로컬 객체인 것처럼 인스턴스화하고 사용한다.[4] 그러나 실제 코드 실행은 서버 측에서 발생한다. 리모팅 가능 객체는 ''활성화 URL''로 식별되며, URL에 대한 연결을 통해 인스턴스화된다.[5]
메서드의 ID 및 전달된 모든 매개변수를 포함하여 객체에 대해 수행된 모든 메서드 호출은 바이트 스트림으로 직렬화되어 통신 프로토콜에 종속적인 `Channel`을 통해 채널의 전송 싱크에 기록하여 서버 측의 수신자 프록시 객체로 전송된다 ("마샬링").[5] 서버 측에서 프록시는 스트림을 싱크에서 읽고 클라이언트를 대신하여 리모팅 가능 객체를 호출한다. 결과는 직렬화되어 싱크를 통해 클라이언트로 전송되며, 여기에서 프록시는 결과를 읽어 호출 애플리케이션에 전달한다.[5]
리모팅 가능 객체가 일부 서비스를 위해 클라이언트 객체에 콜백을 수행해야 하는 경우 클라이언트 애플리케이션은 이를 리모팅 가능으로 표시하고 리모팅 런타임이 리스너를 호스팅하도록 해야 한다.[5] 서버는 다른 채널 또는 기본 연결이 양방향 통신을 지원하는 경우 기존 채널을 통해 연결할 수 있다.[5] 채널은 여러 개의 서로 다른 채널 객체로 구성될 수 있으며, 서로 다른 이기종 전송이 가능하다. 따라서 리모팅은 인터넷을 포함한 이기종 네트워크의 상호 연결을 통해 분리된 시스템에서도 작동할 수 있다.[5] 형식 안전성은 CTS 및 .NET 리모팅 런타임에 의해 적용된다. 원격 메서드 호출은 본질적으로 동기적이다. 비동기 호출은 스레딩 라이브러리를 사용하여 구현할 수 있다. 사용자 지정 채널을 사용하거나 IIS에서 리모팅 가능 객체를 호스팅한 다음 IIS 인증 시스템을 사용하여 클라이언트에 대한 인증 및 액세스 제어를 구현할 수 있다.[6]
5. 2. 상호 운용성 문제
닷넷 리모팅은 닷넷 프레임워크 기반의 응용 프로그램 간 통신에 최적화되어 있지만, 다른 플랫폼이나 기술과의 상호 운용성은 제한적이다.[4][5][6] 닷넷 리모팅은 서로 다른 응용 프로그램 도메인, 프로세스, 네트워크로 연결된 컴퓨터 간에 객체를 사용할 수 있게 한다.[4] 클라이언트 측에서는 `Channel` 객체를 통해 통신하며, TCP, HTTP, 이름 지정된 파이프 등을 지원한다.[4] 런타임은 객체 직렬화 및 마샬링을 관리한다.[4]닷넷 리모팅은 클라이언트 애플리케이션에서 리모팅 가능 객체를 로컬 객체처럼 사용하게 하지만, 실제 코드 실행은 서버 측에서 발생한다.[4] 리모팅 가능 객체는 ''활성화 URL''로 식별되며, 클라이언트 측에서는 `proxy`를 통해 메서드 호출이 서버 측으로 마샬링된다.[5] 서버 측 프록시는 결과를 다시 클라이언트로 전송한다.[5] 클라이언트 객체에 대한 콜백이 필요한 경우, 클라이언트 애플리케이션도 리모팅 가능으로 표시해야 한다.[5] 닷넷 리모팅은 이기종 네트워크 환경에서도 작동할 수 있으며, 형식 안전성은 CTS 및 .NET 리모팅 런타임에 의해 적용된다.[5]
5. 3. WCF로의 전환
닷넷 리모팅은 응용 프로그램이 다른 응용 프로그램 도메인, 프로세스 또는 네트워크로 연결된 다른 컴퓨터에 있는 객체를 사용할 수 있도록 하는 기술이다.[4] 그러나 여러 한계점으로 인해 마이크로소프트는 닷넷 프레임워크 3.0부터 WCF (Windows Communication Foundation)를 도입하여 닷넷 리모팅을 대체하고 있다. WCF는 더 광범위한 시나리오를 지원하고 구성이 더 간단하며, 웹 서비스 표준을 준수하여 상호 운용성이 뛰어나다. 닷넷 리모팅은 TCP, HTTP 스트림, 이름 지정된 파이프등을 지원한다[4]참조
[1]
웹사이트
Component Object Model and Related Capabilities
http://www.sei.cmu.e[...]
Carnegie-Mellon Software Engineering Institute
[2]
서적
Microsoft .NET Remoting
https://archive.org/[...]
Microsoft Press
[3]
서적
Advanced .NET Remoting
https://archive.org/[...]
Apress
[4]
웹사이트
.NET Remoting Overview
http://msdn2.microso[...]
2007-10-23
[5]
웹사이트
.NET Remoting Architecture
http://msdn2.microso[...]
2007-10-23
[6]
웹사이트
Security
http://msdn2.microso[...]
MSDN
2006-10-12
[7]
웹사이트
Component Object Model and Related Capabilities
http://www.sei.cmu.e[...]
Carnegie-Mellon Software Engineering Institute
2008-03-07
[8]
서적
Microsoft .NET Remoting
Microsoft Press
[9]
서적
Advanced .NET Remoting
Apress
[10]
웹사이트
Microsoft .NET Remoting Framework の概要
https://msdn.microso[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com