본문 바로가기

Design Patterns

(12)
식별자 맵 패턴 이 포스팅은 어플리케이션 아키텍쳐 패턴 11장을 요약한 내용입니다. 모든 객체를 한 맵에 로드해 각 객체가 한 번씩만 로드되게 한다. 객체를 참조할 때는 맵을 이용해 객체를 조회한다. 식별자 맵(Identity Map)은 단일 비즈니스 트랜잭션이 데이터베이스에서 읽은 모든 객체에 대한 기록을 보관한다. 객체가 필요할 때마다 먼저 객체가 이미 있는지 여부를 식별자 맵에서 확인한다. 작동 원리 식별자 맵의 기본 개념은 데이터베이스에서 읽은 객체를 포함하는 일련의 맵을 유지 관리하는 것이다. 데이터베이스에서 객체를 로드할 때는 먼저 맵을 확인하고 로드하려는 객체와 일치하는 객체가 맵에 있으면 일치하는 객체를 반환한다. 일치하는 객체가 맵에 없으면 객체를 데이터베이스에서 읽고 향후 참조할 수 있게 맵에 저장한다.. 더보기
작업단위 패턴 이 포스팅은 어플리케이션 아키텍쳐 패턴 11장을 요약한 내용입니다. 작업단위 - 트랜잭션 관리 비즈니스 트랜잭션의 영향을 받은 객체의 리스트를 유지 관리하고, 변경 내용을 기록하는 일과 동시성 문제를 해결하는 일을 조율한다. 작동원리 객체의 CUD (생성, 수정, 삭제)가 발생하면 데이터베이스에 기록해야한다. 작업 단위는 이러한 변경 내용을 추적하는 객체다. 데이터베이스에 영향을 미칠 수 있는 작업을 시작하면 작업 단위를 만들고 이러한 변경 내용을 추적해야 하며, 객체를 생성, 수정, 삭제할 때마다 이를 작업단위에 알려야 한다. 장점 어플리케이션 프로그래머는 데이터베이스를 업데이트하는 메서드를 직접 실행할 필요가 없다. 어플리케이션 프로그래머는 변경 내용을 직접 추적하거나 참조 무결성을 고려해 작업 순서.. 더보기
애그리거트 트랜잭션관리 문제상황 - Transaction의 충돌 예시 : 커머스의 주문 시스템에서 아래의 두 요청이 동시에 발생하면 어떤 문제가 발생할까? 운영자가 배송준비중 에서 배송으로 주문상태를 변경하려고 한다. 고객은 배송지 정보를 변경하려고 한다. 위의 예시를 순차적으로 살펴보면 이렇다. 운영자가 주문 애그리거트를 가져온다. 고객이 주문 애그리거트를 가져온다. 운영자가 주문 상태를 변경한다. 고객이 배송지를 변경한다. 위의 상황에서는 애그리거트의 일관성이 깨지게 된다. 이를 해결하려면 두 가지 중 하나를 선택해야한다. 운영자가 배송지 정보를 조회하고 상태를 변경하는 동안 고객이 애그리거트를 수정하지 못하게 막는다. (선점 잠금 Pessimistic Lock) 운영자가 배송지 정보를 조회한 이후에 고객이 정보를 변경하면.. 더보기
애그리거트 DDD START CHAPTER 3 정리 애그리거트, 덩어리 서비스를 개발하기 위해서는 도메인 객체들을 만든다. 서비스가 성장하고 시간이 흐르면 도메인 객체 모델은 복잡해지고 개별 구성요소 위주로 모델을 이해하게 된다. 복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들려면 상위 수준에서 모델을 조망할 수 있는 방법이 필요하다. 애그리거트는 관련된 객체를 하나의 군으로 묶어준다. 수많은 객체를 애그리거트로 묶어서 바라보면 좀 더 상위수준에서 도메인 모델 간의 관계를 파악할 수 있다. 애그리거트의 경계, 어떤 것들을 하나의 덩어리로 볼 것인가? 애그리거트는 독립된 객체 군이며, 각 애그리거트는 자기 자신을 관리할 뿐 다른 애그리거트를 관리하지 않는다. 경계를 설정할 때 기본이 되는 것은 도메인 규칙과 요구.. 더보기