(번역) HTMX 살펴보기 및 React와 비교하기

sehyun hwang·2023년 11월 13일
29

FE 번역글

목록 보기
25/30
post-thumbnail

원문 : https://www.builder.io/blog/htmx-vs-react

한동안 동적 웹 앱 세계에서 리액트와 같은 거물급 프레임워크가 큰 비중을 차지했습니다. 이들은 강력하지만 때때로 과하다는 느껴질 수 있습니다. 특히 프런트엔드가 익숙하지 않은 백엔드 개발자라면 더욱 그렇습니다.

이제 HTMX라는 새로운 관점이 등장했습니다. 이는 전통적인 서버 사이드 렌더링과 오늘날의 클라이언트 사이드 상호 작용 사이의 간극을 원활히 메워줍니다. 엄청난 양의 자바스크립트를 다룰 필요 없이 HTMX가 해줄 것입니다.

HTMX에 대해 궁금하신가요? 이 글에서는 HTMX의 기능과 장점을 파헤치고, HTMX가 유명한 프레임워크 사이에서 어떻게 몸집을 키웠는지 알아보겠습니다. 시작해 보죠!

웹 개발의 거친 여정

옛날 옛적에, 웹 페이지는 그저 정적인 디스플레이에 불과했습니다. 변경하고 싶은 부분이 생기면 어떻게 하냐고요? HTML을 직접 업데이트해야 했습니다. 그러나 웹의 욕구는 점점 커져서 더 많은 동작과 상호작용을 갈망하게 되었습니다. 이때, 자바스크립트가 등장하여 페이지가 생동감 넘치는 무대로 바뀌었습니다.

2000년대에는 AJAX가 판도를 크게 바꾸었습니다. 더 이상 전체 페이지를 새로 로드할 필요가 없어졌습니다. 매끄럽고 끊김 없는 동작이 중요해졌습니다. 그리고 JQuery는요? AJAX를 더 멋지고 개발자 친화적으로 만들었습니다.

다음 장은 프레임워크입니다. 리액트, 그리고 앵귤러가 등장했고, 구조뿐만 아니라 백엔드 개발자들에게 몇 가지 수수께끼도 함께 가져왔습니다.

요즘은 어떨까요? HTMX와 같은 도구가 새로운 시대를 암시합니다. 그들은 "왜 두 시대의 장점을 합치지 않나요?"라고 질문합니다. HTMX는 역동적이고 매끄럽지만, 무겁지 않습니다. DjangoCon 2022의 화젯거리를 확인해 보세요.

HTMX에 관한 설명

  1. 핵심적인 특징: HTMX가 특별히 신경쓰는건 무엇일까요? 바로 단순함을 유지하는 것입니다. 익숙한 HTML을 버리지 않고도 웹 마법에 깊이 빠져들 수 있습니다. HTMX는 자바스크립트 정글에 깊이 들어가지 않고도 HTML에 살을 붙이고, 역동성을 발휘하는 속성을 더합니다.
  2. 마법: 별도의 스크립트 주문이 없습니다. HTMX는 일반 HTML 태그에 사용자 정의 속성을 추가합니다. 사용자가 버튼을 탭 하면요? 짠, 이 속성들은 AJAX와 유사한 요청을 보냅니다. 서버가 응답하면 HTMX는 쉽고 부드럽게 콘텐츠를 새로 로드합니다. 로직은 서버 사이드에서 처리하여 클라이언트 사이드 스크립트에 약간의 여유를 제공합니다.
  3. 다른 것과 잘 호환됨: 그리고 HTMX는 여러분이 즐겨 사용하는 기술과 잘 호환됩니다. 장고 혹은 플라스크를 주로 사용하시나요? HTMX는 바로 적용되어 전체적인 리모델링 없이도 사용할 수 있습니다.
  4. 간결하고 깔끔함: 거대한 프런트엔드 프레임워크가 지배하는 세계에서, HTMX가 멋진 대안으로 떠오르고 있습니다. 리액트와 같은 거물급 프레임워크의 일자리를 뺏으러 온 게 아닙니다. HTMX는 이들의 무거운 기능이 부담스러울 때 간단한 선택지가 될 수 있습니다.

