트랜젝션(2)
-
이벤트
## 시스템 간 강결합 문제 쇼핑몰에서 구매를 취소하면 환불처리를 해야한다. 보통 결제 시스템은 외부에 있으므로 Order 도메인에서 구매 취소에 관련된 서비스를 다음과 같이 파라미터로 주입할 것이다 위처럼 외부 시스템을 도메인에서 호출 시 3가지 문제가 발생할 수 있다. 1. 외부 서비스가 비정상일 경우 트랜젝션 처리를 어떻게 할까? - 롤백을 해야할까? 일단 커밋을 해야할까?, 아니면 상태만 변경한 후에 나중에 다시 시도를 해야할까? 2. 외부 시스템의 응답 시간이 길어지면 어떻게 할까? - 대기 시간만큼 응답시간이 길어져서 성능에 악영향을 주지 않을까? 3. 도메인 객체에 서비스를 전달하면 설계상 문제가 발생하지 않을까? - 도메인 로직과 외부 로직이 뒤섞이지 않을까? 위 문제가 발생하는 이유는 바..
2023.09.09 -
애그리거트 트랜잭션 관리
트랜젝션이 잘못되면 데이터의 일관성이 깨진다. 즉, 애그리거트의 일관성이 깨지기 떄문에 적절한 트랜잭션 처리 기법이 필요하다. 애그리거트에 대해 사용할 수 있는 대표적인 트랜잭션 처리 방식은 선점 잠금과 비선점 잠금이 있다. # 선점 잠금 선점 잠금은 먼저 애그리거트를 구한 스레드가 애그리거트 사용이 끝날 때까지 다른 스레드가 해당 애그리거트를 수정하지 못하게 막는 방식이다. 스레드 1이 선점 잠금 방식으로 애그리거트를 구하면, 스레드2 는 애그리거트에 대한 잠금이 해제할 때까지 블로킹(Blocking)된다. 선점 잠금은 보통 DMBS가 제공하는 행단위 잠금을 사용해서 구현한다. Jpa EntityManager.find() 함수를 통해 선점 잠금 방식을 사용할 수 있다. LockModeType을 PESS..
2023.08.26