Skip to content

[FEAT] 인성 면접 기능 추가#361

Merged
unifolio0 merged 3 commits into
developfrom
feat/culture-fit
Jun 28, 2026
Merged

[FEAT] 인성 면접 기능 추가#361
unifolio0 merged 3 commits into
developfrom
feat/culture-fit

Conversation

@unifolio0

Copy link
Copy Markdown
Contributor

closed #

작업 내용

스크린샷

참고 사항

@unifolio0 unifolio0 self-assigned this Jun 28, 2026
@coderabbitai

coderabbitai Bot commented Jun 28, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@unifolio0, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 34 minutes and 23 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5eb6d313-89d8-486a-a8a8-5559995db2f5

📥 Commits

Reviewing files that changed from the base of the PR and between 2bb9ee5 and 90a371e.

📒 Files selected for processing (3)
  • src/main/resources/db/migration/V50__add_personality_category.sql
  • src/test/java/com/samhap/kokomen/interview/external/dto/request/InterviewBedrockRequestFactoryTest.java
  • src/test/java/com/samhap/kokomen/interview/tool/InterviewMessagesFactoryTest.java

Walkthrough

Category, InterviewType, RootQuestion, Interview 도메인에 PERSONALITY(인성 면접)를 추가하고, 인성 전용 프롬프트 상수 클래스 2종을 신규 작성하며, Bedrock/GPT 팩토리의 분기 로직을 switch로 전환해 인성 케이스를 연결한다. 랜덤 루트 질문 조회 시 인성 카테고리를 제외하고, DB 마이그레이션으로 ENUM을 확장하며, 관련 테스트를 전 계층에 추가한다.

Changes

인성 면접 타입 추가

Layer / File(s) Summary
도메인 열거형 및 헬퍼 메서드 확장
src/main/java/com/samhap/kokomen/category/domain/Category.java, src/.../interview/domain/InterviewType.java, src/.../interview/domain/RootQuestion.java, src/.../interview/domain/Interview.java, src/main/resources/db/migration/V50__add_personality_category_and_seed.sql
Category/InterviewTypePERSONALITY 상수를 추가하고, RootQuestion.isPersonality(), Interview.isPersonality() 헬퍼 메서드를 각각 추가하며, DB ENUM 컬럼을 마이그레이션으로 확장한다.
인성 면접 프롬프트 구성 요소 상수 정의
src/.../interview/tool/PersonalityInterviewPromptFragments.java, src/.../interview/tool/PersonalityInterviewBedrockSystemMessageConstant.java, src/.../interview/tool/GptSystemMessageConstant.java
PersonalityInterviewPromptFragments에 평가 루브릭·보안 규칙·후속 질문 알고리즘 등 6종 상수를 정의하고, Bedrock용 진행/종료/피드백 및 GPT용 진행/종료 시스템 메시지 상수를 조합해 추가한다.
팩토리 프롬프트 분기 변경
src/.../interview/external/dto/request/InterviewBedrockRequestFactory.java, src/.../interview/tool/InterviewMessagesFactory.java
InterviewBedrockRequestFactoryInterviewMessagesFactory의 프롬프트 선택 로직을 switch로 전환하고 PERSONALITY 케이스를 별도 상수로 매핑하며, 사용되지 않는 isLiveCoding 헬퍼를 제거한다.
서비스 및 리포지토리 로직 변경
src/.../interview/repository/RootQuestionRepository.java, src/.../interview/service/question/RootQuestionService.java, src/.../interview/service/InterviewStartFacadeService.java
RootQuestionRepository에 카테고리 제외 파생 쿼리를 추가하고, readRandomActiveRootQuestion()에서 PERSONALITY를 제외하도록 변경하며, resolveInterviewTypeisPersonality() 분기를 추가한다.
테스트 추가
src/test/java/com/samhap/kokomen/category/controller/CategoryControllerTest.java, src/test/.../interview/controller/InterviewControllerV2Test.java, src/test/.../interview/external/dto/request/InterviewBedrockRequestFactoryTest.java, src/test/.../interview/service/PersonalityInterviewServiceTest.java, src/test/.../interview/service/question/RootQuestionServiceTest.java, src/test/.../interview/tool/InterviewMessagesFactoryTest.java
PERSONALITY 케이스에 대한 카테고리 목록 응답, V2 면접 파이프라인, 프롬프트 분기, 인터뷰 타입 저장, 랜덤 질문 필터링 검증 테스트를 각 계층에 추가한다.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • samhap-soft/kokomen-backend#354: RootQuestionService.readRandomActiveRootQuestion() 랜덤 선택 로직을 추가한 PR로, 이번 PR이 해당 로직에 Category.PERSONALITY 제외 필터를 덧붙인다.
  • samhap-soft/kokomen-backend#356: interview/tool의 시스템 메시지/프롬프트 템플릿을 InterviewPromptFragments 기반으로 리팩터링한 PR로, 이번 PR이 동일한 프롬프트 구성 계층에 인성 면접 상수를 추가한다.
  • samhap-soft/kokomen-backend#359: InterviewBedrockRequestFactory/InterviewMessagesFactoryInterviewType 기반 분기 구조를 도입한 PR로, 이번 PR이 동일 구조에 PERSONALITY 케이스를 확장한다.

