재우니의 블로그


COM + 트랜젝션 작동원리를 간단하게 알아보기로 하자.

윈도우 운영체제의 컴포넌트인 분산 트랜젝션 코디네이터 즉 DTC 는 관리 트랜젝션 일종이다.
트랜젝션에 관련된 컴포넌트들은 DTC 가 이해할 수 있는 인터페이스와 일치되어야 하고,
DTC 에 의해 작업의 단위가 커밋 되거나 롤백될 수 있는 리소스 관리자를 제공해야 한다.
이러한 고수준의 추상화 덕분에 데이터베이스 엔진이나 신용카드 처리기만큼 다양한 컴포넌트들이 함께 작동할 수 있다.

DTC 는 2단계 커밋이라고불리는 프로세스를 통해 트랜젝션을 수행한다. 트랜젝션을 수행할때, DTC 는 먼저 트랜젝션에 관여하고 있는 모든 리소스 관리자에게 자신의 작업을 완료할 수 있는지의 여부를 물어본다.
이것이 첫번째 단계이다. DTC 가 모든 리소스 관리자들로 부터 OK 를 받았을 때에만 각 리소스 관리자에게 작업을 계속하고 변경사항을 커밋하라고 이야기 한다. 이것이 두번째 단계이다. 만약 리소스 관리자 중 하나가 첫번째 단계에서 어떤 
문제를 만났다면 DTC 는 다른 모든 리소스 관리자에게 작업을 취소하라고 이야기 한다.

컨텍스트는 트랜젝션 처리에 중요한 추상화이다. 모든 트랜젝션 동작 - 신용카드 지불과 연속된 상품 주문 레코드의 삽입 - 은 그것과 관련된 컨텍스트를 가지고 있다. 연산이 트랜젝션의 컨텍스트 안에서 일어난다는 것은 연산이 트랜젝션의 일부이고 DTC 에게 트랜젝션이 롤백 혹은 커밋되어야 한다고 제안할 수 있다는 것을 의미한다. 이러한 동작은 자신의 컨텍스트 내부의 모든 동작들의 커밋을 거부할 수 있는 강력함을 가지고 있다.

트랜젝션의 내부 작동에 관한 설명은 .NET 어셈블리에 트랜젝션 지원을 코딩할 때 많은 도움이 될 것이다.