Skip to content

bulmang/green_field

Repository files navigation


🚀 기능 소개

📢 캠퍼스별 공지사항 & 💬 실시간 채팅

Slide 16_9 - 10

📄 게시글과 댓글 & 🏫 캠퍼스별 정보

Slide 16_9 - 9


🏗️ 아키텍처

각 계층은 독립적으로 동작하며, 상위 계층이 하위 계층에만 의존하도록 설계했습니다. 이를 통해 결합도를 최소화하고 테스트 및 유지보수성을 높였습니다.

🥞 계층 구조

View → ViewModel → Repository → Service

  • 의존성 방향: 상위 계층만 하위 계층을 참조합니다.

📋 계층별 역할 표

계층 역할 의존성 방향 예시
View - UI 렌더링- 사용자 입력 처리- 상태 변화 반영 ← ViewModel HomeView(), LoginView(), PostView()
ViewModel - 비즈니스 로직 실행- 상태 관리- Repository와 통신 ← Repository HomeViewModel, LoginViewModel, PostViewModel
Repository - 데이터 가공- Service ↔ ViewModel 간 중개- 도메인 로직 적용 ← Service PostRepository, LoginRepository, NoticeRepository
Service - 외부 시스템 통신- 데이터 CRUD 처리- API/DB 연동 ← 외부 데이터 소스 FirebaseAuthService, FirebaseStorageService, FirebaseStoreService
Model - 데이터 구조 정의- DTO/Entity 관리 모든 계층에서 참조* User(id, name, ...), Post(title, body, ...), Message(id, text, ...)

* Model은 데이터 클래스로, 특정 계층에 종속되지 않습니다.

풀밭_아키텍처 (4)


🛡 에러 핸들링 (Result Pattern 적용)

Flutter에서 Result Pattern을 사용해 네트워크 통신 과정의 에러를 효율적으로 처리했습니다.
아래 흐름대로 각 계층(View → ViewModel → Repository → Service)에서 일관된 에러 핸들링이 가능합니다. 성공시 지정한 데이터 타입의 객체가 반환됩니다.

  • sealed class로 컴파일 타임 안전성 보장
  • 모든 경우의 수 처리 강제 (Success/Failure)

🌐 계층별 에러 처리 예시 간편 로그인(네트워크 통신)

🔄 에러 핸들링 흐름

Error_Handler

🛣️ 라우팅 아키텍처

❓ GoRouter 선택 이유

  • 선언적 라우팅: 복잡한 네비게이션 시나리오(로그인 전환, 딥링크)를 간결하게 관리할 수 있습니다.
  • Riverpod 연동: 상태 변화에 반응하는 동적 리다이렉트 로직 구현이 용이합니다.

⚙️ 주요 기능 구현

  1. 인증 상태 기반 라우팅

    • GoRouterRefreshStream으로 Riverpod의 인증 상태(authStateProvider)를 실시간 감지합니다.
    • 인증 상태에 따라 /login, /home 등으로 자동 리다이렉트됩니다.
  2. StatefulShellRoute를 활용한 탭 구조

    • 독립적 네비게이션 스택: 각 탭(홈, 검색, 프로필)마다 별도의 네비게이션 히스토리를 유지합니다.
    • 지속적 UI: 하단 탭 바가 모든 서브 경로에서 유지되도록 설계했습니다.
    • 딥링크 지원: /profile/detail/:id와 같은 경로로 직접 접근 가능합니다.

네비게이션


📚 개발 기록

프로젝트 구현 과정에서 작성한 문서입니다. 각 주제를 클릭하면 해당 포스트로 이동합니다.


💻 개발 환경

🔑 로그인

  • 카카오/애플 로그인: 한국 사용자 편의성 + iOS 앱스토어 심사 규정 준수
  • kakao_flutter_sdk_user, sign_in_with_apple

📡 Firebase

  • 실시간 DB/인증/스토리지: 백엔드 구축 필요 없음.
  • firebase_core, cloud_firestore, firebase_auth, firebase_storage

⚙️ 유틸리티

  • 상태 관리: riverpod으로 깔끔한 DI
  • 탭/딥링크: go_router로 복잡한 네비게이션 처리
  • 날짜/URL: wheel_picker, url_launcher로 사용성 향상

🎨 UI/애니메이션

  • Lottie: 가벼운 로딩 애니메이션
  • Skeletonizer: 데이터 대기 중 UI 자연스러운 전환

🖼️ 이미지/데이터

  • Cached NetworkImage: 이미지 캐싱으로 속도 2배 ↑
  • Image Compress: 업로드 용량 80% ↓

🌐 웹

  • Flutter Web Frame: 모바일 ↔ 웹 레이아웃 자동 최적화

About

청년취업사관학교를 다니는 새싹이들을 위한 어플

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages