분산 트랜잭션은 트랜잭션과 무엇이 다른가? ?

업무 중에 분산 트랜잭션에 빠져서 여러가지 조사했기 때문에 배운 것을 정리합니다.

1. 분산 트랜잭션이란?



1.1. 트랜잭션이란?



먼저 트랜잭션의 정의를 설명합니다.
트랜잭션이란 애플리케이션이 데이터베이스에 대해 insert, update, delete 등의 처리를 실행했을 때의 처리의 그룹으로, 커밋, 혹은 롤백이 실행될 때까지 계속됩니다.


1개의 트랜잭션에 포함되는 처리는 1개라도 좋고 복수 있어도 괜찮습니다.
그러나, 트랜잭션내의 처리가 1개라도 실패했을 경우는 데이터가 불완전한 상태이므로 처리를 개시하기 전에 되돌리고 싶다고 하는 것이 많다고 생각합니다.
예를 들어, 상품이 팔렸을 때 판매 관리 테이블에 수치를 더하여 재고 관리 테이블에서 재고를 줄이는 처리를 하는 애플리케이션의 경우,
판매 관리 테이블로의 갱신은 성공했지만, 재고 관리 테이블에의 갱신은 실패했을 경우, 상품은 팔리고 있는데 재고는 줄어들지 않은 상태가 됩니다.
이것은 이상하기 때문에 일단 판매 관리 테이블도 업데이트하기 전에 다시해야합니다.
이 때 처리의 그룹(=트랜잭션)을 매출 관리 테이블과 재고 관리 테이블의 갱신으로 설정해 두면 2개가 성공해 드디어 커밋. 한쪽이라도 실패하면 롤백한다.
라는 동작을 할 수 있게 됩니다.


한마디로 정리하면(문중에서도 썼습니다만) 트랜잭션(transaction)는 처리의 그룹의 일입니다.
그룹에 몇 가지 처리를 넣을지는 응용 프로그램에서 설정할 수 있습니다.

1.2. 분산 트랜잭션이란?



그럼 드디어 분산 트랜잭션이란 어떤 것인가 하는 이야기가 됩니다.
분산 트랜잭션은 이전 판매 관리 테이블과 재고 관리 테이블의 예에서 말하면 아래 그림과 같은 DB 구성의 경우에 발생합니다.



그림을 보면 차이를 알 수 있다고 생각합니다만, 매출 관리 테이블과 재고 관리 테이블이 다른 DB에 속하고 있습니다.
즉, 트랜잭션이 성공하려면 데이터베이스 1의 판매 관리 테이블을 업데이트하고 데이터베이스 2의 재고 관리 테이블을 업데이트하는 데 성공해야 합니다.
둘 중 하나라도 실패하면 판매 및 재고 계산이 일치하지 않으므로 둘 다 롤백해야합니다.
데이터베이스가 2개가 된 것만으로 실제의 움직임으로서는 원래의 트랜잭션과 같다고 생각해도 좋을 것입니다.

좋은 웹페이지 즐겨찾기