# [[React Server Components (RSC)]] ## πŸ“Œ Brief Summary React Server Components(RSC)λŠ” μ»΄ν¬λ„ŒνŠΈκ°€ 였직 μ„œλ²„μ—μ„œλ§Œ μ‹€ν–‰λ˜κ³  ν΄λΌμ΄μ–ΈνŠΈλ‘œ JavaScript λ²ˆλ“€μ„ μ „ν˜€ μ „μ†‘ν•˜μ§€ μ•ŠλŠ” ν˜μ‹ μ μΈ λ Œλ”λ§ μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€ [1-3]. 기쑴의 SSR(Server-Side Rendering)κ³Ό 달리 μƒν˜Έμž‘μš©μ΄ ν•„μš” μ—†λŠ” 정적 μ»΄ν¬λ„ŒνŠΈμ˜ Hydration(μˆ˜ν™”) 과정을 μƒλž΅ν•˜λ©°, μ§λ ¬ν™”λœ UI ν‘œν˜„λ§Œμ„ λΈŒλΌμš°μ €λ‘œ μŠ€νŠΈλ¦¬λ°ν•©λ‹ˆλ‹€ [2, 4, 5]. 결과적으둜 ν΄λΌμ΄μ–ΈνŠΈμ˜ JavaScript 처리 λΆ€ν•˜λ₯Ό λŒ€ν­ 쀄이고, 초기 λ‘œλ”© 속도와 μƒν˜Έμž‘μš© μ„±λŠ₯ μ§€ν‘œμΈ INP(Interaction to Next Paint)λ₯Ό ν–₯μƒμ‹œν‚€λŠ” λ Œλ”λ§ μ΅œμ ν™”μ˜ 핡심 κΈ°μˆ μž…λ‹ˆλ‹€ [1, 2]. ## πŸ“– Core Content * **μ•„ν‚€ν…μ²˜μ™€ μž‘λ™ 원리 (Architecture & Mechanics)** RSCλŠ” λΈŒλΌμš°μ €κ°€ μ•„λ‹Œ μ„œλ²„ ν™˜κ²½μ—μ„œ μ™„μ „νžˆ μ‹€ν–‰λ˜λ―€λ‘œ λ°μ΄ν„°λ² μ΄μŠ€, 둜컬 파일 μ‹œμŠ€ν…œ, λΉ„κ³΅κ°œ ν™˜κ²½ λ³€μˆ˜μ— 직접 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6, 7]. λ Œλ”λ§ 결과물은 λ‹¨μˆœν•œ HTML뿐만 μ•„λ‹ˆλΌ, ν΄λΌμ΄μ–ΈνŠΈκ°€ UIλ₯Ό μ‘°λ¦½ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” μ§λ ¬ν™”λœ React μ§€μ‹œμ–΄(React Flight ν”„λ‘œν† μ½œ)와 ν•¨κ»˜ λΈŒλΌμš°μ €μ— μ „λ‹¬λ©λ‹ˆλ‹€ [5]. λΈŒλΌμš°μ €λŠ” 이 결과물을 λ°›μ•„ μ¦‰μ‹œ 화면에 λ Œλ”λ§ν•˜λ©°, 이 κ³Όμ •μ—μ„œ ν•΄λ‹Ή μ„œλ²„ μ»΄ν¬λ„ŒνŠΈμ˜ JavaScript μ½”λ“œλŠ” 0λ°”μ΄νŠΈλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ— μ „μ†‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [1, 3, 6]. * **SSR과의 본질적 차이점 및 Hydration 제거** 전톡적인 SSR은 μ„œλ²„μ—μ„œ HTML을 미리 생성해 초기 μ½˜ν…μΈ  ν‘œμ‹œ 속도(FCP)λ₯Ό λ†’μ΄μ§€λ§Œ, λΈŒλΌμš°μ €κ°€ νŽ˜μ΄μ§€λ₯Ό λŒ€ν™”ν˜•μœΌλ‘œ λ§Œλ“€κΈ° μœ„ν•΄ μ—¬μ „νžˆ 전체 JavaScript λ²ˆλ“€μ„ λ‹€μš΄λ‘œλ“œν•˜κ³  'Hydration' 과정을 κ±°μ³μ•Όλ§Œ ν•©λ‹ˆλ‹€ [8, 9]. 반면 μˆœμˆ˜ν•œ RSCλŠ” λΈŒλΌμš°μ €μ—μ„œ 싀행될 JS μ½”λ“œκ°€ μ• μ΄ˆμ— μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ Hydration 단계 μžμ²΄κ°€ μƒλž΅λ˜λ©° ν΄λΌμ΄μ–ΈνŠΈ 메인 μŠ€λ ˆλ“œμ˜ μ—°μ‚° 뢀담을 극적으둜 μ€„μ—¬μ€λ‹ˆλ‹€ [2, 4, 7]. * **Client Componentsμ™€μ˜ ν•˜μ΄λΈŒλ¦¬λ“œ μ•„ν‚€ν…μ²˜** μƒνƒœ(State) κ΄€λ¦¬λ‚˜ 이벀트 ν•Έλ“€λŸ¬(onClick λ“±), λΈŒλΌμš°μ € API 접근이 ν•„μš”ν•œ λŒ€ν™”ν˜• μš”μ†ŒλŠ” 파일 μ΅œμƒλ‹¨μ— `"use client"` μ§€μ‹œμ–΄λ₯Ό μ„ μ–Έν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ‘œ λΆ„λ¦¬ν•©λ‹ˆλ‹€ [6, 10, 11]. μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλŠ” ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ Œλ”λ§ν•  수 μžˆμ§€λ§Œ, ν΄λΌμ΄μ–ΈνŠΈ μ»΄ν¬λ„ŒνŠΈλŠ” μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλ₯Ό 직접 μž„ν¬νŠΈν•  수 μ—†λ‹€λŠ” μ—„κ²©ν•œ 단방ν–₯ μ˜μ‘΄μ„± κ·œμΉ™(μ„œλ²„ β†’ ν΄λΌμ΄μ–ΈνŠΈ)을 λ”°λ¦…λ‹ˆλ‹€ [12-14]. 이λ₯Ό 톡해 무거운 λΉ„μƒν˜Έμž‘μš© UIλŠ” μ„œλ²„μ— 남겨두고 μƒν˜Έμž‘μš©μ— ν•„μˆ˜μ μΈ λΆ€λΆ„λ§Œ λΈŒλΌμš°μ €λ‘œ μ „μ†‘ν•˜μ—¬ λ²ˆλ“€ 크기λ₯Ό μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6, 13]. * **데이터 페칭(Data Fetching)의 μ΅œμ ν™”** RSC ν™˜κ²½μ—μ„œλŠ” μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ λ³„λ„μ˜ API 쀑간 계측 없이 λ°μ΄ν„°λ² μ΄μŠ€μ— 직접 비동기 μš”μ²­(async/await)을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [15, 16]. λ˜ν•œ μ„œλ²„ ν™˜κ²½μ˜ 이점을 μ‚΄λ € λ Œλ”λ§ 쀑 데이터λ₯Ό λ³‘λ ¬λ‘œ κ°€μ Έμ˜΄μœΌλ‘œμ¨, 전톡적인 ν΄λΌμ΄μ–ΈνŠΈ λ Œλ”λ§(CSR)μ—μ„œ λ°œμƒν•˜λ˜ 데이터 페칭 μ›Œν„°ν΄(Waterfall) 문제λ₯Ό 효과적으둜 μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [17, 18]. * **μ œμ•½ 사항 및 κ΅¬ν˜„ μ‹œ 주의점 (Pitfalls)** μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλŠ” λΈŒλΌμš°μ € APIλ‚˜ μƒνƒœ(State)λ₯Ό κ°€μ§ˆ 수 μ—†μœΌλ―€λ‘œ λŒ€ν™”ν˜• μΈν„°λž™μ…˜μ„ κ΅¬ν˜„ν•  수 μ—†μŠ΅λ‹ˆλ‹€ [19]. λ˜ν•œ λ Œλ”λ§ 및 데이터 ꡬ쑰λ₯Ό 잘λͺ» μ„€κ³„ν•˜μ—¬ μ„œλ²„ λ‚΄μ—μ„œ 순차적으둜 데이터λ₯Ό νŽ˜μΉ­ν•˜κ²Œ 되면, κΈ°μ‘΄ ν΄λΌμ΄μ–ΈνŠΈμ˜ μ›Œν„°ν΄ λ¬Έμ œκ°€ 'μ„œλ²„ μΈ‘ μ›Œν„°ν΄(Server-Side Waterfalls)'둜 κ·ΈλŒ€λ‘œ μ „μ΄λ˜μ–΄ 응닡 지연을 μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [20, 21]. ꡬ쑰적 문제λ₯Ό μš°νšŒν•˜κΈ° μœ„ν•΄ `"use client"`λ₯Ό λ¬΄λΆ„λ³„ν•˜κ²Œ λ‚¨μš©ν•˜λ©΄ λŒ€κ·œλͺ¨ JS λ²ˆλ“€μ΄ λ‹€μ‹œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ „μ†‘λ˜μ–΄ RSC λ„μž…μ˜ μ΅œμ ν™” 이점이 μ™„μ „νžˆ μ‚¬λΌμ§€κ²Œ λ©λ‹ˆλ‹€ [22]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Server-Side Rendering (SSR)]], [[Client-Side Rendering (CSR)]], [[Hydration]], [[Component-Based Architecture (CBA)]], [[Interaction to Next Paint (INP)]] - **Projects/Contexts:** [[Next.js App Router]], [[React 19]], [[React Flight Protocol]] - **Contradictions/Notes:** μ†ŒμŠ€λŠ” RSCκ°€ λ‹¨μˆœνžˆ "ν–₯μƒλœ SSR"이 μ•„λ‹ˆλΌκ³  λͺ…ν™•νžˆ 선을 κΈ‹μŠ΅λ‹ˆλ‹€. SSR은 μ—¬μ „νžˆ ν΄λΌμ΄μ–ΈνŠΈμ— μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ „μ†‘ν•˜κ³  ν•˜μ΄λ“œλ ˆμ΄μ…˜μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜μ§€λ§Œ, RSCλŠ” νŠΉμ • μ»΄ν¬λ„ŒνŠΈμ˜ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μžλ°”μŠ€ν¬λ¦½νŠΈμ™€ ν•˜μ΄λ“œλ ˆμ΄μ…˜ 자체λ₯Ό μ™„μ „νžˆ μ œκ±°ν•œλ‹€λŠ” μ μ—μ„œ 본질적인 차이가 μžˆμŠ΅λ‹ˆλ‹€ [7, 9]. λ˜ν•œ μ„œλ²„ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ„μž…ν•œλ‹€κ³  μžλ™μœΌλ‘œ μ„±λŠ₯이 μ΅œμ ν™”λ˜λŠ” 것은 μ•„λ‹ˆλ©°, 데이터 μ˜μ‘΄μ„±μ„ 직렬둜 잘λͺ» κ΅¬μ„±ν•˜λ©΄ μ„œλ²„ μƒμ—μ„œ λ™μΌν•œ μ›Œν„°ν΄ ν˜„μƒ(Server-Side Waterfalls)을 일으켜 병λͺ©μ„ μ΄ˆλž˜ν•  수 μžˆλ‹€κ³  κ²½κ³ ν•©λ‹ˆλ‹€ [20, 21, 23]. --- *Last updated: 2026-04-25*