마이크로소프트 트랜잭션 서버

마이크로소프트 트랜잭션 서버(Microsoft Transaction Server, MTS)는 대규모 분산 애플리케이션을 쉽게 만들 수 있도록 컴포넌트 오브젝트 모델 (COM) 소프트웨어 컴포넌트에 서비스를 제공하는 소프트웨어였다. MTS가 제공하는 주요 서비스는 자동화된 트랜잭션 관리, 인스턴스 관리 (또는 즉시 활성화), 역할 기반 보안이었다. MTS는 관점 지향 프로그래밍을 구현한 최초의 주요 소프트웨어로 간주된다.

MTS는 윈도우 NT 4.0 옵션 팩에서 처음 제공되었다. 윈도우 2000에서는 MTS가 개선되어 운영체제 및 COM과 더 잘 통합되었으며, COM+로 이름이 변경되었다. COM+는 MTS의 기능에 객체 풀링, 느슨하게 결합된 이벤트 및 사용자 정의 단순 트랜잭션 (보상 리소스 관리자)을 추가했다.

COM+는 여전히 윈도우 서버 2003 및 윈도우 서버 2008과 함께 제공되며, 마이크로소프트 .NET 프레임워크는 EnterpriseServices 네임스페이스에서 COM+에 대한 래퍼를 제공한다. Windows Communication Foundation (WCF)은 웹 서비스를 사용하여 COM+ 애플리케이션을 호출하는 방법을 제공한다. 그러나 COM+는 COM을 기반으로 하며, 마이크로소프트의 전략적인 소프트웨어 아키텍처는 이제 COM이 아닌 웹 서비스와 .NET이다. COM+가 제공하는 많은 기능에 대한 순수 .NET 기반 대안이 있으며, 장기적으로는 COM+가 단계적으로 폐지될 가능성이 있다.

 아키텍처 
기본 MTS 아키텍처는 다음과 같다.

 MTS 이그제큐티브 (mtxex.dll)
 각 컴포넌트에 대한 팩토리 래퍼 및 컨텍스트 래퍼
 MTS 서버 컴포넌트
 MTS 클라이언트
 다음과 같은 보조 시스템:
 COM 런타임 서비스
 Service Control Manager (SCM)
Microsoft Distributed Transaction Coordinator (MS-DTC)
 Microsoft Message Queue (MSMQ)
COM-Transaction Integrator (COM-TI)
등.

MTS 이그제큐티브의 제어 하에서 실행되는 COM 컴포넌트를 MTS 컴포넌트라고 한다. COM+에서는 COM+ 애플리케이션이라고 한다. MTS 컴포넌트는 인프로세스 DLL이다. MTS 컴포넌트는 MTS 이그제큐티브에 배포 및 실행되며, MTS 이그제큐티브는 이들을 관리한다. 다른 COM 컴포넌트와 마찬가지로, IClassFactory 인터페이스를 구현하는 객체는 이러한 컴포넌트의 새 인스턴스를 만드는 팩토리 오브젝트 역할을 한다.

MTS는 실제 MTS 객체와 클라이언트 사이에 팩토리 래퍼 오브젝트와 오브젝트 래퍼를 삽입한다. 이 래퍼를 삽입하는 것을 인터셉션이라고 한다. 클라이언트가 MTS 컴포넌트를 호출할 때마다 래퍼 (팩토리 및 오브젝트)는 호출을 가로채고 즉시 활성화 (Just-In-Time Activation, JITA)라고 불리는 자체 인스턴스 관리 알고리즘을 호출에 주입한다. 그런 다음 래퍼는 실제 MTS 컴포넌트에서 이 호출을 수행한다. 당시에는 확장 가능한 메타데이터가 부족하여 인터셉션이 어려운 것으로 간주되었다.

또한 컴포넌트의 배포 속성에서 얻은 정보를 기반으로 트랜잭션 논리 및 보안 검사도 이러한 래퍼 오브젝트에서 수행된다.

모든 MTS 호스팅 객체에 대해 IObjectContext 인터페이스를 구현하는 컨텍스트 오브젝트도 존재한다. 컨텍스트 오브젝트는 트랜잭션 정보, 보안 정보, 배포 정보와 같이 해당 객체에 대한 특정 정보를 유지 관리한다. MTS 컴포넌트의 메서드는 IObjectContext 인터페이스를 통해 컨텍스트 오브젝트를 호출한다.

MTS는 클라이언트의 호출이 컨테이너에 도달할 때까지 실제 미들웨어 MTS 객체를 생성하지 않는다. 객체가 항상 실행되는 것은 아니므로 많은 시스템 리소스를 사용하지 않는다 (객체에 대한 객체 래퍼와 스켈레톤은 유지되더라도).

클라이언트에서 호출이 들어오자마자 MTS 래퍼 프로세스는 JITA라고 불리는 인스턴스 관리 알고리즘을 활성화한다. 실제 MTS 객체는 래퍼의 요청을 처리하기 위해 "즉시" 생성된다. 요청이 처리되고 응답이 클라이언트로 다시 전송되면, 컴포넌트는 SetComplete()/SetAbort()를 호출하거나, 트랜잭션이 종료되거나, 클라이언트가 객체에 대한 참조에서 Release()를 호출하며, 실제 MTS 객체는 파괴된다. 요컨대 MTS는 상태 비저장 컴포넌트 모델을 사용한다.

일반적으로 클라이언트가 일반적인 MTS 컴포넌트에서 서비스를 요청할 때 서버에서 다음과 같은 순서가 발생한다:

 데이터베이스 연결 획득
 공유 속성 관리자 또는 이미 존재하는 객체 또는 클라이언트로부터 컴포넌트 상태 읽기
 비즈니스 로직 수행
 컴포넌트의 변경된 상태 (있는 경우)를 데이터베이스에 다시 쓰기
 데이터베이스 연결 닫고 해제
 트랜잭션 결과에 대해 투표. MTS 컴포넌트는 직접 트랜잭션을 커밋하지 않고, 대신 MTS에 성공 또는 실패를 통신한다.

따라서 고지연 리소스를 비동기 리소스 풀로 구현할 수 있으며, 이는 미들웨어 서버가 제공하는 상태 비저장 JIT 활성화를 활용해야 한다.

 각주 

 외부 링크 및 참조 
 Microsoft Transaction Server 빠른 둘러보기

분류:프로세스 간 통신
분류:윈도우 구성 요소
분류:트랜잭션 처리
분류:마이크로소프트 API
분류:컴포넌트 기반 소프트웨어 공학