ORB (Object Request Broker)

1.

CORBA에서 ORB는 분산 객체 또는 컴포넌트에서 제공할 서비스에 대해, 클라이언트가 요구하는 시점부터 그 요구가 완료될 때까지 마치 "거래 중개인"처럼 동작하는 프로그램을 말한다. 네트웍 상의 ORB 지원이라는 것은, 서버가 분산 네트웍의 어디에 위치해 있는지 또는 정확히 어떤 서버의 인터페이스가 그런 일을 해주는지 전혀 알지 못하더라도, 클라이언트 프로그램이 원하는 서비스를 요구할 수 있다는 것을 의미한다. 이러한 것들을 찾고, 실행되면서 서로 인터페이스 정보를 교환하는 것은 컴포넌트들의 몫이다.

CORBA의 ORB는 RPC, 메시지 기반의 미들웨어, stored procedure, peer to peer 서비스 등과 같은 이전의 미들웨어보다 개념적으로 세련되고 기능이 강화된 전략적 미들웨어로 생각할 수 있다.

ORB는 요구된 컴포넌트를 찾아 통신하기 위해 CORBA 인터페이스 리포지터리(interface repository)를 사용한다. 컴포넌트를 생성할 때 프로그래머는 CORBA의 IDL을 이용해 public interface를 선언하거나, 프로그래밍 언어의 컴파일러를 이용해 구문을 적합한 IDL 문장으로 변환한다. 이런 구문들은 인터페이스 리포지터리에 메타 데이터 또는 컴포넌트의 인터페이스 동작 방식에 대한 정의로 저장된다.

클라이언트 요구를 중계할 때 ORB는 다음과 같은 서비스를 제공한다.

  • Life cycle service : 컴포넌트를 어떻게 만들고, 복사하고, 이동하고, 지우는가 등에 관한 서비스
  • Persistence service : 자료를 객체지향형 데이터베이스, 관계형 데이터베이스 그리고 보통의 텍스트 파일에 저장하는 능력을 제공
  • Naming service : 컴포넌트가 다른 컴포넌트를 이름으로 찾고 기존 명명규칙(naming systems)이나 DCE, X.500, Sun의 NIS 같은 디렉토리 지원을 가능케 함
  • Event service : 컴포넌트가 통보 받을 특정 이벤트를 지정하도록 함
  • Concurrency control service : ORB로 하여금 트랜잭션이나 스레드의 처리가 끝날때까지 데이터를 잠그는 것(lock)을 관리하도록 함
  • Transaction service : 트랜잭션이 완료되었을때 데이터베이스 갱신을 확정하거나, 그렇지 못한 경우 트랜잭션이 발생하기 전 상태로 복귀되는 것을 보증
  • Relationship service : 이전에 "만난" 적이 없는 컴포넌트간의 동적 관계를 설정하고 이 관계를 지속
  • Externalization service : "스트림"에서 컴포넌트의 입출 자료를 가져오는 방법을 제공
  • Query service : 컴포넌트가 데이터베이스를 조회할 수 있도록 함. 이 서비스는 SQL3 규격과 ODMG(Object Database Management Group)의 OQL(Object Query Language)에 기반을 둠
  • Licensing service : 사용 대가를 치를 목적으로 컴포넌트의 사용이 측정되도록 함. 요금 부과는 세션, 노드, 활성체 생성, 사이트 단위로 가능
  • Properties service : 컴포넌트가 다른 컴포넌트에 사용될 수 있도록 자기 묘사를 담도록 함

부가적으로, ORB는 보안성과 시간 서비스를 제공할 수 있다. 교역, 수집, 변화 관리도 계획되고 있다. ORB에서 발생한 요청과 응답은 IIOP나 다른 전송 계층 프로토콜을 통해 전달된다.

 

2.

ORB는 객체들 간의 클라이언트/서버 관계를 맺어주는 미들웨어이다. ORB를 사용하면, 클라이언트는 서버객체에 있는 메쏘드를 그것이 같은 컴퓨터에 있든, 또는 네트웍 상에 있든 상관없이 투명하게 호출할 수 있다. ORB는 호출을 가로채어 요구를 처리할 객체를 찾고, 매개변수를 전달하고, 메쏘드를 호출하고, 또 처리결과를 되돌려주는 일 등을 담당한다. 클라이언트는 객체 인터페이스를 제외하고는, 객체의 위치나 그 객체를 개발할 때 사용된 프로그램 언어나 운영체계, 그 밖의 시스템과 관련된 그 어느 것도 알 필요가 없다. 이렇게 함으로써, ORB는 이질적인 분산 환경에서, 서로 다른 컴퓨터 내에 있는 응용프로그램 간의 상호 운용성과 다중 객체시스템들에 대한 상호연결성을 제공한다.

보통 대부분의 클라이언트 서버 응용프로그램들에서, 개발자는 자신의 고유한 설계를 사용하고, 또 장치들간에 사용될 프로토콜을 정의하기 위한 공인된 표준을 사용하게되는데, 프로토콜 정의는 개발언어, 네트웍 전달계층 등 수많은 요인들에 의존적이다. 그러나 ORB는 이러한 과정을 단순화하고, 언어에 독립적인 IDL이라는 하나의 구현에 의한 응용프로그램 인터페이스를 통해 프로토콜이 정의된다.

ORB는 유연성을 제공한다. ORB는 프로그래머가 가장 적합한 운영체계와 실행환경 그리고 심지어는 개발중의 각 시스템 컴포넌트에 사용되는 프로그래밍 언어까지 마음대로 선택할 수 있게 한다. 가장 중요한 것은 ORB가 기존의 컴포넌트들의 통합을 허용한다는 것이다. ORB에 기초한 솔루션에서, 개발자는 새로운 객체를 만드는데 사용된 것과 같은 IDL을 써서 기존의 컴포넌트를 단순히 모델하고난 다음, 표준화된 버스와 기존의 인터페이스간에 번역을 해주는 '래퍼' 코드를 작성하면 그뿐이다.


이 정보는 1999년 6월 14일에 수정되었으며, 심재범님께서 도움을 주셨습니다.
영어판(whatis.com)