영상 링크 : https://youtu.be/r-GSGH2RxJs

HTMX: 상호작용에 대한 재고

HTMX의 등장으로, 웹 상호작용의 역동성이 변화했습니다. HTMX는 전형적인 자바스크립트 설정에 대한 부담감 없이, 여러 기능을 제공합니다.

활발한 동적 콘텐츠

사용자가 콘텐츠를 탐색할 때, HTMX는 전체 페이지를 새로 로드하지 않고 매끄러운 피드를 보장합니다.

<div
  hx-get="/more-content"
  hx-trigger="revealed"
  hx-indicator="#loadingIndicator"
>
  Starting Content
</div>
<div id="loadingIndicator">Fetching...</div>

화면 뒤에서의 폼 제출

폼은 백그라운드에서 동작하여 중요한 페이지의 특정 부분만 업데이트합니다.

<form hx-post="/submit-form" hx-swap="outerHTML" hx-target="#formResponse">
    <input type="text" name="data">
    <button type="submit">Send</button>
</form>
<div id="formResponse">Here's the response.</div>

자동 업데이트

실시간 점수 업데이트와 같은 기능은 어떨까요? HTMX에는 자동 업데이트 기능이 있기 때문에 수동으로 새로고침할 필요가 없습니다.

<div hx-get="/latest-scores" hx-trigger="every 10s" hx-target="#scoreDisplay">
    <span id="scoreDisplay">Starting Score</span>
</div>

UI 요소 관리

팝업 모달을 포함한 UI 컴포넌트를 보다 쉽게 제어할 수 있습니다.

<button hx-get="/modal-content" hx-swap="afterend" hx-target="#modalContainer">
    Show Modal
</button>
<div id="modalContainer"></div>

서버 로직 동기화

카트에 아이템 추가와 같은 기능은 서버 사이드 동작과 원활히 동기화할 수 있습니다.

<button hx-post="/add-to-cart" hx-swap="outerHTML" hx-target="#cartStatus">
    Add Item
</button>
<div id="cartStatus">Added to cart.</div>

위 예제로부터 확실해졌습니다. HTMX는 간소화된 접근 방식을 제공합니다. 서버 사이드 메커니즘과 완벽히 통합되고 빽빽한 클라이언트 사이드 스크립트를 최소화합니다.

기술적인 부분: HTMX 작동 방식

HTMX의 잠재력을 최대한으로 활용하려는 개발자에게 HTMX의 동작 방식을 이해하는 것은 중요합니다. HTMX의 구문은 표준 HTML을 연상시키지만, 기저의 과정을 통해 차별점을 갖습니다.

HTML을 확장

HTMX의 핵심은 HTML의 기능을 확장하는 것입니다. HTMX는 표준 HTML 태그에 추가했을 때, 별도의 스크립트 없이 동적인 동작을 가능하게 하는 새로운 속성을 도입했습니다.

<div hx-get="/update-content" hx-trigger="click">
  Click to Update Content
</div>

서버 통신

HTMX은 서버와 원활하게 통신합니다. hx-trigger로 명시된 이벤트가 발생했을 때, HTMX는 AJAX 요청을 생성합니다. 서버는 이 요청을 처리하여 다시 응답을 보냅니다.

<button hx-post="/submit-data" hx-trigger="click">
  Submit Data
</button>

콘텐츠 전환

HTMX의 뛰어난 기능 중 하나는 서버 응답에 따라서 페이지의 콘텐츠를 전환할 수 있다는 점입니다. hx-swap 속성은 콘텐츠 전환이 발생하는 방식을 지정합니다.

<div hx-get="/fetch-data" hx-trigger="load" hx-swap="innerHTML">
  Data will load here on page load.
</div>

이벤트 핸들링

HTMX은 강력한 이벤트 시스템을 제공합니다. HTMX가 콘텐츠를 업데이트한 이후에 사용자 정의 로직을 실행하기 위해서 htmx:afterSwap과 같은 특정 이벤트를 수신할 수 있습니다.

document.body.addEventListener('htmx:afterSwap', function(event) {
  console.log('Content has been swapped!');
});

CSS와 통합

