트랜잭션 모델

메시지 플로우는 다음과 같은 항목으로 구성될 수 있습니다.

메시지 플로우가 메시지를 처리하는 전형적인 이벤트 순서는 아래에 설명되어 있습니다.

  1. 메시지가 입력 큐에서 수신됩니다.
  2. 데이터베이스 테이블이나 큐로부터 데이터를 읽거나 씁니다.
  3. 시스템은 비활성 상태이며 다음 입력 메시지를 기다립니다.

이 이벤트 순서에서 테이블 액세스와 출력 메시지 쓰기는 구분되지 않는다는 것에 유의하십시오. 종종 플로우가 일종의 출력 메시지를 생성하지만 출력 메시지를 생성하는 것과 데이터베이스 테이블을 갱신하는 것은 실제적으로는 구분되지 않습니다. 두 경우 모두 시스템에서 데이터의 상태가 변경됩니다.

다음 다이어그램을 고려하십시오.
	=====x=========x===x=======x=============x====x=====
	     1         2   3       4             5    6

행은 시간의 흐름에 따라 표시된 시스템의 데이터입니다. 시점 1에 메시지가 도착하고, 입력 큐로부터 수신됩니다. 시점 2, 3, 4 및 5에서는 데이터를 사용하여 데이터베이스 테이블을 갱신하거나 큐에 데이터를 씁니다. 다이어그램에서 x 기호는 데이터 상태의 변경을 표시합니다. 시점 6에서 출력 메시지가 송신되고 시스템은 비활성 상태가 됩니다. 다이어그램에서 =기호는 이벤트 간 데이터 상태가 변경되지 않음을 표시합니다.

시스템에 실패가 발생하면(예를 들어 브로커가 실행되는 컴퓨터에 전원이 차단되는 경우) 실패가 발생하기 이전에 만들어진 테이블 및 큐 상태의 변경은 유효하지만, 실패 후에는 변경이 더 이상 발생하지 않습니다. 이 상황은 어떤 경우에는 적용되지 않습니다. 예를 들어 현재 계정에서 모기지 계정으로 이체를 하는 도중 시스템 실패가 발생하면 현재 계정에서는 출금될 수 있지만 모기지 계정에는 송금되지 않습니다.

트랜잭션

위에서 설명한 문제를 피하기 위해 브로커, 큐잉 시스템 및 데이터베이스에는 트랜잭션 모델이 있습니다. 처리가 진행됨에 따라 실패 발생 시 원래의 상태로 복원할 수 있게 하는 추가 데이터가 저장됩니다. 다음 다이어그램은 이 추가 데이터의 상태를 설명합니다.
	-----x=========x===x=======x=============x====x-----
	     1         2   3       4             5    6

다이어그램의 행은 시간의 흐름에 따라 표시된 시스템의 추가 데이터입니다. 시점 1에서는 메시지가 도착하고, 입력 큐에서 수신됩니다. 다이어그램에서 - 기호는 시점 1 이전에는 시스템에 추가 데이터가 없음을 표시합니다. 시점 1 이후의 상태는 큐에서 메시지를 수신했고 필요하면 큐에 다시 넣을 수 있다는 것을 표시합니다. 시점 2, 3, 4 및 5에서는 데이터를 사용하여 데이터베이스 테이블을 갱신하거나 큐에 데이터를 씁니다. 필요하면 테이블 및 큐의 변경을 취소할 수 있도록 다시 추가 데이터의 상태가 변경됩니다. 시점 6에서는 출력 메시지가 송신되고 시스템은 비활성 상태가 되며, 시스템에는 추가 데이터가 없습니다. 다이어그램에서 = 기호는 이벤트 간 데이터 상태가 변경되지 않음을 표시합니다. 시점 1과 시점 6 사이에서 실패가 발생하면 추가 데이터를 사용하여 시스템의 데이터를 원상태로 복원합니다. 그 결과 출력 큐에는 쓰여진 데이터가 없고 테이블도 갱신되지 않으며 입력 큐에서는 입력 메시지가 수신되지 않습니다. 실패가 발생하지 않으면 시점 6에서 변경 사항이 영구적으로 적용되어 이후에 실패가 발생하더라도 실행 취소 조작으로 변경을 취소할 수 없습니다.

위에서 설명한 조작 모드는 통합 트랜잭션 모드입니다. 트랜잭션의 성공적인 완료는 트랜잭션의 확약이며, 성공하지 못한 완료는 롤백이라고 합니다.

통합되지 않은 보조 트랜잭션

