Skip to main content
Sonamu๊ฐ€ ์ƒ์„ฑํ•˜๋Š” services.generated.ts ํŒŒ์ผ์˜ ํƒ€์ž… ๊ตฌ์กฐ์™€ ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

๊ณต์œ  ํƒ€์ž… ๊ฐœ์š”

๋‹จ์ผ ํŒŒ์ผ

services.generated.ts ๋ชจ๋“  ํƒ€์ž… ํ•œ ๊ณณ์—

์ž๋™ ์ƒ์„ฑ

๋ฐฑ์—”๋“œ์—์„œ ์ถ”์ถœ ์ˆ˜๋™ ์ž‘์—… ๋ถˆํ•„์š”

ํƒ€์ž… ์žฌ์‚ฌ์šฉ

Export๋œ ํƒ€์ž… ํ”„๋กœ์ ํŠธ ์ „์ฒด ์‚ฌ์šฉ

์ผ๊ด€์„ฑ

๋‹จ์ผ ์ง„์‹ค ๊ณต๊ธ‰์› ํƒ€์ž… ์ถฉ๋Œ ์—†์Œ

services.generated.ts ๊ตฌ์กฐ

ํŒŒ์ผ ๊ฐœ์š”

Sonamu๋Š” ๋ชจ๋“  ํƒ€์ž…๊ณผ Service๋ฅผ ๋‹จ์ผ ํŒŒ์ผ์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ ํฌ๊ธฐ:
  • ๋ณดํ†ต 1,000 ~ 5,000 ์ค„
  • Entity์™€ API๊ฐ€ ๋งŽ์œผ๋ฉด 10,000 ์ค„ ์ด์ƒ๋„ ๊ฐ€๋Šฅ
  • ํ•˜์ง€๋งŒ ๋ชจ๋‘ ์ž๋™ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๊ด€๋ฆฌ ๋ถ€๋‹ด ์—†์Œ

ํƒ€์ž… ์ข…๋ฅ˜

1. Entity ํƒ€์ž…

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
ํŠน์ง•:
  • ๋ฐฑ์—”๋“œ Entity์™€ ์™„์ „ํžˆ ๋™์ผ
  • ๋ชจ๋“  ํ•„๋“œ ํƒ€์ž…์ด ์ •ํ™•ํžˆ ๋งคํ•‘๋จ
  • null, undefined, ์œ ๋‹ˆ์˜จ ํƒ€์ž… ๋ชจ๋‘ ๋ณด์กด

2. Subset ํƒ€์ž…

Entity์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
Subset ๋„ค์ด๋ฐ ๊ทœ์น™:
  • A: ์ตœ์†Œ ํ•„๋“œ (id + ํ•ต์‹ฌ 1~2๊ฐœ)
  • B: ์ค‘๊ฐ„ ํ•„๋“œ (A + ์ถ”๊ฐ€ ์ •๋ณด)
  • C: ์ „์ฒด ํ•„๋“œ

3. API ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…

API ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

4. API ์‘๋‹ต ํƒ€์ž…

API ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

5. TanStack Query ๊ด€๋ จ ํƒ€์ž…

React Hook์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…๋“ค์ž…๋‹ˆ๋‹ค.

ํƒ€์ž… ์žฌ์‚ฌ์šฉ

Type Helper ํ™œ์šฉ

TypeScript์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํƒ€์ž…์œผ๋กœ ๊ธฐ์กด ํƒ€์ž…์„ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ Props

์ƒ์„ฑ๋œ ํƒ€์ž…์„ Props๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํผ ๋ฐ์ดํ„ฐ ํƒ€์ž…

API ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…์„ ํผ ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ๊ด€๋ฆฌ

์ „์—ญ ์ƒํƒœ์—์„œ๋„ ํƒ€์ž…์„ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋„ค์ž„์ŠคํŽ˜์ด์Šค ํ™œ์šฉ

Service ๊ทธ๋ฃนํ™”

Entity๋ณ„๋กœ Service๊ฐ€ Namespace๋กœ ๊ทธ๋ฃนํ™”๋ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ:
์žฅ์ :
  • ์ด๋ฆ„ ์ถฉ๋Œ ๋ฐฉ์ง€ (getUser vs getPost)
  • ๊ด€๋ จ ํ•จ์ˆ˜๋“ค์ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ทธ๋ฃนํ™”
  • Import๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง
  • IDE ์ž๋™ ์™„์„ฑ์ด ๋” ์ •ํ™•ํ•ด์ง

