COM, ATL

COM+ 소개 - MTS(Microsoft Transaction Server) 후속작

디버그정 2008. 7. 28. 14:00

COM+ 소개

1997년 가을 마이크로소프트의 MTS 개발팀과 COM 개발팀이 통합된 후, 만들어낸 첫번째 제품이 COM+이며, COM+는 마이크로소프트의 COM(Component Object Model)과 마이크로소프트 트랜잭션 서버(Microsoft Transaction Server, MTS)의 다음 버전이다.

COM+는 스레드 할당(thread allocation)과 보안(security) 같은 자원 관리 작업들을 처리함으로써, 개발자들의 수고를 덜었다. 그리고, 스레드 풀링(thread pooling), 객체 풀링(object pooling), JIT(just-in-time) 객체 활성화를 제공함으로써, 응용 프로그램의 확장성을 개발자의 수고 없이 향상시켰다. 또한, 트랜잭션 지원(transaction support)을 통해서 트랜잭션이 네트워크를 통해서 여러 데이터베이스에 분산되어 있더라도 데이터의 무결성도 보장한다.

COM+를 사용하는 것은 여러 가지 면에서 이익이다. 시스템 관리자는 COM+ 응용 프로그램을 설치하고, 배포하고, 환경을 설정하기 위해서 사용할 수 있으며, 응용 프로그램 개발자는 작성한 컴포넌트를 응용 프로그램과 통합할 수 있으며, 개발 도구를 만드는 회사는 개발 도구가 COM+ 환경에서 작동하도록 개발하거나 변경할 수 있다. COM+는 Windows 2000 서버 운영체제 기반의 엔터프라이즈 웹 응용 프로그램, mission-critical 응용 프로그램, 분산 응용 프로그램 개발에 적용할 수 있으며, 비주얼 C++와 비주얼 베이직과 호환이 가장 잘 되도록 설계되었다. COM+는 Windows 2000 운영체제에 포함되어서 발표되었으며, 사용하려면 Windows 2000을 필요로 한다. COM+ 응용 프로그램은 Windows 98, Windows NT 클라이언트에서 사용할 수 있다.

COM+는 컴포넌트 기반의 분산 응용 프로그램에 대한 단일 비전을 제공한다. 또한, 트랜잭션을 지원하는 다 계층 응용 프로그램을 개발하기 위한 도구들을 제공한다. COM+는 Microsoft Transaction Server 2.0 기술의 새로운 버전이며, Microsoft Component Object Model (COM)을 통합했고, 새로운 서비스들을 추가했다.

COM+는 비동기적 COM을 지원함과 함께 스레드와 보안 분야에서 향상되었다. 새로운 서비스에는 새로운 분산 응용 프로그램 관리 및 패키징 서비스(컴포넌트 서비스) 뿐만 아니라, 동기화, 객체 풀링, queued component가 포함되었다.

COM+는 새로운 스레딩 모델인 neutral apartment threading을 지원한다. NA는 컴포넌트가 순차적인 접근을 허용할 뿐만 아니라, 어느 스레드에서 든지 수행할 수 있다. 또한, role-base security, 비동기적 객체 실행, out-of-process 서버에서 실행 중인 객체 인스턴스를 참조하는 새로운 내장 모니커(moniker)를 추가했다.

COM+의 기능들을 개략적으로 살펴보면 다음과 같다.

역할 기반의 보안(Role-Based Security)
COM+는 역할 기반의 보안과 프로세스 접근 권한 보안을 둘 다 지원한다. COM+의 보안 서비스는 프로그래밍 코드를 사용하지 않고 쉽게 보안을 구현할 수 있는 선언적인 보안 메커니즘을 제공하며, 프로그래밍으로 보안을 구현할 경우에도 보안 관리 코드를 쉽게 작성할 수 있는 방법들을 제공한다. 역할 기반의 보안 모델에서, 컴포넌트에 대한 접근 권한은 호출자가 속한 논리적 그룹 또는 역할에 의해서 부여되거나 거부된다. 또한, 보안의 수준은 메서드, 컴포넌트, 그리고 인터페이스 레벨까지 관리할 수 있다.

