๐Ÿ› ๏ธ 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)

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์›์น™

  1. ๊ธฐ๋Šฅ๋ณ„ ๋ถ„๋ฆฌ: ๊ฐ ๊ธฐ๋Šฅ์€ ๋…๋ฆฝ์ ์ธ ํด๋”๋กœ ๊ด€๋ฆฌ
  2. ๊ณ„์ธต๋ณ„ ๋ถ„๋ฆฌ: models, screens, widgets๋กœ ๊ณ„์ธต ๋ถ„๋ฆฌ
  3. ๊ณตํ†ต ์š”์†Œ ๋ถ„๋ฆฌ: shared ํด๋”์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์š”์†Œ ๊ด€๋ฆฌ
  4. ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ ์ผ์น˜: 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 ํŒŒ์ดํ”„๋ผ์ธ

  1. GitHub Actions
    • Push ์‹œ develop ๋ธŒ๋žœ์น˜ ๋นŒ๋“œ & ํ…Œ์ŠคํŠธ ์ž๋™ ์‹คํ–‰
    • PR ์ƒ์„ฑ ์‹œ lint, format, unit/widget ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰
  2. Docker: ๋ฐฑ์—”๋“œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ž๋™ ๋นŒ๋“œ
  3. ๋ฐฐํฌ: main ๋ธŒ๋žœ์น˜ merge ์‹œ ๋„์ปค ํ—ˆ๋ธŒ ๋ฐ ์„œ๋ฒ„ ๋ฐฐํฌ ํŠธ๋ฆฌ๊ฑฐ

์ฝ”๋“œ ๋ฆฌ๋ทฐ & ํ’ˆ์งˆ ๊ด€๋ฆฌ

  • PR ๋ฆฌ๋ทฐ: ์ตœ์†Œ 2๋ช… ์Šน์ธ ํ›„ merge
  • Lint: flutter analyze, flake8
  • Format: flutter format, black
  • ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€: ์ตœ์†Œ 80%