Type Import

ํƒ€์ž…๋งŒ importํ•  ๋•Œ๋Š” type ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
Tree-shaking:
  • import type์€ ์ปดํŒŒ์ผ ํ›„ ์ œ๊ฑฐ๋จ
  • ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™”
  • ๋นŒ๋“œ ์†๋„ ํ–ฅ์ƒ

ํŒŒ์ผ ํฌ๊ธฐ ๊ด€๋ฆฌ

๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ

Entity์™€ API๊ฐ€ ๋งŽ์œผ๋ฉด ํŒŒ์ผ์ด ๋งค์šฐ ์ปค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค:
  1. โœ… ์ž๋™ ์ƒ์„ฑ: ์ˆ˜๋™ ๊ด€๋ฆฌ ๋ถˆํ•„์š”
  2. โœ… Tree-shaking: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋Š” ๋ฒˆ๋“ค์—์„œ ์ œ์™ธ
  3. โœ… IDE ์„ฑ๋Šฅ: ํ˜„๋Œ€ IDE๋Š” ํฐ ํŒŒ์ผ๋„ ๋ฌธ์ œ์—†์Œ
  4. โœ… ํƒ€์ž… ์ฒดํฌ: TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ

Code Splitting

ํ•„์š”ํ•˜๋ฉด ๋™์  import๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „ ๊ด€๋ฆฌ

Git์— ํฌํ•จ ์—ฌ๋ถ€

ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ (๊ถŒ์žฅ):
์žฅ์ :
  • Pull ๋ฐ›์œผ๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ฐฑ์—”๋“œ ์—†์ด๋„ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
  • ํƒ€์ž… ๋ณ€๊ฒฝ ์ด๋ ฅ ์ถ”์  ๊ฐ€๋Šฅ
ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ:
์žฅ์ :
  • Conflict ๋ฐœ์ƒ ์ ์Œ
  • ๊ฐ์ž ์ตœ์‹  ๋ฒ„์ „ ์ƒ์„ฑ
  • Git ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๊น”๋”
๊ถŒ์žฅ: ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ถฉ๋Œ ํ•ด๊ฒฐ

Merge conflict ๋ฐœ์ƒ ์‹œ:

๋””๋ฒ„๊น…

์ƒ์„ฑ๋œ ํƒ€์ž… ํ™•์ธ

IDE์—์„œ ํƒ€์ž…์„ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ์ถ•ํ‚ค:
  • VSCode: Cmd + Click (Mac) / Ctrl + Click (Windows)
  • ํƒ€์ž… ์ •์˜๋กœ ๋ฐ”๋กœ ์ด๋™

ํƒ€์ž… ์—๋Ÿฌ ๋””๋ฒ„๊น…

ํƒ€์ž… ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด:
  1. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ™•์ธ
  1. ํƒ€์ž… ์ •์˜ ํ™•์ธ
  1. ๋ฐฑ์—”๋“œ ํ™•์ธ
  1. ์ฝ”๋“œ ์ˆ˜์ •

์ฃผ์˜์‚ฌํ•ญ

๊ณต์œ  ํƒ€์ž… ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ: 1. services.generated.ts ์ˆ˜๋™ ์ˆ˜์ • ๊ธˆ์ง€ 2. import type ์‚ฌ์šฉํ•˜์—ฌ ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™” 3. API ๋ณ€๊ฒฝ ์‹œ pnpm generate ํ•„์ˆ˜ 4. Namespace๋ฅผ ํ†ตํ•ด Service ์ ‘๊ทผ 5. ํƒ€์ž… ์žฌ์‚ฌ์šฉ ์‹œ Type Helper ํ™œ์šฉ

๋‹ค์Œ ๋‹จ๊ณ„

API ํƒ€์ž… ์ถ”๋ก 

ํƒ€์ž… ์ถ”๋ก  ์ดํ•ด

์ปดํŒŒ์ผ ํƒ€์ž„ ์—๋Ÿฌ

์—๋Ÿฌ ๊ฐ์ง€ ๋ฐฉ๋ฒ•

Service ์‚ฌ์šฉํ•˜๊ธฐ

Service ํ™œ์šฉ๋ฒ•

์ปค์Šคํ…€ ์ปดํฌ๋„ŒํŠธ

์ปดํฌ๋„ŒํŠธ ์ž‘์„ฑ