-reset- [REFACTOR] 리포트 생성 아키텍처 Spring -> Kafka 기반 비동기 구조로 리팩토링(A파트)#191
Conversation
- Python 애플리케이션의 Kafka 메시지 발행(생산) 책임이 Spring 서버로 이관됨을 반영 - 더 이상 사용되지 않는 리포트 생성 컨트롤러 및 Kafka 프로듀서 관련 코드 삭제 - Kafka 설정 및 `base_producer`에 프로듀서의 현재 상태 및 재시도 전략에 대한 주석 추가 및 명확화(스프링으로 역방향 메시지 발행 시 TODO 참고) #187
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이 PR은 리포트 생성 시스템을 비동기 Kafka 기반 아키텍처로 전환하여, 기존 서비스에서 Producer의 역할을 분리하고 메시지 처리의 견고성과 확장성을 향상시키는 데 중점을 둡니다. 이를 통해 리포트 생성 로직이 더욱 유연하고 독립적으로 운영될 수 있도록 기반을 마련했습니다. Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
🤖 Gemini AI 코드 리뷰❌ Gemini API 호출 실패: 최대 재시도 횟수 초과 이 리뷰는 Gemini AI가 자동으로 생성했습니다. 참고용으로만 활용해주세요. |
There was a problem hiding this comment.
Code Review
이 PR은 리포트 생성 아키텍처를 Kafka 기반의 비동기 구조로 리팩토링하는 중요한 변경을 포함하고 있습니다. Producer 관련 코드를 제거하고 Consumer 로직에 집중하여 서비스의 책임을 명확히 한 점이 좋습니다. 또한, 설정 파일을 통해 Kafka Consumer의 동작을 제어하도록 개선한 부분도 긍정적입니다.
리뷰에서는 메시지 유실 방지를 위한 에러 핸들링 개선에 중점을 두었습니다. base_consumer.py의 에러 처리 방식이 PR의 의도와 다르게 동작하여 메시지 유실을 유발할 수 있는 치명적인 문제를 발견하여 수정을 제안했습니다.
추가적으로, handle_overview_v2와 handle_analysis_v2의 에러 핸들링이 개선되었지만, handle_idea_v2에는 동일한 개선이 적용되지 않아 일관성이 부족합니다. 이 부분도 함께 수정하면 더 견고한 코드가 될 것입니다.
| async def _handle_error(self, topic: str, message: Dict[str, Any], error: Exception): | ||
| """에러 처리""" | ||
| """에러 처리 - 의도적으로 예외를 삼킴 (메시지 유실 허용, DLQ 없음) | ||
| NOTE: auto_commit=True 설정과 함께 동작하므로 에러 발생 시 해당 메시지는 오프셋이 커밋되어 재처리되지 않음 | ||
| """ | ||
| logger.error(f"메시지 처리 실패: {topic}, 오류: {error}") |
There was a problem hiding this comment.
PR 설명에 "처리 실패 시 예외를 re-raise하여 메시지 유실 방지"라고 명시되어 있지만, 현재 _handle_error 구현은 예외를 로깅만 하고 삼키고 있어 메시지 유실을 유발할 수 있습니다. auto_commit=True 설정에서는 핸들러에서 예외가 전파되지 않으면 오프셋이 정상적으로 커밋되어 해당 메시지는 재처리되지 않습니다.
domain/report/service/report_consumer_impl_v2.py에서 예외를 raise하도록 수정한 부분이 의도대로 동작하려면, _handle_error에서도 예외를 다시 발생시켜 FastStream이 메시지 처리에 실패했음을 인지하고 오프셋 커밋을 방지하도록 해야 합니다.
이렇게 수정하면 메시지 처리 실패 시 재시도 로직이 정상적으로 동작하여 메시지 유실을 막을 수 있습니다.
| async def _handle_error(self, topic: str, message: Dict[str, Any], error: Exception): | |
| """에러 처리""" | |
| """에러 처리 - 의도적으로 예외를 삼킴 (메시지 유실 허용, DLQ 없음) | |
| NOTE: auto_commit=True 설정과 함께 동작하므로 에러 발생 시 해당 메시지는 오프셋이 커밋되어 재처리되지 않음 | |
| """ | |
| logger.error(f"메시지 처리 실패: {topic}, 오류: {error}") | |
| async def _handle_error(self, topic: str, message: Dict[str, Any], error: Exception): | |
| """에러 처리 - 예외를 다시 발생시켜 메시지 재처리를 유도합니다.""" | |
| logger.error(f"메시지 처리 실패: {topic}, 오류: {error}") | |
| raise error |
PR 제목
[Feat/Fix/Refactor/Docs/Chore 등]: 간결하게 변경 내용을 요약해주세요. (예: Feat: 사용자 로그인 기능 구현)
✨ 변경 유형 (하나 이상 선택)
📚 변경 내용
구체적으로 어떤 변경 사항이 있는지, 왜 이러한 변경이 필요한지 설명해주세요.
(예: 사용자 회원가입 시 이메일 중복 확인 로직 추가. 기존 로직에서 누락된 부분 발견하여 수정.)
base_producer.py,message.py,report_producer.py,report_producer_impl.py삭제report_controller.py(리포트 생성 라우터) 제거kafka_config.py에서 producer 설정 필드 제거,kafka_broker.pyproducer TODO 주석 제거requirements.txt정리 및 의존성 업데이트⚙️ 주요 작업 (선택 사항)
✅ 체크리스트
🔗 관련 이슈 (선택 사항)
해당 PR이 해결하는 이슈 또는 관련 있는 이슈가 있다면 링크를 걸어주세요.
(예: #123, ABC-456)
💬 기타 (선택 사항)
리뷰어에게 전달하고 싶은 추가 정보나 궁금한 점이 있다면 작성해주세요.
! 반드시 확인 !
역방향 메시지 보낼 때 producer 관련 재설정 필요함
v1 제거 필요함
save vector 파리미터 확인 필요함
카프카 ui 로컬에서 확인 시 아래 설정 후 컨테이너 실행