Conversation
|
Caution Review failedThe pull request is closed. Summary by CodeRabbit릴리스 노트새 기능
버그 수정
주요 변경사항
35-100 단어 범위 ✏️ Tip: You can customize this high-level summary in your review settings. 코드 리뷰 요약Walkthrough이 PR은 면접 시스템을 이력서 기반 질문 생성 방식으로 재설계합니다. 기존의 Bedrock/GPT 기반 진행 흐름을 제거하고, 새로운 이력서 기반 면접 기능을 도입합니다. Kakao 특화 인증 엔드포인트도 통합 엔드포인트로 변경되며, 여러 레거시 컴포넌트(BedrockClient, KafkaTemplate)가 삭제됩니다. Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Possibly related PRs
Suggested reviewers
Poem
✨ Finishing touches
🧪 Generate unit tests (beta)
Comment |
Summary of ChangesHello @unifolio0, 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! 이 Pull Request는 이력서 및 포트폴리오를 활용한 AI 기반 면접 질문 생성 기능을 도입하고, LLM(대규모 언어 모델) 클라이언트 통합 방식을 개선하는 데 중점을 둡니다. 또한, 인증 및 토큰 사용 로직을 간소화하고, 전반적인 코드 구조를 리팩토링하여 시스템의 확장성과 안정성을 높였습니다. 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. Ignored Files
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. 코드의 숲, 새 길이 열리니 이력서 따라 질문 피어나네 AI 지혜, 면접의 새 바람 Footnotes
|
There was a problem hiding this comment.
Code Review
이번 PR은 이력서 기반 면접 기능 추가와 함께 전반적인 코드 리팩토링을 포함하는 규모가 큰 변경이네요. 고생 많으셨습니다! BaseGptClient와 같은 추상화를 통해 코드 중복을 줄이고 구조를 개선한 점이 인상적입니다.
한 가지 제안드리고 싶은 점은, 이번 PR에 포함된 데이터베이스 마이그레이션(V33-V38)처럼 기능 개발 중 스키마 설계가 여러 번 변경되는 경우, 최종적으로 병합하기 전에 관련 마이그레이션들을 하나의 파일로 합치는(squash) 것을 고려해보시면 좋을 것 같습니다. 이렇게 하면 마이그레이션 히스토리가 간결하게 유지되어 나중에 스키마를 파악하거나 문제를 추적하기 더 수월해집니다.
전반적으로 프로젝트의 확장성과 유지보수성을 크게 향상시키는 좋은 변경이라고 생각합니다.
| private final RecruitmentDataService recruitmentDataService; | ||
|
|
||
| @Scheduled(cron = "0 0 3 * * *", zone = "Asia/Seoul") | ||
| // @Scheduled(cron = "0 0 3 * * *", zone = "Asia/Seoul") |
| if (cleaned.startsWith("\"") && cleaned.endsWith("\"")) { | ||
| String unwrapped = cleaned.substring(1, cleaned.length() - 1); | ||
| return unwrapped.replace("\\\"", "\"").replace("\\n", "\n"); | ||
| } | ||
| return cleaned; | ||
| } |
There was a problem hiding this comment.
LLM이 반환하는 JSON 문자열이 큰따옴표로 감싸여 있을 때, 수동으로 이스케이프 문자를 처리하는 것은 예상치 못한 이스케이프 시퀀스에 취약할 수 있습니다. ObjectMapper를 사용하여 파싱하는 것이 더 안전하고 견고합니다. objectMapper.readValue(cleaned, String.class)를 사용하면 JSON 문자열 리터럴을 올바르게 파싱하여 다양한 이스케이프 문자를 처리할 수 있습니다.
| if (cleaned.startsWith("\"") && cleaned.endsWith("\"")) { | |
| String unwrapped = cleaned.substring(1, cleaned.length() - 1); | |
| return unwrapped.replace("\\\"", "\"").replace("\\n", "\n"); | |
| } | |
| return cleaned; | |
| } | |
| if (cleaned.startsWith("\"") && cleaned.endsWith("\"")) { | |
| try { | |
| return objectMapper.readValue(cleaned, String.class); | |
| } catch (JsonProcessingException e) { | |
| log.error("JSON 문자열 파싱 실패: {}", cleaned, e); | |
| throw new ExternalApiException("LLM 응답 파싱에 실패했습니다.", e); | |
| } | |
| } |
closed #
작업 내용
스크린샷
참고 사항