스레딩(Threading)
COM+는 새로운 스레딩 모델인 뉴트럴 스레딩(neutral threading)을 포함한다. 뉴트럴 스레딩 모델은 모든 스레드 타입에서 객체가 실행되도록 지원한다. 뉴트럴 아파트먼트 스레딩은 개발자가 뉴트럴 아파트먼트 내에서 실행하는 객체를 안전하게 만들지 않아도 자동으로 개체의 안전성을 보장하기 때문에 개발자가 직접 객체 스레드를 안전하게 구현하지 않아도 된다.

개체 풀링(Object Pooling)
개체 풀링은 응용 프로그램이 개체를 생성하고, 응용 프로그램의 필요에 따라 생성한 개체를 풀링하는 것을 허용한다. 비활성화된 개체의 풀(pool)에 있는 요소들을 재사용함으로써 시스템 자원을 절약할 수 있다. 모든 종류의 개체를 거의 다 풀링할 수 있으며, 개체 풀링은 구현하기도 쉽다.

큐드 컴포넌트(Queued Component)
큐드 컴포넌트는 COM+ 클라이언트가 COM+ 서버에 직접 연결되지 않은 상황에서도 서버에 있는 COM+ 개체를 호출할 수 있는 비동기적인 호출을 지원하는 메커니즘이다. COM+ 큐드 컴포넌트 서비스는 클라이언트와 서버가 연결되어 있다면 즉각적으로 실행되고, 클라이언트와 서버가 연결되어 있지 않다면 연결이 이루어질 때까지 실행을 연기할 수 있다. 큐드 컴포넌트 서비스는 실시간으로 처리되는 동기적 트랜잭션과 비동기적 트랜잭션을 함께 처리함으로써 엔터프라이즈 환경의 line-of-business 응용 프로그램을 위한 핵심 기능을 제공한다. 이 기술은 작업 현장에서 사용되는 클라이언트 응용 프로그램에 유용하게 사용될 수 있다. 예를 들어, 네트워크에 연결되지 않은 영업 사원이 고객을 상대로 하는 업무를 수행한 후에, 사무실로 돌아와서 네트워크에 연결하면, 트랜잭션이 실행될 수 있도록 응용 프로그램을 만들 수 있다. 이런 비동기적 메시지 큐잉은 마이크로소프트 Windows 2000의 메시징 서비스(Messaging Services)를 사용한 것이다.

COM+ 이벤트(COM+ Events)
COM+ 이벤트는 이벤트를 발생시키는 Publisher와 이벤트를 수신하는 Subscriber를 연결시켜주는 컴포넌트 기반의 이벤트 시스템이다. Publisher는 subscriber에게 이벤트를 보내며, subscriber는 publisher로부터 subscription을 받는다. 이벤트 객체를 호출 할 수 있는 모든 COM+ 개체는 Publisher가 될 수 있으며, 이벤트 인터페이스의 메서드를 제공하는 단순한 COM+는 subscriber가 될 수 있다.

자동 트랜잭션(Automatic Transactions)
트랜잭션은 분산 시스템에서 데이터의 무결성을 보장하는 메커니즘이다. COM+의 트랜잭션 서비스는 트랜잭션을 생성하고, 사용하고, 트랜잭션 완료의 허용 여부를 결정하는 COM 객체를 쉽게 만들 수 있는 방법을 제공한다. COM+는 마이크로소프트 트랜잭션 서버(MTS)의 모든 기능들을 수용했으며, “Auto-done”을 추가했다. “Auto-done”은 예외상황이 발생했을 경우에는 시스템이 자동적으로 SetAbort를 수행해서 모든 작업들을 롤백하며, 예외상황이 발생하지 않고 정상적으로 작업이 완료되었다면 SetComplete를 호출해서 작업을 커밋하는 것이다. COM+는 컨텍스트(context)라는 특별한 환경으로 컴포넌트를 지원한다. 컨텍스트는 컴포넌트의 실행 환경을 정의하는 확장된 속성들의 집합을 제공한다.

응용 프로그램과 컴포넌트 관리(Application and Component Administration)
COM+에는 컴포넌트에 대한 메타 데이터를 저장하는 새로운 등록 데이터베이스인 RegDB가 추가되었다. 이 데이터베이스는 컴포넌트의 활성화를 위해서 COM+가 필요로 하는 정보를 관리하며, 시스템 레지스터리 대신에 사용되도록 최적화되어져 있다. 추가로, COM+는 COM+ Catalog라는 트랜잭션을 지원하고 스크립트로 접근 가능한 인터페이스를 제공하며, 이것으로 RegDB 내의 정보에 접근할 수 있다. 컴포넌트 서비스 관리 도구는 컴포넌트 관리자에게 스크립트로 접근 가능한 인터페이스를 제공하며, 클라이언트 사이드와 서버 사이드의 다 계층 응용 프로그램의 배포를 용이하게 한다.

