HTMX는 간단한 HTML 속성만으로 강력한 동적 웹 애플리케이션을 구축할 수 있게 해줍니다. 이번 편에서는 HTMX의 고급 기능을 살펴보며, hx-trigger
, 이벤트 트리거, 동적 데이터 처리 등 실질적인 활용 사례를 통해 HTMX의 가능성을 확장해 보겠습니다.
그리고 마지막 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>
위 코드에서는 username
과 email
필드만 서버로 전송되고, 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와의 통합을 더욱 확장할 수 있는 방법을 알아보았습니다.
다음 편은 마지막 편으로, 서버와 클라이언트 간의 응답 처리 노하우를 중심으로 실질적인 개발 팁과 최적화 방안을 다룰 예정입니다. 기대해주세요! 😊
Add a New Comment