Model์ ์ญํ
๋ฐ์ดํฐ ์ก์ธ์ค
๋ฐ์ดํฐ๋ฒ ์ด์ค CRUD ์์
Puri ์ฟผ๋ฆฌ ๋น๋๋ฅผ ํตํ ํ์
์์ ํ ์ฟผ๋ฆฌ
๋น์ฆ๋์ค ๋ก์ง
๋๋ฉ์ธ ๊ท์น ๊ตฌํ ๋ฐ์ดํฐ ๊ฒ์ฆ, ๋ณํ, ๊ณ์ฐ
API ์๋ํฌ์ธํธ
HTTP API ์๋ ์์ฑ @api ๋ฐ์ฝ๋ ์ดํฐ๋ก REST API ์ ๊ณต
ํ์ ์์ ์ฑ
์ปดํ์ผ ํ์ ํ์
์ฒดํฌ Entity ๊ธฐ๋ฐ ์๋ ํ์
์์ฑ
Sonamu ์ํคํ ์ฒ์์์ ์์น
๋ ์ด์ด ๊ตฌ์กฐ:- Client - ํ๋ก ํธ์๋ (React, Vue ๋ฑ)
- API Layer - HTTP ์๋ํฌ์ธํธ (@api ๋ฐ์ฝ๋ ์ดํฐ)
- Model Layer - ๋น์ฆ๋์ค ๋ก์ง โญ
- Database - PostgreSQL
Model์ API Layer์ Database ์ฌ์ด์ ๋น์ฆ๋์ค ๋ก์ง ๋ ์ด์ด์
๋๋ค. ๋ชจ๋ ๋ฐ์ดํฐ ์ ๊ทผ๊ณผ ๋น์ฆ๋์ค
๊ท์น์ Model์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
Model ํด๋์ค ๊ตฌ์กฐ
๊ธฐ๋ณธ ๊ตฌ์กฐ
user.model.ts
์ ๋ค๋ฆญ ํ์ ํ๋ผ๋ฏธํฐ
Model vs Entity vs Types
Sonamu์์ ์์ฃผ ํผ๋๋๋ ๊ฐ๋ ๋ค์ ์ ๋ฆฌํด๋ด ์๋ค:
์์:
Model์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ
1. ํ์ ์์ ํ ๋ฐ์ดํฐ ์ก์ธ์ค
2. Subset ๊ธฐ๋ฐ ์ฟผ๋ฆฌ
Subset์ API ์๋ต์ ํ์ํ ํ๋๋ง ์ ํํ์ฌ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
3. ์๋ API ์์ฑ
- HTTP ์๋ํฌ์ธํธ:
GET /user/findById?id=1 - TypeScript ํด๋ผ์ด์ธํธ ์ฝ๋
- TanStack Query hooks
- API ๋ฌธ์
4. ํธ๋์ญ์ ๊ด๋ฆฌ
5. ๋ฐ์ดํฐ ๊ฒ์ฆ๊ณผ ๋ณํ
Model ์์ฑ ํจํด
CRUD ๋ฉ์๋
์ผ๋ฐ์ ์ธ Model์ ๋ค์ CRUD ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค:๋๋ฉ์ธ๋ณ ๋ฉ์๋
๋น์ฆ๋์ค ๋๋ฉ์ธ์ ํนํ๋ ๋ฉ์๋๋ ์ถ๊ฐํ ์ ์์ต๋๋ค:BaseModel ๋ฉ์๋
BaseModelClass๋ ๋ค์ ์ ํธ๋ฆฌํฐ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค:
๋ ์์๋ณด๊ธฐ - BaseModel Methods - ๋ฉ์๋ ์์ธ
๊ฐ์ด๋
Model์ ์ฅ์
ํ์
์์ ์ฑ
ํ์ ์์ ์ฑ
Entity ์ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก TypeScript ํ์
์ด ์๋ ์์ฑ๋์ด, ์ปดํ์ผ ํ์์ ์ค๋ฅ๋ฅผ ์ก์ ์ ์์ต๋๋ค.
์ฝ๋ ์ฌ์ฌ์ฉ
์ฝ๋ ์ฌ์ฌ์ฉ
๊ณตํต ๋ก์ง์ Model ๋ฉ์๋๋ก ์์ฑํ์ฌ ์ฌ๋ฌ API์์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ
์คํธ ์ฉ์ด์ฑ
ํ ์คํธ ์ฉ์ด์ฑ
Model์ ๋
๋ฆฝ์ ์ผ๋ก ํ
์คํธํ ์ ์์ต๋๋ค.
๊ด์ฌ์ฌ ๋ถ๋ฆฌ
๊ด์ฌ์ฌ ๋ถ๋ฆฌ
๋น์ฆ๋์ค ๋ก์ง(Model)๊ณผ HTTP ์ฒ๋ฆฌ(Controller/API)๋ฅผ ๋ช
ํํ ๋ถ๋ฆฌํฉ๋๋ค.
- Model: ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ๋น์ฆ๋์ค ๊ท์น
- API: HTTP ์์ฒญ/์๋ต, ์ธ์ฆ, ๊ถํ
๋ค์ ๋จ๊ณ
Model์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๋ค๋ฉด, ๋ค์ ์ฃผ์ ๋ฅผ ํ์ตํ์ธ์:Creating Models
Model ์์ฑํ๊ณ Scaffold ์ฌ์ฉํ๊ธฐ
API Decorator
@api ๋ฐ์ฝ๋ ์ดํฐ๋ก API ์๋ํฌ์ธํธ ๋ง๋ค๊ธฐ
Business Logic
๋น์ฆ๋์ค ๋ก์ง ์์ฑ ํจํด๊ณผ ์์
BaseModel Methods
BaseModel์ด ์ ๊ณตํ๋ ๋ชจ๋ ๋ฉ์๋ ์์๋ณด๊ธฐ