CORBA로 이해하는 이기종 분산 객체 통신

CORBA의 ORB·IDL·IIOP·POA 구조와 호출 방식, 표준 서비스 및 현대적 대안 기술을 정리한 분산 객체 미들웨어 가이드

2026-08-14 · 최초 발행 2026-01-12

이기종 객체 호출을 연결한 CORBA

CORBA(Common Object Request Broker Architecture)는 OMG(Object Management Group)가 제정한 분산 객체 컴퓨팅 표준이다. 서로 다른 프로그래밍 언어, OS, 하드웨어에서 구현된 애플리케이션이 네트워크를 넘어 객체를 호출하도록 만드는 미들웨어 아키텍처다.

분산 컴퓨팅 환경에서는 시스템 통합이 필요하고, 객체지향 패러다임을 네트워크 환경까지 확장해야 한다. CORBA는 이 요구를 ORB(Object Request Broker)의 요청 중개와 언어·플랫폼 독립적 인터페이스 정의로 다룬다.

클라이언트와 서버 사이의 ORB 구조

클라이언트는 IDL Stub 또는 동적 호출 인터페이스를 통해 요청을 만들고, ORB는 이를 서버 측 Skeleton 또는 동적 Skeleton으로 전달한다. Object Adapter인 POA는 요청을 실제 Server Object에 연결한다.

서버ORB Core클라이언트Client ApplicationClient Stub(IDL Stub)DII(Dynamic Invocation)Object Request BrokerServer Skeleton(IDL Skeleton)DSI(Dynamic Skeleton)Object Adapter(POA)Server Object
구성요소 역할
ORB 객체 요청을 중개하고 위치 투명성을 제공
IDL 인터페이스를 정의하는 언어
Stub 클라이언트 측 프록시
Skeleton 서버 측 요청 처리
POA 객체 생명주기 관리
IIOP 인터넷 상호운용 프로토콜

IDL로 인터페이스를 먼저 고정한다

IDL(Interface Definition Language)은 서비스 인터페이스를 언어에 종속되지 않게 기술하는 명세 언어다. IDL 정의는 각 프로그래밍 언어로 매핑되며, 그 결과로 클라이언트 Stub과 서버 Skeleton을 만들 수 있다.

module Banking {
    interface Account {
        readonly attribute string accountNumber;
        readonly attribute float balance;

        exception InsufficientFunds {
            float currentBalance;
        };

        void deposit(in float amount);
        void withdraw(in float amount) raises (InsufficientFunds);
        float getBalance();
    };

    interface Bank {
        Account createAccount(in string name);
        Account findAccount(in string accountNumber);
    };
};
IDL 정의C++ 매핑Java 매핑Python 매핑COBOL 매핑C++ Stub/SkeletonJava Stub/SkeletonPython Stub/SkeletonCOBOL Stub/Skeleton
언어 표준 매핑 특징
C++ 표준 성능 중시
Java 표준 플랫폼 독립성
Python 표준 스크립팅
COBOL 표준 레거시 통합
Ada 표준 항공우주

ORB가 요청을 전달하는 방식

ORB는 클라이언트 요청을 적절한 서버로 전달하고, 객체의 물리적 위치와 무관하게 접근할 수 있도록 한다. 이 과정에서 데이터의 직렬화와 역직렬화를 수행하며 인증과 암호화도 지원한다.

Server ObjectServer ORBIIOP/GIOPClient ORBClientServer ObjectServer ORBIIOP/GIOPClient ORBClient메서드 호출GIOP 메시지네트워크 전송메서드 실행결과 반환GIOP 응답네트워크 전송결과 전달

GIOP 메시지와 IIOP 전송

GIOP(General Inter-ORB Protocol)는 ORB 간 통신을 위한 일반 프로토콜로, 메시지 형식·데이터 표현·전송 규약을 규정한다. IIOP(Internet Inter-ORB Protocol)는 TCP/IP 위에서 GIOP를 구현하며, 인터넷 환경의 ORB 상호운용에 사용된다. 기본 포트는 표준 683번이다.

메시지 방향 용도
Request 클라이언트→서버 메서드 호출
Reply 서버→클라이언트 호출 결과
CancelRequest 클라이언트→서버 요청 취소
LocateRequest 클라이언트→서버 객체 위치 확인
LocateReply 서버→클라이언트 위치 응답

POA가 객체 참조와 서번트를 연결한다

POA(Portable Object Adapter)는 객체 참조와 서번트의 매핑을 관리한다. 객체 활성화와 비활성화, 정책 설정을 담당하며, 이전에는 BOA(Basic Object Adapter)가 사용됐다.

POA 정책Lifespan PolicyId Assignment PolicyServant Retention PolicyRequest Processing PolicyTRANSIENTPERSISTENTSYSTEM_IDUSER_IDRETAINNON_RETAINUSE_ACTIVE_OBJECT_MAP_ONLYUSE_DEFAULT_SERVANTUSE_SERVANT_MANAGER

객체 호출 외에 제공하는 표준 서비스

CORBA는 객체 호출만 정의하지 않는다. 이름으로 객체를 등록하고 조회하는 기능부터 속성 기반 검색, 비동기 이벤트, 분산 트랜잭션, 인증·권한·암호화, 동시성 제어까지 표준 서비스로 제공한다.

서비스 기능
Naming Service 객체 이름 등록/조회
Trading Service 속성 기반 서비스 검색
Event Service 비동기 이벤트 전달
Transaction Service 분산 트랜잭션 관리
Security Service 인증, 권한, 암호화
Notification Service 향상된 이벤트 서비스
Concurrency Service 동시성 제어

Naming Service는 계층적 Context 아래에 객체 이름을 배치할 수 있다.

Root Contextdepartmentservicesengineeringsalesprinterdatabaseauthenticationlogging

정적 호출과 동적 호출의 차이

정적 호출은 컴파일 시점에 Stub과 Skeleton을 생성하는 방식이다. 타입 안전성과 성능을 얻는 대신 유연성은 부족하다.

동적 호출에서는 DII(Dynamic Invocation Interface)가 런타임의 인터페이스 탐색과 호출을 맡고, DSI(Dynamic Skeleton Interface)는 런타임 요청을 처리한다. IR(Interface Repository)은 인터페이스 메타정보 저장소다.

동적 호출IR 조회인터페이스 분석요청 구성DII 호출정적 호출IDL컴파일Stub 생성호출

다른 원격 호출 기술과의 위치

항목 CORBA RMI Web Services gRPC
표준 OMG Java W3C Google
언어 다중 Java 다중 다중
프로토콜 IIOP JRMP HTTP/SOAP HTTP/2
데이터 형식 CDR Java 직렬화 XML Protocol Buffers
복잡성 높음 중간 중간 낮음
현재 활용 레거시 제한적 감소 증가

CORBA는 언어와 플랫폼이 다른 시스템을 통합하고, 잘 정의된 스펙과 트랜잭션·보안·이벤트 서비스를 제공한다. 반면 학습 곡선이 가파르고 IIOP 포트는 방화벽 제약을 받을 수 있으며 오버헤드가 발생한다. 웹 서비스와 REST에 밀리면서 생태계도 위축됐다.

새 프로젝트에서는 gRPC, REST API, GraphQL, Apache Thrift가 대안으로 선택된다. 다만 CORBA는 금융·통신·국방 등 미션 크리티컬 시스템에서 레거시로 운영되고 있으며, 분산 객체 컴퓨팅의 개념적 토대를 마련한 기술이다.

CORBA분산 객체미들웨어ORBIDL