Skip to content

Repository files navigation

밥묵자

Group 17

대학교 급식 정보를 한눈에
학교 설정부터 위젯까지, 대학교 학식 관리앱


🍚 Bobmoo 서비스 소개

어제·오늘·내일 급식을 한눈에 확인하고
학교 식당 메뉴를 위젯으로 빠르게 확인할 수 있는 앱


✨ 주요 기능

  • 🔍 학교 검색 및 설정 - 원하는 대학교를 검색하고 선택
  • 📅 3일치 급식 조회 - 어제/오늘/내일 식단을 스와이프로 빠르게 확인
  • 🏪 다중 식당 지원 - 학생식당, 교직원식당, 생활관식당 정보 제공
  • 운영 시간 및 상태 - 실시간 운영 상태 표시 (운영중/종료임박/종료)
  • 🍽️ 코스별 메뉴 - A/B/C 코스별 상세 메뉴 정보
  • 📱 홈 위젯 - 홈화면에서 바로 보는 오늘의 급식
  • ⚙️ 위젯 식당 설정 - 위젯에 표시할 기본 식당 선택 가능

👨‍💻 Developer

안현우
@hwoo7449

검색 설정 위젯

🛠 Tech Stack

기술/도구 선정 이유
Flutter (Material 3) 단일 코드베이스로 빠르게 기능을 실험하고, 일관된 UI/UX를 안정적으로 제공하기 위해 선택
Provider 학내 선택, 검색, 화면 갱신 같은 상태 변화를 단순한 구조로 관리해 개발 생산성과 가독성 확보
GetIt (DI) Service-Repository 의존성을 분리해 구조를 명확히 하고, 기능 추가/교체 시 영향 범위를 최소화
Repository Pattern UI와 데이터 접근(API, 로컬 캐시)을 분리해 유지보수성을 높이고 확장 가능한 아키텍처 구축
HTTP 식단/학교 목록 API를 가볍고 명확하게 연동해 네트워크 레이어 복잡도를 낮춤
Isar 오프라인 캐시와 빠른 조회 성능을 확보해 네트워크 상태와 무관한 안정적인 식단 조회 경험 제공
SharedPreferences 선택 학교, 위젯 기본값 등 사용자 설정을 영속화해 재실행 시에도 끊김 없는 UX 제공
Workmanager (Android) 주기적 백그라운드 동기화로 앱을 열지 않아도 최신 식단 데이터를 유지
HomeWidget + Android Glance Flutter-Android 브릿지 기반 위젯 연동으로 홈 화면에서 즉시 식단 확인 가능
In-App Update (Android) 유연 업데이트 적용으로 사용자 이탈 없이 최신 기능/수정사항을 빠르게 배포
Firebase Analytics 조회/변경/오류/동기화 이벤트를 데이터로 추적해 기능 개선 의사결정을 정량화

🏗 Architecture

Bobmoo는 다음과 같은 계층 구조로 설계되었습니다.

UI (Screens) ↓ Provider (State Management) ↓ Repository (Data Access) ↓ Service (API / Background) ↓ Local Cache (Isar) / Network


📱 Screenshots

스플래시 온보딩 학교검색
홈 화면 설정 위젯

🌿 Git Flow

  1. Issue를 생성한다.
  2. main 브랜치에서 Branch Naming Rule에 따라 브랜치를 생성한다.
  3. 기능 구현 후 commit / push 한다.
  4. PR을 생성하고 코드 리뷰 후 merge 한다.
  5. merge 이후 로컬 main 브랜치로 이동 후 pull 한다.

Branch Naming

feature/#{issue-number}-{short-description}

예시

feature/#42-home-screen
fix/#18-api-error


📝 Convention

Commit Message

태그 설명
feat 새로운 기능 구현 시 사용
fix 버그나 오류 해결 시 사용
style 스타일 및 UI 기능 구현 시 사용
docs README, 템플릿 등 프로젝트 내 문서 수정 시 사용
setting 프로젝트 관련 설정 변경 시 사용
add 사진 등 에셋이나 라이브러리 추가 시 사용
refactor 기존 코드를 리팩토링하거나 수정할 때 사용
chore 별로 중요한 수정이 아닐 때 사용
hotfix 급하게 develop에 바로 반영해야 하는 경우 사용

