스텁(분산 컴퓨팅)

Stub (distributed computing)

분산 컴퓨팅의 스텁(stub)은 원격 프로시저 호출(RPC) 중에 클라이언트와 서버 간에 전달되는 파라미터를 변환하는 코드 조각이다.

RPC의 주요 아이디어는 로컬 컴퓨터(클라이언트)가 다른 컴퓨터(서버)의 절차를 원격으로 호출할 수 있도록 하는 것이다.클라이언트와 서버는 서로 다른 주소 공간을 사용하므로 함수(절차) 호출에 사용되는 매개변수를 변환해야 하며, 그렇지 않으면 한 컴퓨터의 메모리에 있는 매개변수의 포인터가 다른 컴퓨터의 데이터를 가리키기 때문에 해당 매개변수의 값을 사용할 수 없다.클라이언트와 서버는 단순한 매개변수(예: 정수의 빅 엔디안리틀 엔디안)에도 서로 다른 데이터 표현을 사용할 수 있다.스텁은 매개 변수의 변환을 수행하므로 원격 프로시저 호출은 원격 시스템의 로컬 함수 호출처럼 보인다.

스터브 라이브러리는 클라이언트와 서버 양쪽에 모두 설치되어야 한다.클라이언트 스텁(프록시라고도 함)은 함수 호출에 사용되는 매개변수의 변환(마샬링)과 함수 실행 후 서버에서 전달된 결과의 변환을 담당한다.서버측 스텁인 서버 스켈레톤은 클라이언트가 전달한 매개변수의 변환과 함수의 실행 후 결과의 변환을 담당한다.

스텁은 다음 두 가지 방법 중 하나로 생성될 수 있다.

  • 수동:이 방법에서, RPC 시행자는 사용자 자신의 스텁을 구성할 수 있는 일련의 번역 기능을 제공한다.이 방법은 구현이 간단하며 매우 복잡한 파라미터 유형을 처리할 수 있다.
  • 자동:이것은 스터브 생성에 더 흔히 사용되는 방법이다.클라이언트와 서버 간의 인터페이스를 정의하기 위해 인터페이스 설명 언어(IDL)를 사용한다.예를 들어, 인터페이스 정의는 각 인수가 입력, 출력 또는 둘 다인지 여부를 나타내는 정보를 가지고 있다. 오직 입력 인수만 클라이언트에서 서버로 복사하고 출력 요소만 서버에서 클라이언트로 복사하면 된다.

인터페이스에서 절차를 실행하는 서버 프로그램은 인터페이스를 내보내고, 인터페이스에서 절차를 호출하는 클라이언트 프로그램은 인터페이스를 가져온다고 한다.분산 응용프로그램을 작성할 때 프로그래머는 먼저 IDL을 이용하여 인터페이스 정의를 작성하고, 그 후 프로그래머는 인터페이스를 가져오는 클라이언트 프로그램과 인터페이스를 내보내는 서버 프로그램을 작성할 수 있다.인터페이스 정의는 기존 컴파일러를 변경하지 않고 클라이언트 및 서버 프로그램과 결합할 수 있는 구성요소를 생성하기 위해 IDL 컴파일러를 사용하여 처리한다.특히, 인터페이스의 각 절차에 대한 인터페이스에서 컴파일러는 각 스텁 절차의 적절한 마시기 및 마샬링하지 않는 작업과 인터페이스 정의의 데이터 유형을 지원하는 헤더 파일을 생성한다.헤더 파일은 클라이언트 프로그램과 서버 프로그램 모두의 원본 파일에 포함되고, 클라이언트 스텁 절차는 컴파일되어 클라이언트 프로그램과 연결되며, 서버 스텁 절차는 컴파일되어 서버 프로그램과 연결된다.IDL 컴파일러는 다른 언어와 함께 사용하기 위한 인터페이스 정의를 처리하도록 설계될 수 있으며, 다른 언어로 작성된 클라이언트와 서버가 원격 프로시저 호출을 사용하여 통신할 수 있다.의미론적 투명성의 목표를 달성하기 위해 설계자들은 프로그램 인터페이스에서 기본 RPC 시스템에 이르는 실제 RPC 구현을 숨기는 스텁 개념을 사용하여 RPC를 LPC처럼 보이게 했다.