문서 보기역링크PDF로 내보내기맨 위로 이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요. # 도메인 이벤트와 메시지 버스 돌아보기 - [[이벤트]]는 [[단일 책임 원칙]]을 지키도록 돕는다. - 한곳에서 여러 관심사를 처리하면 코드가 꼬여버린다. - 이벤트를 사용하면 [[주된 유스 케이스]]와 [[부수적인 유스 케이스]]를 분리해 모든 것을 깔끔하게 유지할 수 있다. - 이벤트를 사용해 [[애그리케이트]]들이 서로 통신하고 여러 테이블을 락으로 잠그는 오랫동안 실행된 [[트랜잭션]]이 더 이상 필요하지 않다 - [[메시지 버스]]는 [[메시지]]를 [[핸들러]]에게 연결한다 - 메시지 버스를 이벤트와 [[이벤트 소비자]]를 연결하는 사전으로 생각할 수 있다 - 메시지 버스는 이벤트의 의미를 전혀 모른다. - 메시지 버스는 단지 시스템에서 메시지를 전달하기 위한 둔한 인프라일 뿐이다. - 첫번째 선택지: [[서비스 계층]]이 이벤트를 발생시키고 [[메시지 버스]]에 전달한다 - 시스템에서 이벤트를 사용하는 가장 쉬운 방법은 작업 단위를 커밋한 직후 `bus.handle`(어떤 새로운 이벤트)를 호출하는 것이다. - 두번째 선택지: [[도메인 모델]]이 이벤트를 발생시키고 서비스 계층이 메시지 버스에 이벤트를 전달한다. - 이벤트를 언제 발생시킬지 결정하는 논리는 모델과 함께 있어야 한다. - 따라서 도메인 모델에서 이벤트를 발생시키면 시스템 설계와 시스템의 테스트 가능성으르 높일 수 있다 - 모델이 commit을 한 다음 핸들러가 이벤트를 찾아서 이벤트 버스에 싣는 것운 쉬운 일이다. - 세번째 선택지: [[UoW]]가 [[애그리케이트]]에서 이벤트를 수집해서 메시지 버스에 전달한다 - `bus.handle(aggreate.events)`를 모든 핸들러에 추가하는 작업은 성가시므로, 메모리에 적재한 객체들이 발생시키 이벤트를 작업 단위가 발생하도록 시스템을 간결하게 만든다. - 이 방법은 가장 복잡한 설계이며 어쩌면 [[ORM]]의 마법에 의존하는 것일 수 있지만, 일단 설정하고 나면 사용하기 쉽고 깔끔하다 open/도메인-이벤트와-메시지-버스-돌아보기.txt 마지막으로 수정됨: 2022/01/09 06:17저자 127.0.0.1