When Should You Use Hypermedia?

Carson Gross

κ·ΈλŸ¬λ‚˜, κ· μΌν•œ μΈν„°νŽ˜μ΄μŠ€λŠ” 정보가 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νŠΉμ • μš”κ΅¬μ— 맞좘 ν˜•νƒœκ°€ μ•„λ‹ˆλΌ ν‘œμ€€ν™”λœ ν˜•νƒœλ‘œ μ „μ†‘λ˜κΈ° λ•Œλ¬Έμ— νš¨μœ¨μ„±μ„ μ €ν•˜μ‹œν‚¨λ‹€. REST μΈν„°νŽ˜μ΄μŠ€λŠ” λŒ€κ·œλͺ¨ ν•˜μ΄νΌλ―Έλ””μ–΄ 데이터 전솑에 νš¨μœ¨μ μ΄λ„λ‘ μ„€κ³„λ˜μ–΄ μ›Ήμ˜ 일반적인 κ²½μš°μ— μ΅œμ ν™”λ˜μ—ˆμ§€λ§Œ, λ‹€λ₯Έ ν˜•νƒœμ˜ μ•„ν‚€ν…μ²˜ μƒν˜Έμž‘μš©μ—λŠ” 졜적이 μ•„λ‹Œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ΄ˆλž˜ν•œλ‹€.

-Roy Fielding, https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_5

μš°λ¦¬λŠ” ν•˜μ΄νΌλ―Έλ””μ–΄μ˜ 팬이며, ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ μ˜€λŠ˜λ‚  μ›Ή 개발 세계가 μ§λ©΄ν•œ λ§Žμ€ λ¬Έμ œλ“€μ„ ν•΄κ²°ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 적어도 μΌλΆ€λŠ” ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

htmx와 그것이 μ œκ³΅ν•˜λŠ” 좔가적인 μ‚¬μš©μž κ²½ν—˜(UX) κ°€λŠ₯성을 톡해, λ§Žμ€ ν˜„λŒ€μ μΈ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ HTMLκ³Ό ν•˜μ΄νΌλ―Έλ””μ–΄ νŒ¨λŸ¬λ‹€μž„μ„ μ‚¬μš©ν•˜μ—¬ ꡬ좕될 수 μžˆλ‹€κ³  λ―ΏμŠ΅λ‹ˆλ‹€.

κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³ , λͺ¨λ“  기술 μ„ νƒμ—λŠ” νŠΈλ ˆμ΄λ“œμ˜€ν”„κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€. 이 κΈ€μ—μ„œλŠ” ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ μ—¬λŸ¬λΆ„μ΄ ꡬ좕 쀑인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ κΈ°λŠ₯에 적합할지에 λŒ€ν•΄ 생각해볼 수 μžˆλŠ” λͺ‡ 가지 방법을 μ œμ‹œν•˜κ² μŠ΅λ‹ˆλ‹€.

#μ „ν™˜ν˜• μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό ν•˜μ΄νΌλ―Έλ””μ–΄

ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ 쒋은 선택인지에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ„ μ‚΄νŽ΄λ³΄κΈ° 전에, ν•˜μ΄νΌλ―Έλ””μ–΄λ₯Ό μ±„νƒν•˜λŠ” 것이 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ꡬ좕할 λ•Œ 이것 μ•„λ‹ˆλ©΄ 저것 μ‹μ˜ 결정이 μ•„λ‹ˆλΌλŠ” 점을 λΆ„λͺ…νžˆ ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. κ²°κ΅­, κ°€μž₯ λ‹¨μΌν•œ SPA쑰차도 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹œμž‘ν•˜λŠ” λΆ€νŠΈμŠ€νŠΈλž© λ©”μ»€λ‹ˆμ¦˜μœΌλ‘œ ν•˜μ΄νΌλ―Έλ””μ–΄λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

