Flutter 기반으로 개발된 실시간 좌석 정보 제공 & 사석화 방지 앱
Firebase 기반의 인증 및 데이터 관리, 다양한 유틸리티 기능 탑재
시험 기간마다 반복되는 열람실 "사석화" 문제는 학생들의 학습 효율을 심각하게 저해합니다. 자리를 차지해놓고 사용하지 않는 좌석으로 인해 실제 자리가 부족해지는 문제를 해결하고자 본 앱을 기획했습니다.
- 실시간 열람실 좌석 정보 제공
- 사용자 좌석 점유 여부 확인 및 공유
- 다양한 학습 지원 기능 내장 (동기부여 영상, 나침반 안내 등)
provider는 앱 전체에서 열람실 좌석 데이터를 효율적으로 공유하고, 실시간 변경사항을 반영하기 위해 사용됩니다. Firebase를 반복 조회하지 않고, 메모리에 저장된 상태로 앱 성능과 반응성을 향상시켰습니다.
├── users/
│ └── {uid}/
│ ├── email, name, message, uid
│ └── favorite/
│ └── {room_name}/
│ └── {seat_index}: true
├── rooms/
│ └── {room_name}/
│ └── seats/
│ └── {seat_index}/
│ ├── email: user_email
│ └── status: occupied | available
- 각 사용자 계정 정보를 저장하는 최상위 컬렉션입니다.
{uid}를 문서 ID로 사용하며, 해당 사용자에 대한email,name,message,uid등의 로그인 정보가 저장됩니다.
- 각 사용자(
{uid}) 문서 내에 존재하는 서브컬렉션입니다. - 사용자가 즐겨찾기한 좌석 정보를
room_name→seat_index형식으로 트리 구조처럼 저장합니다. - 즐겨찾는 좌석을 효율적으로 빠르게 불러오기 위해 최적화된 형태로 설계되었습니다.
- 열람실 정보를 저장하는 컬렉션입니다.
- 각
room_name별 문서가 존재하며, 그 내부에seats컬렉션이 포함됩니다.
- 실제 열람실 내 각 좌석에 대한 정보가 문서로 구성되어 있습니다.
- 각
seat_index는 문서 ID로 사용되며,email필드는 해당 좌석을 사용 중인 학생의 이메일을 의미합니다. status필드는 좌석의 현재 상태 (occupied,available)를 나타냅니다.
🔄 이 구조를 기반으로 앱에서는 실시간 좌석 상태 조회, 상태 변경, 즐겨찾기 기능 등을 효율적으로 구현할 수 있습니다.
| 패키지 | 설명 | 링크 |
|---|---|---|
| google_sign_in | Google 계정 로그인 | 바로가기 |
| firebase_auth | Firebase 인증 기능 | 바로가기 |
| firebase_core | Firebase SDK 초기화 | 바로가기 |
| cached_network_image | 네트워크 이미지 캐싱 | 바로가기 |
| flutter_svg | SVG 이미지 렌더링 | 바로가기 |
| 패키지 | 설명 | 링크 |
|---|---|---|
| cloud_firestore | Firebase 실시간 NoSQL DB | 바로가기 |
| provider | 상태관리 도구 | 바로가기 |
| shared_preferences | 로컬 데이터 저장 | 바로가기 |
| rxdart | 스트림 기반 반응형 처리 | 바로가기 |
| 패키지 | 설명 | 링크 |
|---|---|---|
| flutter_local_notifications | 로컬 알림 기능 | 바로가기 |
| timezone | 시간대 관리 기능 | 바로가기 |
| 패키지 | 설명 | 링크 |
|---|---|---|
| youtube_player_flutter | YouTube 영상 재생 | 바로가기 |
| http | HTTP 요청 처리 (YouTube Data API) | 바로가기 |
| 패키지 | 설명 | 링크 |
|---|---|---|
| location | 위치 정보 접근 | 바로가기 |
| permission_handler | 권한 요청 처리 | 바로가기 |
| flutter_compass | 나침반 방향 감지 | 바로가기 |
| math | 수학 계산 (나침반 회전) | 바로가기 |
Google 로그인 → Home Page 이동, SVG 로고 렌더링 적용
사용 API:
google_sign_in,firebase_auth,flutter_svg
전체 열람실 요약 + Drawer 접근
사용 API:
provider,cloud_firestore
기능별 페이지 라우팅 (홈 / 즐겨찾기 / 프로필 / 동기부여 / 설정)
즐겨찾기한 좌석 리스트뷰 표시
사용 API:
cloud_firestore,provider
좌석 상태 실시간 확인 (🟥 사용 중 / 🟩 사용 가능), 상태 변경 버튼 노출
사용 API:
cloud_firestore,provider
유저 프로필 및 GPS 버튼, 설정 진입
사용 API:
shared_preferences,location
사용자 위치 → 오석관 방향 안내, 나침반 회전
사용 API:
location,flutter_compass,math,permission_handler
공부 시간 예약 → 알림 & 스톱워치 기능
사용 API:
flutter_local_notifications,timezone,shared_preferences
실시간 유튜브 동영상 조회 및 재생
사용 API:
http,youtube_player_flutter
로그아웃 및 이용 약관 확인 기능
| 버전 | 기능 |
|---|---|
| v1.5 | UI 개선, 다크 모드, 약관 추가 |
| v2.0 | 업적 / 경고 기능, 좌석 이력 조회 |
| v3.0 | QR 좌석 체크 기능, 버그 리포트 시스템 |
| 이름 | 역할 |
|---|---|
| 마석재 | 팀장, 전체 로직 & UI, Firebase 구조 설계, Provider 상태관리, 알림 구현 |
| 이희준 | YouTube API, GPS + 나침반 기능 구현 |
다양한 API와 외부 패키지의 활용을 통해 Flutter 개발 접근법의 폭을 넓혔습니다. 협업 과정에서의 소통 능력, 구조 설계 역량을 성장시킨 뜻깊은 프로젝트였습니다.
Flutter의 확장성과 도전 의식을 체득할 수 있었습니다.
- 나침반 기능 구현은
flutter_compass예제 코드를 기반으로 수정하여 사용하였습니다.
참고 링크










