IIOP

Development/Common 2012. 1. 16. 18:54

IIOP (Internet Inter-ORB Protocol)

IIOP는 일종의 객체 지향 프로토콜로, 다른 프로그래밍 언어로 쓰여진 분산 프로그램이 인터넷을 통해 서로 통신할 수 있도록 한다. IIOP는 전략적 산업 표준인 CORBA의 핵심 부분이다. CORBA의 IIOP 그리고 관련 프로토콜을 이용하면, 한 회사가 다른 회사의 프로그램에 대해 그들이 어디 있든지 상관없이, 그 서비스의 내용과 이름만을 알고서도 서로 통신할 수 있는 프로그램을 작성할 수 있다. CORBA와 IIOP는 마이크로소프트의 소위 DCOM과 비슷한 전략으로 경쟁하고 있다 (마이크로소프트와 CORBA의 스폰서인 OMG는 두 모델 간에 다리를 놓는 소프트웨어 개발에 동의함으로써, CORBA로 설계된 프로그램이 DCOM으로 설계된 프로그램과 통신할 수 있도록 하였다.)

CORBA와 IIOP는 클라이언트 프로그램이 항상 요구하고 서버 프로그램이 클라이언트의 요구를 기다리는 클라이언트/서버 모델을 가정한다. 프로그램 작성시, GIOP(General Inter-ORB Protocol)라 불리는 인터페이스를 사용하는데, GIOP는 하나 이상의 네트웍 전송 계층을 위해 특화된 매핑으로 구현되었다. GIOP의 가장 중요한 특화 매핑은 IIOP로, 이것은TCP를 이용한 인터넷의 전송 계층에서 요구를 전하거나 응답을 받는 것이다. 다른 가능한 전송 계층으로는 IBM의 SNA와 Novell의 IPX가 있다.

클라이언트가 네트웍 상 어딘가에 있을 어떤 프로그램에 대해 처리요구를 하려면, 그 프로그램의 주소를 가져야 하는데, 이 주소를 IOR (Interoperable Object Reference)이라고 부른다. IIOP를 이용할때, 주소의 일부는 서버의 포트 번호와 IP주소에 기반을 둔다. 클라이언트 컴퓨터에서, IOR을 더 사용하기 쉬운 프럭시(proxy) 이름으로 대응시키는 표가 만들어질 수 있다. GIOP는 프로그램이 IOR과 연결하여 그에게 요청할 수 있도록 한다(그리고 서버가 응답을 보내도록 한다). CDR (Common Data Representation)은 자료를 암호화/복호화 하는 방법을 제공하여 표준 방식으로 교환하도록 한다.

출처 - http://www.terms.co.kr/IIOP.htm 


OMG (Object Management Group) ; 객체 관리 그룹

OMG[오엠지]는 네트웍 내의 분산 객체들 (흔히 "컴포넌트"라고도 알려져 있다)에 표준 아키텍처를 만들기 위한 목적으로 공급 회사들 그룹에 의해 1989년에 결성되었다. 그 결과로 나온 아키텍처가 CORBA이다. CORBA의 핵심요소는 ORB이다. ORB는 서버 객체가 네트웍 내의 어디에 위치하여 있는지, 또한 그것의 인터페이스가 정확히 무엇인지를 알지 못하더라도, 클라이언트 객체가 서버에게 서비스를 요청하는 것이 가능하게 해준다.

이미 많은 수의 미들웨어 제품들이 CORBA를 사용하기 시작했으며, CORBA는 분산 객체들에 대한 전략적 아키텍처가 될 것으로 보인다. OMG에는 현재 500개가 넘는 회원사를 자랑한다.



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 Langua
    ge)에 기반을 둠
  • Licensing service : 사용 대가를 치를 목적으로 컴포넌트의 사용이 측정되도록 함.
    요금 부과는 세션노드, 활성체 생성, 사이트 단위로 가능
  • Properties service : 컴포넌트가 다른 컴포넌트에 사용될 수 있도록 자기 묘사를
    담도록 함

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

 

2.

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

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

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



IDL (interface definition language) ; 인터페이스 정의 언어

IDL은 한 언어로 작성된 프로그램이나 객체가, 알려지지 않은 언어로 작성된 다른
프로그램과 통신을 할 수 있도록 해주는 언어를 지칭하는 일반적인 용어이다. 분산 객체
기술에서, 새로운 객체들이 어떠한 플랫폼 환경에도 보내어질 수 있으며, 그 환경에서
어떻게 실행되는지를 알아내는 것은 매우 중요하다. ORB는 한 객체 프로그램과 다른
프로그램 사이에서 브로커 통신을 위해 IDL을 사용하는 프로그램의 예이다.

IDL은 스터브 내에 설명되어야할 프로그램의 인터페이스들, 또는 컴파일 되어지는
프로그램의 경미한 확장을 요구함으로써 동작한다. 각 프로그램 내의 스터브들은,
그들이 서로 통신할 수 있도록 해주는 브로커 프로그램에 의해 사용된다.

 


 

 

'Development > Common' 카테고리의 다른 글

유니코드(UNICODE) & 엔코딩(Encoding)  (1) 2012.01.19
utf-8 & euc-kr  (0) 2012.01.19
CORBA  (0) 2012.01.16
XML  (0) 2012.01.16
용어 정리  (0) 2011.12.07
Posted by linuxism
,