๐ก ์๋น์ค ์๊ฐ ๋ฐ ๊ธฐ์ ์คํ
๐ฏ ํ๋ก์ ํธ ๋ชฉํ
์นตํ ์ผ ์ฃผ๋ฅ ์ ๋ณด API๋ ์นตํ ์ผ ์ ์กฐ ํ๋ก์ธ์ค๋ฅผ ๋์ฑ ํจ์จ์ ์ด๊ณ ์ฐฝ์์ ์ผ๋ก ๋ง๋ค๊ณ ์ ํ๋ ์ด์ ์์ ์์๋์์ต๋๋ค. ์ฃผ๋ฅ(Spirits), ๋ฆฌํ๋ฅด(Liqueurs), ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๋ณด์กฐ ์ฌ๋ฃ(Ingredients)์ ๋ณต์กํ ํน์ฑ๋ค์ ํ๋์ ํ์ ํ๊ณ , ํ์ํ ๋ ์ฆ์ ๊ฒ์ํ์ฌ ์นตํ ์ผ ์ ์กฐ์ ํ์ฉํ ์ ์๋ ๊ฒฌ๊ณ ํ๊ณ ์ ์ฐํ RESTful API ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ด ํ๋ก์ ํธ์ ๋ชฉํ์ ๋๋ค.
์ด๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋์ด, ๊ฐ ์ฌ๋ฃ๋ณ ๊ณ ์ ์ ํฅ(Aroma), ๋ง(Taste), ์ฌ์ด(Finish)๊ณผ ๊ฐ์ ๊ฐ๊ฐ์ ์ธ ์ ๋ณด๊น์ง ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ์ฌ, ์ฌ์ฉ์๊ฐ ์ต์ ์ ์ฌ๋ฃ๋ฅผ ์ ํํ๊ณ ์๋ก์ด ์นตํ ์ผ ์กฐํฉ์ ํ์ํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
๐ ๏ธ ๊ธฐ์ ์คํ (Technical Stack)
์ด ์๋น์ค๋ ํ๋์ ์ธ ์น ๊ธฐ์ ๊ณผ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ์คํ์ ํ์ฉํ์ฌ ๊ตฌ์ถ๋์์ต๋๋ค.
๋ฐฑ์๋ (Backend)
- ์ฃผ์ ์ธ์ด ๋ฐ ํ๋ ์์ํฌ: Python 3.13 & FastAPI
- ๋์ ์ฑ๋ฅ๊ณผ ๋น ๋ฅธ ๊ฐ๋ฐ ์๋๋ฅผ ์๋ํ๋ FastAPI๋ฅผ ๊ธฐ๋ฐ์ผ๋ก RESTful API๋ฅผ ๊ตฌํํฉ๋๋ค
- uvloop ์ด๋ฒคํธ ๋ฃจํ ์ ์ฑ ์ผ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ์ต์ ํํฉ๋๋ค
- ORJSON์ ์ฌ์ฉํ ๊ณ ์ฑ๋ฅ JSON ์ง๋ ฌํ
-
Pydantic์ ํตํ ํ์ ์์ ๋ฐ์ดํฐ ๊ฒ์ฆ
-
์ข ์์ฑ ๊ด๋ฆฌ: UV
- Rust ๊ธฐ๋ฐ์ ๊ณ ์ฑ๋ฅ Python ํจํค์ง ๊ด๋ฆฌ์
- ๊ธฐ์กด pip/poetry ๋๋น 10-100๋ฐฐ ๋น ๋ฅธ ์ค์น ์๋
๋ฐ์ดํฐ๋ฒ ์ด์ค (Database)
- MongoDB: ์ฃผ๋ฅ์ ๋ณต์กํ๊ณ ์ ๋์ ์ธ ํน์ฑ(ํฅ, ๋ง, ์ฌ์ด ๋ฑ)๊ณผ ์ด๋ฏธ์ง ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ ์ฐํ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค
- SQLite: ๋ง, ํฅ, ์์ฐ์ง ๋ฑ ์ ํํ๋ ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํด ๊ฒฝ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ฉํฉ๋๋ค
์ธ์ฆ ๋ฐ ๋ณด์ (Authentication & Security)
- SuperTokens: ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ์ธ์ ๊ด๋ฆฌ๋ฅผ ์ํ ์คํ์์ค ์๋ฃจ์
- ์ด๋ฉ์ผ/ํจ์ค์๋ ๊ธฐ๋ฐ ์ธ์ฆ
- ์ธ์ ๊ด๋ฆฌ ๋ฐ ํ ํฐ ๊ฐฑ์
- JWT (JSON Web Token): ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด (RBAC)
- ๋ณด์ ๋ฏธ๋ค์จ์ด:
- CORS ์ค์
- ์์ถ ๋ฏธ๋ค์จ์ด (Brotli/Gzip)
- TrustedHost ๋ฏธ๋ค์จ์ด
ํ๋ก ํธ์๋ (Frontend)
- React 19: ์ต์ React ๋ฒ์ ์ผ๋ก ๋ชจ๋ UI ๊ตฌํ
- TypeScript: ํ์ ์์ ์ฑ์ ์ํ ์ ์ ํ์ ๊ฒ์ฌ
- Vite: ๊ณ ์ฑ๋ฅ ๋น๋ ๋๊ตฌ ๋ฐ ๊ฐ๋ฐ ์๋ฒ
- TailwindCSS v4: ์ ํธ๋ฆฌํฐ ์ฐ์ CSS ํ๋ ์์ํฌ
- PNPM: ๊ณ ์ฑ๋ฅ ํจํค์ง ๋งค๋์
์ฝ๋ ํ์ง (Code Quality)
- Python ๋๊ตฌ:
- Ruff: ๊ณ ์ฑ๋ฅ ๋ฆฐํฐ ๋ฐ ํฌ๋งคํฐ (Rust ๊ธฐ๋ฐ)
- Pyright: TypeScript ๊ธฐ๋ฐ ์ ์ ํ์ ๊ฒ์ฌ๊ธฐ
- pytest: ํ ์คํธ ํ๋ ์์ํฌ
- JavaScript/TypeScript ๋๊ตฌ:
- Biome: ํตํฉ ๋ฆฐํฐ ๋ฐ ํฌ๋งคํฐ (Rust ๊ธฐ๋ฐ)
- Vitest: ํ ์คํธ ํ๋ ์์ํฌ
๋ฌธ์ํ (Documentation)
- MkDocs: Material ํ ๋ง๋ฅผ ์ฌ์ฉํ ์ ์ ๋ฌธ์ ์ฌ์ดํธ ์์ฑ
- mkdocstrings: Python ๋ ์คํธ๋ง ์๋ ํ์ฑ ๋ฐ API ๋ฌธ์ ์์ฑ
๊ฐ๋ฐ ๋๊ตฌ (Development Tools)
- Docker: ์ปจํ ์ด๋ํ๋ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ํ๊ฒฝ
- Pre-commit: Git ์ปค๋ฐ ์ ์๋ ์ฝ๋ ํ์ง ๊ฒ์ฌ
- Structlog: ๊ตฌ์กฐํ๋ ๋ก๊น
- Pyinstrument: ์ฑ๋ฅ ํ๋กํ์ผ๋ง
์ฑ๋ฅ ์ต์ ํ (Performance)
- uvloop: ๊ณ ์ฑ๋ฅ ์ด๋ฒคํธ ๋ฃจํ
- ORJSON: ๊ณ ์ฑ๋ฅ JSON ์ง๋ ฌํ
- Compression: Brotli/Gzip ์๋ต ์์ถ
- Async/Await: ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ก ๋์ ๋์์ฑ ์ง์
๐ค ๊ธฐ์ฌ ๋ฐ ํผ๋๋ฐฑ
์ด ํ๋ก์ ํธ๋ ์ง์์ ์ผ๋ก ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ์ด๋ค ํํ์ ๊ธฐ์ฌ๋ ํผ๋๋ฐฑ๋ ํ์ํฉ๋๋ค. ๋ฒ๊ทธ ๋ณด๊ณ , ๊ธฐ๋ฅ ์ ์ ๋๋ ์ฝ๋ ๊ธฐ์ฌ๋ฅผ ํตํด ํ๋ก์ ํธ ๋ฐ์ ์ ์ฐธ์ฌํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.