책 정리
-
part 11. CQRS책 정리/도메인 주도 개발 시작하기 2023. 9. 24. 00:01
CQRS 명령모델과 조회모델 명령모델과 조회모델로 나누는 이유 명령의 경우 행위에 대한 요구사항이며 조회의 경우 데이터를 확인하고 보여주기위한 방식으로 서로의 요구사항이 다름에서 발생하는 구현의 어려움을 해결하고자 나누게 됨 명령모델을 잘 사용하려면? controller에서 DAO를 바로 호출해서 사용해도 무방함 CQRS의 다양한 종류들 DB를 하나만 사용하며 조회와 CUD를 패키지 단위로 나눠서 작업하는 방법 DB를 RDBMS, NoSQL로 나눠서 사용하고 코드를 분리 하여 사용하는 방법 (RDBMS → NoSQL 은 이벤트로 통신한다) 사용전에 고려해야할 사항들은? 장점 조회 성능을 향상 시키는데 유리함 도메인이 집중해서 개발이 가능함 단점 구현해야할 코드가 더 많아짐 더 많은 구현 기술이 필요해짐
-
part 9. 도메인 모델과 바운디드 컨택스트책 정리/도메인 주도 개발 시작하기 2023. 9. 2. 13:59
도메인 모델과 바운디드 컨택스트 바운디드 컨넥스트란? 도메인 내부에서 모델을 공유하게 될때 도메인 모델을 결정할 수 있는 범위를 정의한것 하나의 바운디드 컨텍스트는 하나의 프로젝트를 일반적으로 의미함 도메인 모델과 경계 유사한 요구사항에 의해 여러 도메인에서 하나의 물리적 모델을 공유 하고자 할때가 있는데 이 경우 서로의 개념이 섞이지 않도록 명시적으로 구분되는 경계를 가져서 섞이지 않도록 하는 범위 바운디드 컨텍스트 서로 다른 요구사항을 원하기 때문에 같은 도메인이더라도 달라 질 수 있음 하나의 컨택스트 내부에서는 고유한 의미로 사용됨 해당 역할만 충실하게 수행할 수 있는 데이터로 활용 바운디드 컨텍스트의 구현 조회전용 DB와 domain을 분리해서 사용하라. pagination 에 의한 니즈가 필요하..
-
part 8. 애그리거트 트랜잭션 관리책 정리/도메인 주도 개발 시작하기 2023. 8. 26. 19:05
애그리거트 트랜잭션 관리 애그리거트 트랜잭션 발생원인 애그리거트라는 개념은 개념적으로 동일한 애그리거트를 이용할때 발생할 수 있다. 2개 이상의 호출에서 동일한 개념적인 애그리거트에서 서로 다른 기능을 수행하고 저장하는 경우에 어떤 호출이 먼저 저장되는지에 따라 최종적인 쓰기가 승리하는 방향으로 가게된다. 배송과 배송지 수정을 예로 들어보면 배송이 출발한 후 배송지 수정이 가능하게 되는 문제가 있다. DB 격리수준과는 무관한가? read uncommited : 그냥 무관 read commited : 커밋전 결과를 읽는것이 아니라서 dirty read 와는 무관 repeatable Read : tx 버전과는 무관함 serializable : row lock을 사용하면 해결이 가능함. 어떻게 serializ..
-
part 7. 도메인 서비스책 정리/도메인 주도 개발 시작하기 2023. 8. 20. 01:24
도메인 서비스 도메인 서비스가 나오게된 배경 한 애그리거트로 기능을 구현할 수 없을 때 사용하는 기법 한 애그리거트에 넣기 애매한 도메인 기능을 억지로 특정 애그리거트에 구현하면 안된다. 외부에 대한 의존성이 높아짐 도메인 서비스 하나 이상의 애그리거트가 연관 관계를 통해서 하나의 비즈니스를 처리할때 사용된다. Domain Service 를 Domain에 주입해서 처리하자! public class Order{ public void calculateAmounts( DiscountCalculationService disCalSvc, MemberGrade grade ){ Money totalAmounts = getTotalAmount(); Money discountAmounts = disCalSvc/calcu..
-
part 6. 응용 서비스와 표현 영역책 정리/도메인 주도 개발 시작하기 2023. 8. 13. 02:34
응용 서비스와 표현 영역 응용 서비스 구현 응용 서비스의 역할 도메인 객체간 흐름제어 트랜젝션 접근제어 이밴트 처리 주의사항 도메인로직이 응용서비스에 분산하면 안된다. 코드의 응집성이 떨어짐 여러 응용 서비스에서 동일한 도메인 로직을 구현할 가능성이 높아진다 응용서비스의 크기 2가지 방법 한 응용 서비스 클래스에 회원 도메인의 모든 기능 구현하기 장점 - 동일한 로직을 위한 코드 중복을 제거하기 쉬움 단점 - 코드 크기가 커지면 연관성이 적은 코드가 한 클래스에 함께 위치할 가능성이 높아지게 되는데 결과적으로 관련없는 코드가 뒤섞여 코드를 이해하는 데 방해가 됨 구분되는 기능별로 응용 서비스 클래스를 따로 구현하기 공통로직을 service helper로 분리해서 여러 service코드에서 사용하도록 만듬..
-
part 5. 스프링 데이터 JPA를 이용한 조회 기능책 정리/도메인 주도 개발 시작하기 2023. 8. 6. 00:56
스프링 데이터 JPA를 이용한 조회 기능 CQRS란? DDD를 진행하는데 있어서 왜 CQRS가 필요한가? CQRS를 활용한 high level architecture https://www.codeproject.com/Articles/991648/CQRS-A-Cross-Examination-Of-How-It-Works 중에서 !https://www.codeproject.com/KB/cs/991648/BuildingBlocksSmall.png 왜 분리하는가? Read>>>>>>>write 책에서 의도한 내용은? 간단한 형태의 CQRS구현 https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2F..
-
part 4. 리포지터리와 모델 구현책 정리/도메인 주도 개발 시작하기 2023. 7. 29. 19:19
리포지터리와 모델 구현 JPA를 이용한 리포지터리 구현 리포지터리 인터페이스는 다음과 같은 형식을 가져야한다. public interface OrderRepository{ Order findById(OrderNo no); void save(Order order); } 엔티티와 벨류 매핑 get 과 find 함수의 차이 get: 찾고자 하는 데이터가 없다면 throw find : 찾고자 하는 데이터가 없다면 return null 밸류 컬렉션 매핑 p 140 - table PURCHASE_ORDER 부분에서 ORDERER_ID를 가지고 있음에도 불구하고 왜 ORDER_NAME을 가지는가? Order_Name은 Orderer_Name을 의미한다면 : 주문자 명을 변경하는 요구사항이 있을수 있기 때문 Order..
-
part 3. 애그리거트책 정리/도메인 주도 개발 시작하기 2023. 7. 23. 11:01
애그리거트 애그리거트 애그리거트란? 변경의 단위다. 데이터를 변경하는 단위로 다뤄지는 객체의 모임을 애그리게이트라고한다. 데이터변경의 단위가 되므로 트랜잭션이나 로크와도 밀접한관계를 갖는다. 저자의 경험 다수의 애그리거트가 한개의 엔티티 객체만 갖는 경우가 많았으며, 두 개이상의 엔티티로 구성되는 애그리거트는 드믈었다. 애그리거트 루트 애그리거트 루트의 역할 애그리거트가 제공해야 할 도메인 기능을 구현 업무규칙을 무시하고 직접 DB테이블의 데이터를 수정하는 것과 같은 결과를 만든다 ← 얼마나 자주 발생하는가? 주의사항 애그리거트는 독립적이어야함 한 트랜잭션에서는 한 개의 애그리거트만 수정해야 한다. 외부에서 내부 밸류타입을 꺼내서 사용하지 못하도록 주의 해야한다. 리포지터리와 애그리거트 NoSQL 에서는..