출석 체크 시스템

선생님은 실시간으로 출석 코드를 생성하고, 학생들은 해당 코드를 입력하여 출석 체크를 할 수 있습니다.

주요 기능

1. 출석 세션 생성 (선생님)

2. 출석 체크 (학생)

3. 출석 통계

API 엔드포인트

POST /api/attendance/sessions

출석 세션 생성

Request:

{ "communitySlug": "korean-topik-master", "duration": 5 }

Response:

{ "success": true, "session": { "id": 1, "code": "ABC12345", "expiresAt": "2025-12-14T13:05:00.000Z", "createdAt": "2025-12-14T13:00:00.000Z" } }

GET /api/attendance/sessions?community=slug

활성 출석 세션 목록 조회

Response:

{ "activeSessions": [ { "id": 1, "code": "ABC12345", "expiresAt": "2025-12-14T13:05:00.000Z", "attendeeCount": 15 } ] }

POST /api/attendance/mark

출석 체크 (학생)

Request:

{ "code": "ABC12345" }

Response:

{ "success": true, "message": "출석이 완료되었습니다! +5 포인트" }

Error Responses:

GET /api/attendance/stats?community=slug

출석 통계 조회

Response:

{ "sessions": [ { "id": 1, "code": "ABC12345", "createdAt": "2025-12-14T13:00:00.000Z", "expiresAt": "2025-12-14T13:05:00.000Z", "attendeeCount": 15, "attendanceRate": 75 } ], "memberStats": [ { "memberId": 1, "userName": "김철수", "attendanceCount": 8, "attendanceRate": 80 } ], "summary": { "totalSessions": 10, "totalAttendance": 150, "averageAttendanceRate": 75 } }

데이터베이스 스키마

attendanceSessions 테이블

{ id: serial("id").primaryKey(), communityId: integer("community_id").notNull(), createdBy: integer("created_by").notNull(), code: varchar("code", { length: 8 }).notNull().unique(), expiresAt: timestamp("expires_at").notNull(), createdAt: timestamp("created_at").notNull().defaultNow() }

attendanceRecords 테이블

{ id: serial("id").primaryKey(), sessionId: integer("session_id").notNull(), memberId: integer("member_id").notNull(), markedAt: timestamp("marked_at").notNull().defaultNow(), // Unique constraint on (sessionId, memberId) }

사용 시나리오

선생님 워크플로우

  1. 수업 시작 시 "출석 세션 생성" 버튼 클릭
  2. 생성된 8자리 코드를 화면에 표시하거나 구두로 공지
  3. 실시간으로 출석 현황 확인
  4. 5분 후 자동으로 만료 (필요시 새 세션 생성)
  5. 수업 후 출석 통계 확인

학생 워크플로우

  1. 사이드바에서 "출석 체크" 메뉴 선택
  2. 선생님이 제공한 8자리 코드 입력
  3. 출석 완료 시 +5 포인트 획득
  4. 성공/실패 메시지 확인

보안 및 검증

코드 생성

유효성 검증

보안 고려사항

UI/UX 특징

선생님 페이지

학생 페이지

포인트 시스템 연동

출석 체크 시

확장 가능성

향후 추가 가능 기능

트러블슈팅

학생이 코드를 입력했는데 실패할 경우

선생님이 세션을 생성할 수 없는 경우

통계가 표시되지 않는 경우