Kafka 프로듀서와 컨슈머의 데이터 접근 설계 고민
문제 요약
소비자와 레스토랑의 연락처 데이터를 어디에서 가져올 것인가?에 대한 문제가 대두되었다.
- 프로듀서(요청 서비스): Kafka 메시지를 보내기 전에 데이터를 조회한다.
- 컨슈머(알림 서비스): Kafka 메시지를 처리할 때 데이터를 조회한다.
어제 정해진 요청 서비스에서 데이터를 요청해 가져오는 경우 데이터 불일치가 발생할 경우 알림이 누락되고, 사용자 경험이 저하될 가능성이 있다.
튜터님 피드백
데이터 불일치에 대한 인정 및 CS 처리
데이터 불일치를 인정하고 문제가 발생했을 경우, 고객센터(CS)를 통해 대응한다. 시스템 복잡도를 줄이면서 일정 수준의 서비스 품질을 유지할 수 있다.
Redis를 활용한 실시간 데이터 캐싱
알림 서비스를 소비할 때 최신 데이터를 조회한다. 대신 캐시를 활용하여 이메일 변경 사항을 즉시 반영하고, 알림 데이터의 정확도를 높인다.
Kafka 리트라이 로직 추가
전송 실패 시 메시지를 재전송하는 로직을 구현한다. 일시적인 네트워크 문제나 시스템 장애로 인한 메시지 누락을 방지할 수 있다.
Redis 키 관리 및 데이터 만료 설정
Redis 키와 만료 시간을 적절히 설정해 불필요한 데이터 축적을 방지한다. 최신 데이터만 유지하면서, 데이터 정확도를 더 높인다.
결정된 방식
유저 ID와 가게 ID를 기준으로 데이터를 관리하는 것으로 다수결로 결정되었다.
기술 구현 및 진행 상황
API 요청 설계
사용자와 가게 연락처를 조회하는 API를 OpenFeign을 이용해 구현했다.
- 사용자 연락처:
/api/v1/users/{userId}/contact
- 가게 연락처:
/api/v1/restaurants/{restaurantId}/contact
Kafka 메시지 소비 로직
메시지를 수신하는 기능과 서비스 로직과 연결하는 작업을 했다. 템플릿 ID 관리 방식 변경과 추가 데이터 로직은 내일 진행 예정이다.
트러블슈팅 기간 작업 목록
- Kafka 설정 최적화
- 템플릿 캐시 서버 적용
- 리트라이 및 페일백 로직 추가
- Config 서버 적용