Skip to content

SQLite 데이터베이스 설정 및 출석 모델 구현 #15

@quirinal36

Description

@quirinal36

개요

얼굴 인식 출석체크 시스템을 위한 SQLite 데이터베이스를 설정하고 출석 데이터 모델을 구현합니다.

배경

현재 시스템은 JSON 파일 기반으로 얼굴 데이터를 관리하고 있습니다. 출석 기록은 관계형 데이터 특성이 강하므로 SQLite를 사용하여 효율적으로 관리합니다.

요구사항

데이터베이스 스키마

CREATE TABLE attendance (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    face_id TEXT NOT NULL,          -- face_database.json의 face_id 참조
    name TEXT NOT NULL,             -- 출석자 이름
    date DATE NOT NULL,             -- 출석 날짜 (YYYY-MM-DD)
    time TIME NOT NULL,             -- 출석 시간 (HH:MM:SS)
    confidence REAL,                -- 인식 신뢰도
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(face_id, date)           -- 같은 날짜에 동일 인물은 1회만 기록
);

CREATE INDEX idx_attendance_date ON attendance(date);
CREATE INDEX idx_attendance_name ON attendance(name);
CREATE INDEX idx_attendance_face_date ON attendance(face_id, date);

구현 항목

  • backend/models/attendance_db.py 모듈 생성
    • SQLite 데이터베이스 연결 관리 (connection pool / singleton)
    • 테이블 자동 생성 (앱 시작 시)
    • record_attendance(face_id, name, confidence) - 출석 기록 (당일 중복 방지)
    • get_attendance_by_date(date) - 특정 날짜 출석 조회
    • get_attendance_by_name(name, start_date, end_date) - 이름별 출석 조회
    • get_attendance_range(start_date, end_date) - 기간별 출석 조회
    • get_today_attendance() - 오늘 출석 현황
    • get_attendance_stats(start_date, end_date) - 출석 통계
  • 데이터베이스 파일 위치: backend/data/attendance.db
  • 동일 인물 당일 중복 방지 로직 (UNIQUE 제약조건 + INSERT OR IGNORE)
  • 단위 테스트 작성

기술 참고사항

  • Python 표준 라이브러리 sqlite3 사용 (추가 의존성 불필요)
  • 기존 face_database.jsonface_id를 외래키처럼 참조
  • Thread-safe를 위해 check_same_thread=False 설정 필요 (FastAPI는 멀티스레드)

완료 기준

  • SQLite DB가 앱 시작 시 자동 생성됨
  • 출석 기록 CRUD 함수 동작 확인
  • 동일 날짜 동일 인물 중복 기록 방지 동작 확인

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions