이벤트 알림 패턴은 '무언가 발생했다'는 신호만 보내고, 변경된 데이터의 전체 상태나 상세 정보 대신 최소한의 정보(예: 고객 ID, 이벤트 유형)만 포함합니다. 🔔
이 패턴의 주요 장점은 페이로드가 매우 가벼워 네트워크 대역폭, 처리 오버헤드, 직렬화/역직렬화 시간을 줄이고, 저장 비용 및 소비자 애플리케이션의 메모리 사용량을 절감한다는 것입니다. 🚀
소비자가 필요할 때 최신 데이터를 직접 가져오므로 데이터 동기화 위험이 줄어들고, 오래된 데이터를 받을 가능성이 낮아지며, 소비자가 언제 데이터를 가져올지 결정하는 유연성을 제공하여 타이밍과 데이터 간의 결합도를 낮춥니다. 🔄
생산자 계약을 변경하지 않고도 새로운 소비자를 쉽게 추가할 수 있어 시스템 간의 느슨한 결합을 촉진하는 이점이 있습니다. 🤝
단점으로는 실시간 처리에 적합하지 않다는 점인데, 각 데이터 가져오기 호출이 추가적인 왕복 지연을 발생시키고 재시도 시 지연 시간이 더욱 증가하여 전체 처리 시간이 길어집니다. ⏱️
여러 소비자가 데이터를 가져오기 위해 생산자 마이크로서비스에 동시에 요청을 보내면 네트워크 트래픽과 생산자 부하가 크게 증가할 수 있으며, 이는 대규모 시스템에서 문제가 될 수 있습니다. 📈
소비자가 데이터 소스의 가용성에 의존하게 되어 숨겨진 결합이 발생하고, 생산자 서비스 장애 시 연쇄적인 실패로 이어질 수 있는 위험이 있습니다. 🔗
소비자가 데이터를 가져오는 동안 원본 데이터가 변경될 경우, 소비자는 오래된 데이터를 가져올 수 있으며, 이로 인해 서로 다른 소비자가 다른 데이터 상태를 보는 일관성 불일치(경쟁 조건)가 발생할 수 있습니다. 🏁
이 패턴은 데이터가 너무 크거나 자주 변경될 때, 각 소비자가 필요한 데이터 조각만 쿼리해야 할 때, 민감한 필드가 이벤트에 노출되지 않고 API 계층에서 접근 제어가 필요할 때, 그리고 더 느슨한 결합을 원할 때 유용합니다. 💡
반대로, 소비자가 추가 데이터 가져오기 지연을 기다릴 수 없을 때, 낮은 지연 시간 워크플로우에 필요할 때, 이벤트 뒤의 API가 고가용성이 아닐 때, 그리고 소비자가 나중에 가져옴으로써 발생할 수 있는 최신 또는 일관성 없는 상태가 허용되지 않을 때는 사용을 피해야 합니다. 🚫