HTMX는 서버 중심의 웹 개발 철학에 기반하여 클라이언트와의 동적인 반응성을 제공합니다. 이번 글에서는 Django를 사용해 HTML 반환 방식을 구현하는 방법과 장단점을 알아보겠습니다.

Illustration of server-rendered HTML responses with Django and HTMX

1. HTML 반환 방식이란?

HTML 반환 방식은 서버에서 완성된 HTML을 생성하고, 이를 클라이언트에 전달해 렌더링하는 방식입니다. 클라이언트는 추가적인 JavaScript 없이 동적 UI를 업데이트할 수 있습니다. 이 방식은 HTMX의 기본 철학과 부합하며, 간단한 구현이 가능합니다.

2. HTML 반환 방식의 장점

  • JavaScript 필요 없음: 서버에서 완성된 HTML을 반환하므로 클라이언트 측 로직이 단순해집니다.
  • 직관적이고 빠름: 클라이언트는 반환된 HTML을 타겟 요소에 삽입하기만 하면 됩니다.
  • Django 템플릿 활용: Django의 템플릿 시스템과 자연스럽게 통합됩니다.

3. 템플릿 렌더링을 활용한 HTML 반환

복잡한 UI나 반복적으로 사용하는 HTML 스니펫은 별도의 템플릿 파일로 관리하는 것이 좋습니다. Django의 render 메서드를 사용해 이를 반환할 수 있습니다.

예제: 회원가입 에러 메시지 처리

Django 뷰
from django.shortcuts import render

def signup_view(request):
    if request.method == "POST":
        username = request.POST.get("username", "").strip()
        password = request.POST.get("password", "")
        password2 = request.POST.get("password2", "")

        errors = []
        if not username:
            errors.append("아이디를 입력하세요!")
        if password != password2:
            errors.append("비밀번호가 일치하지 않습니다!")

        if errors:
            return render(request, "partials/error_messages.html", {"errors": errors})

        return render(request, "partials/success_message.html", {"message": "회원가입이 완료되었습니다!"})
HTML 템플릿 (partials/error_messages.html)
{% for error in errors %}

{{ error }}

{% endfor %}
HTML 템플릿 (partials/success_message.html)

{{ message }}

템플릿 렌더링을 활용하면 코드 재사용성과 유지보수가 크게 향상됩니다.

4. 간단한 HTML 응답: HttpResponse 활용

복잡한 템플릿이 필요 없는 경우, Django의 HttpResponse를 통해 간단한 HTML 응답을 바로 반환할 수 있습니다.

예제: 간단한 상태 메시지

Django 뷰
from django.http import HttpResponse

def signup_view(request):
    if request.method == "POST":
        username = request.POST.get("username", "").strip()
        password = request.POST.get("password", "")
        password2 = request.POST.get("password2", "")

        if not username:
            return HttpResponse("

아이디를 입력하세요!

") if password != password2: return HttpResponse("

비밀번호가 일치하지 않습니다!

") return HttpResponse("

회원가입이 완료되었습니다!

")

이 방식은 단순한 상태 메시지나 UI 업데이트에 적합하며, 템플릿 파일 없이 빠르게 작업할 수 있습니다.

5. HTML 반환 방식의 한계

  • 템플릿 관리 복잡성: HTML 스니펫이 많아지면 템플릿 파일 관리가 어려워질 수 있습니다.
  • 동적 데이터 처리의 한계: JSON 방식보다 유연성이 떨어질 수 있습니다.

이번 화를 마치며

HTML 반환 방식은 Django와 HTMX의 기본 철학에 부합하며, 간단하고 직관적인 동적 UI 업데이트에 적합합니다. 다음 편에서는 JSON 응답 방식과 클라이언트 측에서의 활용 방법을 다루겠습니다. HTMX를 사용해 더욱 동적인 웹 애플리케이션을 만들어 보세요!