Suggested reviewers

  • nak-honest
  • kargowild

Poem

🐰 토끼가 면접장에 뛰어들어,
인성 질문에 귀를 쫑긋 세우네.
PERSONALITY enum 한 줄 추가,
프롬프트 상수들이 줄줄이 피어나고,
switch 분기 타고 답변이 흐르니,
오늘도 코드 숲은 한층 풍성하다! 🌿

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive 설명이 작업 내용 템플릿만 있고 실제 변경 사항을 담지 않아 변경과의 관련성을 판단하기 어렵습니다. 변경된 기능, 주요 파일, 동작 변화가 드러나도록 작업 내용을 1~2문장으로 구체적으로 작성해 주세요.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 인성 면접 기능 추가라는 핵심 변경을 간결하게 요약하고 있어 변경 내용과 잘 맞습니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/culture-fit

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist

Copy link
Copy Markdown

Summary of Changes

Hello, 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은 사용자의 소프트 스킬과 가치관을 평가할 수 있는 '인성 면접' 기능을 시스템에 도입합니다. 기존 기술 면접 중심의 인터뷰 시스템을 확장하여, 인성 면접에 특화된 프롬프트와 평가 로직을 구축하고 관련 서비스 및 데이터베이스 구조를 개선하였습니다.

Highlights

  • 인성 면접 기능 추가: 인성 면접 카테고리를 추가하고, 면접 유형에 'PERSONALITY'를 도입하여 시스템 전반에 인성 면접 로직을 반영했습니다.
  • LLM 프롬프트 엔지니어링: 인성 면접 전용 시스템 프롬프트(진행, 피드백, 종료)를 신규 생성하고, 면접관 페르소나와 평가 루브릭을 적용했습니다.
  • 서비스 및 리포지토리 확장: 인성 면접을 지원하기 위해 RootQuestionRepository에 카테고리 제외 조회 기능을 추가하고, 인터뷰 시작 파사드 서비스를 업데이트했습니다.
  • 데이터베이스 마이그레이션: RootQuestion 테이블의 카테고리 ENUM에 'PERSONALITY'를 추가하여 새로운 면접 유형을 지원하도록 스키마를 변경했습니다.
New Features

🧠 You can now enable Memory (public preview) 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.

Using Gemini Code Assist

The 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 /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the 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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. 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.


코드의 논리 너머로, 사람의 마음을 묻는다. 가치관과 태도 속에, 진정한 성장을 담아, 새로운 면접이 시작된다.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new 'PERSONALITY' (인성 면접) interview category and type to support personality-based interviews. The changes include updates to domain enums, database schema migration, new GPT and Bedrock system prompts tailored for personality evaluations, and integration within the interview start and message factories, accompanied by comprehensive tests. The review feedback correctly points out that the migration file V50__add_personality_category_and_seed.sql is missing the actual seed data (INSERT statements) implied by its name, which is required for the feature to function properly.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread src/main/resources/db/migration/V50__add_personality_category.sql
@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown

Test Results

 55 files   55 suites   1m 52s ⏱️
336 tests 335 ✅ 1 💤 0 ❌
338 runs  337 ✅ 1 💤 0 ❌

Results for commit 90a371e.

