Skip to content

[feat] 얼굴 인식 세션 층 추가와 다른 층 학생 OTHER_FLOOR - #254

Merged
minwoo-3 merged 13 commits into
developfrom
feat/face-session-floor
Oct 22, 2026
Merged

minwoo-3 merged 13 commits into
developfrom
feat/face-session-floor

Conversation

@minwoo-3

Copy link
Copy Markdown
Contributor

✨ 작업 내용

  • POST /api/v1/face/sessions 요청에 floor(3·4·5)를 받고, 응답에도 floor를 돌려준다. 없거나 다른 값이면 400 INVALID_FLOOR.
  • 세션에 층을 저장한다(V21__add_face_session_floor.sql, face_recognition_session.floor).
  • 프레임 응답 recognition.status에 OTHER_FLOOR를 추가했다. 세션 층이 아닌 학생이면 이 값으로 알린다.
    • studentName·studentNumber·attendance는 null이다. 출석을 기록하지 않고 최근 인식 기록에도 남기지 않는다.
    • qrRecommended는 항상 false다. attempts는 AI 값을 그대로 쓴다.
  • swagger에 FaceSessionCreateRequest.floor, FaceSessionResponse.floor, Recognition.status의 OTHER_FLOOR를 반영했다.

🔍 리뷰 시 참고사항

  • 후보 범위 결정: 이슈는 층 후보로 먼저 비교하고 실패하면 전체와 다시 비교하는 방식을 제안했다. 이 PR은 AI 세션 후보를 지금처럼 전체 출석 대상으로 두고, AI가 맞힌 학생의 층(dormitoryFloor)을 서버가 세션 층과 비교한다. 이유:
    • 후보를 그 층으로만 줄이면, 4층 카메라 앞에 선 5층 학생이 닮은 4층 학생으로 잘못 맞혀져 남의 출석이 기록될 수 있다. 전체와 비교하면 이런 오인식이 없다.
    • 재비교 방식은 못 찾은 얼굴마다 AI를 한 번 더 불러야 해서 오히려 느려진다. 벡터 비교는 후보 200명 기준으로도 가벼워서, 속도는 카메라를 층별로 나누는 것만으로 좋아진다.
    • AI 계약은 바꾸지 않는다.
  • 층 정보가 없는 학생: 호실 미배정 학생은 이미 출석 대상이 아니라서 어느 층 후보에도 들어가지 않는다.
  • 층 전환(A안): 세션 생성은 같은 관리자의 다른 세션을 확인하지 않는다. 그래서 이전 세션 종료와 겹쳐도 거부하지 않는다.
  • 배포 전에 만든 세션은 floor가 null이다. 이런 세션은 층을 따지지 않고 예전처럼 동작한다.
  • floor는 필수라서 웹(CheckUp-Client#344, #345)이 floor를 보내기 전에 이 서버가 배포되면 세션 생성이 400이 된다. 웹과 함께 배포해야 한다.
  • 하네스 계약(contracts/face.openapi.yaml)은 이 레포에서 고치지 않았다. Start-Up-harness에 따로 반영해야 한다.

검사

  • ./gradlew build 통과(로컬 Postgres·Redis, CI와 같은 환경변수). V21 migration과 ddl-auto: validate도 함께 확인했다.
  • 실제 AI 서버·카메라로 확인하지는 않았다.

✅ 체크리스트

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

📎 관련 이슈(선택)

@minwoo-3
minwoo-3 merged commit 44faf8d into develop Oct 22, 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