Sonamu์ ์ฒ ํ
Sonamu๋ ๋ค์ ์์น์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค:1
1. Entity First (์ํฐํฐ ์ฐ์ )
๋ชจ๋ ๊ฐ๋ฐ์ ์ํฐํฐ ์ ์์์ ์์ํฉ๋๋ค. ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋จผ์ ์ ์ํ๋ฉด, ๋๋จธ์ง๋ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
2
2. Type Safety (ํ์ ์์ ์ฑ)
๋ฐฑ์๋๋ถํฐ ํ๋ก ํธ์๋๊น์ง ์์ ํ ํ์
์์ ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ์ปดํ์ผ ํ์์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค.
3
3. Code Generation (์ฝ๋ ์๋ ์์ฑ)
๋ฐ๋ณต์ ์ธ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์์ต๋๋ค.
4
4. Developer Experience (๊ฐ๋ฐ์ ๊ฒฝํ)
HMR, ํ์
์ถ๋ก , Sonamu UI ๋ฑ์ผ๋ก ๋ฐ์ด๋ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์ ์ฒด ์ํคํ ์ฒ
Sonamu๋ 6๊ฐ์ ๋ ์ด์ด๊ฐ ์๋์ผ๋ก ์ฐ๊ฒฐ๋์ด ๋์ํฉ๋๋ค:ํต์ฌ ๊ตฌ์ฑ ์์
1. Entity (์ํฐํฐ)
์ํฐํฐ๋ Sonamu์ ๋ชจ๋ ๊ฒ์ ์์์ ์ ๋๋ค.user.entity.json
์ํฐํฐ ์ ์์ ์ญํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ์์ค
- TypeScript ํ์ ์์ฑ์ ๊ธฐ๋ฐ
- API ์ธํฐํ์ด์ค์ ์ ์
- ํ๋ก ํธ์๋ ํ์ ์ ๊ธฐ์ค
2. Type System (ํ์ ์์คํ )
์ํฐํฐ ์ ์๋ก๋ถํฐ 3๊ฐ์ง ํ์ ํ์ผ์ด ์๋ ์์ฑ๋ฉ๋๋ค:ํ์
ํ์ผ 3์ข
์ธํธ
{entity}.types.ts- ์ํฐํฐ๋ณ ํ์ (ํ์ฅ ๊ฐ๋ฅ)sonamu.generated.ts- ์ ์ฒด Base ์คํค๋ง (์๋ ์์ฑ)sonamu.generated.sso.ts- Subset ์ฟผ๋ฆฌ (์๋ ์์ฑ)
3. Model (๋น์ฆ๋์ค ๋ก์ง)
Model์ ์ํฐํฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํฉ๋๋ค.user.model.ts
Model์ ํน์ง
@api๋ฐ์ฝ๋ ์ดํฐ๋ก ์๋ REST API ์์ฑBaseModelClass์์์ผ๋ก ๊ธฐ๋ณธ CRUD ๋ฉ์๋ ์ ๊ณต- Puri ์ฟผ๋ฆฌ ๋น๋๋ก ํ์ ์์ ํ DB ์ฟผ๋ฆฌ
- ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์ค ๊ฐ๋ฅ
4. Syncer (๋๊ธฐํ ์์คํ )
Syncer๋ Sonamu์ ํต์ฌ ์์ง์ ๋๋ค. ํ์ผ ๋ณ๊ฒฝ์ ๊ฐ์งํ๊ณ ์๋์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.๐ธ ํ์: Syncer ์๋ ํ๋ฆ๋ (ํ์ผ ๋ณ๊ฒฝ ๊ฐ์ง โ ์ฝ๋ ์์ฑ โ ๋๊ธฐํ)
Syncer ๋์ ์์
- ์๋:
pnpm dev์คํ ์ค ํ์ผ ๋ณ๊ฒฝ ์ (HMR) - ์๋:
pnpm sync๋ช ๋ น์ด ์คํ ์
5. API Layer (REST API)
Model์@api ๋ฐ์ฝ๋ ์ดํฐ๊ฐ ์๋์ผ๋ก REST API๋ฅผ ์์ฑํฉ๋๋ค.
์๋ ์์ฑ๋๋ ๊ฒ๋ค
- โ REST API ๋ผ์ฐํธ
- โ ์์ฒญ ํ๋ผ๋ฏธํฐ ๊ฒ์ฆ (Zod)
- โ ์๋ต ํ์
- โ ์๋ฌ ํธ๋ค๋ง
- โ API ๋ฌธ์ (sonamu.generated.http)
6. Frontend Service (ํ๋ก ํธ์๋ ํตํฉ)
Model์ API๋ ์๋์ผ๋ก ํ๋ก ํธ์๋ Service๋ก ์์ฑ๋ฉ๋๋ค.web/src/services/UserService.ts (์๋ ์์ฑ)
ํ์
์์ ์ฑ
๋ฐฑ์๋์ ํ์
์ด ํ๋ก ํธ์๋์ ๊ทธ๋๋ก ๋๊ธฐํ๋์ด, ํ์
๋ถ์ผ์น ์ค๋ฅ๋ฅผ ์ปดํ์ผ ํ์์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค!
๊ฐ๋ฐ ํ๋ก์ฐ
์ค์ ๊ฐ๋ฐ ์ Sonamu๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ด ์๋ค:1
1. ์ํฐํฐ ์ ์ (Sonamu UI)
post.types.tssonamu.generated.ts์ ๋ฐ์ดํธ
2
2. ๋ง์ด๊ทธ๋ ์ด์ (Migration ํญ)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ ์์ฑ
3
3. Model ์์ฑ (์ง์ ๋๋ ์ค์บํด๋ฉ)
- REST API:
GET /api/posts/:id PostService.ts(ํ๋ก ํธ์๋)sonamu.generated.http์ ๋ฐ์ดํธ
4
4. ํ๋ก ํธ์๋ ์ฌ์ฉ
- ๋ฐฑ์๋ ํ์ ๋ณ๊ฒฝ ์ ํ๋ก ํธ์๋์์ ์ฆ์ ์ค๋ฅ ๊ฐ์ง
๐ฌ ํ์: ์ 4๋จ๊ณ ํ๋ก์ฐ๋ฅผ ์ค์ ๋ก ๋ณด์ฌ์ฃผ๋ ์ ๋๋ฉ์ด์ ๋๋ ์์
HMR (Hot Module Replacement)
Sonamu๋ ๊ฐ๋ ฅํ HMR ์์คํ ์ ์ ๊ณตํฉ๋๋ค.HMR ์๋ ๋ฐฉ์
HMR์ ์ด์
- โ ๋น ๋ฅธ ํผ๋๋ฐฑ - ์ฝ๋ ๋ณ๊ฒฝ ํ 1-2์ด ๋ด ๋ฐ์
- โ ์ํ ์ ์ง - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฑ ์ ์ง
- โ ์๋ ๋๊ธฐํ - ํ๋ก ํธ์๋ Service ์๋ ์ ๋ฐ์ดํธ
๐ธ ํ์: HMR ๋์ํ๋ ํฐ๋ฏธ๋ ๋ก๊ทธ (ํ์ผ ๋ณ๊ฒฝ โ invalidate โ ์ฌ์์)
์๋ ์์ฑ ๋ฉ์ปค๋์ฆ
Sonamu๊ฐ ์๋์ผ๋ก ์์ฑํ๋ ๊ฒ๋ค์ ์ ๋ฆฌํด๋ด ์๋ค:์ํฐํฐ ์ ์ ๋ณ๊ฒฝ ์
Model ํ์ผ ๋ณ๊ฒฝ ์
Types ํ์ผ ๋ณ๊ฒฝ ์
ํ์ ์์ ์ฑ์ ํ๋ฆ
Sonamu์ End-to-End ํ์ ์์ ์ฑ์ ์๊ฐํํ๋ฉด:ํ์
์์ ์ฑ ๋ณด์ฅ
- ์ํฐํฐ ์ ์ โ ํ์ ์์ฑ
- Model โ API ํ์ ์ถ๋ก
- API โ Service ํ์ ๋๊ธฐํ
- Service โ UI ํ์ ์ฒดํฌ
Sonamu์ ์ฃผ์ ์ฅ์
1. ๊ฐ๋ฐ ์๋ ํฅ์
2. ํ์ ์์ ์ฑ
3. ์ ์ง๋ณด์์ฑ
4. ์ผ๊ด์ฑ
์ ์ฝ์ฌํญ๊ณผ ํธ๋ ์ด๋์คํ
Sonamu์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ผ๋ถ ์ ์ฝ์ฌํญ์ ๋๋ฐํฉ๋๋ค:ํ์ง๋ง ์ฅ์ ์ด ํจ์ฌ ํฝ๋๋คโ
๊ฐ๋ฐ ์๋ ํฅ์ (90% ์๊ฐ ๋จ์ถ)
โ
ํ์
์์ ์ฑ ๋ณด์ฅ
โ
์ ์ง๋ณด์์ฑ ํฅ์
โ
์ฝ๋ ์ผ๊ด์ฑ
โ
ํ ์์ฐ์ฑ ํฅ์
๋ค์ ๋จ๊ณ
Sonamu์ ์๋ ์๋ฆฌ๋ฅผ ์ดํดํ๋ค๋ฉด, ์ด์ ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ์์ธํ ์์๋ณด์ธ์:์ํฐํฐ ์ ์ํ๊ธฐ
์ํฐํฐ์ ๊ตฌ์กฐ์ ์ค์ ์ต์
์ ์์ธํ ์์๋ณด์ธ์.
Model ์ดํดํ๊ธฐ
Model์ ์ญํ ๊ณผ ๋น์ฆ๋์ค ๋ก์ง ์์ฑ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณด์ธ์.
์๋ ์์ฑ ๋ฉ์ปค๋์ฆ
์ด๋ค ํ์ผ๋ค์ด ์๋์ผ๋ก ์์ฑ๋๋์ง ์์๋ณด์ธ์.
ํ์ ์์คํ
Sonamu์ ํ์
์์ ์ฑ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ์ธ์.