Skip to content

[perf] 얼굴 인식 세션 후보를 쿼리에서 출석 대상으로 거르기 - #248

Merged
minwoo-3 merged 5 commits into
developfrom
perf/face-eligible-templates
Oct 13, 2026
Merged

minwoo-3 merged 5 commits into
developfrom
perf/face-eligible-templates

Conversation

@minwoo-3

Copy link
Copy Markdown
Contributor

✨ 작업 내용

얼굴 인식 세션을 만들거나 AI 세션을 다시 만들 때, 출석 대상이 아닌 학생의 템플릿(벡터 JSON)까지 읽던 것을 쿼리 조건으로 걸러 읽지 않게 했습니다.

  • FaceTemplateRepository에 출석 대상 템플릿만 읽는 쿼리 2개 추가 (student fetch join)
    • findAllEligible(): 세션 생성용, 학생 id 순
    • findAllEligibleByStudentIdIn(ids): AI 세션 재생성용
    • 조건: 개인정보·얼굴 동의 시각 있음, 호실 배정, datagsm_student_id > 0
  • FaceRecognitionService의 eligibleTemplates()·candidateTemplates()가 새 쿼리를 쓰고, Java에서 거르던 eligibleStudent() 삭제
  • 쓰지 않게 된 findAllByOrderByStudent_IdAsc()·findAllByStudent_IdIn() 삭제

🔍 리뷰 시 참고사항

  • 출석 대상 조건이 Student.isAttendanceEligible()과 쿼리 두 곳에 나뉩니다. 쿼리 JavaDoc에 연결을 적었고, FaceTemplateRepositoryTest에서 쿼리 결과와 isAttendanceEligible() 판단이 같은지 비교합니다.
  • 후보 수 제한(maxCandidates) 검사는 그대로 거른 뒤 개수 기준입니다.
  • 실행: FaceRecognitionServiceTest 20개 통과(FACE_NO_ENROLLED_STUDENTS 테스트 추가, FACE_TOO_MANY_CANDIDATES 기존 테스트 통과).
  • 미실행: FaceTemplateRepositoryTest(동의 없음·얼굴 동의만 없음·개인정보 동의만 없음·호실 없음·DataGSM id 없음 학생 제외 확인)는 로컬에 PostgreSQL이 없어 실행하지 못했습니다. CI 결과로 확인합니다. 전체 ./gradlew build도 같은 이유로 로컬에서 돌리지 않았습니다.

✅ 체크리스트

  • 문서(README, .env.example 등) 변경이 필요한 경우 작성 또는 수정했나요?
  • 작업한 코드가 정상적으로 동작하는 것을 직접 확인했나요?
  • 필요한 경우 테스트 코드를 작성하거나 수정했나요?
  • Merge 대상 브랜치를 올바르게 설정했나요?
  • PR에 관련 없는 작업이 포함되지 않았나요?
  • 적절한 라벨과 리뷰어를 설정했나요?

📎 관련 이슈(선택)

@minwoo-3
minwoo-3 merged commit 6d8ed1d into develop Oct 13, 2026
2 checks passed
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.

2 participants