본문 바로가기
도메인 주도 설계

메세지와 이벤트의 차이점은 무엇인가?

by simplify-len 2021. 10. 23.

들어가기

  트레바리에서는 도메인주도설계를 실천하고 있습니다. 도메인주도설계라는 것은 말 그대로 도메인을 중심으로 복수의 도메인이 책임,역할, 협력을 할 수 있도록 개발하는 것을 말합니다. 실제로 동작되는 코드로서 도메인주도설계를 실천하며 우리는 메세지와 이벤트라는 용어를 자주사용했습니다.

  이미 횟수로 귀로 많이 들어왔지만- 깊이있는 고찰을 하지 못했습니다. 헷갈릴 수 있는 두 용어에 대한 이해를 정리해보려 합니다.

 

본문

도메인주도설계는 잠시 잊어버리고 메세지란 무엇일까?

 

흔히 우리는 '메세지를 전달한다' 라고 말합니다. 이 말은 즉슨, A → B 에게 의미있는 내용을 전달하기 위한 행위라 볼 수 있습니다. 그럼 도메인주도설계에서는 어떤 의미를 가질까요?

 

 

그림 1 - 실제로 트레바리내에서 브레인스토밍을 하며 도출된 내용 중에 일부입니다.(아주 간단한 부분이라...)

여기서 USER, MEMBER 는 AGGREGATES 에 속하고, SIGNED, JOINED 어떤 이벤트를 의미합니다. 여기서 화살표는 이벤트를 관심있어하는 도메인은 무엇인가를 표현합니다.

 

다시 본론으로 돌아가서, 메세지를 전달한다 라는 말은 USER → MEMBER 에게 의미있는 내용을 전달하는 것을 말합니다. 어떤 의미있는 내용을 전달한다는 말일까요?

 

위에서 말한 브레인스토밍의 도출하기 위해서 우리는 이런 내용을 말했을 것입니다.

 

"User는 트레바리에 가입한다."

"Member는 독서모임에 참여할 수 있다."

잠시 조영호님의 오브젝트 책에서 메세지라는 단어가 언급된 부분이 있어 살펴보면 다음과 같습니다.

메세지가 객체를 결정한다.
= 객체에게 책임을 할당하는 데 필요한 메세지를 먼저 식별하고 메시지를 처리할 객체를 나중에 선택합니다. 즉, 객체가 메세지를 선택하는 것이 아니라 메시지가 객체를 선택하게 한다.

다시 말해, 메세지가 무엇인가에 따라 객체가 결정된다는 의미입니다.

그럼 다시 User가 트레바리에 가입한다./Member는 독서모임에 참여할 수 있다. 라는 말은 의미있는 요구사항이며, 이는 메세지에 속하게 됩니다.

 

아직은 이 메세지가 어떤 객체를 결정할 것인가를 모르지만- 우리는 User는 트레바리 서비스에 가입할수 있다., Member는 독서모임에 참여한다. 라는 메세지를 보내고 있다는 사실을 인지할 수 있습니다. 

 

아직 이벤트는 잘 모릅니다. 우리는 이야기하지 않았습니다.

이제 저 메세지를 우리는 이벤트로 변경해보겠습니다.

 

이벤트는 어떤 사건이 발생했다. 라는 것을 의미합니다.

 

User는 서비스에 가입한다 > User는 서비스에 가입함.

Member는 독서모임에 참여한다. > Member는 독서모임에 참여함.

 

아마도 요렇게 변경되 되겠죠?

그림 2 - 이벤트가 도출된 상황

아직 이 둘의 상관관계는 우리는 모릅니다(사실 앞에서 언급했지만...). 하지만 어떤 메세지를 전달해야되는지, 어떤 역할이 위임되었는지 정도만 이해할 수 있었습니다.

 

도메인주도설계에서 이벤트

"누군가 관심있어라 하는 것"

이것을 우리는 이벤트라고 합니다.

 

그럼 어떤 이벤트가 발생하는지 도출되었다면 생각해봅니다.

"User가 가입됨" 은 누가 관심있어라 할까요? 바로 Member 죠. User가 가입됨 이라는 이벤트는 Member 가 관심있어라 합니다.

그러므로, "User가 가입됨" 이라는 이벤트는 Member 에게 전달할 수 있습니다.

 

그림 1 - 실제로 트레바리내에서 브레인스토밍을 하며 도출된 내용 중에 일부입니다.(아주 간단한 부분이라...)

 

방금 우리는 협력을 했습니다. 두 도메인간에 협력을 말이죠. 이렇게 역할, 위임, 협력을 통해서 우리는 도메인주도설계를 진행합니다.

 

(코드로 표현하는 부분은 생략합니다.)

 

 예시 이야기를 풀어가면서 메세지와 이벤트에 대한 언급을 했습니다. 이 두가지는 비교할 수 있는 같은 추상화 레벨은 아니지만, 조금 더 깊은 고찰이 필요하지 않을까 싶어 정리해봤습니다.

댓글