Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

출석 체크 앱

QR과 실시간 데이터를 활용한 모바일 출석 관리

관리자는 출석 일정을 등록하고 참여 현황을 확인하며, 학생은 모바일에서 QR 코드를 스캔해 출석할 수 있도록 만든 Flutter 애플리케이션입니다.

출석 처리에 그치지 않고 일정 알림, 승인 목록, 출석 기록, 친구 목록, 추첨 등 운영에 필요한 기능을 하나의 앱 안에서 관리합니다.

프로젝트 한눈에

나의 개발 관점: 관리자와 학생 화면을 나누는 데서 끝내지 않고, 역할별 권한·데이터 책임·출석 상태 흐름을 함께 분리했습니다.

구분 내용
문제 수기 출석의 대기 시간·기록 누락과 일정별 참여 현황 관리의 비효율
관리자 버전 일정·QR 생성 → 실시간 참여 확인 → 승인·기록·추첨 관리
학생 버전 오늘 일정 확인 → QR 스캔 → 출석 결과 확인 → 개인 기록 조회
나의 기여 QR 출석, Firebase 연동, 사용자·출석 데이터 구조, MVVM 리팩터링
핵심 판단 UI에서 Firebase 로직을 분리하고 일정 ID·학생 ID·유효 시간·중복 여부를 함께 검증
성과 2024 순천향대학교 SW융합대학 학술제 우수상
상세 사례 Notion 포트폴리오

앱 화면 흐름

출석 체크 앱 실제 화면 흐름

Figma에 정리된 실제 화면을 기준으로 참여자의 일정 확인·선택·참여 현황과 관리자의 기록·추첨 흐름을 한 장에 구성했습니다.

목차

  1. 프로젝트 한눈에
  2. 앱 화면 흐름
  3. 프로젝트 소개
  4. 문제 정의
  5. 핵심 기능
  6. 사용자 흐름
  7. 기술 스택과 선택 기준
  8. 프로젝트 구조
  9. 실행 방법
  10. 권한 및 운영 유의사항

1. 프로젝트 소개

출석 체크 앱은 종이 명단이나 수기 확인으로 발생하는 대기 시간과 기록 누락을 줄이고, 출석 일정 생성부터 QR 인증, 현황 확인과 기록 관리까지 모바일 환경에서 처리하기 위해 개발했습니다.

관리자 일정 등록
→ 학생에게 일정 표시 및 알림
→ 학생 QR 스캔
→ Firestore 출석 데이터 반영
→ 관리자 현재 인원·승인 목록 확인
→ 사용자별 출석 기록 조회

2. 문제 정의

문제 상황 앱의 접근
출석 확인에 시간이 오래 걸림 학생이 직접 QR을 스캔해 출석 처리
명단과 출석 기록이 분산됨 Firestore에 일정·사용자·출석 데이터를 통합
일정 변경을 놓치기 쉬움 로컬 알림과 일정 변경 리스너 제공
관리자와 학생의 필요한 화면이 다름 역할에 따라 일정 관리와 QR 스캔 기능을 구분
누적 기록 확인이 어려움 출석 로그와 현재 참여 목록을 별도 화면으로 제공

3. 핵심 기능

📷 QR 출석

  • 학생 역할에서 QR 스캐너 실행
  • 일정과 학생 식별 정보를 이용한 출석 처리
  • 카메라·저장소 권한 처리

🗓️ 일정 및 현황 관리

  • 관리자 역할의 출석 일정 등록
  • 홈 화면 일정 카드 표시
  • 현재 참여 학생 목록 확인
  • 승인 목록 조회 및 처리 화면

🔔 일정 알림

  • flutter_local_notifications 기반 로컬 알림
  • android_alarm_manager_plus 기반 예약 작업
  • Firestore 일정 변경을 구독해 알림 예약 갱신
  • 사용자가 앱에서 알림을 켜고 끌 수 있는 설정

👥 사용자 편의 기능

  • 친구 목록과 사용자별 조회 화면
  • 출석 로그 확인
  • 추첨 화면
  • 다크 모드와 반응형 화면 크기 대응

4. 사용자 흐름

[관리자]
앱 실행 → 일정 등록 → 현재 명단 확인 → 승인·기록 관리
[학생]
앱 실행 → 오늘 일정 확인 → QR 스캔 → 출석 결과 확인 → 기록 조회

5. 기술 스택

기술 사용 목적
Flutter / Dart Android·iOS 모바일 UI
Provider / Flutter Hooks 화면 상태 및 생명주기 관리
Firebase Core Firebase 초기화
Cloud Firestore 일정·사용자·출석 데이터 저장 및 실시간 조회
qr_code_scanner / qr_flutter QR 스캔 및 QR UI
flutter_local_notifications 기기 로컬 알림
android_alarm_manager_plus Android 예약 작업
flutter_secure_storage 기기 내 민감 정보 저장
flutter_screenutil 화면 크기별 반응형 UI
FlexColorScheme 라이트·다크 테마

