# [[React Applications]] ## πŸ“Œ Brief Summary React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 동적이고 μΈν„°λž™ν‹°λΈŒν•œ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ 널리 μ‚¬μš©λ˜λŠ” μ‹±κΈ€ νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(SPA) ν”„λ ˆμž„μ›Œν¬ 기반의 μ›Ή μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. 기본적으둜 ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λ Œλ”λ§(CSR)을 μ‚¬μš©ν•˜μ—¬ λΉ λ₯Έ ν™”λ©΄ μ „ν™˜μ„ μ œκ³΅ν•˜μ§€λ§Œ, 초기 λ‘œλ”© 속도와 검색 μ—”μ§„ μ΅œμ ν™”(SEO) μΈ‘λ©΄μ—μ„œ 취약점을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό κ·Ήλ³΅ν•˜κ³  μ΅œμ‹  μ›Ή μ•„ν‚€ν…μ²˜μ˜ 기쀀을 μΆ©μ‘±ν•˜κΈ° μœ„ν•΄ Next.jsλ‚˜ Remix 같은 ν”„λ ˆμž„μ›Œν¬λ₯Ό λ„μž…ν•œ μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR), λΌμš°νŒ… μˆ˜μ€€μ˜ 데이터 페칭, 그리고 μ—„κ²©ν•œ μ„±λŠ₯ μ΅œμ ν™”(Core Web Vitals) 기법듀이 ν•„μˆ˜μ μœΌλ‘œ μ μš©λ©λ‹ˆλ‹€. ## πŸ“– Core Content * **λ Œλ”λ§ μ „λž΅κ³Ό SEO μ΅œμ ν™”** 전톡적인 React 앱은 초기 μš”μ²­ μ‹œ 빈 HTML μ…Έ(`
`)을 μ œκ³΅ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λ Œλ”λ§(CSR)을 μ‚¬μš©ν•©λ‹ˆλ‹€ [1-3]. μ΄λŠ” 검색 μ—”μ§„ λ΄‡μ˜ 크둀링 및 인덱싱을 μ§€μ—°μ‹œν‚€κ³ (Two-wave indexing), 크둀링 μ˜ˆμ‚°μ„ λ‚­λΉ„ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€ [4-6]. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Next.js, Remix 등을 ν™œμš©ν•˜μ—¬ μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR), 정적 μ‚¬μ΄νŠΈ 생성(SSG), 점진적 정적 μž¬μƒμ„±(ISR)을 κ΅¬ν˜„ν•˜λŠ” 것이 κ°€μž₯ μ€‘μš”ν•©λ‹ˆλ‹€ [7-11]. μ΄λŸ¬ν•œ 방식은 검색 엔진에 μ™„μ „ν•œ HTML을 μ¦‰μ‹œ μ œκ³΅ν•˜μ—¬ 크둀링 κ°€λŠ₯성을 κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€ [10, 12, 13]. λΆ€κ°€μ μœΌλ‘œ `React Helmet`κ³Ό 같은 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ λΌμš°νŠΈκ°€ 변경될 λ•Œλ§ˆλ‹€ λ™μ μœΌλ‘œ 메타 데이터와 타이틀을 μ—…λ°μ΄νŠΈν•΄μ•Ό ν•˜λ©°, ν•΄μ‹œ λΌμš°νŒ…(`#/`) λŒ€μ‹  HTML5 History API(`BrowserRouter`)λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 SEO에 μœ λ¦¬ν•©λ‹ˆλ‹€ [14-16]. * **React Routerλ₯Ό ν™œμš©ν•œ μ›Ή ꡬ쑰 및 μƒνƒœ 관리** React Router v6.4 이상은 'Data APIs'(loader, action)λ₯Ό λ„μž…ν•˜μ—¬ 라우트 λ§€μΉ­κ³Ό 데이터 νŽ˜μΉ­μ„ λ³‘λ ¬λ‘œ μˆ˜ν–‰ν•˜κ²Œ ν•¨μœΌλ‘œμ¨, κΈ°μ‘΄ React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 고질적 문제인 순차적 데이터 λ‘œλ”©(μ›Œν„°ν΄ 문제)을 ν•΄κ²°ν•©λ‹ˆλ‹€ [17, 18]. ``을 ν™œμš©ν•œ 쀑첩 라우트(Nested Routes)λŠ” μ‚¬μ΄λ“œλ°”λ‚˜ 헀더와 같은 곡톡 UIλ₯Ό μœ μ§€ν•˜λ©΄μ„œ λ‚΄λΆ€ μ½˜ν…μΈ λ§Œ λ™μ μœΌλ‘œ λ Œλ”λ§ν•˜λŠ” 논리적이고 ν™•μž₯ κ°€λŠ₯ν•œ μ•„ν‚€ν…μ²˜λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€ [19-22]. ν₯λ―Έλ‘­κ²Œλ„ React RouterλŠ” `useNavigation`, `useFetcher`, `loaderData`, `actionData` 등을 톡해 λ„€νŠΈμ›Œν¬ μƒνƒœ 및 데이터 갱신을 λ‚΄λΆ€μ μœΌλ‘œ μžλ™ μ²˜λ¦¬ν•˜λ―€λ‘œ, Redux와 같은 λ³„λ„μ˜ ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœ 관리(캐싱) λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ μ˜μ‘΄λ„λ₯Ό λŒ€ν­ μ€„μ—¬μ€λ‹ˆλ‹€ [23, 24]. * **Core Web Vitals와 ν”„λ‘ νŠΈμ—”λ“œ μ„±λŠ₯ μ΅œμ ν™”** React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ κ±°λŒ€ν•œ JavaScript λ²ˆλ“€ 크기와 ν•˜μ΄λ“œλ ˆμ΄μ…˜(Hydration) μ§€μ—°μœΌλ‘œ 인해 μ½”μ–΄ μ›Ή λ°”μ΄νƒˆ(LCP, INP, CLS) μ§€ν‘œκ°€ μ €ν•˜λ˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€ [25, 26]. 이λ₯Ό λ°©μ§€ν•˜λ €λ©΄ `React.lazy()`와 `Suspense`λ₯Ό μ΄μš©ν•œ 라우트 및 μ»΄ν¬λ„ŒνŠΈ μˆ˜μ€€μ˜ μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…(Code Splitting)κ³Ό μ§€μ—° λ‘œλ”©(Lazy Loading)을 κ΅¬ν˜„ν•˜μ—¬ 초기 JS νŽ˜μ΄λ‘œλ“œλ₯Ό 획기적으둜 쀄여야 ν•©λ‹ˆλ‹€ [25, 27-29]. λ˜ν•œ νŽ˜μ΄μ§€μ˜ μΈν„°λž™ν‹°λΈŒ λ°˜μ‘μ„±(INP)을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ λΆ€λΆ„ ν•˜μ΄λ“œλ ˆμ΄μ…˜(Partial Hydration)을 λ„μž…ν•˜κ±°λ‚˜ μ›Ή μ›Œμ»€(Web Workers)둜 무거운 μž‘μ—…μ„ μ˜€ν”„λ‘œλ“œν•˜κ³ , `React.memo`, `useMemo` 등을 ν™œμš©ν•˜μ—¬ λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ λ°©μ§€ν•˜λŠ” 것이 ν•„μˆ˜μ μΈ μ΅œμ ν™” λͺ¨λ²” μ‚¬λ‘€μž…λ‹ˆλ‹€ [25, 30, 31]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Single Page Applications]], [[Server-Side Rendering]], [[Core Web Vitals]], [[React Router]], [[Code Splitting]] - **Projects/Contexts:** [[SEO basics for React websites]], [[Modern website architecture best practices]] - **Contradictions/Notes:** React κ°œλ°œμ—μ„œ μ „ν†΅μ μœΌλ‘œ Reduxλ‚˜ Apollo 같은 μƒνƒœ 관리 라이브러리λ₯Ό 톡해 μ„œλ²„ μƒνƒœλ₯Ό ν΄λΌμ΄μ–ΈνŠΈ μΊμ‹œλ‘œ κ΄€λ¦¬ν•˜λŠ” 것이 μ£Όλ₯˜μ˜€μœΌλ‚˜, React Router 6.4+와 같은 μ΅œμ‹  데이터 λΌμš°νŒ… μ•„ν‚€ν…μ²˜μ—μ„œλŠ” λΌμš°ν„°κ°€ λ„€νŠΈμ›Œν¬ μƒνƒœμ™€ 데이터 μž¬κ²€μ¦μ„ μžλ™μœΌλ‘œ μ²˜λ¦¬ν•˜κΈ° λ•Œλ¬Έμ—, 기쑴의 μƒνƒœ 관리 νŒ¨ν„΄μ„ κ³ μˆ˜ν•˜λŠ” 것이 였히렀 λΆˆν•„μš”ν•œ λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈλ₯Ό μ–‘μ‚°ν•˜λŠ” μ•ˆν‹° νŒ¨ν„΄(anti-pattern)으둜 간주될 수 μžˆμŠ΅λ‹ˆλ‹€ [24, 32, 33]. --- *Last updated: 2026-04-26*