Have SPAs Ruined The Webμ—μ„œ Rich HarrisλŠ” ν•˜μ΄νΌλ―Έλ””μ–΄μ™€ λΉ„ν•˜μ΄νΌλ―Έλ””μ–΄(SPA) κ°œλ…μ„ λͺ¨λ‘ ν˜Όν•©ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ β€œμ „ν™˜ν˜•β€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λΌλŠ” μš©μ–΄λ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” 그의 토크에 λŒ€ν•œ μžμ„Έν•œ λ°˜μ‘μ„ μ—¬κΈ°μ—μ„œ μ œκ³΅ν–ˆμŠ΅λ‹ˆλ‹€, ν•˜μ§€λ§Œ μ‹€μš©μ μΈ β€œμ „ν™˜ν˜•β€ μ ‘κ·Ό 방식이 μ›Ή κ°œλ°œμ— κ°€μž₯ μ’‹λ‹€λŠ” 것에 그와 μ™„μ „νžˆ λ™μ˜ν•©λ‹ˆλ‹€: μ—¬λŸ¬λΆ„μ€ μž‘μ—… 쀑인 νŠΉμ • μž‘μ—…μ— μ ν•©ν•œ 도ꡬλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μš°λ¦¬κ°€ Rich Harris와 μ•„λ§ˆλ„ 의견이 λ‹€λ₯Ό 수 μžˆλŠ” 뢀뢄은 ν•˜μ΄νΌλ―Έλ””μ–΄λ‘œ 효과적으둜 κ΅¬ν˜„ν•  수 μžˆλŠ” κΈ°λŠ₯κ³Ό 더 μ •κ΅ν•œ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μ ‘κ·Ό 방식을 ν•„μš”λ‘œ ν•˜λŠ” κΈ°λŠ₯ μ‚¬μ΄μ˜ β€œκ²½κ³„μ„ β€œμž…λ‹ˆλ‹€. μš°λ¦¬λŠ” htmxλ₯Ό 톡해 ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ μ˜€λŠ˜λ‚  λ§Žμ€ μ›Ή κ°œλ°œμžκ°€ λ―ΏλŠ” 것보닀 훨씬 더 λ§Žμ€ 것을 ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 그리고 λ§Žμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 경우, 그것이 λͺ¨λ“  UX μš”κ΅¬ 사항을 ν•΄κ²°ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

#ν•˜μ΄νΌλ―Έλ””μ–΄: μ ν•©ν•œ κ²½μš°λŠ”β€¦

#β€¦λ§Œμ•½ μ—¬λŸ¬λΆ„μ˜ UIκ°€ 주둜 ν…μŠ€νŠΈμ™€ μ΄λ―Έμ§€λ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλ‹€λ©΄

The Mother Of All htmx Demosμ—μ„œ Contexte의 David Guillot은 Reactλ₯Ό htmx둜 λŒ€μ²΄ν•¨μœΌλ‘œμ¨ 전체 μ½”λ“œλ² μ΄μŠ€κ°€ 67% κ°μ†Œν•˜λŠ” λ“± μ—¬λŸ¬ λ†€λΌμš΄ κ²°κ³Όλ₯Ό μ–»μ—ˆλ‹€κ³  λ³΄μ—¬μ€λ‹ˆλ‹€.

μš°λ¦¬κ°€ λͺ¨λ“  νŒ€μ΄ Reactμ—μ„œ htmx둜 μ „ν™˜ν•˜λ©΄ μ΄λŸ¬ν•œ κ²°κ³Όλ₯Ό κ²½ν—˜ν•  것이라고 μ£Όμž₯ν•˜κ³  μ‹Άμ§€λ§Œ, 사싀 Contexte μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν•˜μ΄νΌλ―Έλ””μ–΄ μŠ€νƒ€μΌμ— 맀우 μ ν•©ν•©λ‹ˆλ‹€.

Contexteκ°€ ν•˜μ΄νΌλ―Έλ””μ–΄μ— μ™„λ²½ν•˜κ²Œ λ§žλŠ” μ΄μœ λŠ” λ―Έλ””μ–΄ 지ν–₯ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œμ„œ, ν…μŠ€νŠΈμ™€ μ΄λ―Έμ§€λ‘œ κ΅¬μ„±λœ 기사λ₯Ό ν‘œμ‹œν•˜μ—¬ 읽을 수 μžˆλ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ³΅μž‘ν•œ 필터링 λ©”μ»€λ‹ˆμ¦˜κ³Ό λ‹€λ₯Έ 편의 κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€λ§Œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심은 기사λ₯Ό ν‘œμ‹œν•˜κ³  λΆ„λ₯˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이것이 λ°”λ‘œ ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ μ„€κ³„λœ λͺ©μ μ΄λ©°, htmx와 ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ κ·Έλ“€μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 잘 λ§žλŠ” μ΄μœ μž…λ‹ˆλ‹€.

#β€¦λ§Œμ•½ μ—¬λŸ¬λΆ„μ˜ UIκ°€ CRUD에 κΈ°λ°˜ν•΄ μžˆλ‹€λ©΄

또 λ‹€λ₯Έ ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ 였랜 성곡 기둝을 가지고 μžˆλŠ” μ˜μ—­μ€ CRUD 기반의 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜, 특히 Ruby on Rails μŠ€νƒ€μΌμž…λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ£Όμš” λ©”μ»€λ‹ˆμ¦˜μ΄ 양식을 보여주고 ν•΄λ‹Ή 양식을 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜λŠ” 것이라면, ν•˜μ΄νΌλ―Έλ””μ–΄λŠ” 맀우 잘 μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

