본문 바로가기

ddd

최범균 <DDD START! > 4-5장 요약 4장. 리포지터리와 모델 구현 별도 테이블에 저장하는 밸류 매핑 애그리거트에 속한 객체가 밸류인지 엔티티인지 구분하는 방법은 고유 식별자를 갖는지 여부를 확인하는 것이다. 하지만 식별자를 찾을 때 매핑되는 테이블의 식별자를 애그리거트 구성요소의 식별자와 동일한 것으로 착각하면 안된다. 별도 테이블로 저장되고 테이블에 PK가 있다고 해서 테이블과 매핑되는 애그리거트 구성요소가 고유 식별자를 갖는 것은 아니다. 보통 주문 애그리거트는 실주문을 의미하는 Order 테이블과 주문 품목을 의미하는 Order Lines 테이블로 구성되어 있다. 여기서 주문 품목(Order Lines)은 밸류이다. Order Lines 테이블도 고유 PK를 갖고 있지만, 주문 애그리거트를 식별하는 고유 식별자는 주문번호이다. (위 ..
(Strangler Pattern/스트랭글러 패턴) 레거시 코드를 마이크로 서비스 아키텍처로 개선하기 Strangler Pattern모놀리틱 아키텍처로 된 시스템이 계속 자라나면, 더이상 관리할 수 없는 수준이 된다.그리고 아키텍처가 복잡해지거나, 비즈니스 로직이 파편화되면 코드를 관리하기 어려워진다. 그러다보면 배포하기도 까다로워지고, 배포가 무서워지기도 한다. 이럴 땐 버티거나, 서비스 아키텍처로 코드를 리팩토링해야한다. 서비스 아키텍처로 서비스를 한번에 옮기는 것은 리스크가 있다. 시스템은 정상적으로 돌아가면서, 점진적으로 서비스 아키텍처로 코드를 분리해나가는 디자인 패턴이 Strangler Pattern이다. 개선 방법1. 분리해내야하는 도메인을 Service Layer으로 리팩토링을 해야한다. 2. 그리고 분리해낸 도메인의 API가 호출되면, Proxy 단에서 라우팅을 분기처리해준다. 3. 신규..
(읽을거리)루비온레일즈 개발자를 위한 DDD 읽을 거리medium 포스팅Ruby on rails DDD => 읽어보니 루비에서는 어떤 느낌으로 DDD를 쓰는지 감이 온다 공식적인 느낌이 드는 ddd-ruby 사이트ddd-ruby.github.io레일즈 앱에서 비즈니스 도메인을 어떻게 관리할 건지 토론하는 페이지 Struggling with complex Rails app and business domain?2012년도에 작성된 sitepoint 포스팅 시리즈 DDD for Rails Developers. Part 1: Layered ArchitectureDDD for Rails Developers. Part 2: Entities and ValuesDDD for Rails Developers. Part 3: Aggregates스크립트 언어의 DDD ..
최범균 <DDD START! > 3장 요약 3장. 애그리거트복잡한 도메인 객체를 이해하고, 관리하기 쉬운 단위로 만들려면, 상위 수준에서 모델을 조망할 수 있는 방법이 필요하다.수많은 객체를 애그리거트로 묶어서 생각하면, 좀 더 상위 수준에서 도메인간의 관계를 이해하는 데에 도움이 된다. 그리고 애그리거트는 일관성을 관리하는 기준이 되어서, 복잡한 도메인을 단순한 구조로 만들어준다. 참고 : DDD 구현 기초 슬라이드 쉐어 위의 다이어그램처럼 애그리거트는 서로 경계가 있다. 한 애그리거트에 속한 객체는 다른 애그리거트에 속하지 않는다. 애그리거트는 독립적이기 때문에, 다른 애그리거트를 관리하지 않는다. 이러한 경계는 도메인 규칙과 요구사항과 관련있다. 도메인 규칙에 따라 함께 생성되는 구성요소는 한 애그리거트에 속할 가능성이 높다. 그래서 한 애..
최범균 <DDD START! > 1장-2장 요약 1장. 도메인 모델 시작도메인 모델특정 도메인을 개념적으로 표현한 것이다. 도메인 모델은 객체 모델 / 상태 다이어그램 등으로 표현할 수 있다. 도메인 모델 패턴 도메인 모델은 엔터티와 밸튜 타입으로 구성된다.엔터티는 고유한 식별자를 갖고 있는 개념을의미하고, 밸류타입은 엔터티에 속해있으면서, 개념적으로 완전한 하나를 표현할 때 사용한다.예를 들어, "주문"이라는 도메인은 고유한 주문 번호를 갖고 이는 엔터티라고 볼 수 있다. 그리고 주문 안에는 배송지 정보, 수신인 등을 의미하는 속성이 저장되는데, 이를 밸류 타입으로 볼 수 있다. 주의할 점도메인 모델에서는 get/set 메서드를 사용하지 않는 것이 좋다. set 메서드를 사용하면, 도메인 객체를 생성할 때 완전한 상태가 아닐 수도 있다는 단점이 있다..