HTMX는 CSS와 원활히 작동합니다. 예를 들어, CSS 애니메이션을 활용한 로딩 스피너를 보여주기 위해 hx-indicator를 사용할 수 있습니다.

<div hx-get="/load-content" hx-trigger="click" hx-indicator="#spinner">
  Click to Load
</div>
<div id="spinner" class="hidden">
  Loading...
</div>

에러 핸들링

AJAX 요청 실패와 같은 에러가 발생했을 때, HTMX는 이를 원활하게 처리하는 동작을 제공하여 부드러운 사용자 경험을 보장합니다.

<div hx-get="/fetch-data"
     hx-trigger="load"
     hx-swap="innerHTML"
     hx-swap-oob="true"
>
    Data will load here.
</div>

익숙한 HTML 구문과 강력한 동적 기능을 결합하여, HTMX는 인터랙티브 웹 애플리케이션을 제작하는 과정을 간소화하였습니다. HTMX는 프런트엔드와 백엔드 개발 사이의 격차를 해소하여 기존 프레임워크의 복잡성 없이 풍부한 사용자 경험을 제공할 수 있습니다.

HTMX 채택의 장점

1. 간단함과 학습 곡선

가파른 학습 곡선을 필요로 하는 포괄적인 프런트엔드 프레임워크와 달리, HTMX는 보다 직관적인 접근 방식을 제공합니다. HTML을 확장하여 개발자에게 친숙한 환경을 제공하므로, 쉽게 시작할 수 있습니다.

<div hx-get="/load-content">Simple HTMX Example</div>

2. 성능 향상

HTMX의 가벼운 특성은 더 빠른 페이지 로드를 의미합니다. 사용자들은 거대한 자바스크립트 라이브러리나 프레임워크를 로드하는 오버헤드 대신, 더 빠른 상호작용과 지연 시간 단축을 경험할 수 있습니다.

3. 클라이언트 사이드 복잡성 감소

HTMX는 동적 동작의 대부분을 서버 사이드 로직으로 전환하여, 클라이언트 사이드 로직의 복잡성을 줄였습니다. 그 결과, 코드가 더 깔끔하고 유지보수하기 용이해졌습니다.

4. 원활한 통합

HTMX는 기존의 기술과 쉽게 통합할 수 있도록 설계되었습니다. 서버 사이드 프레임워크를 사용하든 데이터베이스를 사용하든, HTMX는 대대적인 개편 없이도 바로 적용할 수 있습니다.

5. 사용자 경험 향상

HTMX는 전체 페이지 새로고침 없이 콘텐츠를 동적으로 업데이트할 수 있는 기능을 통해, 더 부드러운 사용자 경험을 보장합니다. 전환이 매끄럽게 이뤄져서 사용자는 어색한 페이지 새로고침에 의해 방해를 받지 않습니다.

6. 비용 효율적인 개발

HTMX의 단순함과 광범위한 프런트엔드 개발에 의존도가 낮아지는 효과를 고려했을 때, HTMX를 사용하는 프로젝트는 종종 더 빠르게 완성할 수 있어 개발 시간과 자원에 필요한 비용을 절약할 수 있습니다.

7. 백엔드 개발자를 위한 역량 강화

이제 백엔드 개발자는 사용자 인터페이스 제작에 더 적극적인 역할을 수행할 수 있습니다. HTMX를 사용하여 프런트엔드 스크립트를 깊게 탐구하지 않고도 인터랙티브 UI 컴포넌트를 제작할 수 있습니다.

효율성, 성능, 그리고 사용자 경험이 가장 중요한 세상에서, HTMX는 웹 개발자들에게 매력적인 선택지로 떠오르고 있습니다. HTMX는 강력함과 단순함의 균형 잡힌 조합을 제공하여 오늘날 웹 개발의 중요한 도구로 자리 잡고 있습니다.

HTMX와 React: 비교 분석

웹 개발 영역에서는 종종 도구와 프레임워크를 서로 비교하여 강점, 약점 및 최상의 사용 사례를 결정하는 경우가 많습니다. 현재 리액트가 프런트엔드 생태계의 왕으로 군림하고 있기 때문에 HTMX와 리액트를 많이 비교할 것으로 예상합니다. 이들은 동적 웹 애플리케이션 생성이라는 유사한 최종 목표를 가지고 있지만 접근 방식은 다릅니다.