그리고 htmxλ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹¨μˆœν•œ λͺ©λ‘ 보기/상세 보기 μ ‘κ·Ό 방식에 κ΅­ν•œλ˜μ§€ μ•Šκ³  맀우 λΆ€λ“œλŸ¬μš΄ μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#β€¦λ§Œμ•½ μ—¬λŸ¬λΆ„μ˜ UIκ°€ β€œμ€‘μ²©λœβ€ ꡬ쑰λ₯Ό 가지고 있으며, μ—…λ°μ΄νŠΈκ°€ 주둜 잘 μ •μ˜λœ 블둝 λ‚΄μ—μ„œ λ°œμƒν•˜λŠ” 경우

ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ 쑰금 λΆˆμ•ˆμ •ν•΄μ§ˆ 수 μžˆλŠ” μ˜μ—­ 쀑 ν•˜λ‚˜λŠ” ν™”λ©΄μ˜ ꡬ쑰적 μ˜μ—­μ— 걸쳐 μžˆλŠ” UI 쒅속성이 μžˆμ„ λ•Œμž…λ‹ˆλ‹€. 이와 κ΄€λ ¨λœ 쒋은 μ˜ˆλŠ” GitHub의 β€œIssues” νƒ­μ—μ„œ λ³΄μ—¬μ§€λŠ” 이슈 μˆ˜μž…λ‹ˆλ‹€. μ˜€λž«λ™μ•ˆ GitHubμ—μ„œ 이슈λ₯Ό λ‹«μœΌλ©΄ νƒ­μ˜ 이슈 μˆ˜κ°€ μ œλŒ€λ‘œ μ—…λ°μ΄νŠΈλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 일반적으둜 GitHubλŠ” (μ™„μ „νžˆλŠ” μ•„λ‹ˆμ§€λ§Œ) ν•˜μ΄νΌλ―Έλ””μ–΄ μŠ€νƒ€μΌμ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

β€œμ•„ν•˜!” SPA μ• ν˜Έκ°€λŠ” μ™ΈμΉ˜λ©° λ§ν•©λ‹ˆλ‹€, β€œGitHub쑰차도 이것을 μ œλŒ€λ‘œ ν•˜μ§€ λͺ»ν•˜κ³  μžˆκ΅°μš”!”

GitHubκ°€ 이 문제λ₯Ό μˆ˜μ •ν–ˆμ§€λ§Œ, 이것은 ν•˜μ΄νΌλ―Έλ””μ–΄ μ ‘κ·Ό λ°©μ‹μ˜ 문제λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€: UI의 λΆ„λ¦¬λœ 뢀뢄을 μ–΄λ–»κ²Œ κΉ”λ”ν•˜κ²Œ μ—…λ°μ΄νŠΈν•  수 μžˆμ„κΉŒμš”? htmxλŠ” 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λͺ‡ 가지 κΈ°μˆ μ„ μ œκ³΅ν•˜λ©°, ContexteλŠ” κ·Έλ“€μ˜ λ°œν‘œμ—μ„œ 이벀트 μ ‘κ·Ό 방식을 μ‚¬μš©ν•˜μ—¬ 이 상황을 맀우 κΉ”λ”ν•˜κ²Œ μ²˜λ¦¬ν•˜λŠ” 방법을 μ„€λͺ…ν•©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ, ν•˜μ΄νΌλ―Έλ””μ–΄ μ ‘κ·Ό 방식이 λ¬Έμ œκ°€ 될 수 μžˆλŠ” μ˜μ—­μ΄λΌλŠ” 것을 μΈμ •ν•©μ‹œλ‹€. 이 문제λ₯Ό ν”Όν•˜κΈ° μœ„ν•œ 잠재적 μ „λž΅μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν™”λ©΄μ—μ„œ νŠΉμ • λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 쒅속 μš”μ†Œλ₯Ό λ™μΌν•œ μ˜μ—­ λ˜λŠ” ꡬ역 내에 λ°°μΉ˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ—°λ½μ²˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ—°λ½μ²˜λ₯Ό ν‘œμ‹œν•˜κ³  νŽΈμ§‘ν•˜λŠ” μ„ΈλΆ€ 화면이 μžˆλ‹€κ³  κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€:

이 UIλŠ” λ‹€μŒκ³Ό 같은 λ°©μ‹μœΌλ‘œ λ ˆμ΄μ•„μ›ƒλ  수 μžˆμŠ΅λ‹ˆλ‹€:

