๐ฏ Design Decisions - CommitBang/Snapfig-Frontend GitHub Wiki
Design Decisions
์ฃผ์ ์ค๊ณ ์ ํ ๋ฐฐ๊ฒฝ
Why MVVM?
SnapFig์ Clean Architecture์์ ํธํ์ฑ๊ณผ ํ
์คํธ ์ฉ์ด์ฑ์ ์ํด MVVM(Model-View-ViewModel) ํจํด์ ์ฑํํ์ต๋๋ค.
MVVM์ UI(View)์ ๋น์ฆ๋์ค ๋ก์ง(ViewModel)์ ๋ช
ํํ ๋ถ๋ฆฌํ์ฌ ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ๋์ด๊ณ , Flutter์ ChangeNotifier ๊ธฐ๋ฐ ์ํ ๊ด๋ฆฌ์ ์์ฐ์ค๋ฝ๊ฒ ์ฐ๋๋ฉ๋๋ค.
Why Isar?
๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก Isar๋ฅผ ์ ํํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ฐ์ด๋ ์ฑ๋ฅ: ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ๋งค์ฐ ๋น ๋ฅธ ์ฟผ๋ฆฌ ์๋๋ฅผ ์ ๊ณต
- ๊ฒฝ๋ํ: ์ฑ ๋ค์ด๋ก๋ ํฌ๊ธฐ ์ฆ๊ฐ๊ฐ ์ฝ 1โ1.5 MB๋ก ์ต์ํ
- ์ฝ๋ ์์ฑ ์ง์:
build_runner๋ฅผ ํตํ ๋ชจ๋ธ ํด๋์ค ์๋ ์์ฑ์ผ๋ก ๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์
Why FastAPI?
๋ฐฑ์๋ API ์๋ฒ๋ก FastAPI๋ฅผ ๋์ ํ ์ด์ ๋:
- ๋น๋๊ธฐ ์ง์(ASGI): ๋๊ท๋ชจ ๋์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ
- ์๋ ๋ฌธ์ํ: OpenAPI/Swagger ๊ธฐ๋ฐ ์ธํฐ๋ํฐ๋ธ ๋ฌธ์ ์ ๊ณต
- ํ์ ํํธ ๊ฒ์ฆ: Pydantic์ ํ์ฉํด ๋ฐํ์ ๋ฐ์ดํฐ ์ ํจ์ฑ์ ์ปดํ์ผ ํ์์ฒ๋ผ ๊ฒ์ฆ
- ๊ณ ์ฑ๋ฅ: Flask/Django ๋๋น ๋ ๋์ ์ฒ๋ฆฌ ์๋
๋์ ๊ฒํ ๋ฐ Trade-off ์์ฝ
| ๊ธฐ์ | ๋์ | ์ฅ์ | ๋จ์ |
|---|---|---|---|
| MVVM | MVC, BLoC | UI/๋น์ฆ๋์ค ๋ก์ง ๋ถ๋ฆฌ โ ํ ์คํธ ์ฉ์ด | ๋ฌ๋ ์ปค๋ธ, ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋ ์ฆ๊ฐ |
| Isar | Hive, SQflite, ObjectBox | ๊ณ ์ฑ๋ฅ ์ฟผ๋ฆฌ, Flutter ๋ค์ดํฐ๋ธ ์ง์, ์ฝ๋ ์์ฑ ๋๊ตฌ | ์ปค๋ฎค๋ํฐ ๊ท๋ชจ ์์, ๋์ฉ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฝ |
| FastAPI | Flask, Django | ASGI ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ, ์๋ ๋ฌธ์ํ, ํ์ ํํธ ๊ฒ์ฆ | ๋น๊ต์ ์ ์ ํ๋ ์์ํฌ, ์ํ๊ณยทํ๋ฌ๊ทธ์ธ ์ ์ |