Repository navigation
fix(core): 답변 0개 세션을 수동 종료하면 완료로 남아 피드백을 만들던 문제 - #273
Merged
Merged
Conversation
시간초과 스위퍼(SessionTimeoutService.endTimedOut)는 처음부터 답변 유무로 갈랐다 — 있으면 COMPLETED(→피드백), 없으면 INTERRUPTED. 수동 종료 (SessionService.end)만 그 규칙에서 빠져 무조건 COMPLETED + SessionEndedEvent 였다. 그래서 자기소개 질문만 받고 '종료' 를 누른 세션이 완료로 남아 피드백 생성까지 탔다. 운영 10건(최근 session 98) — 세션당 LLM 을 7회 가까이 쓰고(평가위원 패널·종합·첫인상·코칭·임베딩) 채점할 답변이 없으니 점수가 전부 null 인 피드백 페이지가 만들어진다. COMPLETED 로 두고 이벤트만 막는 쪽이 더 작은 변경이지만 더 나쁘다 — 피드백 없는 COMPLETED 는 조회가 FEEDBACK_NOT_READY(404)라 화면이 "생성 중"에서 영구히 멈춘다. INTERRUPTED 는 피드백을 기대하지 않고 PATCH /resume 로 이어서 할 수 있어, 도중에 그만둔 사용자에게 오히려 맞다. 콜백 종료(QuestionsCallbackService.endSession)에는 같은 가드를 두지 않았다 — POOL 요청이 자기소개 답변 이후에만 발행되므로 그 경로에 답변 0개 세션이 도달하지 않는다(데이터도 일치: 10건 모두 질문 1개·답변 0개). 프론트는 이미 INTERRUPTED 를 '이어서 진행하기' 로 다루고 피드백 버튼을 숨겨 그대로 맞아떨어진다. 다만 종료 확인 문구가 "피드백 단계로 넘어갑니다. 되돌릴 수 없습니다" 라 답변이 없을 때 둘 다 거짓이 되므로 답변 유무로 갈랐다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
문제
시간초과 스위퍼는 처음부터 답변 유무로 갈랐다 — 있으면
COMPLETED(→피드백), 없으면INTERRUPTED.수동 종료(
SessionService.end)만 그 규칙에서 빠져 있었다 — 무조건COMPLETED+SessionEndedEvent.그래서 자기소개 질문만 받고 '종료' 를 누른 세션이 완료로 남아 피드백 생성까지 탔다. 운영 10건(세션 98·89·76·55·38·30·26·25·24·8, 최근 2026-09-21) 모두 질문 1개 / 답변 0개인데 피드백 행이 있다.
수정
end도 같은 기준으로 분기한다. 답변이 없으면INTERRUPTED+ 이벤트 미발행.COMPLETED로 두고 이벤트만 막지 않은 이유그게 더 작은 변경이지만 더 나쁘다 — 피드백 없는
COMPLETED는 조회가FEEDBACK_NOT_READY(404)라 화면이 "생성 중"에서 영구히 멈춘다.INTERRUPTED는 피드백을 기대하지 않고PATCH /resume로 이어서 할 수 있어, 도중에 그만둔 사용자에게 오히려 맞다.콜백 종료에 같은 가드를 두지 않은 이유
QuestionsCallbackService.endSession의 세 진입점(POOL_GENERATION_FAILED·MAX_QUESTIONS_REACHED·POOL_EXHAUSTED)은 전부 자기소개 답변 이후에만 도달한다 — 질문 풀 요청 자체가SelfIntroAnsweredEvent로 발행되기 때문. 데이터도 일치한다(10건 모두 질문 1개).프론트
SessionEndedPanel은 이미INTERRUPTED를 '이어서 진행하기' 로 다루고 피드백 버튼을 숨겨 그대로 맞아떨어진다. 다만 종료 확인 문구가 "피드백 단계로 넘어갑니다. 이 작업은 되돌릴 수 없습니다" 라 답변이 없을 때 둘 다 거짓이 되므로 답변 유무로 갈랐다.테스트
SessionServiceTest— 기존 완료 전이 테스트에 답변 존재·이벤트 발행을 명시 + 답변 0개 전이 2건(정상 / 전이 경합 상실).InterviewStage.endCopy.test.tsx— 답변 유무별 확인 문구../gradlew test전체 통과,npm run type-check·npm run lint통과.기존 10건
상태를 되돌리지 않는다 — 이미 만들어진 피드백을 지우면 사용자가 보던 기록이 사라지고, 빈 피드백은 그 자체로 오동작하지 않는다(읽기만 하면 null 표시). 재발만 막는다.
🤖 Generated with Claude Code