쀑첩 μ˜ˆμ‹œ

이 μ‹œλ‚˜λ¦¬μ˜€μ—μ„œλŠ” 각 ν•˜μœ„ μ„Ήμ…˜μ— 자체 ν•˜μ΄νΌλ―Έλ””μ–΄ μ—”λ“œν¬μΈνŠΈλ₯Ό ν• λ‹Ήν•  수 μžˆμŠ΅λ‹ˆλ‹€:

μ—¬κΈ°μ„œ μ€‘μš”ν•œ 점은 이메일과 μ „ν™”λ²ˆν˜Έμ˜ μˆ˜κ°€ 각각의 μ»¬λ ‰μ…˜κ³Ό ν•¨κ»˜ 화면에 κ³΅μ‘΄ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ΄λŠ” ν•΄λ‹Ή μ»¬λ ‰μ…˜μ΄ μˆ˜μ •λ  λ•Œ κ·Έ νŠΉμ • μ˜μ—­λ§Œ μ—…λ°μ΄νŠΈν•˜λ„λ‘ λŒ€μƒ 지정할 수 있게 ν•΄μ€λ‹ˆλ‹€. λͺ¨λ“  데이터 쒅속성은 단일 μ˜μ—­ 내에 λ°°μΉ˜λ˜μ–΄ λ‹¨μΌν•˜κ³  λͺ…ν™•ν•œ νƒ€κ²Ÿμ„ 톡해 μ—…λ°μ΄νŠΈν•  수 있으며, ꡐ체될 λ•Œ μ„œλ‘œ κ°„μ„­ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

각 μ˜μ—­μ€ ν™”λ©΄μ˜ λ‹€λ₯Έ μ˜μ—­κ³Ό 독립적인 μ„œλ²„ μΈ‘ ꡬ성 μš”μ†Œλ‘œ μž‘λ™ν•˜λ©°, λͺ¨λ‘ 넓은 μ—°λ½μ²˜ μ„ΈλΆ€ 정보 UI 내에 μ€‘μ²©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

#μ‚¬μ΄λ“œ λ…ΈνŠΈ: UI 기반 ν•˜μ΄νΌλ―Έλ””μ–΄ API

이 경우 우리의 ν•˜μ΄νΌλ―Έλ””μ–΄ API(즉, μ—”λ“œν¬μΈνŠΈ)λŠ” UI에 μ˜ν•΄ μ£Όλ„λ©λ‹ˆλ‹€: νŠΉμ • UI λ ˆμ΄μ•„μ›ƒμ„ λ‹¬μ„±ν•˜κ³ μž ν•˜λ©°, μš°λ¦¬λŠ” APIλ₯Ό 그에 맞게 μ‘°μ •ν•©λ‹ˆλ‹€. UIκ°€ λ³€κ²½λ˜λ©΄, μš°λ¦¬λŠ” μƒˆλ‘œμš΄ μš”κ΅¬ 사항을 μΆ©μ‘±μ‹œν‚€κΈ° μœ„ν•΄ APIλ₯Ό μ™„μ „νžˆ λ³€κ²½ν•˜λŠ” 데 μ•„λ¬΄λŸ° κ±°λ¦¬λ‚Œμ΄ μ—†μŠ΅λ‹ˆλ‹€. 이것은 ν•˜μ΄νΌλ―Έλ””μ–΄ 개발의 λ…νŠΉν•œ μΈ‘λ©΄ 쀑 ν•˜λ‚˜μ΄λ©°, μ—¬κΈ°μ„œ 더 μžμ„Ένžˆ λ…Όμ˜ν•©λ‹ˆλ‹€.

λ¬Όλ‘ , 쒅속 μš”μ†Œλ₯Ό 이 λ°©μ‹μœΌλ‘œ κ·Έλ£Ήν™”ν•  수 μ—†λŠ” UI μš”κ΅¬ 사항이 μžˆμ„ 수 있으며, μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 기술이 λ§Œμ‘±μŠ€λŸ½μ§€ μ•Šλ‹€λ©΄, λŒ€μ•ˆ μ ‘κ·Ό 방식을 κ³ λ €ν•  λ•Œκ°€ 될 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

