Skip to main content
Model์€ Sonamu์˜ ํ•ต์‹ฌ ๋ ˆ์ด์–ด๋กœ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. Entity ์ •์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ, API ์—”๋“œํฌ์ธํŠธ, ํƒ€์ž… ์•ˆ์ „ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Model์˜ ์—ญํ• 

๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค CRUD ์ž‘์—… Puri ์ฟผ๋ฆฌ ๋นŒ๋”๋ฅผ ํ†ตํ•œ ํƒ€์ž… ์•ˆ์ „ํ•œ ์ฟผ๋ฆฌ

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง

๋„๋ฉ”์ธ ๊ทœ์น™ ๊ตฌํ˜„ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, ๋ณ€ํ™˜, ๊ณ„์‚ฐ

API ์—”๋“œํฌ์ธํŠธ

HTTP API ์ž๋™ ์ƒ์„ฑ @api ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ REST API ์ œ๊ณต

ํƒ€์ž… ์•ˆ์ „์„ฑ

์ปดํŒŒ์ผ ํƒ€์ž„ ํƒ€์ž… ์ฒดํฌ Entity ๊ธฐ๋ฐ˜ ์ž๋™ ํƒ€์ž… ์ƒ์„ฑ

Sonamu ์•„ํ‚คํ…์ฒ˜์—์„œ์˜ ์œ„์น˜

๋ ˆ์ด์–ด ๊ตฌ์กฐ:
  1. Client - ํ”„๋ก ํŠธ์—”๋“œ (React, Vue ๋“ฑ)
  2. API Layer - HTTP ์—”๋“œํฌ์ธํŠธ (@api ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ)
  3. Model Layer - ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง โญ
  4. Database - PostgreSQL
Model์€ API Layer์™€ Database ์‚ฌ์ด์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์€ Model์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

Model ํด๋ž˜์Šค ๊ตฌ์กฐ

๊ธฐ๋ณธ ๊ตฌ์กฐ

user.model.ts

์ œ๋„ค๋ฆญ ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ

์ด ์ œ๋„ค๋ฆญ ํƒ€์ž…๋“ค์€ sonamu.generated.ts์™€ sonamu.generated.sso.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์ด ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ ์•Œ์•„๋ณด๊ธฐ