목록으로
'언젠가 읽기' 컨텐츠는 논문이나 영문 컨텐츠 등 언젠가 읽으려고 즐겨찾기 하고선 읽지 않고 계속 미룰만한 컨텐츠를 읽고 요약하거나 소개합니다.

이벤트 기반 아키텍처에서 여러 도메인의 이벤트를 수신하는 도메인

서비스 간 통신의 기본 개념

서비스 간의 통신은 주로 명령(Command) , 쿼리(Query) , 그리고 이벤트(Event) 로 구분됩니다. 각 통신 방식은 서비스 간의 상호작용 방식과 응답 기대 정도에 따라 다르게 사용됩니다.

이벤트와 쿼리의 차이점

  • 이벤트(Event)
    • 설명 : 과거에 발생한 사실을 나타냅니다.
    • 응답 기대 여부 : 응답을 기대하지 않습니다.
    • 통신 방식 : 발신자가 이벤트를 발생시키고, 여러 수신자가 이를 수신하여 처리합니다. 발신자는 수신자에 대한 지식 없이 이벤트를 발행합니다.
  • 쿼리(Query)
    • 설명 : 현재 상태에 대한 정보를 요청하는 것입니다.
    • 응답 기대 여부 : 응답을 기대합니다.
    • 통신 방식 : 요청-응답 방식으로, 발신자는 필요한 정보를 요청하고 수신자로부터 응답을 받습니다.

명령(Command)의 이해

명령 은 특정 작업을 수행하거나 상태를 변경하려는 의도를 표현합니다. 명령은 성공적으로 실행되었는지 여부에 대한 응답을 받을 수 있습니다.

Ask 명령

  • 설명 : 실행 결과에 대한 확인이나 오류 메시지를 기대하는 명령입니다.
  • 응답 기대 여부 : 명령이 성공적으로 실행되었는지 확인하는 응답을 기대합니다.
  • 통신 방식 : 요청-응답 방식
  • 예시 : 사용자가 주문을 취소하는 요청을 보내는 경우. 주문이 존재하지 않거나 이미 완료된 경우 취소할 수 없습니다.

Tell 명령

  • 설명 : 명령의 결과에 대해 응답을 기대하지 않는 명령입니다.
  • 응답 기대 여부 : 응답을 기대하지 않습니다.
  • 통신 방식 : Fire-and-Forget 방식
  • 예시 : 알림 서비스를 통해 사용자에게 메시지를 보내는 경우. 발신자는 알림 서비스가 메시지를 처리할 것이라는 것을 믿고 추가적인 응답을 기다리지 않습니다.

Tell 명령의 활용 예시

알림 서비스의 경우, 여러 도메인에서 이벤트가 발생하면 이를 사용자에게 알리는 메시지를 전송해야 합니다. 이때 각 이벤트에 대해 별도의 응답을 기다리는 대신, 단순히 알림 서비스를 "알림을 처리해달라"고 명령하는 방식인 "tell 명령"을 사용합니다. 이는 서비스 간의 의존성을 줄이고, 오류 처리를 알림 서비스 자체에서 관리할 수 있게 합니다.

참고 자료

  • 이벤트 기반 아키텍처의 이해
  • 마이크로서비스 통신 패턴
  • 비동기 통신의 종류와 선택 기준