♻️ This comment has been updated with latest results.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/main/resources/db/migration/V50__add_personality_category_and_seed.sql`:
- Around line 1-13: The V50 migration only extends the root_question.category
enum to include PERSONALITY, but it does not seed any active PERSONALITY root
question, leaving fresh deployments without data for that flow. Update the
migration strategy around the root_question seed so that at least one active
Category.PERSONALITY root question is inserted, either in this migration or an
immediately following seed migration, and make sure the seed uses the same root
question data path referenced by the existing root_question setup.

In
`@src/test/java/com/samhap/kokomen/interview/controller/InterviewControllerV2Test.java`:
- Around line 118-156: The PERSONALITY V2 controller test currently verifies the
flow but does not generate RestDocs, so the scenario is missing from the
documentation output. Update the `인성_면접도_V2_진행_파이프라인을_예외_없이_통과한다` test to
include the same `MockMvc` documentation step used by other controller tests by
chaining `andDo(document(...))` on the `mockMvc.perform(...)` call. Keep the
rest of the integration-style setup intact so this test continues to exercise
the real `InterviewControllerV2` pipeline while producing RestDocs.

In
`@src/test/java/com/samhap/kokomen/interview/external/dto/request/InterviewBedrockRequestFactoryTest.java`:
- Around line 42-70: The test coverage in InterviewBedrockRequestFactoryTest
only checks the new PERSONALITY branch, so add an assertion for the RESUME_BASED
branch to ensure it still follows the existing default prompt path. Reuse the
existing helper calls around InterviewBedrockRequestFactory.createProceedSystem,
createEndSystem, or createAnswerFeedbackSystem and verify RESUME_BASED matches
the CATEGORY_BASED prompt behavior for at least one representative case. This
will protect the switch expansion logic without changing the current
PERSONALITY-specific assertions.

In
`@src/test/java/com/samhap/kokomen/interview/tool/InterviewMessagesFactoryTest.java`:
- Around line 140-174: `InterviewMessagesFactory`의 `createGptProceedMessages`와
`createGptEndMessages`는 `switch` 분기 변경이 있었지만 현재 테스트는 `PERSONALITY`만 검증합니다.
`InterviewMessagesFactoryTest`에 `RESUME_BASED` 케이스를 추가해 두 메서드가 기본 이력서용 시스템 프롬프트를
사용하는지 각각 확인하도록 하세요. `InterviewType.RESUME_BASED`, `GptSystemMessageConstant`,
`createGptProceedMessages`, `createGptEndMessages`를 기준으로 찾아서 테스트를 보강하면 됩니다.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 20796d89-a790-4316-823e-eb8261075f36

📥 Commits

Reviewing files that changed from the base of the PR and between 432bcb3 and 2bb9ee5.

📒 Files selected for processing (19)
  • src/main/java/com/samhap/kokomen/category/domain/Category.java
  • src/main/java/com/samhap/kokomen/interview/domain/Interview.java
  • src/main/java/com/samhap/kokomen/interview/domain/InterviewType.java
  • src/main/java/com/samhap/kokomen/interview/domain/RootQuestion.java
  • src/main/java/com/samhap/kokomen/interview/external/dto/request/InterviewBedrockRequestFactory.java
  • src/main/java/com/samhap/kokomen/interview/repository/RootQuestionRepository.java
  • src/main/java/com/samhap/kokomen/interview/service/InterviewStartFacadeService.java
  • src/main/java/com/samhap/kokomen/interview/service/question/RootQuestionService.java
  • src/main/java/com/samhap/kokomen/interview/tool/GptSystemMessageConstant.java
  • src/main/java/com/samhap/kokomen/interview/tool/InterviewMessagesFactory.java
  • src/main/java/com/samhap/kokomen/interview/tool/PersonalityInterviewBedrockSystemMessageConstant.java
  • src/main/java/com/samhap/kokomen/interview/tool/PersonalityInterviewPromptFragments.java
  • src/main/resources/db/migration/V50__add_personality_category_and_seed.sql
  • src/test/java/com/samhap/kokomen/category/controller/CategoryControllerTest.java
  • src/test/java/com/samhap/kokomen/interview/controller/InterviewControllerV2Test.java
  • src/test/java/com/samhap/kokomen/interview/external/dto/request/InterviewBedrockRequestFactoryTest.java
  • src/test/java/com/samhap/kokomen/interview/service/PersonalityInterviewServiceTest.java
  • src/test/java/com/samhap/kokomen/interview/service/question/RootQuestionServiceTest.java
  • src/test/java/com/samhap/kokomen/interview/tool/InterviewMessagesFactoryTest.java

Comment thread src/main/resources/db/migration/V50__add_personality_category.sql
@unifolio0 unifolio0 merged commit ed98af7 into develop Jun 28, 2026
4 checks passed
@unifolio0 unifolio0 deleted the feat/culture-fit branch June 28, 2026 07:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant