|
| 1 | +# GOMS Android V3 |
| 2 | + |
| 3 | +<img width="2558" height="1495" alt="image" src="https://github.com/user-attachments/assets/3f9959a8-0555-47f9-81d2-b4b57b28a836" /> |
| 4 | + |
| 5 | +--- |
| 6 | + |
| 7 | +# 🤔 GOMS? |
| 8 | + |
| 9 | +**GOMS**는 __광주소프트웨어마이스터고등학교__ Haribo가 개발한 Flutter 기반 애플리케이션으로, |
| 10 | +월요일과 수요일에 시행되는 외출제를 **보다 효율적이고 체계적으로 관리하기 위해 제작되었습니다.** |
| 11 | + |
| 12 | +기존 수기 기반 관리 방식에서 발생하던 비효율적인 프로세스를 개선하고, |
| 13 | +외출 현황을 실시간으로 관리할 수 있는 시스템을 구축하는 것을 목표로 합니다. |
| 14 | + |
| 15 | +--- |
| 16 | + |
| 17 | +## Preview |
| 18 | + |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## 🎯 Problem |
| 23 | + |
| 24 | +기존 외출제 운영 과정에서는 다음과 같은 문제가 존재했습니다. |
| 25 | + |
| 26 | +- 학생회가 외출 학생을 수기로 직접 기록해야 하는 구조 |
| 27 | +- 지각 및 미복귀 학생을 즉시 파악하기 어려운 환경 |
| 28 | +- 데이터가 체계적으로 관리되지 않아 운영 효율성이 낮은 문제 |
| 29 | + |
| 30 | +--- |
| 31 | + |
| 32 | +## 💡 Solution |
| 33 | + |
| 34 | +GOMS는 위 문제를 해결하기 위해 다음과 같은 방식으로 설계되었습니다. |
| 35 | + |
| 36 | +- 외출 상태를 실시간으로 **조회할 수 있도록 시스템화** |
| 37 | +- 지각 및 미복귀 학생을 **자동으로 식별하는 구조 설계** |
| 38 | +- QR 기반 인증 시스템을 도입하여 **출입 관리 정확도 향상** |
| 39 | +- 지도 기반 기능을 통해 외출 **시간 활용도를 높이는 사용자 경험 제공** |
| 40 | + |
| 41 | +--- |
| 42 | + |
| 43 | +## ✨ Key Features |
| 44 | + |
| 45 | +- 실시간 외출 현황 조회 기능 |
| 46 | +- 지각 학생 TOP 3 자동 집계 기능 |
| 47 | +- 7시 30분 기준 미복귀 학생 자동 블랙리스트 등록 |
| 48 | +- QR 코드 생성 및 스캔 기능 |
| 49 | +- 학생 검색 및 권한 관리 기능 |
| 50 | +- 유효하지 않은 QR 코드 차단 |
| 51 | +- 외출제 상태 푸시 알림 |
| 52 | +- Kakao Maps SDK 기반 주변 장소 탐색 및 경로 안내 |
| 53 | + |
| 54 | +--- |
| 55 | + |
| 56 | +## Architecture |
| 57 | + |
| 58 | +- Riverpod 기반 상태 관리 |
| 59 | + `flutter_riverpod`와 `state_notifier`를 활용해 View와 비즈니스 로직을 분리하여 유지보수성과 확장성을 확보 |
| 60 | + |
| 61 | +- 모듈화된 프로젝트 구조 |
| 62 | + 디자인 시스템을 `packages/goms_design_system` 내부 패키지로 분리하여 UI 일관성과 재사용성을 확보하고, 기능 단위로 코드를 구성 |
| 63 | + |
| 64 | +- 코드 생성 기반 개발 |
| 65 | + `freezed`, `json_serializable`, `retrofit_generator`를 활용해 모델과 API 통신 코드의 보일러플레이트를 최소화 |
| 66 | + |
| 67 | +--- |
| 68 | + |
| 69 | +## 🛠 Tech Stack |
| 70 | + |
| 71 | +### Flutter |
| 72 | +- Flutter / Dart |
| 73 | +- FVM (Flutter Version Management) |
| 74 | + |
| 75 | +### State Management |
| 76 | +- Riverpod (flutter_riverpod) |
| 77 | +- state_notifier |
| 78 | + |
| 79 | +### Routing |
| 80 | +- go_router |
| 81 | + |
| 82 | +### Networking |
| 83 | +- Dio |
| 84 | +- Retrofit |
| 85 | + |
| 86 | +### Code Generation |
| 87 | +- Freezed |
| 88 | +- json_serializable |
| 89 | +- build_runner |
| 90 | + |
| 91 | +### Location |
| 92 | +- Kakao Maps SDK (kakao_map_sdk) |
| 93 | +- Geolocator |
| 94 | + |
| 95 | +### UI |
| 96 | +- 내부 디자인 시스템 패키지 (goms_design_system) |
| 97 | +- flutter_screenutil |
| 98 | +- flutter_svg |
| 99 | +- responsive_framework |
| 100 | +- image_fade |
| 101 | +- Custom Fonts: SUIT, GmarketSans |
| 102 | + |
| 103 | +### Storage |
| 104 | +- flutter_secure_storage |
| 105 | +- shared_preferences |
| 106 | + |
| 107 | +### Push Notification |
| 108 | +- Firebase Core |
| 109 | +- Firebase Messaging |
| 110 | + |
| 111 | +### QR |
| 112 | +- mobile_scanner (스캔) |
| 113 | +- qr_flutter (생성) |
| 114 | + |
| 115 | +### Environment |
| 116 | +- flutter_dotenv |
| 117 | + |
| 118 | +### Others |
| 119 | +- permission_handler |
| 120 | +- device_info_plus |
| 121 | +- image_picker |
| 122 | +- table_calendar |
| 123 | + |
| 124 | +--- |
| 125 | + |
| 126 | +## What Makes This Project Different |
| 127 | + |
| 128 | +- 단순 기능 구현이 아닌 실제 사용자 환경에서 발생한 문제를 기반으로 설계된 서비스 |
| 129 | +- 내부 디자인 시스템 패키지(goms_design_system)를 통한 UI 일관성과 재사용성 확보 |
| 130 | +- Kakao Maps SDK를 활용한 위치 기반 기능 확장 |
| 131 | +- 실제 학교 환경에서 사용 가능한 수준의 서비스 완성도 |
| 132 | + |
| 133 | +--- |
| 134 | + |
| 135 | +## Summary |
| 136 | + |
| 137 | +수기 기반 외출제 관리 방식을 데이터 기반 시스템으로 전환하여 |
| 138 | +운영 효율성과 사용자 경험을 동시에 개선한 Flutter 애플리케이션 |
0 commit comments