동기화 서비스(Synchronization Services)
동기화 서비스는 컴포넌트에 여러 개의 스레드들이 동시에 접근할 때 생기는 위험을 방지하는 기반 구조이며, 코드를 작성하지 않고도 쉽게 컴포넌트의 동기화 요구 설정을 지정할 수 있는 수단을 제공한다. 또한 프로그램으로 구현할 경우에도 동기화 관련 코드를 쉽게 작성할 수 있는 방법들을 제공한다.



COM에서 COM+로

COM은 마이크로소프트의 이진 규격으로서, 객체가 어떻게 상호작용 할 것인지를 정의한다. COM은 Windows 3.1 이후의 모든 마이크로소프트의 Windows 운영체제와 16비트, 32비트에서 사용이 가능하다.

COM은 프로그래밍 언어가 아니며, 특정한 언어의 기능이 아니다. 그래서 함수 포인터를 지원하는 C, C++, 파스칼 등의 언어와 함수 포인터를 직접적으로 지원하지 않는 비주얼 베이직, 비주얼 J++와 같은 언어들은 COM 개체를 호출하거나 생성할 수 있도록 확장된 기능을 제공한다.

개발자들은 단일 사용자 어플리케이션을 작성할 때, COM을 사용해왔으며, 분산된 환경에서 다중 사용자를 지원하기 위해서 DCOM을 사용했다. 그리고 다중 사용자를 지원하는 DCOM을 구현하는 여러 가지 문제들을 해결하기 위해서 마이크로소프트 트랜잭션 서버(MTS)를 사용했다.

DCOM은 COM이 네트워크에 걸쳐 분산되어 있는 것을 말한다. DCOM 개체의 클라이언트는 마치 개체가 자신의 주소 영역에 있는 것처럼 개체를 이해한다. 하지만, DCOM은 다중 사용자를 고려해서 개발되어야 하기 때문에 고도의 기술과 많은 시간, 그리고 노력을 필요로 했다.

DCOM을 개발하는 개발자의 대부분의 노력은 Business Logic을 구현하기 보다는 분산된 환경의 다중 사용자에 의해서 호출되는 DCOM의 상태를 관리하는 코드를 구현하는데 소비되었으며, 이 부분이 개발자들에게는 해결해야 할 골치거리 였으며, 이것은 MTS라는 미들웨어를 통해서 해결할 수 있었다.

COM+는 COM과 DCOM이 가지고 있는 대부분의 개념을 포함하는 개념이다. 쉽게 말하자면, COM+는 COM을 DCOM으로 동작하도록 구현해주는 인프라이다.

Windows NT 환경에서 동작하던 MTS는 COM위에 놓인 개별적인 Wrapper로서 자신의 서비스를 제공했다. 클라이언트가 MTS에 등록된 컴포넌트를 호출하면 MTS는 컨텍스트 개체(컨텍스트 Wrapper)를 생성하고 그것을 서버 측의 스터브(Stub)와 실제 컴포넌트 사이에 끼워 넣는다. 그리고 난 후 개체에 대한 모든 호출은 컨텍스트 Wrapper로 전달되며, MTS는 컨텍스트 Wrapper를 통해서 보안 점검이나 개체 풀링, 트랜잭션 관리 같은 작업들을 수행한다.

Windows 2000의 COM+는 MTS의 다음 버전으로, MTS의 방식과 기존의 COM 방식을 결합한 것이다. COM+는 더 이상 Wrapper 계층을 사용하지 않으며, Policy 개체를 통해서 작업을 수행한다. 클라이언트에서 개체의 메서드를 호출하면 클라이언트와 서버 측에 모두 Policy 개체가 생성된다. 클라이언트의 호출은 RPC 채널을 통해서 서버 개체를 호출한다. 이런 관계 사이에 클라이언트 Policy 개체와 서버 Policy 개체가 RPC 채널 양쪽에 생성되며, 클라이언트와 서버의 상호작용을 관장한다