← Dev Projects

ClassManager

운영 중

저장소·이력서 표기명 academy-manager — 같은 프로젝트입니다.

학원 올인원 관리 시스템. 학생·수업 관리에 NFC 카드와 QR 두 경로의 출결을 붙였고, 웹·안드로이드 키오스크·윈도우 설치본까지 4개 런타임으로 구성했다.

기간
2026.03 – 2026.04
역할
요구사항 수집 · 전체 개발 · 배포 · 설치본 빌드

풀려고 한 문제

학원 출결을 종이와 엑셀로 관리하면 원장이 매일 옮겨 적는다. 그런데 학원 현장에는 태블릿만 있는 곳도, 데스크톱만 있는 곳도 있어서 한 가지 방식으로는 안 됐다.

규모

  • 커밋 60개
  • 런타임 4개 — API · 관리자 웹 · 안드로이드 키오스크 · 윈도우 NFC 중계 프로그램
  • 출결 경로 2개 — NFC 카드 태그, QR 스캔
  • 설치 파일 2종 빌드 완료 (APK · 윈도우 Setup)

기술 결정

상황

웹 브라우저는 USB NFC 리더기에 접근할 수 없다

선택

PC/SC(WinSCard.dll)를 ctypes로 직접 호출하는 중계 프로그램을 만들어 리더기와 웹을 연결

이유

브라우저 제약을 우회하려고 별도 라이브러리를 깔게 하는 대신, 윈도우가 이미 갖고 있는 PC/SC API를 직접 불렀습니다. 의존성이 없으니 PyInstaller로 단일 exe가 되고, 원장님은 설치 파일 하나만 실행하면 됩니다.

상황

태블릿만 있는 학원과 데스크톱만 있는 학원

선택

안드로이드 키오스크는 폰 내장 NFC로, 데스크톱은 USB 리더기로 — 같은 API를 두 경로가 함께 호출

이유

출결 로직을 서버에 두고 단말은 UID만 올리게 나눴습니다. 그래서 단말이 늘어도 서버는 안 바뀝니다. 키오스크 앱은 WebView + JS 브리지로 만들어, 화면은 웹 한 벌만 유지합니다.

상황

학생 이름이 정확히 입력되지 않는 현장 문제

선택

rapidfuzz · kiwipiepy · scikit-learn으로 오타·띄어쓰기를 감당하는 검색

이유

원장님은 '김민준'을 '김민중'으로도 칩니다. 정확 일치만 되면 현장에서 안 쓰입니다. 한국어 형태소까지 보는 게 과해 보일 수 있지만, 이름 검색이 안 되면 시스템 전체를 안 쓰게 됩니다.

직접 실행해 보기

설치 없이 보려면 시현 페이지에서 작동 화면을 확인할 수 있습니다.

시현 가능한 것

USB 리더기에 카드를 태그해 UID가 읽히고 출결이 기록되는 과정까지

사용 기술

FastAPISQLAlchemy 2.0 asyncasyncpgAlembicJWTReact 19ViteTanStack QueryRechartsKotlinPC/SCDockerInno Setup