Reactλ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λ€κΈ° μν JavaScript λΌμ΄λΈλ¬λ¦¬μ λλ€.
리μ‘νΈλ μΈν°λ μ μ΄ λ§μ μΉ μ±μ κ°λ°νκΈ° μν΄μ μ£Όλ‘ μ¬μ©λ©λλ€.
κ·Έλ¬κΈ°μ μ΄λ¬ν μΉ μ±μ λ§λλ λ€λ₯Έ ToolμΈ Vueλ Angualarμ λ§μ΄ λΉκ΅λ₯Ό νκ² λ©λλ€.
νλ μ μν¬λ μ΄λ ν μ±μ λ§λ€κΈ° μν΄ νμν λλΆλΆμ κ²μ κ°μ§κ³ μλ κ²μ λλ€.
λΌμ΄λΈλ¬λ¦¬λ μ΄λ ν νΉμ κΈ°λ₯μ λͺ¨λν ν΄λμ κ²μ λλ€.
μ΄ μμ κ·Έλ¦Όμ 보면 νλ μ μν¬λ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν¬ν¨νκ³ λν μ°λ¦¬κ° μμ±ν μμ€ μ½λλ₯Ό νΈμΆν©λλ€. κ·Έλ¦¬κ³ μμ€ μ½λλ μ΄λ ν κΈ°λ₯μ ꡬννκΈ° μν΄μ λΌμ΄λΈλ¬λ¦¬λ₯Ό νΈμΆνκ² λ©λλ€.
μ΄λ κ² νλ μμν¬λ μ±μ λ§λλλ° νμν λλΆλΆμ λΌμ΄λΈλ¬λ¦¬λ₯Ό κ°μ§κ³ μμΌλ©°, λΌμ΄λΈλ¬λ¦¬λ€μ νΉμ κΈ°λ₯μ μν΄ λͺ¨λν λμ΄ μμ΅λλ€.
리μ‘νΈκ° λΌμ΄λΈλ¬λ¦¬μΈ μ΄μ λ 리μ‘νΈλ μ μ μΌλ‘ UIλ₯Ό λ λλ§ νλ λ° κ΄μ¬νκΈ° λλ¬Έμ
λλ€.
κ·Έλ¦¬κ³ νλ©΄μ λ°κΎΈλ λΌμ°ν
μ react-router-dom λͺ¨λμ μ¬μ©νλ©°, μν κ΄λ¦¬λ₯Ό μν΄μλ redux, mobx λ± μ¬λ¬ λͺ¨λμ μ¬μ©νλ©°, λΉλλ₯Ό μν΄μλ webpack, npm λ±λ±, ν
μ€ν
μ μν΄μλ Eslint, Mocha λ±μ μ΄μ©νκΈ° λλ¬Έμ 리μ‘νΈλ νλ μμν¬κ° μλ λΌμ΄λΈλ¬λ¦¬μ
λλ€.
리μ‘νΈλ μ¬λ¬ μ»΄ν¬λνΈλ₯Ό μ΄μ©ν΄μ μΉ μ±μ κ°λ°νκ² λ©λλ€.
κ·Έλ¬λ©΄ μ»΄ν¬λνΈλ 무μμΌκΉμ?!
리μ‘νΈλ μ¬λ¬ μ»΄ν¬λνΈ μ‘°κ°μΌλ‘ λμ΄μμ΅λλ€.
λ§μ½ νλμ νμ΄μ§λ₯Ό 리μ‘νΈλ‘ λ§λ λ€κ³ 보면 μλ κ·Έλ¦Όμ²λΌ μ¬λ¬κ°μ μ»΄ν¬λνΈκ° λͺ¨μ¬μ νλμ νμ΄μ§λ₯Ό μ΄λ£¨κ² λ©λλ€.
리μ‘νΈ μ»΄ν¬λνΈλ λκ°μ§κ° μμ΅λλ€.
μλ 리μ‘νΈλ‘ κ°λ°ν λλ ν΄λμ€ μ»΄ν¬λνΈλ₯Ό μ΄μ©ν΄μ λ§μ΄ κ°λ°μ νμ§λ§ 리μ‘νΈμμ 리μ‘νΈ HooksλΌλ κ²μ λ°νν μ΄νλΆν°λ ν¨μν μ»΄ν¬λνΈλ₯Ό μ΄μ©ν΄μ κ°λ°μ λ§μ΄ ν©λλ€.
리μ‘νΈμ μ£Όμ νΉμ§ μ€ νλλ κ°μ(Virtual)λμ μ¬μ©νλ€λ κ²μ λλ€.
κ·ΈλΌ κ°μλμ λν΄μ μμλ΄μΌνλλ° μ°μ κ°μλμ μ μ¬μ©νλμ§ μκΈ° μν΄μ
λ¨Όμ μ€μ (Real) λ(DOM)μ λν΄μ μμλ³΄κ³ λΈλΌμ°μ κ° λ λλ§νλ κ³Όμ μ λν΄μλ μμλ³΄κ² μ΅λλ€.
λΈλΌμ°μ μμ UIλ₯Ό λ³Ό μ μλ κ²μ μ΄ HTML μ λΆμν΄μ 보μ¬μ€ μ μμ΅λλ€.
μ΄ HTMLμ μμ(Element)λ€λ‘ ꡬμ±λμ΄ μμ΅λλ€.
μμμ 보λ μΉ νμ΄μ§λ₯Ό μ΄λ£¨λ μμλ€μ μλ°μ€ν¬λ¦½νΈκ° μ΄μ©ν μ μκ²λ λΈλΌμ°μ κ° νΈλ¦¬κ΅¬μ‘°λ‘ λ§λ κ°μ²΄ λͺ¨λΈμ μλ―Έν©λλ€.
μμ 보μ΄λ DOM νΈλ¦¬λ₯Ό DOM μμ μ 곡ν΄μ£Όλ APIλ₯Ό μ΄μ©ν΄μ μ‘°μν μ μμ΅λλ€.
μ΄ APIλ₯Ό μ΄μ©ν΄μ DOM ꡬ쑰μ μ κ·Όνκ±°λ μνλ μμ(Element)λ₯Ό μμ νκ±°λ μμ κ±°λ ν μ μμ΅λλ€.
λΈλΌμ°μ κ° μλ²μμ νμ΄μ§μ λν HTML μλ΅μ λ°κ³ νλ©΄μ νμνκΈ° μ μ μ¬λ¬ λ¨κ³κ° μμ΅λλ€.
μΉ λΈλΌμ°μ κ° HTML λ¬Έμλ₯Ό μ½κ³ , μ€νμΌ μ νκ³ λ·°ν¬νΈμ νμνλ κ³Όμ μ λλ€.
리μ‘νΈμμλ νμ λ λλ§ μ΄μ μ κ°μ²΄(κ°μλ)μ λ λλ§ μ΄νμ κ°μ²΄(κ°μλ)λ₯Ό κ°μ§κ³ μμ΅λλ€.
리μ‘νΈμμλ μ΄λ ν State(λ°μ΄ν°)κ° λ°λλ©΄ κ°μλμ΄ μλ‘ μμ±λ©λλ€.
κ·Έλ¦¬κ³ μ΄κ²μ μ΄μ μ μκΈ΄ κ°μλκ³Ό λΉκ΅ν΄μ λ°λ λΆλΆλ§ μ€μ λμ μ μ©μ μμΌμ€λλ€.
λ°λ λΆλΆμ μ°Ύλ κ³Όμ μ Diffingμ΄λΌκ³ λΆλ₯΄λ©°,
λ°λ λΆλΆλ§ μ€μ λμ μ μ©μμΌμ£Όλ κ²μ μ¬μ‘°μ (reconciliation)μ΄λΌκ³ λΆλ¦
λλ€.
React λ Reconciliationμ ν΅ν΄μ λ§μ½ μ΄κ°μ Stateλ°μ΄ν°κ° λ³νλ€λ©΄ DOMμ μ΄λ² λ°λ³΅ν΄μ μ‘°μν΄μ£Όλ κ²μ΄ μλ Virtual DOMμ λΉκ΅ν΄μ νλ²μ DOM μ‘°μμΌλ‘ λͺ¨λ λ³νλ₯Ό λ°μμμΌμ€λλ€.
리μ‘νΈμ κ°μλμ μ€μ DOMκ³Ό κ°μ λ΄μ©μ λ΄κ³ μμΌλ©° μλ°μ€ν¬λ¦½νΈ κ°μ²΄ ννλ‘ λ©λͺ¨λ¦¬μ μ μ₯λμ΄ μλ 볡μ¬λ³Έμ λλ€.
리μ‘νΈλ λ λλ§ μ΄μ μ λ΄μ©μ λ΄κ³ μλ κ°μλκ³Ό λ³κ²½ μ΄νμ λ³΄μΌ λ΄μ©μ λ΄κ³ μλ κ°μλμ κ°μ§κ³ μμ΅λλ€.
λ³κ²½μ΄ λκΈ° μ κ°μλκ³Ό λ³κ²½μ΄ λ νμ κ°μλμ λΉκ΅νλ κ³Όμ μ Diffingμ΄λΌκ³ λΆλ¦ λλ€.
Diffingμ ν΅ν΄μ λ³κ²½λ λΆλΆλ€μ νμ ν ν, 리μ‘νΈλ Batch Updateλ₯Ό μνν΄μ μ€μ DOMμ ν λ²μ μ μ©μμΌμ€λλ€. μ΄λ¬ν κ³Όμ μ μ¬μ‘°μ (Reconciliation)μ΄λΌκ³ ν©λλ€.
μ ν΅μ μΈ μΉ μ¬μ΄νΈλ₯Ό λ§λ€ λ μ¬μ©νλ Multi Page Application μ λλ€.
νμ§λ§ μμ¦μλ μΉ μ¬μ΄νΈμ μ 체 νμ΄μ§λ₯Ό νλμ νμ΄μ§μ λ΄μ λμ μΌλ‘ νλ©΄μ λ°κΏκ°λ©° ννν©λλ€. μ΄κ²μ SPA Single Page Applicationμ΄λΌκ³ λΆλ¦ λλ€.
μ ν΅μ μΈ μΉ μ¬μ΄νΈλ a page μμ b pageλ‘ νμ΄μ§ μ ν ν λ a.html μ 보μ¬μ£Όλ€κ° b.htmlμ λ³΄μ¬ μ£Όλ©΄ λμ§λ§ index.html λ°μ μλ SPAμμλ μ΄λ»κ² νμ΄μ§ μ ν(λΈλΌμ°μ§)μ ν΄μ€κΉμ?
HTML 5μ History APIλ₯Ό μ¬μ©ν΄μ κ°λ₯νκ² λ§λλλ€.
μλ°μ€ν¬λ¦½νΈ μμμμ History APIλ₯Ό μ΄μ©ν΄μ νμ¬ νμ΄μ§ λ΄μμ νλ©΄ μ΄λμ΄ μΌμ΄λ κ²μ²λΌ μλνκ² ν΄μ€λλ€.
μ μ κ° ν μΉμ¬μ΄νΈλ΄μμ λ€λ₯Έ μΉνμ΄μ§λ‘ μ΄λν λλ§λ€ μλ²λ‘λΆν° html νμΌλ‘ λ "νμ΄μ§ μ 체"λ₯Ό λΆλ¬μμΌν¨(MPA)
=> μ€λ κ±Έλ¦Ό, νλ©΄μ΄ "κΉλΉ‘μ" => μ¬μ©μ μ
μ₯μμ λλ¦° λ°μμ± => μ¬μ©μ κ²½ν μ§ μ ν
=> νμ΄μ§ μ΄λν λλ§λ€ νμ΄μ§ μ 체λ₯Ό λΆλ¬μ€λ€λ³΄λ Headerλ Nav κ°μ μ€λ³΅λλ μμλ₯Ό λ§€λ² λΆλ₯΄λ©΄,, μλ²μμ λΆνμν νΈλν½ λ°μ
SPA λ±μ₯
νμ΄μ§ μ νν λ HTML λ¬Έμ μ μ²΄κ° μλ, μ
λ°μ΄νΈμ νμν λ°μ΄ν°λ§ μλ²μμ μ λ¬λ°μ μ΄ λ°μ΄ν°λ₯Ό JavaScriptκ° λμ μΌλ‘ HTML μμλ₯Ό μμ±ν΄μ νλ©΄μ 보μ¬μ€
μ¬μ©μμ νλμ λΉ λ₯΄κ² λ°μν¨ => μ¬μ©μμμ λΉ λ₯Έ μνΈμμ©μ΄ κ°λ₯ν¨
μλ² κ³ΌλΆν λ¬Έμ μν => μμ²λ°μ λ°μ΄ν°λ§ λ겨주면 λκΈ° λλ¬Έμ
νλ©΄μ΄ κΉλΉ‘μ΄μ§ μμ => λ λμ μ¬μ©μ κ²½ν μ 곡
**SPA λνμ¬λ‘
Youtube, facebook, Gmail, airbnb, Netflix
**Mockup
λ°λͺ¨ μμ°, νκ°λ₯Ό μν μ΅μνμ κΈ°λ₯λ§ λ΄μ λͺ¨ν
λ°μ€ν¬ν±, μ€λ§νΈν°μ νλ μμ λ§μμ μ§κ΄μ μΌλ‘ μ΄ν΄νκΈ° μ½κ² λμμΈν κ²
**Reactλ₯Ό μ΄μ©ν΄ μ ν¬λΈ μ±μ λ§λ λ€λ©΄?
λ°λ‘ νμ΄μ§λ₯Ό λ§λ€κΈ°λ³΄λ€, μ΄λ€ μ»΄ν¬λνΈλ₯Ό λ§λ€κ³ μ΄λ€μ μ΄λ»κ² μ‘°ν©ν μ§λΆν° ꡬμν΄μΌ ν¨
Header μ»΄ν¬λνΈλ νμ νλ©΄ μλ¨μ μμΉν¨.
=> ν λ²λ§ λ§λ€μ΄μ λͺ¨λ νμ΄μ§μμ μ¬μ©νλλ‘ μ€κ³λ‘μ§ μμ±
νλ©΄ μ€μμ ContentsList μ»΄ν¬λνΈλ μμμ λ΄λ μν μ ν¨
κ·Έ μμλ λμΌν λ μ΄μμμ μμλ¬Όλ€μ΄ λ°λ³΅μ μΈ ννλ‘ μ‘΄μ¬ν¨ => μμ Content μ»΄ν¬λνΈλ₯Ό ν λ²λ§ λ§λ€μ΄ μ¬μ¬μ©
Content μ»΄ν¬λνΈ μλ¨ : Thumbnail
Content μ»΄ν¬λνΈ μ€μ : Avatar, μμμκ°μ λͺ©
Content μ»΄ν¬λνΈ νλ¨ : μ±λμ΄λ¦, μ‘°νμ, μ
λ‘λνλ μ§
Content μ»΄ν¬λνΈλ μμκ³Ό κ΄λ ¨λ λ°μ΄ν°λ₯Ό μ
λ ₯λ°μ(κ°μ²΄νν{μμ±&κ°}), UIμ λ§κ² νλ©΄μ μΆλ ₯ν΄ μ€
κ·Όλ° μ΄ λ°μ΄ν°λ ν΄λΉ μμμ λλ¬ μμ²νκ³ μμ λλ, λ€λ₯Έ μμμ μμ²ν λ μΆμ²μμμΌλ‘μ λκΈ° λͺ©λ‘μ λ° λλ λμΌν λ΄μ©μ΄ νλ©΄μ μΆλ ₯λ¨
μ΄λ€ μνλ‘ μλλμ λ°λΌ μΆλ ₯λλ μμΉλ§ μ‘°κΈμ© λ¬λΌμ§ λΏμ
μ»΄ν¬λνΈκ° κ°μ κ³ μ μ κΈ°λ₯μ κ°μ§κ³ μλ€λ μ μ? λ§λ λ§μ΄μ§λ§, λ κ³ μ°¨μμ 리μ‘νΈ κ°λ°μλΌλ©΄,,
κ·Έ μ ν리μΌμ΄μ μμμ λ€λ€μ§λ λ°μ΄ν°λ₯Ό μ»΄ν¬λνΈλ€λΌλ¦¬ λ³΄λ€ μ κΈ°μ μΌλ‘ μ£Όκ³ λ°μ μ μλλ‘ μ€κ³ν μ μμ΄μΌ ν¨