#β€¦μ—¬λŸ¬λΆ„μ΄ β€œλ”₯ λ§ν¬β€œμ™€ 쒋은 초기 λ Œλ”λ§ μ„±λŠ₯이 ν•„μš”ν•œ 경우

ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ λ‹€λ₯Έ μ˜΅μ…˜λ³΄λ‹€ λ›°μ–΄λ‚œ 또 λ‹€λ₯Έ μ˜μ—­μ€ β€œλ”₯ λ§ν¬β€œκ°€ ν•„μš”ν•  λ•Œ, 즉 λžœλ”© νŽ˜μ΄μ§€λ₯Ό λ„˜μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄λΆ€λ‘œμ˜ 링크가 ν•„μš”ν•  λ•Œμ΄κ±°λ‚˜, ν›Œλ₯­ν•œ 초기 λ Œλ”λ§ μ„±λŠ₯이 ν•„μš”ν•  λ•Œμž…λ‹ˆλ‹€.

ν•˜μ΄νΌλ―Έλ””μ–΄λŠ” μ›Ήμ˜ μžμ—°μŠ€λŸ¬μš΄ 언어이며, λΈŒλΌμš°μ €λŠ” URL이 μ£Όμ–΄μ‘Œμ„ λ•Œ HTML을 λ Œλ”λ§ν•˜λŠ” 데 맀우 λŠ₯μˆ™ν•˜κΈ° λ•Œλ¬Έμ—, μ΄λŸ¬ν•œ 전톡적인 μ›Ή κΈ°λŠ₯에 μžˆμ–΄ 이 μ ‘κ·Ό 방식은 이기기 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

#ν•˜μ΄νΌλ―Έλ””μ–΄: μ ν•©ν•˜μ§€ μ•Šμ€ κ²½μš°β€¦

#β€¦μ—¬λŸ¬λΆ„μ˜ UIκ°€ λ§Žμ€ 동적 μƒν˜Έ μ˜μ‘΄μ„±μ„ 가지고 μžˆλŠ” 경우

μœ„μ—μ„œ μ–ΈκΈ‰ν•œ β€œμ€‘μ²©λœβ€ UI μ„Ήμ…˜μ—μ„œ λ…Όμ˜ν–ˆλ“―μ΄, ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ 어렀움을 κ²ͺ을 수 μžˆλŠ” μ˜μ—­ 쀑 ν•˜λ‚˜λŠ” UI μ „λ°˜μ— 걸쳐 λ§Žμ€ UI 쒅속성이 있고 β€œμ „μ²΄ UIλ₯Ό μ—…λ°μ΄νŠΈν•  수 μ—†λŠ”β€ κ²½μš°μž…λ‹ˆλ‹€. 이것은 이 κΈ€μ˜ 맨 μœ„μ—μ„œ Roy Fielding이 μ–ΈκΈ‰ν•œ λ‚΄μš©κ³Ό κ°™μŠ΅λ‹ˆλ‹€: 웹은 λŒ€κ·œλͺ¨ ν•˜μ΄νΌλ―Έλ””μ–΄ 데이터 전솑을 μœ„ν•΄ μ„€κ³„λ˜μ—ˆμœΌλ©°, λ§Žμ€ μž‘μ€ 데이터 κ΅ν™˜μ„ μœ„ν•΄ μ„€κ³„λœ 것이 μ•„λ‹™λ‹ˆλ‹€.

특히 ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ μ²˜λ¦¬ν•˜κΈ° μ–΄λ €μš΄ 것은 μ΄λŸ¬ν•œ 쒅속성이 동적일 λ•Œ, 즉 μ„œλ²„ μΈ‘ λ Œλ”λ§ μ‹œκ°„μ— κ²°μ •ν•  수 μ—†λŠ” 정보에 μ˜μ‘΄ν•˜λŠ” κ²½μš°μž…λ‹ˆλ‹€. κ·Έ 쒋은 μ˜ˆλŠ” μŠ€ν”„λ ˆλ“œμ‹œνŠΈμ™€ 같은 κ²ƒμž…λ‹ˆλ‹€: μ‚¬μš©μžκ°€ 셀에 μž„μ˜μ˜ ν•¨μˆ˜λ₯Ό μž…λ ₯ν•˜κ³  ν™”λ©΄μ—μ„œ μ—¬λŸ¬ 쒅속성을 λ™μ μœΌλ‘œ 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

(κ·ΈλŸ¬λ‚˜, λ§Žμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ β€œνŽΈμ§‘ κ°€λŠ₯ν•œ 행” νŒ¨ν„΄μ€ 더 일반적인 μŠ€ν”„λ ˆλ“œμ‹œνŠΈμ™€ 같은 λ™μž‘μ— λŒ€ν•œ 수용 κ°€λŠ₯ν•œ λŒ€μ•ˆμ΄λ©°, 이 νŒ¨ν„΄μ€ νŽΈμ§‘μ„ μ œν•œλœ μ˜μ—­ λ‚΄μ—μ„œ κ²©λ¦¬ν•˜μ—¬ ν•˜μ΄νΌλ―Έλ””μ–΄μ™€ 잘 μ—°λ™λ©λ‹ˆλ‹€.)

