# [[Client Components]] ## πŸ“Œ[[ brief]] Summary ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈ(Client Components)λŠ” λͺ¨λ˜ React μ•„ν‚€ν…μ²˜(예: [[Next.js 15 App Router]])μ—μ„œ `'use client'` μ§€μ‹œμ–΄λ‘œ μ •μ˜λ˜λ©° 전톡적인 React μ»΄ν¬λ„ŒνŠΈμ²˜λŸΌ λ™μž‘ν•˜λŠ” UI μš”μ†Œμ΄λ‹€ [1]. μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ™€ 달리 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€ν–‰ν•˜λ―€λ‘œ μƒνƒœ([[State]]) 관리, 이벀트 ν•Έλ“€λŸ¬ λ“± μƒν˜Έμž‘μš©μ΄ ν•„μš”ν•˜κ±°λ‚˜ λΈŒλΌμš°μ € APIλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•  λ•Œ ν•„μˆ˜μ μœΌλ‘œ μ μš©λœλ‹€ [1, 2]. ν™•μž₯ κ°€λŠ₯ν•œ ν”„λ‘ νŠΈμ—”λ“œ ν™˜κ²½μ—μ„œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€ 크기λ₯Ό μ΅œμ†Œν™”ν•˜κ³  μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•˜κΈ° μœ„ν•΄ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ₯Ό μž‘κ³  κΈ°λŠ₯적으둜 μ§‘μ€‘λœ ν˜•νƒœλ‘œ μœ μ§€ν•˜λŠ” 것이 핡심 원칙이닀 [2, 3]. ## πŸ“– Core Content * **경계 μ„€μ • 및 ν•˜μ΄λ“œλ ˆμ΄μ…˜([[Hydration]]):** ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλŠ” μ΅œμƒλ‹¨μ— `'use client'` μ§€μ‹œμ–΄λ₯Ό μ„ μ–Έν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ‹œμž‘λ˜λŠ” 경계λ₯Ό λͺ…ν™•νžˆ ν‘œμ‹œν•œλ‹€ [1]. μ„œλ²„κ°€ λ Œλ”λ§ν•œ 정적 HTML에 Reactκ°€ 이벀트 λ¦¬μŠ€λ„ˆμ™€ μƒνƒœλ₯Ό μ—°κ²°ν•˜μ—¬ μƒν˜Έμž‘μš©μ„ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” 과정인 ν•˜μ΄λ“œλ ˆμ΄μ…˜(Hydration)은 [[Next.js 15]] κΈ°μ€€μœΌλ‘œ 였직 ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ—μ„œλ§Œ λ°œμƒν•œλ‹€ [4]. * **μ»΄ν¬λ„ŒνŠΈ ν•©μ„± νŒ¨ν„΄(Composition Patterns):** μž¬μ‚¬μš© κ°€λŠ₯ν•˜κ³  ν™•μž₯μ„± μžˆλŠ” UIλ₯Ό κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ λ‹€μ–‘ν•œ ν•©μ„± νŒ¨ν„΄μ΄ μ‚¬μš©λœλ‹€. μ„œλ²„ μ»΄ν¬λ„ŒνŠΈκ°€ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ₯Ό ν•˜μœ„ μš”μ†Œλ‘œ λ Œλ”λ§ν•˜κ±°λ‚˜, λ°˜λŒ€λ‘œ μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλ₯Ό ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ˜ μžμ‹(children)μ΄λ‚˜ props둜 μ „λ‹¬ν•˜μ—¬ μžμ‹ μš”μ†Œκ°€ μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλ‘œμ„œμ˜ νŠΉμ„±μ„ μœ μ§€ν•˜κ²Œ ν•  수 μžˆλ‹€ [1, 4]. λ˜ν•œ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μƒνƒœλ₯Ό μ•± μ „λ°˜μ— κ³΅μœ ν•˜κΈ° μœ„ν•΄ Context Provider νŒ¨ν„΄μ„ μ‚¬μš©ν•˜κΈ°λ„ ν•œλ‹€ [4]. * **ν™•μž₯ κ°€λŠ₯ν•œ ν”„λ‘ νŠΈμ—”λ“œλ₯Ό μœ„ν•œ λͺ¨λ²” 사둀:** * 기본적으둜 μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜κ³  μƒν˜Έμž‘μš©μ΄ ν•„μš”ν•œ κ΅¬μ—­λ§Œ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ λΆ„λ¦¬ν•˜μ—¬ μž‘κ²Œ μœ μ§€ν•΄μ•Ό ν•œλ‹€ [2, 3]. * λ ˆμ΄μ•„μ›ƒ λ“± μ΅œμƒλ‹¨ μš”μ†Œμ— λΆˆν•„μš”ν•˜κ²Œ `'use client'`λ₯Ό λ‚¨μš©ν•˜λ©΄ ν•˜μœ„μ˜ λͺ¨λ“  λΌμš°νŠΈκ°€ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μ»΄ν¬λ„ŒνŠΈλ‘œ κ°•μ œ μ „ν™˜λ˜λ―€λ‘œ μ£Όμ˜ν•΄μ•Ό ν•œλ‹€ [3]. * 데이터 νŒ¨μΉ­μ€ 가급적 μ„œλ²„ μΈ‘μ—μ„œ μˆ˜ν–‰ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ λ²ˆλ“€ 크기λ₯Ό 쀄이고 λ³΄μ•ˆμ„ μœ μ§€ν•΄μ•Ό ν•œλ‹€ [3]. * ν•¨μˆ˜, λ‚ μ§œ, 클래슀 μΈμŠ€ν„΄μŠ€ λ“± 직렬화할 수 μ—†λŠ”(non-serializable) propsλ₯Ό μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ λ„˜κ²¨μ„œλŠ” μ•ˆ λœλ‹€ [5]. * **μŠ€νƒ€μΌλ§ νŒŒλΌλ‹€μž„ 및 ν…Œλ§ˆ 적용([[CSS-in-JS]]):** [[Next.js App Router]] μ•„ν‚€ν…μ²˜μ—μ„œ [[styled-components]]와 같은 λŸ°νƒ€μž„ CSS-in-JS 라이브러리λ₯Ό μ‚¬μš©ν•˜λ €λ©΄, λ Œλ”λ§ 쀑 CSS κ·œμΉ™μ„ μˆ˜μ§‘ν•˜κΈ° μœ„ν•œ 'μŠ€νƒ€μΌ λ ˆμ§€μŠ€νŠΈλ¦¬([[Style Registry]])'λ₯Ό κ΅¬μ„±ν•˜κ³  이λ₯Ό ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ λž˜ν•‘ν•΄μ•Ό ν•œλ‹€ [6]. 더 λ‚˜μ•„κ°€, [[React Context]] 없이도 ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈμ™€ μ„œλ²„ μ»΄ν¬λ„ŒνŠΈ λͺ¨λ‘μ—μ„œ ν…Œλ§ˆκ°€ μž‘λ™ν•˜λ„λ‘ CSS μ‚¬μš©μž μ§€μ • 속성(CSS custom properties)을 기반으둜 ν•œ `createTheme` λ“±μ˜ κΈ°λŠ₯이 λ„μž…λ˜μ–΄ λ Œλ”λ§ μ»¨ν…μŠ€νŠΈμ˜ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κ³  μžˆλ‹€ [7]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Server Components]], [[Hydration]], [[CSS-in-JS]], [[React Context]] - **Projects/Contexts:** [[Next.js App Router]], [[styled-components]] - **Contradictions/Notes:** 전톡적인 λŸ°νƒ€μž„ CSS-in-JS 라이브러리(styled-components, Emotion)λŠ” λ‚΄λΆ€μ μœΌλ‘œ React Context에 μ˜μ‘΄ν•˜κΈ° λ•Œλ¬Έμ— μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” μž‘λ™ν•˜μ§€ μ•Šκ³  ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈ λž˜ν•‘μ΄ ν•„μš”ν•˜μ§€λ§Œ, λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ˜ μ„±λŠ₯([[Core Web Vitals]]) ν–₯상과 [[Next.js]] App Routerμ™€μ˜ μ™„λ²½ν•œ ν˜Έν™˜μ„ μœ„ν•΄μ„œλŠ” λŸ°νƒ€μž„ λΉ„μš©μ΄ μ—†λŠ” [[Tailwind CSS]], [[CSS Modules]] λ˜λŠ” [[vanilla-extract]] λ“±μ˜ 정적 CSS 생성 λ„κ΅¬λ‘œμ˜ μ „ν™˜μ΄ 2025λ…„ κΈ°μ€€ λ”μš± κ°•λ ₯히 ꢌμž₯되고 μžˆλ‹€ [6, 8-11]. --- *Last updated: 2026-04-26*