영상 링크 : https://youtu.be/wIzwyyHolRs

철학과 접근 방식

  • HTMX: HTML을 확장하여 마크업에 직접적으로 동적 기능을 추가할 수 있습니다. 단순함과 서버 사이드 로직을 활용하는 것에 초점을 맞추고 있습니다.
<div hx-get="/dynamic-content">Load Content with HTMX</div>
  • React: 사용자 인터페이스를 생성하기 위한 자바스크립트 라이브러리입니다. 리액트는 컴포넌트 기반의 구조와 효율적인 업데이트를 위한 가상 돔을 강조합니다.
function App() {
  return <div>Hello from React!</div>;
}

학습 곡선

  • HTMX: HTML 중심의 접근법을 통해 특히 기존 웹 개발에 친숙한 사람들에게 완만한 학습 곡선을 제공합니다.
  • React: 강력한 기능을 제공하지만, JSX, state, props와 같은 자체적인 개념을 갖고 있기 때문에 초보자에게는 부담스러울 수 있습니다.

성능

  • HTMX: HTMX는 가볍기 때문에 초기 페이지 로딩 속도가 빨라지고, 클라이언트 사이드 처리가 줄어듭니다.
  • React: 가상 돔 덕분에 효율적으로 UI 업데이트를 진행할 수 있어 잦은 업데이트가 필요한 큰 규모의 애플리케이션에 적합합니다.

통합

  • HTMX: 기존의 서버 사이드 기술과 원활히 동작하도록 설계되어, 많은 프로젝트의 플러그 앤드 플레이(plug-and-play) 해결책이 됩니다.
  • React: 다방면으로 활용할 수 있지만, 특히 자바스크립트 생태계 내에서 생성되지 않은 프로젝트의 경우 통합에 추가적인 설정이 필요합니다.

사용 사례

  • HTMX: 본격적인 기능을 갖춘 프런트엔드 프레임워크의 오버헤드 없이 동적 상호작용이 필요한 프로젝트에 가장 적합합니다. 또한 광범위한 자바스크립트 없이 상호 작용 기능을 추가하려는 백엔드 개발자에게도 이상적입니다.
  • React: 단일 페이지 애플리케이션(SPA)과 복잡한 상태 관리를 통해 풍부하고 동적인 사용자 경험을 제공하는 프로젝트에 가장 적합합니다.

커뮤니티와 생태계

  • HTMX: 인기가 높아지고 있지만, 기존 프레임워크 커뮤니티에 비해 아직은 작은 규모입니다. 그러나 양질의 지원과 자원을 제공합니다.
  • React: 방대한 커뮤니티, 수많은 서드파티 라이브러리, 광범위한 자원을 자랑하며 전 세계 많은 개발자 사이에서의 인기있는 선택지입니다.

단점과 트레이드오프

긍정적인 측면만 있는 것은 아닙니다. 모든 도구에는 장단점이 있습니다. 다음은 시작하기 전에 고려하고 알아두어야 할 몇 가지 중요한 사항입니다.

  • 새로운 접근 방식이 아닙니다. 본질적으로 Knockout, Alpine 그리고 이와 유사한 "JS-in-HTML" 접근 방식의 변형입니다.
  • 제한된 도메인 특화 언어(DSL)로 인해 편의성이 떨어집니다. 구문 하이라이팅, 린팅 그리고 정적 분석에 대한 지원을 받기 어렵습니다.
  • 타입 안정성이 없습니다.
  • 같은 이유로 디버깅 또한 어렵습니다.
  • 결론적으로 이 접근 방식은 자바스크립트를 약간만 사용하면 되는 소규모 프로젝트에 적합합니다. 우리는 수년 전에 바닐라와 jQuery로 이미 같은 경험을 했으며, 확실한 이유로 인해 떠났습니다.

HTMX와 리액트 모두 그들만의 장점이 있습니다. 둘 중에 하나를 선택하기 위해선 프로젝트의 요구 사항, 도구에 대한 팀의 친숙도, 그리고 원하는 개발 경험을 고려해야 합니다. 리액트가 프런트엔드 세계에서 지배적인 위치를 차지하고 있지만, HTMX는 더 간단하면서도 강력한 대안을 제공하면서 틈새시장을 개척하고 있습니다.

