HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
도메인 주도 개발 시작하기
도메인 주도 개발 시작하기
/
🔟
10장 이벤트
🔟

10장 이벤트

10.1 시스템 간 강결합 문제

  • 짧으니 한번 읽어보자
 

10.2 이벤트 개요

  • 이벤트의 용도
    • 트리거
      • 주문을 취소하면 환불처리한다.
      • 북마크 상세조회가 발생하면 로그 테이블에 저장한다.
      • 예약이 발생하면 메일을 발송한다.
    • 데이터 동기화
      • 짜장면의 가격을 변경하면 외부 시스템에 짜장면의 가격이 바뀌었음을 동기화 해 주어야 한다.
       
  • 이벤트의 장점
    • 결합도를 낮출수 있다
 

10.3 이벤트, 핸들러, 디스패처 구현

  • 이벤트 클래스
    • OrderCanceledEvent
    • BookmarkGotDetailedEvent
  • Events/ApplicationEventPublisher
    • 참고 - ApplicationContext 는 ApplicationEventPublisher 를 상속하고 있다.
 

10.4 동기 이벤트 처리 문제

  • 이벤트를 동기로 처리하면
    • 외부 시스템의 성능 저하
    • 트랜잭션
  • 에 대한 고민이 필요해진다.
 
해결방법 1. 이벤트를 비동기로 처리
해결방법 2. 이벤트와 트랜잭션을 연계
 

10.5 비동기 이벤트 처리

  • 이벤트 처리하기로 마음먹은 요구사항을 ‘A 하면 이어서 B 하라' 에서
  • ‘A 하면 최대 언제까지 B 하라' 로 바꿀 수 있는 요구사항은 비동기 처리가 가능하다.
 
이벤트를 비동기 처리 하는 네 가지 방식
  • 로컬 핸들러를 비동기로 실행하기
    • @EnableAsync, @Async
    • 이벤트 핸들러를 별도 스레드로 실행한다.
 
  • 메시지 큐를 사용하기
    • Kafka/RabbitMQ
 
  • 이벤트저장소와 이벤트 포워더 사용하기/ 이벤트 저장소와 이벤트 제공 API 사용하기
    • DB 에 저장후 포워딩/제공
    • 이벤트 발생 순서를 유지해야 하는 경우 사용하면 좋다.
 

10.6 이벤트 적용 시 추가 고려 사항

  • 트랜잭션
  • @TransactionalEventListener -