#β€¦μ˜€ν”„λΌμΈ κΈ°λŠ₯이 ν•„μš”ν•œ 경우

ν•˜μ΄νΌλ―Έλ””μ–΄ λΆ„μ‚° μ•„ν‚€ν…μ²˜λŠ” λ¦¬μ†ŒμŠ€μ˜ ν‘œν˜„μ„ λ Œλ”λ§ν•˜κΈ° μœ„ν•΄ μ„œλ²„ 츑에 크게 μ˜μ‘΄ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μ„œλ²„κ°€ λ‹€μš΄λ˜κ±°λ‚˜ μ ‘κ·Όν•  수 μ—†λŠ” 경우, 이 μ•„ν‚€ν…μ²˜λŠ” λΆ„λͺ…νžˆ λ¬Έμ œκ°€ λ°œμƒν•  κ²ƒμž…λ‹ˆλ‹€. μ˜€ν”„λΌμΈ μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ„œλΉ„μŠ€ μ›Œμ»€λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 κ°€λŠ₯ν•˜μ§€λ§Œ(λ¬Όλ‘  이 방법은 λ³΅μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€), λ§Žμ€ λ‘κΊΌμš΄ ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 그렇듯이 ν•˜μ΄νΌλ―Έλ””μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ˜€ν”„λΌμΈ μƒνƒœμž„μ„ κ°μ§€ν•˜κ³  μ˜€ν”„λΌμΈ λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•˜λŠ” 것은 μ‰½μŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ˜€ν”„λΌμΈ ν™˜κ²½μ—μ„œ μ™„μ „ν•œ κΈ°λŠ₯을 μ œκ³΅ν•΄μ•Ό ν•œλ‹€λ©΄, ν•˜μ΄νΌλ―Έλ””μ–΄ μ ‘κ·Ό 방식은 μ ν•©ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

#…UI μƒνƒœκ°€ 맀우 자주 μ—…λ°μ΄νŠΈλ˜λŠ” 경우

ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ μ ν•©ν•˜μ§€ μ•Šμ€ 또 λ‹€λ₯Έ 상황은 UI μƒνƒœκ°€ 자주 μ—…λ°μ΄νŠΈλ˜λŠ” κ²½μš°μž…λ‹ˆλ‹€. 쒋은 μ˜ˆλŠ” 마우슀 μ›€μ§μž„μ„ μΊ‘μ²˜ν•΄μ•Ό ν•˜λŠ” 온라인 κ²Œμž„μž…λ‹ˆλ‹€. 마우슀 μ›€μ§μž„κ³Ό UI μ—…λ°μ΄νŠΈ 사이에 ν•˜μ΄νΌλ―Έλ””μ–΄ λ„€νŠΈμ›Œν¬ μš”μ²­μ„ λ„£λŠ” 것은 잘 μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©°, κ²Œμž„μ— λŒ€ν•΄μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μƒνƒœ 관리λ₯Ό μž‘μ„±ν•˜κ³  μ„œλ²„μ™€λŠ” λ‹€λ₯Έ κΈ°μˆ μ„ μ‚¬μš©ν•˜μ—¬ λ™κΈ°ν™”ν•˜λŠ” 것이 훨씬 더 λ‚˜μ„ κ²ƒμž…λ‹ˆλ‹€.

λ¬Όλ‘ , κ²Œμž„μ—λŠ” μ„€μ • νŽ˜μ΄μ§€κ°€ μžˆμ„ 수 있으며, 이 μ„€μ • νŽ˜μ΄μ§€λŠ” κ²Œμž„μ˜ 핡심에 μ‚¬μš©ν•˜λŠ” μ†”λ£¨μ…˜λ³΄λ‹€ ν•˜μ΄νΌλ―Έλ””μ–΄λ‘œ κ΅¬ν˜„ν•˜λŠ” 것이 더 λ‚˜μ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ ‘κ·Ό 방식을 ν˜Όν•©ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” κ²ƒμ—λŠ” μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€. β€œμ „ν™˜β€ μŠ€νƒ€μΌμ—μ„œλŠ” 특히 κ·Έλ ‡μŠ΅λ‹ˆλ‹€!