조작의 통합 트랜잭션 모드는 실패가 발생하는 위치나 시기에 상관없이 동일한 입력 메시지와 관련된 큐 및 테이블의 경우, 변경 사항이 모두 적용되거나 전혀 적용되지 않는 것이 주요 특징입니다. 그러나 다음의 예에서와 같이 이러한 작동 방식이 적절하지 않은 경우도 있습니다.

이러한 요구사항을 충족하기 위해 WebSphere Message Broker는 큐와 테이블이 개별 트랜잭션에서 변경되도록 합니다. 이 작동은 다음 다이어그램에 설명되어 있습니다.
MAIN -----x=========x===x=======x=============x====x-----
          1         2   4       5             8    9

1st AUX --------------x======x========x------
                      3      6        7

MAIN 행은 필요하면 원래의 상태로 복원할 때 사용되는 추가 데이터가 포함된 기본 트랜잭션을 나타냅니다. 1st AUX 행은 보조 트랜잭션을 나타냅니다. 시점 3에서 테이블 또는 큐가 갱신되며, 시점 6에서 다른 갱신이 발생합니다. 시점 7에서 메시지 플로우는 보조 트랜잭션 모드에서 실행되어야 하는 모든 변경이 완료되었는지 판단한 후 변경을 확약합니다.

시점 7 이전에 메시지 플로우가 실패하면 두 트랜잭션 모두 롤백되기 때문에 시스템의 상태는 변경되지 않는 상태가 됩니다. 시점 7 이후, 시점 9 이전에 실패가 발생하면 보조 트랜잭션은 이미 확약되었지만 기본 트랜잭션은 롤백됩니다. 시점 9까지 실패가 발생하지 않으면 두 트랜잭션은 모두 확약됩니다.

데이터베이스 보조 트랜잭션

하나 이상의 보조 트랜잭션을 사용하고, 확약되거나 롤백할 수 있는 데이터베이스 테이블을 여러 번 갱신할 수 있습니다. 동일한 데이터베이스 테이블 또는 여러 테이블을 추가로 갱신한 다음 이 변경을 확약하거나 롤백할 수 있습니다.

사용 중인 각 데이터베이스에는 자체적인 보조 트랜잭션이 있기 때문에 메시지 플로우가 다른 데이터베이스 인스턴스(다른 데이터 소스 이름)에 속하는 테이블을 갱신하면 각 데이터베이스에는 보조 트랜잭션이 발생합니다. 개별적으로 이러한 트랜잭션을 확약 또는 롤백해야 합니다. 조작 완료 시(위의 예에서는 시점 9)까지 확약되거나 롤백되지 못한 모든 갱신은 처리의 성공 여부에 따라 브로커에 의해 자동으로 확약되거나 롤백됩니다.

AIXDB2와 같은 일부 데이터베이스 유형에서는 동일한 데이터베이스 인스턴스 내에서 통합 트랜잭션과 비통합 트랜잭션을 동시에 허용하지 않습니다. 이러한 경우에, 별도의 데이터베이스 인스턴스를 작성해야 합니다. 통합 트랜잭션과 비통합 트랜잭션별로 각각의 데이터베이스 인스턴스를 구성하십시오.

ESQL COMMIT 및 ROLLBACK 명령문을 사용하여 보조 데이터베이스 트랜잭션을 확약하고 롤백하십시오. 개별 데이터베이스 명령문(예를 들어 INSERT 및 UPDATE 명령문)에 UNCOORDINATED 키워드를 지정함으로써 기본 트랜잭션 외부에서 조작을 실행하십시오.

큐 보조 트랜잭션

일부 큐잉 시스템은 위에서 설명한 데이터베이스 기능을 수행하지 않습니다. WebSphere MQ의 경우 큐에 대한 각 비통합 읽기 또는 쓰기 조작에 확약 조치가 내재되어 있어 두 메시지를 넣은 다음 전부 확약하거나 롤백할 수는 없습니다. 따라서 COMMIT 및 ROLLBACK 명령문은 데이터베이스에 대해서만 작동합니다.

Nodes

위의 설명은 메시지 플로우를 언급하고 있지만 노드는 언급하고 있지 않습니다. 메시지 플로우가 노드로 분리되는 방법은 트랜잭션에 영향을 미치지 않습니다. 데이터베이스 조작에서 노드는 그 수에 관계없이 기본 트랜잭션 및 보조 트랜잭션을 무제한으로 갱신할 수 있습니다.

완전히 통합되지 않은 트랜잭션

보조 트랜잭션 내에서 모든 데이터베이스 갱신이 이루어지면 메시지 플로우의 통합 트랜잭션 속성을 아니오로 바꾸어 기본 트랜잭션 외부의 모든 테이블 참조에 영향을 미치게 하십시오. 이는 각각의 데이터베이스 조작에서 속성을 지정할 필요가 없음을 의미합니다.

주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ac07010_