πŸ›οΈ Architecture - CommitBang/Snapfig-Frontend GitHub Wiki

πŸ—οΈ μ•„ν‚€ν…μ²˜

SnapFig은 Clean Architecture와 MVVM νŒ¨ν„΄μ„ 기반으둜 μ„€κ³„λ˜μ–΄ ν™•μž₯μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€.

πŸ“ 전체 μ•„ν‚€ν…μ²˜ ꡬ쑰

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Presentation Layer                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚   Home Screen   β”‚  β”‚ PDF Viewer      β”‚  β”‚   Settings   β”‚ β”‚
β”‚  β”‚   (MVVM)        β”‚  β”‚ Screen (MVVM)   β”‚  β”‚   Screen     β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Business Logic Layer                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚   PDF Service   β”‚  β”‚   OCR Service   β”‚  β”‚  AI Service  β”‚ β”‚
β”‚  β”‚   (Provider)    β”‚  β”‚   (Provider)    β”‚  β”‚  (Provider)  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      Data Layer                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚   Isar DB       β”‚  β”‚   HTTP Client   β”‚  β”‚ File System  β”‚ β”‚
β”‚  β”‚   (Local)       β”‚  β”‚   (Remote)      β”‚  β”‚   (Cache)    β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”§ 핡심 μ•„ν‚€ν…μ²˜ νŒ¨ν„΄

1. MVVM (Model-View-ViewModel)

  • View: Flutter Widgets (UI μ»΄ν¬λ„ŒνŠΈ)
  • ViewModel: ChangeNotifier 기반 μƒνƒœ 관리
  • Model: 데이터 λͺ¨λΈ 및 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직

2. Provider Pattern

  • PDFProvider: PDF λ¬Έμ„œ μƒνƒœ 및 OCR 처리 관리
  • AIProvider: AI μ„œλΉ„μŠ€ 톡합 및 λŒ€ν™” μƒνƒœ 관리
  • NavigationProvider: μ•± λ‚΄ λ„€λΉ„κ²Œμ΄μ…˜ 쀑앙 관리

3. Repository Pattern

  • Local Repository: Isar λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό ν†΅ν•œ 둜컬 데이터 관리
  • Remote Repository: HTTP ν΄λΌμ΄μ–ΈνŠΈλ₯Ό ν†΅ν•œ μ™ΈλΆ€ API 톡신
  • Cache Repository: 파일 μ‹œμŠ€ν…œ 기반 μΊμ‹œ 관리

πŸ“ λͺ¨λ“ˆλ³„ μ±…μž„

λͺ¨λ“ˆ μ±…μž„ μ£Όμš” μ»΄ν¬λ„ŒνŠΈ
Core μ•± 전체 곡톡 μš”μ†Œ Constants, Theme, Utils
Features κΈ°λŠ₯별 독립 λͺ¨λ“ˆ Screens, Widgets, Models
Shared 곡톡 μ„œλΉ„μŠ€ 및 μœ„μ ― Services, Widgets
Data 데이터 μ ‘κ·Ό 및 관리 Repositories, Data Sources