κ·ΈλŸ¬λ‚˜ 일반적으둜 SPA μ»΄ν¬λ„ŒνŠΈλ₯Ό 더 큰 ν•˜μ΄νΌλ―Έλ””μ–΄ μ•„ν‚€ν…μ²˜ λ‚΄μ—μ„œ ν¬ν•¨ν•˜λŠ” 것이 κ·Έ λ°˜λŒ€λ³΄λ‹€ 더 μ‰½λ‹€λŠ” 점을 μ£Όλͺ©ν•΄μ•Ό ν•©λ‹ˆλ‹€. 격리된 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μ»΄ν¬λ„ŒνŠΈλŠ” 이벀트λ₯Ό 톡해 더 넓은 ν•˜μ΄νΌλ―Έλ””μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό 톡신할 수 있으며, λ“œλž˜κ·Έ μ•€ λ“œλ‘­ Sortable.js + htmx μ˜ˆμ œμ—μ„œ κ·Έ 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.

#β€¦νŒ€μ΄ 이에 λ™μ˜ν•˜μ§€ μ•ŠλŠ” 경우

ν•˜μ΄νΌλ―Έλ””μ–΄λ₯Ό μ„ νƒν•˜μ§€ μ•ŠλŠ” λ§ˆμ§€λ§‰ μ΄μœ λŠ” 기술적인 κ²ƒμ΄λΌκΈ°λ³΄λ‹€λŠ” μ‚¬νšŒμ μΈ μ΄μœ μž…λ‹ˆλ‹€. ν˜„μž¬ μ›Ή κ°œλ°œμ—μ„œλŠ” ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ λ‹¨μˆœνžˆ 인기λ₯Ό λŒμ§€ λͺ»ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ§Žμ€ νšŒμ‚¬λ“€μ΄ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μΆ•ν•˜λŠ” ν‘œμ€€ 라이브러리둜 Reactλ₯Ό μ±„νƒν–ˆμŠ΅λ‹ˆλ‹€. λ§Žμ€ κ°œλ°œμžμ™€ μ»¨μ„€ν„΄νŠΈλ“€μ΄ 이에 따라 κ²½λ ₯을 μŒ“μ•˜κ³ , λ§Žμ€ μ±„μš© λ‹΄λ‹Ήμžλ“€μ€ ν•˜μ΄νΌλ―Έλ””μ–΄λ‚˜ htmx에 λŒ€ν•΄ λ“€μ–΄λ³Έ 적도 μ—†μœΌλ©°, κ΄€μ„±μ μœΌλ‘œ λͺ¨λ“  μ±„μš© 곡고에 Reactλ₯Ό λ„£μŠ΅λ‹ˆλ‹€. ReactλŠ” μ±„μš©μ΄ 훨씬 쉽기 λ•Œλ¬Έμž…λ‹ˆλ‹€!

이것은 쒌절슀러울 수 μžˆμ§€λ§Œ, ν˜„μ‹€μ μΈ ν˜„μƒμ΄λ©° κ²Έμ†ν•˜κ²Œ λ°›μ•„λ“€μ—¬μ•Ό ν•©λ‹ˆλ‹€. Contexteκ°€ htmx둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΉ λ₯΄κ³  효과적으둜 λ‹€μ‹œ μž‘μ„±ν•  수 μžˆμ—ˆμ§€λ§Œ, λͺ¨λ“  νŒ€μ΄ κ·Έλ ‡κ²Œ μž‘κ³  λ―Όμ²©ν•˜λ©° 열정적인 것은 μ•„λ‹ˆλ©°, λͺ¨λ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 이 μ ‘κ·Ό 방식에 λŒ€ν•΄ κ·Έλ ‡κ²Œ μ‰½κ²Œ νŒλ‹¨ν•  수 μžˆλŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. λ¨Όμ € λ‚΄λΆ€ 도ꡬλ₯Ό μœ„ν•΄ ν•˜μ΄νΌλ―Έλ””μ–΄λ₯Ό κ°€μž₯μžλ¦¬μ—μ„œ λ„μž…ν•˜μ—¬ κ·Έ κ°€μΉ˜λ₯Ό μž…μ¦ν•œ ν›„, 더 넓은 κ΄€μ μ—μ„œ κ²€ν† ν•˜λŠ” 것이 더 λ‚˜μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

#κ²°λ‘ 

β€œμ–΄λ–€ μ’…λ₯˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— htmxκ°€ μ ν•©ν•˜μ§€ μ•Šμ„κΉŒμš”?β€œλΌλŠ” μ§ˆλ¬Έμ„ 자주 λ°›μŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” β€œμ „ν™˜β€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ…μ„ μ‚¬μš©ν•˜μ—¬ κΈ°λŠ₯λ³„λ‘œ μ ‘κ·Όν•˜λŠ” 것을 μ„ ν˜Έν•˜μ§€λ§Œ, ν•˜μ΄νΌλ―Έλ””μ–΄ μ ‘κ·Ό 방식이 λ‹€λ₯Έ μ ‘κ·Ό 방식보닀 더 λ‚˜μ„ 수 μžˆλŠ”μ§€ 생각할 λ•Œ 도움이 λ˜λŠ” λͺ‡ 가지 κ΄‘λ²”μœ„ν•˜κ³  인기 μžˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 염두에 λ‘λŠ” 것이 μœ μš©ν•©λ‹ˆλ‹€.