Commit Message Rule

  1. 반드시 소문자로 작성합니다.
  2. 한글로 작성합니다.
  3. 제목이 50자를 넘지 않도록, 간단하게 명령조로 작성합니다.
feat: #1 홈 화면 구현

fix: #2 api 응답 파싱 오류 수정

📁 Foldering

갱신 명령어: dart run tool/generate_readme_structure.dart

🍚 bobmoo_android
└── 📁 lib
    ├── 📄 main.dart                            # 앱 진입점
    ├── 📄 locator.dart                         # DI(Service Locator) 설정
    ├── 📁 collections                          # Isar 컬렉션/스키마
    │   ├── 📄 meal_collection.dart
    │   ├── 📄 menu_cache_status.dart
    │   └── 📄 restaurant_collection.dart
    ├── 📁 constants                            # 앱 전역 상수
    │   └── 📄 app_constants.dart
    ├── 📁 models                               # 도메인/위젯 데이터 모델
    │   ├── 📄 all_cafeterias_widget_data.dart
    │   ├── 📄 meal_by_cafeteria.dart
    │   ├── 📄 meal_widget_data.dart
    │   ├── 📄 menu_model.dart
    │   └── 📄 university.dart
    ├── 📁 providers                            # 상태 관리(Provider)
    │   ├── 📄 search_provider.dart
    │   └── 📄 univ_provider.dart
    ├── 📁 repositories                         # 데이터 접근 계층
    │   └── 📄 meal_repository.dart
    ├── 📁 screens                              # 앱 화면 및 화면 보조 로직
    │   ├── 📄 app_gate.dart
    │   ├── 📄 home_analytics_helper.dart
    │   ├── 📄 home_screen.dart
    │   ├── 📄 home_widget_sync_helper.dart
    │   ├── 📄 loading_screen.dart
    │   ├── 📄 onboarding_screen.dart
    │   ├── 📄 select_school_screen.dart
    │   ├── 📄 settings_screen.dart
    │   └── 📄 splash_screen.dart
    ├── 📁 services                             # 외부 연동/백그라운드 서비스
    │   ├── 📄 analytics_service.dart
    │   ├── 📄 background_service.dart
    │   ├── 📄 menu_service.dart
    │   └── 📄 widget_service.dart
    ├── 📁 ui                                   # 공통 UI 레이어
    │   ├── 📁 components                       # 재사용 UI 컴포넌트
    │   │   ├── 📁 buttons
    │   │   │   └── 📄 primary_button.dart
    │   │   ├── 📁 cards
    │   │   │   ├── 📄 setting_section_card.dart
    │   │   │   └── 📄 time_grouped_card.dart
    │   │   └── 📁 meal
    │   │       ├── 📄 cafeteria_menu_column.dart
    │   │       ├── 📄 meal_item_row.dart
    │   │       └── 📄 open_status_badge.dart
    │   └── 📁 theme                            # 테마 시스템
    │       ├── 📄 app_colors.dart
    │       ├── 📄 app_shadow.dart
    │       └── 📄 app_typography.dart
    └── 📁 utils                                # 유틸리티
        ├── 📄 hours_parser.dart
        └── 📄 meal_utils.dart

🎨 UI/UX Highlights

  • 직관적인 탭 네비게이션: 어제/오늘/내일을 스와이프로 자연스럽게 이동
  • 실시간 운영 상태: 운영중(초록), 종료임박(노랑), 종료(회색)로 직관적 표시
  • 풀다운 새로고침: 당겨서 새로고침으로 최신 데이터 동기화
  • 위젯 지원: 홈화면에서 빠른 급식 확인

🔗 Links


Made with 🍚 by @hwoo7449

About

밥묵자 안드로이드 앱

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages