HTMX는 간단한 HTML 속성만으로 강력한 동적 웹 애플리케이션을 구축할 수 있게 해줍니다. 이번 편에서는 HTMX의 고급 기능을 살펴보며, hx-trigger, 이벤트 트리거, 동적 데이터 처리 등 실질적인 활용 사례를 통해 HTMX의 가능성을 확장해 보겠습니다.

Advanced features of HTMX integration with Django

그리고 마지막 6편에서는 서버와 클라이언트 간의 응답 처리 노하우를 중심으로, HTMX와 Django를 활용한 완벽한 동적 웹 개발 프로세스를 마무리할 예정입니다.

1. HTMX의 고급 기능 소개

HTMX의 고급 기능은 동적 데이터 처리를 더 유연하고 강력하게 만들어줍니다. 아래는 이번 글에서 다룰 주요 기능들입니다:

  • hx-trigger: 특정 이벤트를 트리거로 설정하여 요청을 전송.
  • hx-params: 요청 시 전달할 데이터를 커스터마이즈.
  • hx-swap: 서버 응답 데이터를 DOM에 삽입하는 방식을 설정.
  • 조건부 트리거링: 동작을 조건에 따라 유연하게 처리.

2. hx-trigger: 이벤트 기반 요청

hx-trigger는 특정 이벤트를 트리거로 설정하여 서버 요청을 보낼 수 있습니다. 기본적으로 클릭 이벤트(click)가 사용되지만, 이를 자유롭게 변경할 수 있습니다.

기본 사용 예제

<input hx-get="/search/" hx-trigger="keyup changed delay:500ms" hx-target="#results" placeholder="검색어 입력">
<div id="results">검색 결과가 여기에 표시됩니다.</div>

주요 포인트

  • keyup: 키를 입력할 때마다 요청을 보냄.
  • changed: 입력값이 변경될 때만 요청 전송.
  • delay: 요청 전송을 500ms 지연.
  • hx-target: 서버 응답 데이터를 삽입할 요소 지정.

3. hx-params: 전송할 데이터 제어

hx-params는 서버로 전송할 데이터를 커스터마이즈할 수 있습니다.

  • 특정 데이터를 제외하거나, 필요한 데이터만 전송 가능합니다.

예제: 특정 필드만 전송

<form hx-post="/submit/" hx-params="username,email" hx-target="#result">
    <input type="text" name="username" placeholder="사용자명">
    <input type="email" name="email" placeholder="이메일">
    <input type="password" name="password" placeholder="비밀번호">
    <button type="submit">제출</button>
</form>
<div id="result">결과가 여기에 표시됩니다.</div>

위 코드에서는 usernameemail 필드만 서버로 전송되고, password는 제외됩니다.

4. hx-swap: 응답 데이터를 삽입하는 방식 제어

hx-swap은 서버에서 받은 응답 데이터를 DOM에 삽입하는 방식을 설정합니다. 기본값은 innerHTML로, 기존 콘텐츠를 대체합니다.

주요 옵션

  • innerHTML: 기본값. 기존 콘텐츠를 교체.
  • beforebegin: 요소 이전에 삽입.
  • afterbegin: 요소 내부 맨 앞에 삽입.
  • beforeend: 요소 내부 맨 뒤에 삽입.
  • afterend: 요소 이후에 삽입.

사용 예제

<div id="content">
    <p>기존 콘텐츠</p>
</div>
<button hx-get="/new-content/" hx-swap="beforeend" hx-target="#content">콘텐츠 추가</button>

클릭 시, /new-content/에서 받은 응답 데이터가 <div id="content"> 내부 맨 뒤에 삽입됩니다.

5. 조건부 트리거링

HTMX는 조건부로 요청을 트리거할 수 있습니다. 이를 통해 사용자 인터페이스와 상호작용을 더욱 세밀하게 제어할 수 있습니다.

예제: 체크박스 선택 여부에 따라 요청

<input type="checkbox" id="confirm" hx-get="/confirm/" hx-target="#message" hx-trigger="change:checked">
<div id="message"></div>

체크박스가 선택되었을 때만 /confirm/으로 요청을 보냅니다.

6. 실습: HTMX로 동적 필터링 구현

HTML 코드

<select hx-get="/filter/" hx-trigger="change" hx-target="#results">
    <option value="all">전체</option>
    <option value="category1">카테고리 1</option>
    <option value="category2">카테고리 2</option>
</select>
<div id="results">필터 결과가 여기에 표시됩니다.</div>

Django 뷰

from django.http import JsonResponse

def filter_view(request):
    category = request.GET.get("category", "all")
    results = {
        "all": ["전체 항목 1", "전체 항목 2"],
        "category1": ["카테고리 1 항목 1", "카테고리 1 항목 2"],
        "category2": ["카테고리 2 항목 1", "카테고리 2 항목 2"],
    }
    return JsonResponse({"results": results.get(category, [])})

이번 화를 마치며

이번 편에서는 HTMX의 고급 기능을 통해 Django와의 통합을 더욱 확장할 수 있는 방법을 알아보았습니다.

다음 편은 마지막 편으로, 서버와 클라이언트 간의 응답 처리 노하우를 중심으로 실질적인 개발 팁과 최적화 방안을 다룰 예정입니다. 기대해주세요! 😊