본문 바로가기

Design Pattern

MVCC (MultiVersion Concurrency Control) Pattern

728x90
반응형

1. MVCC 패턴

다중 버전 동시성 제어 (MVCC) 패턴은 데이터베이스에서 일반적으로 사용되는 동시성 제어 방법으로, 같은 데이터에 대한 트랜잭션 간의 충돌을 피하기 위해 사용된다. 이 방법은 각 트랜잭션이 수정하는 각각의 데이터 항목에 대해 별도의 "버전"을 생성함으로써 작동한다. 이를 통해 각 트랜잭션은 자신만의 데이터 스냅샷으로 작업할 수 있으며, 다른 동시 트랜잭션에서 수행된 변경 사항에 영향을 받지 않는다.

이 프로젝트의 맥락에서, MVCC 패턴은 `ProductEntity`의 버전 필드를 사용하여 애플리케이션 수준에서 구현된다. 제품이 업데이트될 때, `ProductMapper`의 `updateIfVersionMatches` 메소드는 데이터베이스의 제품 버전이 업데이트하려는 `ProductEntity`의 버전과 일치하는지 확인한다. 버전이 일치하면 제품이 업데이트되고 그 버전이 증가한다. 버전이 일치하지 않으면, 다른 트랜잭션이 마지막으로 읽은 이후에 제품을 업데이트했다는 것을 의미하며, 다른 트랜잭션에서 만든 변경 사항을 덮어쓰지 않기 위해 업데이트가 수행되지 않는다.

이것은 낙관적 잠금의 한 형태로, 트랜잭션 간의 충돌이 드물다고 가정하고, 트랜잭션이 잠금 없이 진행되게 하며, 충돌의 부재를 커밋 시간에만 검증하는 것이 좋다고 가정한다. 충돌이 감지되면, 충돌을 감지하는 트랜잭션(이 경우, 제품의 버전을 확인함)은 충돌을 어떻게 해결할지 결정할 수 있다. 예를 들어, 트랜잭션을 재시도하거나, 업데이트를 수행할 수 없음을 나타내는 예외를 던질 수 있다.

2. 예제 코드

- 예제 코드는 아래의 Git hub에 업로드 되어 있다.

https://github.com/Nanninggu/MVCC-Pattern.git

 

GitHub - Nanninggu/MVCC-Pattern: About Multi-Version Concurrency Control Pattern

About Multi-Version Concurrency Control Pattern. Contribute to Nanninggu/MVCC-Pattern development by creating an account on GitHub.

github.com

 

- 끝 -

728x90
반응형

'Design Pattern' 카테고리의 다른 글

RaceContion을 회피하기 위한 디자인 패턴 종류  (0) 2024.05.31
Chain-of-Responsibility-Pattern  (0) 2024.05.29
Template-Method-Pattern  (0) 2024.05.27
Bridge-Pattern  (0) 2024.05.25
Observer-Pattern  (0) 2024.05.25