๐ ๏ธ Developer Guide - CommitBang/Snapfig-Frontend GitHub Wiki
Developer Guide
ํ๋ก์ ํธ ๊ตฌ์กฐ
-
Clean Architecture & Feature-First ํจํด์ ์ ์ฉํ์ฌ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํ๋ณดํ์ต๋๋ค.
lib/: ๋ฉ์ธ ์์ค ์ฝ๋ (์ฑ ์ง์ ์ ๋ฐ ๊ธฐ๋ฅ๋ณ ๋ชจ๋)test/ยทintegration_test/: ๋จ์ยท์์ ฏยทํตํฉ ํ ์คํธ ์ฝ๋assets/: ์ด๋ฏธ์งยท์์ด์ฝยทํฐํธยท์ํ PDF ๋ฑ ๋ฆฌ์์คandroid/,ios/: ํ๋ซํผ๋ณ ๋ค์ดํฐ๋ธ ์ฝ๋docs/: ์ค๊ณยท๊ฐ์ด๋ ๋ฌธ์
-
lib/ ์์ธ ๊ตฌ์กฐ
main.dart: ์ฑ ์คํ ์ง์ ์ core/: ์ ์ญ ์์, ํ ๋ง, ์ ํธ๋ฆฌํฐ ํจ์ ๋ฑ ๊ณตํต ์์features/: ๊ธฐ๋ฅ๋ณ ๋ชจ๋home/,pdf_viewer/,settings/๋ฑ- ๊ฐ ๋ชจ๋์
models/ยทscreens/ยทwidgets/ํด๋๋ก ๊ตฌ์ฑ
shared/: ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์๋น์คยท์์ ฏservices/: AI, OCR, PDF ์ฒ๋ฆฌ, ๋ด๋น๊ฒ์ด์ ๋ฑ ๋น์ฆ๋์ค ๋ก์งwidgets/: ๋ฌธ์ ์นด๋ ๋ฑ ๊ณตํต UI ์ปดํฌ๋ํธ
-
ํ ์คํธ ๊ตฌ์กฐ
test/unit/,test/widget/,test/integration/๋ก ๊ธฐ๋ฅ๋ณ ํ ์คํธ ๊ตฌ๋ถintegration_test/์์ ์ค์ PDFยทOCR ํ๋ก๋ฐ์ด๋ ํตํฉ ๊ฒ์ฆ
-
๋ฐ์ดํฐ ํ๋ฆ (MVVM)
View (Widget)
โ๏ธ
ViewModel (Provider/ChangeNotifier)
โ๏ธ
Model (Service/Repository)
โ๏ธ
Data Source (API/Database)
์ฝ๋ฉ ์ปจ๋ฒค์
- ์ปค๋ฐ ๋ฉ์์ง:
type(scope): ์ค๋ช - ๋ธ๋์น:
feature/*,bugfix/*,hotfix/* - Dart ์คํ์ผ:
flutter format,flutter analyze
ํ์ผ ๋ช ๋ช ๊ท์น
- Screen:
*_screen.dart(์:pdf_viewer_screen.dart) - Widget:
*_widget.dart๋๋ ๊ธฐ๋ฅ๋ช (์:pdf_card.dart) - Model:
*_model.dart(์:document_model.dart) - Service:
*_service.dart(์:ai_service.dart) - Provider:
*_provider.dart(์:pdf_provider.dart)
ํด๋์ค ๋ช ๋ช ๊ท์น
- Screen:
*Screen(์:PDFViewerScreen) - Widget:
*Widget๋๋ ๊ธฐ๋ฅ๋ช (์:PDFCard) - Model:
*Model(์:DocumentModel) - Service:
*Service(์:AIService) - Provider:
*Provider(์:PDFProvider)
๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ์์น
- ๊ธฐ๋ฅ๋ณ ๋ถ๋ฆฌ: ๊ฐ ๊ธฐ๋ฅ์ ๋ ๋ฆฝ์ ์ธ ํด๋๋ก ๊ด๋ฆฌ
- ๊ณ์ธต๋ณ ๋ถ๋ฆฌ: models, screens, widgets๋ก ๊ณ์ธต ๋ถ๋ฆฌ
- ๊ณตํต ์์ ๋ถ๋ฆฌ: shared ํด๋์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์์ ๊ด๋ฆฌ
- ํ ์คํธ ๊ตฌ์กฐ ์ผ์น: lib ๊ตฌ์กฐ์ ๋์ผํ test ๊ตฌ์กฐ ์ ์ง
๋น๋ ์คํฌ๋ฆฝํธ
- ๋ชจ๋ธ ์ฝ๋ ์์ฑ:
build_runner - ๋ฆฐํธ & ํฌ๋งท:
flutter analyze/flutter format
ํ ์คํธ ์คํ
- ๋จ์ ํ
์คํธ:
flutter test test/unit - ์์ ฏ ํ
์คํธ:
flutter test test/widget - ํตํฉ ํ
์คํธ:
flutter test integration_test/
๊ฐ๋ฐ ํ๋ก์ธ์ค
๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก
- Agile (XP): 2์ฃผ ์คํ๋ฆฐํธ, ๋ฐ์ผ๋ฆฌ ์คํ ๋์ , ํ์ด ํ๋ก๊ทธ๋๋ฐ
- ๊ณต๋ ์์ ๊ถ: ๋ชจ๋ ์ฝ๋์ ํ์ ๋ชจ๋๊ฐ ๊ธฐ์ฌ ๊ฐ๋ฅ
๋ธ๋์น ์ ๋ต
main: ํ๋ก๋์ ์ฝ๋develop: ํตํฉ ๊ฐ๋ฐ ๋ธ๋์นfeature/*: ๊ธฐ๋ฅ ๊ฐ๋ฐbugfix/*: ๋ฒ๊ทธ ์์ hotfix/*: ๊ธด๊ธ ์์
CI/CD ํ์ดํ๋ผ์ธ
- GitHub Actions
- Push ์
develop๋ธ๋์น ๋น๋ & ํ ์คํธ ์๋ ์คํ - PR ์์ฑ ์ lint, format, unit/widget ํ ์คํธ ์ํ
- Push ์
- Docker: ๋ฐฑ์๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง ์๋ ๋น๋
- ๋ฐฐํฌ:
main๋ธ๋์น merge ์ ๋์ปค ํ๋ธ ๋ฐ ์๋ฒ ๋ฐฐํฌ ํธ๋ฆฌ๊ฑฐ
์ฝ๋ ๋ฆฌ๋ทฐ & ํ์ง ๊ด๋ฆฌ
- PR ๋ฆฌ๋ทฐ: ์ต์ 2๋ช ์น์ธ ํ merge
- Lint:
flutter analyze,flake8 - Format:
flutter format,black - ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง: ์ต์ 80%