[DDD] 오프라인 선점 잠금 관련 LockManager 인터페이스와 관련 클래스
Uploaded by N2T
- 도메인주도개발
- · 2024. 1. 25.
문제 상황상황한 주문 애그리거트에 대해 운영자가 배송 상태로 변경하려고 하는 동안 사용자가 배송지 주소를 변경한다면 어떤 문제가 발생할까?상황 설명운영자 스레드:주문 애그리거트를 구함배송 상태로 변경트랜잭션 커밋고객 스레드:주문 애그리거트를 구함배송지 변경트랜잭션 커밋충돌!문제점운영자와 고객이 동시에 같은 주문 애그리거트를 수정할 때 발생한다.트랜잭션마다 리포지터리는 새로운 애그리거트 객체를 생성한다.운영자 스레드와 고객 스레드는 같은 주문 애그리거트를 나타내지만물리적으로 다른 객체를 사용한다.같은 Order라도 서로 다른 메모리주소를 가지며,속성도 다를 수 있음.운영자 스레드가 주문 애그리거트 객체를 배송 상태로 변경해도, 고객 스레드가 사용하는 객체에는 영향을 주지 않는다.고객 스레드는 주문 애그리거..
문제 상황@Entity public class Order { @Id private Long id; @Version private Long version; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true) private List orderLines; // 기타 필드와 메서드 } @Entity public class OrderLine { @Id private Long id; private String product; private int quantity; @ManyToOne private Order order; // 기타 필드와 메서드 }@Service public class OrderService { @Persis..
개요아틀라시안의 컨플루언스의 경우 문서를 편집하는 경구 다른 사용자가 이미 편집중인 경우, 충돌 가능성을 사전에 안내하는 기능을 제공함.여러 사용자가 동시에 한 문서를 수정할 때 발생하는 충돌을 방지함.오프라인 선점 잠금?한 사용자가 문서를 편집할 때 다른 사용자가 해당 문서의 수정 화면을 열지 못하도록 하는 기능입니다.이는 단일 트랜잭션에서의 선점 잠금 방식과는 달리 여러 트랜잭션에 걸쳐 동시 변경을 방지할 수 있다고 한다.작동 원리사용자 A가 문서 수정 폼을 요청하면 시스템은 오프라인 잠금을 구한다.사용자 B가 동일한 문서의 수정 폼을 요청하면이미 잠금이 선점된 상태이므로 잠금을 구할 수 없고, 에러 화면이 표시됩니다.사용자 A가 수정을 완료하고 요청을 보내면시스템은 데이터를 수정하고오프라인 잠금을 ..
Uploaded by N2T
응용 서비스도메인 객체 ↔ 표현 영역 사이를 연결하는 창구 역할을 한다.public Result doSomeCreation(CreateSomeReq req) { // 1. 데이터 중복 등 데이터가 유효한지 검사한다. validate(req); // 2. 애그리거트를 생성한다. SomeAgg newAgg = createSome(req); // 도메인 영역 // 3. 리포지터리에 애그리거트를 저장한다. someAggRepository.save(newAgg); // 레포지터리 영역 // 4. 결과를 리턴한다. return createSuccessResult(newAgg); // 반환값의 전 }응용 서비스가 복잡해진다면.. 도메인 로직의 일부를 구현하고 있을 가능성이 높습니다.코드 중복이나 로직 분산 등 코드 ..
암호 변경기능public class ChangePasswordService { public void changePassword(String memberId, String oldPw, String newPw) { Member member = memberRepository.findById(memberId); checkMemberExists(member); member.changePassword(oldPw, newPw); } }changePassword 의 경우 Member 애그리거트에서 수행중이다.왜 Member 애그리거트에서 해당 행위를 수행할까?이유는 2가지이다코드의 응집성의 저하도메인 데이터와 관련된 로직이 분산되어 있으며, 도메인 로직을 이해하기 위하여 여러 영역을 분석해야할 가능성이 있음.코드의 중..