Skip to main content
Sonamuκ°€ λ°±μ—”λ“œ API의 νƒ€μž…μ„ ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ μžλ™μœΌλ‘œ μΆ”λ‘ ν•˜μ—¬ μ™„μ „ν•œ νƒ€μž… μ•ˆμ „μ„±μ„ μ œκ³΅ν•˜λŠ” 방법을 μ•Œμ•„λ΄…λ‹ˆλ‹€.

API νƒ€μž… μΆ”λ‘  κ°œμš”

μžλ™ νƒ€μž… 생성

λ°±μ—”λ“œ β†’ ν”„λ‘ νŠΈμ—”λ“œ μˆ˜λ™ μž‘μ—… λΆˆν•„μš”

μ™„μ „ν•œ μΆ”λ‘ 

νŒŒλΌλ―Έν„°λΆ€ν„° μ‘λ‹΅κΉŒμ§€ λͺ¨λ“  νƒ€μž… 보μž₯

μ‹€μ‹œκ°„ 동기화

API λ³€κ²½ μ‹œ μžλ™ μ—…λ°μ΄νŠΈ

IDE 지원

μžλ™ μ™„μ„± νƒ€μž… 힌트

νƒ€μž… μΆ”λ‘ μ΄λž€?

문제: μˆ˜λ™ νƒ€μž… μ •μ˜μ˜ 어렀움

전톡적인 κ°œλ°œμ—μ„œλŠ” λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈμ—”λ“œμ˜ νƒ€μž…μ„ 각각 μˆ˜λ™μœΌλ‘œ μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
문제점:
  1. 쀑볡 μž‘μ—…: λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ 같은 νƒ€μž… 두 번 μ •μ˜
  2. 동기화 λˆ„λ½: λ°±μ—”λ“œ λ³€κ²½ μ‹œ ν”„λ‘ νŠΈμ—”λ“œ νƒ€μž… μ—…λ°μ΄νŠΈ λˆ„λ½
  3. λŸ°νƒ€μž„ μ—λŸ¬: νƒ€μž… 뢈일치λ₯Ό λŸ°νƒ€μž„μ—λ§Œ 발견
  4. μœ μ§€λ³΄μˆ˜ 어렀움: νƒ€μž…μ΄ λ§Žμ•„μ§ˆμˆ˜λ‘ 관리 λ³΅μž‘λ„ 증가

ν•΄κ²°: μžλ™ νƒ€μž… μΆ”λ‘ 

SonamuλŠ” λ°±μ—”λ“œ νƒ€μž…μ„ μžλ™μœΌλ‘œ μΆ”λ‘ ν•˜μ—¬ ν”„λ‘ νŠΈμ—”λ“œμ— μ „λ‹¬ν•©λ‹ˆλ‹€.
μž₯점:
  • λ°±μ—”λ“œ νƒ€μž…μ΄ ν”„λ‘ νŠΈμ—”λ“œμ— μžλ™μœΌλ‘œ 볡사됨
  • API λ³€κ²½ μ‹œ μžλ™μœΌλ‘œ 동기화됨
  • 단일 μ§„μ‹€ 곡급원 (λ°±μ—”λ“œκ°€ μœ μΌν•œ νƒ€μž… μ†ŒμŠ€)

νƒ€μž… μΆ”λ‘  κ³Όμ •

1단계: λ°±μ—”λ“œ API μ •μ˜

TypeScript νƒ€μž…μ„ ν¬ν•¨ν•˜μ—¬ APIλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
TypeScript νƒ€μž… μ‹œμŠ€ν…œ ν™œμš©:
  • λ°˜ν™˜ νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έ
  • 쀑첩 객체, μœ λ‹ˆμ˜¨ νƒ€μž…, λ¦¬ν„°λŸ΄ νƒ€μž… λͺ¨λ‘ 지원
  • TypeScript의 λͺ¨λ“  νƒ€μž… κΈ°λŠ₯ ν™œμš© κ°€λŠ₯

2단계: AST νŒŒμ‹±

SonamuλŠ” TypeScript 컴파일러 APIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό λΆ„μ„ν•©λ‹ˆλ‹€.
AST (Abstract Syntax Tree):
  • TypeScript μ½”λ“œλ₯Ό 트리 ꡬ쑰둜 ν‘œν˜„
  • νƒ€μž… 정보λ₯Ό ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μœΌλ‘œ μΆ”μΆœ κ°€λŠ₯
  • 100% μ •ν™•ν•œ νƒ€μž… 정보 νšλ“

3단계: Service νƒ€μž… 생성

μΆ”μΆœν•œ νƒ€μž…μ„ Service μ½”λ“œμ— μ‚½μž…ν•©λ‹ˆλ‹€.
νƒ€μž… 보쑴:
  • μœ λ‹ˆμ˜¨ νƒ€μž… ("admin" | "user")
  • 쀑첩 객체
  • λ°°μ—΄ νƒ€μž…
  • Date, null, undefined λ“± λͺ¨λ“  TypeScript νƒ€μž…

4단계: TanStack Query Hook 생성

React Hook에도 νƒ€μž…μ΄ μ •ν™•νžˆ μ „λ‹¬λ©λ‹ˆλ‹€.
νƒ€μž… 체인:
λͺ¨λ“  λ‹¨κ³„μ—μ„œ νƒ€μž…μ΄ 100% λ³΄μ‘΄λ©λ‹ˆλ‹€!

κ³ κΈ‰ νƒ€μž… μΆ”λ‘ 

μ œλ„€λ¦­ νƒ€μž…

μ œλ„€λ¦­μ„ μ‚¬μš©ν•˜λŠ” API도 μ •ν™•νžˆ μΆ”λ‘ λ©λ‹ˆλ‹€.

Subset μ‹œμŠ€ν…œ

Subset νƒ€μž…λ„ μžλ™μœΌλ‘œ μƒμ„±λ©λ‹ˆλ‹€.
Mapped Types:
  • UserSubsetMapping[T]둜 Subset에 λ”°λ₯Έ μ •ν™•ν•œ νƒ€μž… λ°˜ν™˜
  • TypeScript의 쑰건뢀 νƒ€μž… ν™œμš©

λ³΅μž‘ν•œ 쀑첩 ꡬ쑰

깊게 μ€‘μ²©λœ νƒ€μž…λ„ μ •ν™•νžˆ μΆ”λ‘ λ©λ‹ˆλ‹€.

μ‹€μ „ ν™œμš©

React μ»΄ν¬λ„ŒνŠΈ

νƒ€μž…μ΄ μžλ™μœΌλ‘œ μΆ”λ‘ λ˜μ–΄ IDE 지원을 λ°›μŠ΅λ‹ˆλ‹€.
IDE μžλ™ μ™„μ„±:
  • data. μž…λ ₯ μ‹œ user, stats μžλ™ μ œμ•ˆ
  • data.user. μž…λ ₯ μ‹œ λͺ¨λ“  ν•„λ“œ μžλ™ μ œμ•ˆ
  • 잘λͺ»λœ ν•„λ“œ μ ‘κ·Ό μ‹œ μ¦‰μ‹œ μ—λŸ¬ ν‘œμ‹œ

νƒ€μž… μž¬μ‚¬μš©

μƒμ„±λœ νƒ€μž…μ„ λ‹€λ₯Έ κ³³μ—μ„œ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

폼 데이터 νƒ€μž…

API νŒŒλΌλ―Έν„° νƒ€μž…λ„ μΆ”λ‘ λ©λ‹ˆλ‹€.

νƒ€μž… μ•ˆμ „μ„± 보μž₯

1. νŒŒλΌλ―Έν„° 검증

잘λͺ»λœ νŒŒλΌλ―Έν„°λŠ” 컴파일 νƒ€μž„μ— κ°μ§€λ©λ‹ˆλ‹€.

2. 응닡 νƒ€μž… 보μž₯

API μ‘λ‹΅μ˜ νƒ€μž…μ΄ 보μž₯λ©λ‹ˆλ‹€.

3. null/undefined 처리

μ˜΅μ…”λ„ ν•„λ“œλ„ μ •ν™•νžˆ ν‘œν˜„λ©λ‹ˆλ‹€.

μ£Όμ˜μ‚¬ν•­

API νƒ€μž… μΆ”λ‘  μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­: 1. λ°±μ—”λ“œ API에 λͺ…μ‹œμ  νƒ€μž… μ„ μ–Έ ν•„μˆ˜ 2. any νƒ€μž… μ‚¬μš© κΈˆμ§€ (νƒ€μž… μΆ”λ‘  λΆˆκ°€) 3. pnpm generate μ‹€ν–‰ν•΄μ•Ό νƒ€μž… μ—…λ°μ΄νŠΈ 4. μƒμ„±λœ νƒ€μž… 파일 μˆ˜λ™ μˆ˜μ • κΈˆμ§€ 5. λ³΅μž‘ν•œ νƒ€μž…μ€ 별도 interface둜 뢄리 ꢌμž₯

λ‹€μŒ 단계

컴파일 νƒ€μž„ μ—λŸ¬

API λ³€κ²½ 감지

곡유 νƒ€μž…

νƒ€μž… 파일 ꡬ쑰

Service λ™μž‘ 원리

μžλ™ 생성 이해

Service μ‚¬μš©ν•˜κΈ°

Service ν™œμš©λ²•