ν•˜μ΄νΌλ―Έλ””μ–΄λ‘œ κΉ”λ”ν•˜κ²Œ κ΅¬ν˜„λ  수 μžˆλ‹€κ³  μƒκ°λ˜λŠ” 두 가지 유λͺ…ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ˜ˆλ‘œλŠ” Twitter와 GMail이 μžˆμŠ΅λ‹ˆλ‹€. 두 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λͺ¨λ‘ ν…μŠ€νŠΈμ™€ 이미지 쀑심이며, λŒ€κ·œλͺ¨μ˜ μ—…λ°μ΄νŠΈκ°€ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— ν•˜μ΄νΌλ―Έλ””μ–΄ μ ‘κ·Ό 방식에 맀우 적합할 κ²ƒμž…λ‹ˆλ‹€.

ν•˜μ΄νΌλ―Έλ””μ–΄ μ ‘κ·Ό 방식에 μ ν•©ν•˜μ§€ μ•Šμ€ 두 가지 유λͺ…ν•œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ˜ˆλ‘œλŠ” Google Sheets와 Google Mapsκ°€ μžˆμŠ΅λ‹ˆλ‹€. Google SheetsλŠ” λ§Žμ€ μƒνƒœλ₯Ό 포함할 수 있으며, μ—¬λŸ¬ μ…€ κ°„μ˜ 쒅속성이 λ§Žμ•„ λͺ¨λ“  μ…€ μ—…λ°μ΄νŠΈμ— μ„œλ²„ μš”μ²­μ„ λ°œν–‰ν•˜λŠ” 것은 μ‹€ν–‰ κ°€λŠ₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 반면, Google MapsλŠ” 마우슀 μ›€μ§μž„μ— λΉ λ₯΄κ²Œ λ°˜μ‘ν•΄μ•Ό ν•˜λ©°, λͺ¨λ“  μ›€μ§μž„λ§ˆλ‹€ μ„œλ²„ 왕볡을 ν—ˆμš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이 두 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν•˜μ΄νΌλ―Έλ””μ–΄κ°€ μ œκ³΅ν•  수 μžˆλŠ” 것보닀 훨씬 더 μ •κ΅ν•œ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ 섀정이 ν•„μš”ν•©λ‹ˆλ‹€.

λ¬Όλ‘ , λŒ€λΆ€λΆ„μ˜ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ΄λŸ¬ν•œ μ˜ˆμ œλ“€λ³΄λ‹€ 규λͺ¨μ™€ λ³΅μž‘μ„±μ΄ 훨씬 μ μŠ΅λ‹ˆλ‹€. 심지어 Google Sheetsλ‚˜ Google Maps쑰차도 ν•˜μ΄νΌλ―Έλ””μ–΄ μ ‘κ·Ό 방식이 더 λ‚˜μ„ 수 μžˆλŠ” 뢀뢄이 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€: 더 κ°„λ‹¨ν•˜κ³ , 더 λΉ λ₯΄κ³ , 더 κΉ¨λ—ν•˜κ²Œ κ΅¬ν˜„λ  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ΄νΌλ―Έλ””μ–΄λ₯Ό 도ꡬ μƒμžμ— μΆ”κ°€ν•˜λŠ” 것은 μ›Ή κ°œλ°œμžλ‘œμ„œ μ—”μ§€λ‹ˆμ–΄λ§ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” λŠ₯λ ₯을 ν–₯μƒμ‹œν‚¬ κ²ƒμž…λ‹ˆλ‹€. 그것이 μ—¬λŸ¬λΆ„μ˜ κ°€μž₯ μ„ ν˜Έν•˜λŠ” 도ꡬ가 λ˜μ§€ μ•Šλ”λΌλ„ λ§μž…λ‹ˆλ‹€. 이 μ ‘κ·Ό λ°©μ‹μ—λŠ” 쒋은 이둠적 κ·Όκ±°κ°€ 있으며, λ§Žμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‹€μ§ˆμ μΈ 이점이 있으며, λ‹€λ₯Έ μ ‘κ·Ό 방식과 달리 μ›Ήμ˜ 흐름에 λ§žλŠ” λ°©μ‹μž…λ‹ˆλ‹€.

</>