데브허브 | DEVHUB | Event-Driven Microservices : What Happens When Kafka Fails Midway? (Real-Time Fixes!) @JavatechieEvent-Driven Microservices : What Happens When Kafka Fails Midway? (Real-Time Fixes!) @Javatechie
- 비동기 마이크로서비스에서 초기 요청 서비스가 즉시 성공 응답을 반환한 후, 후속 서비스의 처리 실패나 완료 상태를 알 수 없어 사용자에게 부정확한 상태를 제공하는 문제가 발생합니다. ⚠️
- 예시로, 대출 서비스가 대출 신청을 '대기 중'으로 처리하고 신용 위험 서비스가 백그라운드 검사를 수행하지만, 신용 위험 서비스가 대출 서비스에 직접 상태를 업데이트하지 못하는 상황이 제시됩니다. 🏦
- 한 마이크로서비스가 다른 서비스의 데이터베이스를 직접 업데이트하는 것은 마이크로서비스 아키텍처의 핵심 원칙을 위반하는 나쁜 관행입니다. 🚫
- REST API 호출을 통해 상태를 업데이트하는 방식은 네트워크 트래픽 증가, 지연 시간, 확장성 및 복원력 문제로 인해 권장되지 않습니다. 📞
- 가장 권장되는 해결책은 이벤트 기반 아키텍처를 사용하여, 처리 완료 서비스(예: 신용 위험 서비스)가 Kafka에 '신용 결정 이벤트'와 같은 새로운 이벤트를 발행하는 것입니다. 🚀
- 초기 요청 서비스(예: 대출 서비스)는 이 이벤트를 소비하여 자체 데이터베이스의 대출 상태를 업데이트함으로써, 사용자에게 정확하고 최신 정보를 제공합니다. ✅
- 이러한 이벤트 기반 패턴은 시스템을 더 빠르고, 복원력 있으며, 느슨하게 결합된 형태로 만들고, 일반적인 마이크로서비스 안티패턴을 피하게 합니다. ✨
- 각 서비스는 필요에 따라 생산자(Producer)와 소비자(Consumer) 역할을 모두 수행하여, 비동기 흐름을 완전하고 일관되게 유지할 수 있습니다. 🔄
- 구현에는 새로운 이벤트 객체 정의, Kafka 생산자/소비자 설정(JSON 직렬화 포함), 그리고 필요에 따른 토픽 동적 생성이 포함됩니다. ⚙️