μ΅κ·Ό Tom MacWrightμ μ±κΈ νμ΄μ§ μ ν리μΌμ΄μ (SPA)κ³Ό κ·Έμ λ°λ₯Έ λΆλ§ μ¬νλ€μ λν΄ λͺ κ°μ§ κΈμ μμ±νμ΅λλ€:
μΉ κ°λ°μ μλ‘μ΄ νμ€μ React μ±κΈ νμ΄μ§ μ ν리μΌμ΄μ μ ꡬμΆνκ³ μλ² λ λλ§μ μ¬μ©νλ κ²μ λλ€. μ΄ μν€ν μ²μ λ κ°μ§ ν΅μ¬ μμλ λ€μκ³Ό κ°μ΅λλ€:
- μ£Όμ UIλ Reactλ μ μ¬ν κ²μ μ¬μ©νμ¬ μλ°μ€ν¬λ¦½νΈλ‘ κ΅¬μΆ λ° μ λ°μ΄νΈλ©λλ€.
- λ°±μλλ ν΄λΉ μ ν리μΌμ΄μ μ΄ μμ²νλ APIμ λλ€.
μ΄ μμ΄λμ΄λ μ λ§λ‘ μΈν°λ·μ ν©μΈμμ΅λλ€. λͺλͺ μ£Όμ μΈκΈ° μΉμ¬μ΄νΈμμ μμλμ΄ λ§μΌν μ¬μ΄νΈμ λΈλ‘κ·Έ κ°μ κ³³κΉμ§ μ€λ©°λ€μμ΅λλ€.
μ΄ λ κΈ°μ¬μμ Tomμ React/SPA μ λ°©μμ μ¬κ³ λ°©μκ³Ό κ΄λ ¨λ λ¬Έμ λ₯Ό μ€λͺ ν©λλ€. μμ½νμλ©΄, SPA νλ μμν¬λ 볡μ‘ν κ²½ν₯μ΄ μμΌλ©°, λ§μ κ²½μ° κ·Έ 볡μ‘μ±μ λΉν΄ μ»λ μ΄μ μ΄ ν¬μ§ μλ€λ κ²μ λλ€.
Tomμ λ λ²μ§Έ κΈ°μ¬μμ SPA μ κ·Ό λ°©μμ λν λͺ κ°μ§ λμμ μ μνλ©°, κΈ°μκ²λ htmxλ₯Ό μΈκΈνμ΅λλ€. κ·Έλ¬λ κ·Έλ htmx(κ·Έλ¦¬κ³ Stimulusμ Alpine.js)λ₯Ό βμ μ§μ ν₯μβ λΌμ΄λΈλ¬λ¦¬λ‘ λΆλ₯νμ΅λλ€. μ΄λ μ’μ μ€λͺ μ΄μ§λ§, μ μ΄λ htmxμ κ²½μ°, μ΄ μ€νμΌμ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€λͺ νλ λ° λ μ ν©ν μ©μ΄κ° μλ€κ³ μκ°ν©λλ€: HTML μ€μ¬ (λλ, νμ΄νΌν μ€νΈ μ€μ¬)
HTML μ€μ¬ κ°λ°μμλ HTMLμ΄ λ¨μν νμμ μμκ° μλ μ ν리μΌμ΄μ κ°λ°μ μ£Όμ λ§€μ²΄λ‘ λ°μλ€μ¬μ§λλ€. μ΄λ ν΄λΌμ΄μΈνΈ μΈ‘ λͺ¨λΈκ³Ό μ΄λ₯Ό μ‘°μνλ μλ°μ€ν¬λ¦½νΈκ° μ€μ¬μ΄ λλ λλΆλΆμ SPA νλ μμν¬μ λμ‘°λ©λλ€.
HTML μ€μ¬ κ°λ°μ μΉ μν€ν μ²λ₯Ό μ€λͺ ν Roy Fieldingμ λ°μ¬ νμ λ Όλ¬Έμ κΈ°λ°μ λκ³ μμ΅λλ€. νΉν, HTMLμ νμ΄νΌν μ€νΈλ‘ μμ©ν¨μΌλ‘μ¨ RESTμ HATEOASμ μ΄μ μ μ»μ μ μμΌλ©°, μ΄ λ μ£Όμ μ λν΄ μ λ¬Έκ°κ° λ νμλ μμ΅λλ€.
(μ°Έκ³ λ‘, Royλ μΉ μν€ν μ²λ₯Ό μ€λͺ ν κ²μ΄λ―λ‘, μλμ μΉμ μλ μ°Έμ¬μλ€μ΄ νΉλ³ν λ Έλ ₯μ κΈ°μΈμ΄μ§ μμμμλ λΆκ΅¬νκ³ λμ²΄λ‘ REST-ful νμ΅λλ€)
HTML μ€μ¬ κ°λ°μ μ ννλ©΄ λ§μ μ΄μ μ μ»κ² λ©λλ€:
HTML μ€μ¬ λͺ¨λΈμ΄ μ 곡νλ λͺ¨λ μ΄μ μλ λΆκ΅¬νκ³ , λ§μ μΉ κ°λ°μλ€μ΄ μ μ΄ λͺ¨λΈμ λ²λ¦¬κ³ μ’ μ’ μ‘°λ‘±νλμ§ κΆκΈν μ μμ΅λλ€. κ·Έ μ΄μ λ₯Ό κ°λ¨ν μ€λͺ νμλ©΄:
HTML μ€μ¬ μ ν리μΌμ΄μ μ μλ°μ€ν¬λ¦½νΈ κΈ°λ° μ ν리μΌμ΄μ μ λΉν΄ μμ¬μ μΌλ‘ μ νλ μνΈμμ©μ μ 곡ν΄μμ΅λλ€.
μ΄κ²μ HTMLμ΄ μ νλ νμ΄νΌν μ€νΈμ΄κΈ° λλ¬Έμ λλ€. νΉν:
<a>
μ <form>
λ§μ
λλ€.click
κ³Ό submit
λΏμ
λλ€.λ¬Όλ‘ , μ΄λ¬ν μ μ½μ νμ΄νΌν μ€νΈλΌλ κ°λ μ체μ λ΄μ¬λ κ²μ΄ μλλ©°, htmxμ λͺ©νλ μ΄λ€ μ μ½μ μ κ±°νλ κ²μ λλ€.
μ΄λ¬ν μ μ½μ μ κ±°νκ³ HTMLμ μμ νκ³ κ°λ ₯ν νμ΄νΌν μ€νΈλ‘ μμ±ν¨μΌλ‘μ¨, HTML μ€μ¬ μ ν리μΌμ΄μ μ λ§μ μ ν리μΌμ΄μ λλ©μΈμμ SPAμ κ²½μν μ μμΌλ©°, λμμ μμ μΈκΈν κΈ°μ μ μ΄μ κ³Ό 볡μ‘μ± κ°μμ μ΄μ μ λ릴 μ μμ΅λλ€.
Tomμ κ·Έμ 첫 λ²μ§Έ κΈμ λ€μκ³Ό κ°μ΄ λ§λ¬΄λ¦¬ν©λλ€:
λͺ¨λ μ¬λμ΄ νλ Έλ€λ©΄ μ΄λ¨κΉμ? μ°λ¦¬λ μ΄μ μλ νλ Έμμ΅λλ€.
μΉ κ°λ°μ μ¬λ¬ λ² λ§λ€λ₯Έ κΈΈλ‘ λ€μ΄μ°μ΅λλ€: GWT, Java Server Faces, Angular 1, FlatUI λ±. μ΄λ¬ν κΈ°μ λ€μ λν νμ΄ν μ¬μ΄ν΄μ μ μ κΈ°μλ λμΈλ₯Ό κ±°μ€λ₯΄κΈ°κ° λ§€μ° μ΄λ €μ μ΅λλ€. νΉν κΈ°μ μΈκ³μμλ κΈ°μ μ μΌλ‘ λ€μ²μ§λ κ²μ΄ μμ‘΄μ¬λΏλ§ μλλΌ κ³ μ©μ λν μνμ΄ λ μ μκΈ° λλ¬Έμ λμ± μ΄λ ΅μ΅λλ€.
βReactλ₯Ό μ¬μ©ν΄μ ν΄κ³ λ μ¬λμ μλ€β
λΌλ λ§μ μ€λλ μ
βIBMμ μ νν΄μ ν΄κ³ λ μ¬λμ μλ€β
μλ κ°μ΅λλ€.
Reactμ κ°μ κΈ°μ μ΄ μ€λλ κ°λ°λκ³ μλ λ§μ (λλ λλΆλΆμ) μΉ μ ν리μΌμ΄μ μ μ ν©νμ§ μλ€κ³ λλλ€ νλλΌλ, μ΄κ²μ μ°λ¦¬κ° λ°μλ€μ¬μΌ ν νμ€μ λλ€.
κ·Έλ¬λ SPA μ κ·Ό λ°©μμ λν μ¬κ³ κ° μμλκ³ μμ΅λλ€. μ½κ°μ κΈ°μ μ μ©κΈ°μ λμΈμ λ§μλ μμ§κ° μλ€λ©΄, μ ν리μΌμ΄μ μ ν¨μ¬ λ 볡μ‘νκ² λ§λ€κ³ κ°λ° λ Έλ ₯μ μ ν리μΌμ΄μ μ΄ μ΄λ»κ² μλνλμ§κ° μλλΌ λ¬΄μμ νλμ§μ μ§μ€ν μ μμ κ²μ λλ€.
htmx κ°λ°μ μ€νν° ν€νΈ: