haandol / haandol.github.com

Other
3 stars 1 forks source link

이벤트 스토밍에서 도메인 로직 표현 방법 및 폴리시를 어떤 계층에서 구현하게 되는지 문의 드립니다. #15

Closed segomin closed 2 years ago

segomin commented 2 years ago

안녕하세요? 이벤트 스토밍에 대해 설명해주신 블로그 잘 읽어 보았습니다. 덕분에 여러 다른 글을 읽으면서 알게된 내용들이 정리되는 느낌 이었습니다.

다만 이벤트 스토밍을 통해서 도출한 결과를 코드로 구체화 하는것을 생각해보면서 폴리시 관련해서 궁금한 부분이 있어서 질문 드립니다.

도출한 Event 는 Domain Event 로 만들거나, DB 에 저장하는 과정 정도로만 생각을 했었고, 폴리시는 Domain Event 로 만들어진 Event 를 처리하는 Handler 정도로 생각 하고 있었습니다. 따라서 폴리시로 도출한 부분은 인바운드 어댑터 혹은 유스케이스 계층에서 구현될 거라 생각했는데요.

폴리시를 폴리시와 프로세스 매니저로 나누신 부분을 보면서 CRON JOB 을 제외한, 다른 부분은 도메인 로직 부분이 들어가게 되는듯 해 보였습니다.

이벤트 스토밍 과정에서는 도메인 로직을 표현하기 어려워 보여서 정책이라는 요소가 나왔나 라고 생각도 하게 되었고, 이게 맞다면 이벤트 스토밍 결과를 토대로 구현할 때 폴리시를 어그리게잇 내부에서 구현해야 할 텐데요.

이벤트 스토밍을 이렇게 만들었을리가 없기에 제가 분명 정책을 잘못 이해한듯 합니다.

혹시 이벤트 스토밍에서 도메인 로직을 표현하는 방법이 있을지와, 도출된 폴리시를 어떤식으로 구현하시는지 예제 코드나 조금 상세한 설명이 있을지 문의 드립니다.

segomin commented 2 years ago

저의 질문과 유사한 글이 있어서 첨부합니다. https://github.com/kgrzybek/modular-monolith-with-ddd/issues/38

폴리시 로직이 단순하다면 Handler 에서 처리하고, 복잡해지면 Domain Service 에서 구현하면 된다는 답변이네요.

같은 맥락으로 폴리시에 만드신 프로세스는 Domain Service 로 구체화 하시는건가요?

haandol commented 2 years ago

안녕하세요, 댓글이 달려있는지 모르고 답이 엄청 늦어졌네요.

알고계시듯이 이벤트스토밍의 이벤트는 DDD 의 도메인이벤트와 같으며, 즉, 시스템내부의 상태변화에 따른 결과를 이벤트로 표현합니다.

이벤트 스토밍은 개발자만 참여하는 행사(?)가 아니며, 각 도메인의 지식을 부분적으로 가지고 있는 도메인 전문가들이 주 가 되는 행사입니다. 따라서 이벤트 핸들러의 비즈니스 로직 전체를 표현하기 보다는, 바운디드 컨텍스트 내에서 해당 이벤트를 처리할 때 고려해야 할 constraints 또는 invariants 를 폴리시로 표현하는 경우가 대부분입니다.

개인적으로는, 실제 구현을 하기 위한 비즈니스 로직을 컴포넌트 단위로 표현하고 싶다면 이벤트 스토밍으로 얻은 이벤트 흐름을 기반으로 c4model 같은 다이어그램 방식으로 표현하는 것을 추천합니다.