영상 링크 : https://youtu.be/DuGyH5RvfbY

향후 웹 개발에서 HTMX의 역할

HTMX는 웹 개발에서 점점 주목받고 있으며, 잠재적인 영향은 다음과 같습니다.

  1. 오래된 것과 새로운 것의 혼합
    HTMX는 서버사이드 렌더링의 안정성과 오늘날의 클라이언트 사이드 상호작용의 묘미를 결합하여 균형을 맞춥니다. 동적이면서 효율적인 웹 프로젝트를 위한 매력적인 선택지입니다.
  2. 포용적인 개발
    모든 개발자가 프런트엔드 복잡성을 깊게 탐구하는 것은 아닙니다. HTMX는 백엔드 중심의 개발자가 자바스크립트 프레임워크와 씨름하지 않고 동적인 웹을 설계할 수 있도록 플랫폼을 제공합니다.
  3. 성능을 우선시
    속도를 중시하는 온라인 사용자들을 위해 HTMX의 간소화된 접근 방식은 신속하고 민첩한 웹 플랫폼 개발을 촉진합니다.
  4. 신선한 트렌드 채택
    웹 세계는 끊임없이 진화하고 있습니다. HTMX의 적응형 설계는 새로운 기술 및 표준과 잘 조화될 준비가 되어있음을 의미합니다.
  5. 접근 방식의 변화 가능성
    HTMX에 대한 관심 증가는 웹 개발 방식의 잠재적인 진화를 암시합니다. 많은 프런트엔드 프레임워크가 이미 자리를 잡았지만, 간단하고 효율적인 도구들이 기세를 몰아가고 있습니다.
  6. 커뮤니티 확장
    HTMX가 많은 팔로워를 모으기 시작하면서 자연스럽게 커뮤니티도 성장하고 있습니다. 이는 추가적인 자원, 확장 및 협업을 위한 발판을 마련하여 웹 개발에서의 유용성을 높일 수 있습니다.

요약하자면, HTMX는 웹 개발 분야에서 유망한 수단으로서 두각을 나타내고 있습니다. 이는 현재 개발자의 요구에 부응하며 동적인 웹사이트를 설계하기 위한 혁신적인 방식을 제공합니다. 앞으로의 영향력은 진화하는 커뮤니티와 그들의 창의적인 애플리케이션에 따라 크게 달라질 것입니다.

주요 시사점

끊임없이 변화하는 웹 개발 환경에서, HTMX는 독자적인 영역을 확보하고 있습니다. HTML을 개선하여 개발자에게 익숙한 설정을 제공하고 웹 상호작용성을 더 쉽게 탐구할 수 있습니다.

웹 페이지의 속도가 사용자 경험을 정의할 수 있는 시대에 HTMX는 가벼운 특성으로 빛을 발하며, 빠른 로드와 부드러운 상호작용을 보장할 것입니다. 또한 백엔드 개발자들의 역량을 강화하여 프런트엔드 영역을 더 깊이 탐구할 수 있게 하고, 서버 로직과 클라이언트 동작 사이의 넓은 간극을 메워줍니다.

프런트엔드 세계가 리액트나 뷰와 같은 거인들에 의해 사로잡힌 것 같지만 HTMX는 신선한 접근 방식을 제공합니다. HTMX는 다른 길이 있음을 보여주면서 동적 웹 앱 개발을 위해서는 많은 자바스크립트가 필요하다는 통념에 도전합니다.

HTMX는 최신 도구 그 이상일 수 있습니다. HTMX는 웹 개발 방식의 진화 가능성을 암시하며, 복잡한 기술과 사용자 경험 사이의 섬세한 균형을 강조합니다. 커뮤니티가 성장하고 HTMX가 더 많이 채택되면서, 미래의 웹 개발을 어디로 이끌지 누가 알 수 있을까요?

한 가지 확실한 건 그들의 트위터 (X) 계정이 심각한 밈 게임 중이라는 것입니다...

0개의 댓글