# [[Client-Side Routing]]
## π Brief Summary
ν΄λΌμ΄μΈνΈ μ¬μ΄λ λΌμ°ν
(Client-Side Routing)μ λΈλΌμ°μ κ° μλ²λ‘λΆν° μ 체 μ νμ΄μ§λ₯Ό λΆλ¬μ€λ λμ , JavaScriptλ₯Ό ν΅ν΄ ν΄λΌμ΄μΈνΈ μΈ‘μμ λμ μΌλ‘ νμ¬ μΉ νμ΄μ§λ₯Ό λ€μ μμ±νμ¬ νλ©΄μ μ ννλ νμ λ°©μμ
λλ€ [1]. μ£Όλ‘ μ±κΈ νμ΄μ§ μ ν리μΌμ΄μ
(SPA)μμ μ¬μ©λμ΄ λΉ λ₯΄κ³ μ±κ³Ό κ°μ λ§€λλ¬μ΄ μ¬μ©μ κ²½νμ μ 곡ν©λλ€ [2, 3]. React μνκ³μμλ React Routerκ° λνμ μΌλ‘ μ¬μ©λλ©° λΌμ°ν
λΏλ§ μλλΌ λ°μ΄ν° ν¨μΉκ³Ό μν κ΄λ¦¬λ₯Ό μ‘°μ¨νλ ν΅μ¬ μν μ λ΄λΉν©λλ€ [4].
## π Core Content
* **μλ λ°©μ λ° μ¬μ©μ κ²½ν(UX):**
ν΄λΌμ΄μΈνΈ μ¬μ΄λ λΌμ°ν
μ μ΄κΈ° HTML μ
Έμ λ‘λν μ΄ν, μ¬μ©μμ νμ μμ² μ μλ² μμ² μμ΄ λΈλΌμ°μ λ΄μμ JavaScriptλ₯Ό μ€ννμ¬ UIλ₯Ό μ
λ°μ΄νΈν©λλ€ [1, 5]. μ΄λ¬ν λ°©μμ νλ©΄ μ ν μ μ 체 νμ΄μ§ μλ‘κ³ μΉ¨μ΄ λ°μνμ§ μμΌλ―λ‘ μ ν μλκ° μ¦κ°μ μΌλ‘ λκ»΄μ§λ©°, νμ΄μ§ νμ μ€μλ νΉμ μν(μ: μ¬μ μ€μΈ μ€λμ€)λ₯Ό λκΉ μμ΄ μ μ§ν μ μλ€λ μ₯μ μ΄ μμ΅λλ€ [3].
* **React Routerλ₯Ό νμ©ν ꡬ쑰ν:**
React μ ν리μΌμ΄μ
μμλ React Routerλ₯Ό μ¬μ©νμ¬ λ³΅μ‘ν UI λ μ΄μμκ³Ό κ³μΈ΅μ λ΄λΉκ²μ΄μ
ν¨ν΄μ μ μΈμ μΌλ‘ ꡬμ±ν©λλ€ [6, 7]. μλ₯Ό λ€μ΄ μ€μ²© λΌμ°νΈ(Nested Routes) κΈ°λ₯κ³Ό `` μ»΄ν¬λνΈλ₯Ό μ¬μ©νλ©΄, ν€λλ μ¬μ΄λλ° κ°μ λΆλͺ¨ λ μ΄μμμ κ³ μ ν μνμμ URL κ²½λ‘μ λ°λΌ λ΄λΆ μμ μ»΄ν¬λνΈλ§ λμ μΌλ‘ κ΅μ²΄ν μ μμ΅λλ€ [6-8]. λ λμκ° v6.4 μ΄μμμλ `loader`μ `action` APIλ₯Ό μ 곡νμ¬ μ»΄ν¬λνΈκ° λ λλ§λκΈ° μ μ λΌμ°νΈ μμ€μμ λ³λ ¬λ‘ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ±°λ νΌ μ μΆ(Mutation)μ μ²λ¦¬ν μ μκ² ν¨μΌλ‘μ¨ μ±λ₯μ κ·Ήλνν©λλ€ [9].
* **κΈ°μ μ SEO λ° ν¬λ‘€λ§ λ¬Έμ (CSRμ νκ³):**
λΌμ°ν
μ μ μ μΌλ‘ ν΄λΌμ΄μΈνΈ μΈ‘ JavaScriptμ μμ‘΄νλ©΄ κ²μ μμ§ μ΅μ ν(SEO)μ μ¬κ°ν λ¬Έμ κ° λ°μν μ μμ΅λλ€ [10]. ν¬λ‘€λ¬λ μ΄κΈ° λ‘λ μ λ΄μ©μ΄ μλ λΉ HTML μ
Έ(`
`)λ§ λ³΄κ² λλ©°, JavaScriptκ° μ€νλμ΄ λ λλ§λ λκΉμ§ μ½ν
μΈ μΈλ±μ±μ΄ μ§μ°λ©λλ€ [11-13]. λν μ¬μ©μκ° μ‘΄μ¬νμ§ μλ URLμ μ κ·Όν λ λΈλΌμ°μ νλ©΄μμΌλ‘λ "νμ΄μ§λ₯Ό μ°Ύμ μ μμ"μ νμνλλΌλ, μλ²λ μ΄λ―Έ μ± μ
Έμ μ±κ³΅μ μΌλ‘ μ λ¬νμΌλ―λ‘ 404 μν μ½λ λμ 200 OK μν μ½λλ₯Ό λ°ννλ 'μννΈ 404(Soft 404)' λ¬Έμ κ° λ°μνμ¬ ν¬λ‘€ μμ°μ λλΉνκ² λ©λλ€ [10, 14].
* **μ±λ₯ λ° SEO μ΅μ ν νλν°μ€:**
μ±λ₯ λ° κ²μ μμ§ μ κ·Όμ±μ ν₯μνκΈ° μν΄μλ ν΄λΌμ΄μΈνΈ λΌμ°ν
ꡬν μ λ€μκ³Ό κ°μ μ§μΉ¨μ λ°λΌμΌ ν©λλ€.
* **HTML5 History API μ¬μ©:** ν΄μ(`#`)κ° ν¬ν¨λ λΌμ°ν
(μ: `/#/about`)μ ν¬λ‘€λ¬κ° μ λλ‘ μμΈνμ§ λͺ»νλ―λ‘, κΉλνκ³ ν¬λ‘€λ§ κ°λ₯ν URL ꡬ쑰λ₯Ό 보μ₯νλ `BrowserRouter`λ₯Ό μ¬μ©ν΄μΌ ν©λλ€ [15-17].
* **νμ€ μ΅μ»€ νκ·Έ μ¬μ©:** ν¬λ‘€λ¬λ λ²νΌ ν΄λ¦ λ± JavaScriptμ μ΄λ²€νΈ νΈλ€λ¬(μ: `onClick`, `router.push()`)λ₯Ό ν΅ν μ΄λμ μΆμ νμ§ μμ΅λλ€. λ°λΌμ λͺ¨λ λ΄λΆ λ΄λΉκ²μ΄μ
μ λ°λμ νμ€ `` λλ νλ μμν¬κ° μ 곡νλ `` νκ·Έλ₯Ό μ¬μ©ν΄μΌ ν©λλ€ [17, 18].
* **λΌμ°νΈ κΈ°λ° μ½λ μ€ν리ν
:** λ¨μΌ νμ΄μ§ μ ν리μΌμ΄μ
μ κ±°λν JS λ²λ€μ 'Interaction to Next Paint (INP)' λ± Core Web Vitals μ μλ₯Ό μ
νμν΅λλ€ [14, 19]. μ΄λ₯Ό λ°©μ§νκΈ° μν΄ κ° λΌμ°νΈλ³λ‘ μ½λλ₯Ό λΆν (Code Splitting)νκ³ μ§μ° λ‘λ©(Lazy Loading)μ μ μ©νμ¬ νμ¬ νμ΄μ§μ νμν μ½λλ§ λ€μ΄λ‘λλλλ‘ ν΄μΌ ν©λλ€ [19-22].
* **λμ λ©νλ°μ΄ν° κ΄λ¦¬:** λΌμ°νΈκ° λ³κ²½λ λλ§λ€ React Helmet λ±μ λꡬλ₯Ό μ¬μ©νμ¬ ``κ³Ό λ©ννκ·Έλ₯Ό λμ μΌλ‘ μ
λ°μ΄νΈν΄ μ£Όμ΄μΌ ν©λλ€ [15, 23].
## π Knowledge Connections
- **Related Topics:** [[Single Page Applications (SPA)]], [[React Router]], [[Server-Side Rendering (SSR)]], [[Core Web Vitals]], [[Search Engine Optimization (SEO)]]
- **Projects/Contexts:** [[React κΈ°λ° μ±κΈ νμ΄μ§ μ ν리μΌμ΄μ
κ°λ°]], [[κΈ°μ μ SEO μ΅μ ν λ° λ λλ§ λ§μ΄κ·Έλ μ΄μ
μ λ΅]]
- **Contradictions/Notes:** ν΄λΌμ΄μΈνΈ μ¬μ΄λ λΌμ°ν
μ μ¬μ©μμκ² μ¦κ°μ μ΄κ³ λκΉ μλ νμ κ²½ν(UX)μ μ 곡νμ¬ μ 리νμ§λ§, ν¬λ‘€λ¬ κ΄μ μμλ JavaScript μ€ν μ§μ°, μμ
λ΄μ λ λλ§ μ€ν¨, μννΈ 404 λ± μ¬κ°ν SEO νκ³λ₯Ό μ΄λν©λλ€ [3, 10, 13]. λ°λΌμ μ½ν
μΈ λ
ΈμΆμ΄ μ€μν νλ‘λμ
νκ²½μμλ μμ ν CSR λΌμ°ν
μ νΌνκ³ SSR(μλ² μ¬μ΄λ λ λλ§) λλ SSG(μ μ μ¬μ΄νΈ μμ±) κΈ°λ°μ νλ μμν¬(μ: Next.js)λ‘ λ§μ΄κ·Έλ μ΄μ
νμ¬ κ²μ μμ§μ μμ ν HTMLμ μ 곡νλ νμ΄λΈλ¦¬λ μ κ·Όμ΄ κΆμ₯λ©λλ€ [24-26].
---
*Last updated: 2026-04-26*