기술·구조 선택 기준

선택 선택한 이유 적용하며 고려한 점
Flutter / Dart 관리자와 학생의 서로 다른 모바일 흐름을 하나의 코드베이스에서 구현하고, 제한된 기간에 Android·iOS UI를 함께 구성하기 위해 선택했습니다. QR·알림처럼 OS 의존성이 큰 기능은 플러그인과 플랫폼별 권한을 별도로 검증해야 합니다.
Cloud Firestore 일정과 출석 상태가 여러 기기에서 빠르게 갱신되어야 하므로 실시간 구독과 문서형 데이터를 활용했습니다. 화면의 역할 구분만 신뢰하지 않고 Security Rules에서 관리자 권한·출석 시간·데이터 소유권을 검증해야 합니다.
Provider / Flutter Hooks 출석 상태·사용자 역할·설정 값을 화면 코드와 분리하면서도 중간 규모 앱에 필요한 상태 관리를 단순하게 유지했습니다. 기능이 커지면 상태 범위와 의존성 방향을 더 엄격히 관리하거나 Riverpod·BLoC 같은 대안을 검토할 수 있습니다.
QR Scanner 학생이 명단을 직접 검색하지 않고 현장에서 빠르게 출석하도록 입력 단계를 줄였습니다. QR 문자열만 신뢰하지 않고 일정 ID·학생 ID·유효 시간·중복 출석을 함께 검증해야 합니다.
Local Notifications / AlarmManager 별도 푸시 서버 없이 기기에서 일정 알림과 예약 작업을 제공하기 위해 선택했습니다. Android 절전 정책과 OS 버전에 따라 실행 시점이 달라질 수 있어 권한과 배터리 최적화를 고려해야 합니다.
Secure Storage 사용자 식별 정보나 토큰처럼 일반 설정값보다 보호가 필요한 정보를 기기 보안 저장소에 분리했습니다. 대용량 출석 기록 저장소로 사용하지 않고 필요한 최소 정보만 보관합니다.
Feature 단위 폴더 + MVVM 성격의 분리 관리자·학생 기능이 늘어날 때 화면, 상태 로직, Firebase 접근 코드가 한 파일에 섞이지 않도록 나눴습니다. View는 표시와 입력, ViewModel은 상태 전환, 데이터 계층은 Firestore 통신을 담당하도록 경계를 유지합니다.
하나의 앱에서 관리자·학생 역할 분리 공통 일정·사용자 모델과 UI 자산을 재사용하면서 역할별 화면을 제공하기 위해 선택했습니다. 화면 숨김만으로 권한을 보장하지 않고 데이터 접근 단계에서도 역할을 다시 확인합니다.

6. 프로젝트 구조

lib/
├── main.dart # Firebase·알림 초기화 및 앱 진입점
├── database/db_query/
│ └── db_service.dart # Firestore 공통 CRUD
└── feature/
 ├── Home/ # 일정 카드, 관리자 일정 등록, QR 진입
 ├── CurrentList/ # 현재 참여 학생 목록
 ├── ApproveList/ # 승인 목록
 ├── FriendsList/ # 친구 목록
 ├── Log/ # 출석 기록
 ├── Lottery/ # 추첨 기능
 ├── NotificationService/ # 로컬 알림 및 일정 구독
 ├── Drawer/ # 사용자 메뉴
 └── Store/ # 전역 앱 설정 상태

기능 폴더 내부는 화면, Model, ViewModel과 Widget을 분리해 관리합니다.

7. 실행 방법

1. 저장소 복제 및 의존성 설치

git clone https://github.com/hekim-cse/attendance_check.git
cd attendance_check
flutter pub get

2. Firebase 설정

실행할 Firebase 프로젝트의 설정 파일을 추가합니다.

  • Android: android/app/google-services.json
  • iOS: ios/Runner/GoogleService-Info.plist

Firestore 보안 규칙과 필요한 컬렉션은 사용자 역할과 데이터 소유권에 맞게 구성해야 합니다.

3. 권한 확인 및 실행

QR 스캔과 저장 기능을 위해 카메라·저장소·알림 권한이 필요합니다.

flutter run

8. 권한 및 운영 유의사항

  • QR 값만 신뢰하지 말고 서버 또는 Firestore 보안 규칙에서 일정·사용자·출석 가능 시간을 함께 검증해야 합니다.
  • 관리자 기능은 사용자 역할을 확인한 뒤 접근할 수 있도록 제한해야 합니다.
  • 학생 식별 정보와 출석 기록은 최소한으로 수집하고 보관·삭제 정책을 명확히 운영해야 합니다.
  • Android의 정확한 예약 알림은 OS 버전과 배터리 최적화 정책의 영향을 받을 수 있습니다.

About

QR 인증과 Firebase 실시간 데이터를 활용한 Flutter 모바일 출석 관리 앱

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /