--- id: [[P-Reinforce|P-Reinforce]]-AUTO-F45907 category: "10_Wiki/πŸ’‘ Topics/Design & Experience" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - React μ»΄ν¬λ„ŒνŠΈ Props 검증" --- # [[React ᄏα…₯α†·α„‘α…©α„‚α…₯ᆫ트 Props α„€α…₯α†·α„Œα…³α†Ό|React μ»΄ν¬λ„ŒνŠΈ Props 검증]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > React μ»΄ν¬λ„ŒνŠΈ Props 검증은 TypeScriptλ₯Ό ν™œμš©ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈμ— μ „λ‹¬λ˜λŠ” 속성(Props)의 νƒ€μž… μ•ˆμ „μ„±μ„ 보μž₯ν•˜κ³ , μœ νš¨ν•˜μ§€ μ•Šμ€ μƒνƒœ ν‘œν˜„μ„ μ›μ²œμ μœΌλ‘œ μ°¨λ‹¨ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1, 2]. 컴파일 νƒ€μž„μ—λŠ” 식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨([[Discriminated Unions|Discriminated Unions]])κ³Ό 초과 속성 검사 λ“±μ˜ κΈ°λ²•μœΌλ‘œ 잘λͺ»λœ Props 쑰합을 λ°©μ§€ν•˜λ©°, λŸ°νƒ€μž„μ—λŠ” μ™ΈλΆ€ 데이터에 λŒ€ν•œ 좔가적인 μœ νš¨μ„± 검사λ₯Ό μˆ˜ν–‰ν•˜μ—¬ μ•ˆμ •μ„±μ„ ν™•λ³΄ν•©λ‹ˆλ‹€ [3-5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **κΈ°λ³Έ νƒ€μž… μ§€μ • (Type vs Interface)**: React μ»΄ν¬λ„ŒνŠΈμ˜ 기본적인 Propsλ₯Ό μ •μ˜ν•  λ•Œ `type`μ΄λ‚˜ `interface` 쀑 μ–΄λŠ 것을 μ‚¬μš©ν• μ§€λŠ” μ„±λŠ₯에 큰 차이가 μ—†μœΌλ©° 상황과 μ„ ν˜Έμ— 따라 λ¬΄λ°©ν•˜κ²Œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€ [6]. - **식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨(Discriminated Unions)의 ν™œμš©**: ν…μŠ€νŠΈ ν•„λ“œλ‚˜ μ…€λ ‰νŠΈ ν•„λ“œ λ“± μ„œλ‘œ λ‹€λ₯Έ ν˜•νƒœμ˜ μž…λ ₯을 μ²˜λ¦¬ν•˜λŠ” μœ μ—°ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό 섀계할 λ•Œ 핡심적인 역할을 ν•©λ‹ˆλ‹€ [3]. 이λ₯Ό 톡해 νŠΉμ • μ»΄ν¬λ„ŒνŠΈ λ³€ν˜•(variant)에 ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” Props(예: Select ν•„λ“œμ— placeholder μ˜΅μ…˜ μ§€μ •)λ₯Ό ν˜Όμš©ν•˜λŠ” 것을 TypeScriptκ°€ μ—„κ²©ν•˜κ²Œ λ°©μ§€ν•©λ‹ˆλ‹€ [3]. - **배타적 속성 (Exclusive Props) νŒ¨ν„΄**: λͺ…μ‹œμ μΈ νŒλ³„μž(discriminant prop) 없이 두 Props 묢음 κ°„μ˜ μƒν˜Έ 배타성을 보μž₯ν•˜κ³  싢을 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€ [3]. μœ λ‹ˆμ˜¨ νƒ€μž…κ³Ό `never` νƒ€μž…μ„ ν™œμš©ν•΄ ν•œμͺ½ νƒ€μž…μ΄ ν™œμ„±ν™”λ  λ•Œ λ‹€λ₯Έ μͺ½μ˜ 속성 μ‚¬μš©μ„ μ°¨λ‹¨ν•˜μ—¬ ν˜Όν•© μ‚¬μš©μ„ 막을 수 μžˆμŠ΅λ‹ˆλ‹€ [3]. - **초과 속성 검사 ([[Excess Property Checking|Excess Property Checking]])**: μ •μ˜λ˜μ§€ μ•Šμ€ 초과 속성이 μ»΄ν¬λ„ŒνŠΈμ— κ°„μ ‘μ μœΌλ‘œ μ „λ‹¬λ˜λ©΄ μœ νš¨ν•˜μ§€ μ•Šμ€ 속성이 DOM으둜 λ„˜μ–΄κ°€ React κ²½κ³ λ₯Ό λ°œμƒμ‹œν‚€κ±°λ‚˜, μ˜λ„μΉ˜ μ•Šμ€ λ¦¬λ Œλ”λ§ 및 잘λͺ»λœ μ½”λ“œκ°€ λ³΅μ œλ˜λŠ” λ“±μ˜ λΆ€μž‘μš©μ„ μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5]. 이λ₯Ό 막기 μœ„ν•΄ μ œλ„€λ¦­κ³Ό `never` νƒ€μž…μ„ μ‘°ν•©ν•˜μ—¬ μ‹€μ œ μž…λ ₯κ°’κ³Ό μ˜ˆμƒλ˜λŠ” Props κ°„μ˜ 초과 속성을 κ°μ§€ν•΄λ‚΄λŠ” 방식을 React μ»΄ν¬λ„ŒνŠΈμ—λ„ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [7-9]. - **`satisfies` μ—°μ‚°μž λ„μž…**: μ»΄ν¬λ„ŒνŠΈμ˜ Propsκ°€ νŠΉμ • ꡬ쑰λ₯Ό λ§Œμ‘±ν•˜λ„λ‘ μ œμ•½ν•˜λŠ” λ™μ‹œμ—, TypeScriptκ°€ ν•΄λ‹Ή Props의 κ°€μž₯ ꡬ체적인 νƒ€μž…(literal type)을 μΆ”λ‘ ν•˜κ²Œ λ§Œλ“€ λ•Œ `satisfies` μ—°μ‚°μžλ₯Ό ν™œμš©ν•˜μ—¬ μœ μ—°ν•¨κ³Ό μ•ˆμ „μ„±μ„ λͺ¨λ‘ μ±™κΈΈ 수 μžˆμŠ΅λ‹ˆλ‹€ [10]. - **Zodλ₯Ό μ΄μš©ν•œ λŸ°νƒ€μž„ μœ νš¨μ„± 검사 (Runtime Validation)**: API μ‘λ‹΅μ΄λ‚˜ μ™ΈλΆ€ μ„€μ • 파일 λ“± μ™ΈλΆ€ μ†ŒμŠ€λ‘œλΆ€ν„° μ „λ‹¬λ°›λŠ” Props의 경우 TypeScript의 정적 κ²€μ‚¬λ§ŒμœΌλ‘œλŠ” 검증할 수 μ—†μŠ΅λ‹ˆλ‹€ [4]. 데이터 무결성이 μ€‘μš”ν•  경우 식별 κ°€λŠ₯ν•œ μœ λ‹ˆμ˜¨κ³Ό Zod와 같은 λŸ°νƒ€μž„ μœ νš¨μ„± 검사 도ꡬλ₯Ό κ²°ν•©ν•˜μ—¬ λŸ°νƒ€μž„ μˆ˜μ€€μ˜ μ•ˆμ „μ„±μ„ 확보해야 ν•©λ‹ˆλ‹€ [4, 11]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Design & Experience λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Discriminated Unions|Discriminated Unions]], Exclusive Props, Excess Property Checking, Zod λŸ°νƒ€μž„ 검증, [[satisfies α„‹α…§α†«α„‰α…‘α†«α„Œα…‘|satisfies μ—°μ‚°μž]] - **Projects/Contexts:** React μƒνƒœ 및 Props 관리, μ™ΈλΆ€ API 데이터 연동 μ»΄ν¬λ„ŒνŠΈ - **Contradictions/Notes:** TypeScript의 컴파일 νƒ€μž„ κ²€μ‚¬λŠ” 무결성을 보μž₯ν•˜μ§€λ§Œ, λŸ°νƒ€μž„μ— μ™ΈλΆ€(API, μ„€μ • 파일 λ“±)μ—μ„œ μ£Όμž…λ˜λŠ” 잘λͺ»λœ Props λ°μ΄ν„°κΉŒμ§€λŠ” 막아주지 λͺ»ν•˜λ―€λ‘œ μ™ΈλΆ€ 데이터 연동 μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” λŸ°νƒ€μž„ 검증이 λ™λ°˜λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [4]. --- *Last updated: 2026-04-18* ---