학교 디지털 출결 제작기
안녕하세요, Sungblab입니다! 제 고등학교 학생들을 위한 QR코드 디지털 출결 시스템 개발 이야기를 공유하려고 합니다. 기존 수기 출결의 문제점을 인식하고 이를 개선하고자 프로젝트를 시작하게 되었습니다.
1. 기획
풀스택 개발을 기획하면서, 출결 체크 방식으로 지문인식, RFID 카드, QR코드 등 다양한 방법을 검토했습니다. 그 중에서 비용 효율성과 접근성이 뛰어난 QR코드 방식을 선택했습니다. 네이버 QR코드 로그인 시스템에서 영감을 받아, 각 사용자의 고유 QR코드를 스캐너가 인식하는 방식을 구상했습니다.
기술 스택 선정
- Frontend: Vanilla HTML
- Backend: Express.js & Node.js
- Database: MongoDB
- 인증/보안: JWT & bcrypt
- UI/스타일링: Tailwind CSS
개발은 Claude 3.5 Sonnet의 도움을 받아 진행했습니다. 먼저 백엔드 코드를 완성한 후, 이에 맞춰 프론트엔드 코드를 작성하는 방식으로 접근했습니다. 약 1,000여 줄의 코드를 작성했으며, 프론트엔드는 React도 고려했으나 초기 학습 곡선이 높아 Vanilla HTML을 선택했습니다.
2. 개발 과정

📁 프로젝트 루트
├── 📁 css
├── 📁 js
├── 📁 node_modules
├── 📄 change-password.html
├── 📄 dashboard.html
├── 📄 find-password.html
├── 📄 hub.html
├── 📄 index.html
├── 📄 package.json
├── 📄 package-lock.json
├── 📄 qr.html
├── 📄 reader.html
├── 📄 signup.html
├── 📄 statistics-dashboard.html
└── 📄 tailwind.config.js
프로젝트 구조는 다음과 같습니다:
index.html: 로그인 페이지hub.html: 사용자 권한에 따른 분기 처리- 일반 사용자:
qr.html로 자동 리다이렉트 - admin/reader 권한: hub 페이지에서 메뉴 선택 가능
- 일반 사용자:
qr.html: 30초마다 자동 갱신되는 암호화된 QR코드 표시reader.html: QR코드 스캔 페이지
관리자 대시보드에서는 사용자 승인과 권한 관리 등 다양한 관리 기능을 제공합니다.
통계 대시보드는 가장 공을 들인 페이지로, 전체 출결 현황과 개별 학생의 상세 통계를 확인할 수 있습니다.
병결 등 특별한 사유가 있는 경우를 위해 인정출결 처리 기능을 구현했습니다.
나이스 학사일정 API를 연동하여 주말 및 공휴일을 자동으로 등록하는 기능을 제공합니다.
출석, 지각, 결석의 기준 시각을 설정할 수 있으며, 미출석 시 자동 결석 처리되는 기능을 구현했습니다.
추가로, React Native를 활용하여 하이브리드 앱도 개발했습니다.

3. 마무리
2024년 9월부터 12월까지 제 학급에서 시범 운영을 성공적으로 완료했으며, 2025년 새 학기부터는 전교 확대 운영을 계획하고 있습니다. 현재 만 17세라는 나이 제한으로 인해 앱 출시에는 어려움이 있지만, 이는 추후 해결해 나갈 예정입니다.