한 주문 애그리거트에 대해 운영자는 배송 상태로 변경할 때 사용자는 배송지 주소를 변경하면 어떻게 될까?
트랜잭션 마다 리포지터리는 새로운 애그리거트 객체를 생성하므로 운영자 스레드와 고객 스레드는 같은 주문 애그리거트를 나타내는 다른 객체를 구하게 된다.
따라서 운영자 스레드가 주문 애그리거트 객체를 배송 상태로 변경해도 고객 스레드가 사용하는 주문 애그리거트 객체에는 영향을 주지 않음.
이 상황에서 두 스레드는 각각 트랜잭션 커밋 시 수정 내용을 DB에 반영하게 되어, 배송 상태로 바뀌고 배송지 정보도 바뀌게 된다.
운영자는 기존 배송지 정보를 이용해 배송 상태로 변경했으나 그 사이 고객은 배송지 정보를 변경한 문제 발생.
⇒ 애그리거트의 일관성이 깨지게 된다.
일관성이 깨지는 문제가 발생하지 않도록 하려면?
이 두 가지는 애그리거트 자체의 트랜잭션과 관련 있음
먼저 애그리거트를 구한 스레드가 애그리거트 사용이 끝날 때까지 다른 스레드가 해당 애그리거트를 수정하지 못하게 막는 방식