본문 바로가기
개발/.NET

[COM+] MSDTC 를 운영하기 위해 선행되어야 하는 작업

by 그저그런보통사람 2010. 6. 4.
COM+ 를 통해 분산 트랜잭션을 운영하기 위해서 기본적으로 MSDTC가 네트워크상에서 엑세스 가능해야한다.

관리도구 -> 구성요소서비스 

기본적으로 아래의 내 컴퓨터 속성에서 MSDTC 항목의 로컬 코디네이터 사용 이 
체크되어 DTC 서비스가 가동되어야 한다.


그 다음 아래의 Distributed Transaction Coordinator 항목의 로컬 DTC 속성창 열어 보안 탭의 
네트워크 DTC 엑세스 항목이 체크하고, 트랜잭션 관리자 통신 항목의 인바운드 허용 옵션과 아웃바운드 옵션 항목을 모두 체크 한다. 또한 인증 옵션에서 인증 필요없음을 체크한다.
만약 웹서버와 DB서버가 분리되어 있다면 WEB서버는 인바운드 허용, DB서버는 아웃바운드 허용을 체크하고 둘 다 한 서버에서 운영한다면 둘 다 체크한다.
(XA 트랜잭션 사용 항목은 UNIX 계열 서버의 DTC 를 위해 사용되는 프로토콜이다).


DTC 로그온 계정은 변경할 필요가 없다.

만약 위 절차되로 설정했는데 정상적으로 DTC 가 운영되지 않는다면 보안 문제를 살펴봐야 한다.
DTC 간 통신을 위해 기본적으로 RPC(Remote Procedure Call) 프로토콜이 이용되고 
RPC 프로토콜은 랜덤 포트를 선정하여 서비스를 운영하고 각각의 서비스는 RPC 매핑포트와 통신한다. 
RPC 매핑포트는 153번이 되겠고, 랜덤포트는 TCPView 같은 프로그램을 통해 직접 열어봐야 한다 -_-;

만약 서버가 보안을 이유로 방화벽을 운용해야 한다면 이 랜덤 포트의 범위를 임의로 지정하고
153번 포트와 함께 임의로 지정한 포트만 별도로 개방하면 문제없이 DTC가 운영될 것이다.
단, 랜덤으로 범위를 지정하면 RPC를 이용하는 모든 어플리케이션이 영향을 받게 되니 그 점은 꼭 인지해야 한다.

마지막으로 서버를 분리하여 운영할 경우 각각의 서버가 DTC의 RPC 프로토콜을 이용해 통신해야하는데, 
기본적으로 컴퓨터이름으로 상대방의 서버를 식별하기 때문에 같은 네트워크 상에 서버를 두거나,
쉐도우 서버 (WEB, 개발) 와 DB(운영) 같이 같은 도메인 상에 둘 수 없는 경우 각각의 hosts 파일에 컴퓨터이름
을 등록하면 된다.

본 글은 아래 출처를 통해서 개인용으로 정리해놓은 글임. 나 혼자 분석해서 이런 글을 뽑을 날은 언제즘 될까....