도메인 주도 개발 시작하기(5)
JPA 와 관련된 부분은 생략한다.
5-1. 시작에 앞서
•
CQRS (Command and Query Responsibility Segregation)
◦
명령 (command) 모델과 조회 (query) 모델을 분리하는 패턴
•
명령 모델
◦
상태를 변경하는 기능을 구현
•
조회 모델
◦
데이터를 조회하는 기능을 구현
•
도메인 모델은 명령 모델로 주로 사용한다
5-2. 검색을 위한 스펙
•
검색 조건을 다양하게 조합해야 할 때 사용할 수 있는 것이 스펙(Specification) 이다
◦
스펙은 애그리거트가 특정 조건을 충족하는지를 검사할 때 사용하는 인터페이스이다
예시 코드
•
만약 Repository 가 메모리에 모든 애거르기터를 보관하고 있다면 내부적으로 처리할 수 있겠지만, 실제로는 이렇게 구현하지 않는다.
◦
모든 애그리거트 객체를 메모리에 보관하기도 어렵고, 설사 메모리에 다 보관할 수 있다고 하더라도 조회 성능에 심각한 문제가 발생한다.