Zig로 타입 안전한 HTML 템플릿 엔진 만들기

Type-safe HTML templating in Zig

Zig로 웹 개발을 하면서 템플릿 엔진의 필요성을 느낀 개발자가 Templ을 참고해 zt를 만들었다. 템플릿이 빌드 시 Zig 코드로 변환되어 컴파일 타임에 모든 입력이 검사되고, 기본적으로 HTML 이스케이프가 적용되며, 할당 없이 std.Io.Writer에 직접 출력한다. 템플릿 오류는 Zig 컴파일러 오류로 나타나고, if·for·switch 같은 Zig 제어 흐름을 그대로 쓸 수 있다.

가장 마음에 드는 점은 템플릿 오류가 그냥 Zig 컴파일러 오류라는 것이다.
  1. solatic

    이 디자인이 정말 마음에 듭니다. 특히 Zig 빌드 체인을 활용한다는 점이 좋네요. 재빌드가 충분히 빨라서 개발 주기에서 사실상 JS 스타일 핫 리로딩을 얻을 수 있을 거라 기대합니다. 이제 Zig용 https://github.com/air-verse/air만 있으면 되겠네요 (Ziex에는 CLI에 내장되어 있지만, 그건 Ziex 전용이고요)...

    벤치마크 결과가 기대됩니다!

  2. pjmlp

    > 2년 전에 Zig를 접했는데, 이렇게 저수준 언어로 웹 개발을 고려하게 될 줄은 상상도 못 했습니다.

    저자가 2000년에 PHP 3.0으로 웹 개발을 시작했다는 점을 생각하면 꽤 재미있는 발언이네요.

    저는 1997년에 시작했는데, 우리 분산 시스템 수업에서는 Perl과 C로 CGI를 작성하는 과제가 있었습니다.

    1999년에서 2001년 사이에 제 직장에서 대부분의 웹 개발은 Tcl과 C로 이루어졌고, ASP는 당연히 VB와 C++ COM 컴포넌트가 섞여 있었으며, Apache mod_something 확장과 IIS ISAPI 모듈을 C와 C++로 작성하는 재미도 있었죠.

    아, Microsoft는 ATLServer도 출시했는데, 웹 개발에 ATL을 쓰고 싶지 않을 사람이 누가 있겠어요? Borland/Inprise도 Delphi와 C++ Builder용으로 비슷한 걸 내놓았고요.

    PHP 3.0 자체는 내장 기능이 거의 없던 시절이라 C로 확장 모듈을 작성하는 게 꽤 흔했습니다.

    그러니 2010년대에 느린 스크립팅 언어가 대세가 되기 전의 방식으로 돌아가는 걸 보게 되리라는 건 아무도 생각하지 못했다는 게 좀 아이러니하네요.

  3. stefs

    저도 직접 설계한 '타입 안전' 템플릿 엔진(코틀린용, gradle 플러그인)을 쓰고 있는데, 방향은 반대입니다. 모델 클래스를 템플릿에 넣는 대신, 모든 값을 매개변수로 받는 템플릿 클래스를 생성하죠.

    예를 들어 MyTemplate.tpl.html

    {if $foo}hello world, {$myname}!{else}goodbye, world.{/if}

    이렇게 하면 다음과 같이 사용할 수 있는 코틀린 클래스가 생성됩니다:

    MyTemplate(

    foo = true,

    myname = "bar"

    ).toString()

    제게 가장 큰 장점은 이렇게 하면 완전하고 공짜인 IDE 지원을 받을 수 있다는 점입니다. 매핑이 1:1이 아니어도 별도의 뷰 모델을 작성할 필요가 없고, 성능도 꽤 괜찮은데, 결국 런타임 파싱/컴파일/인터프리팅이 기본 JDK 수준 외에는 없기 때문입니다(더 빠른 엔진도 있긴 하지만요).

    https://codeberg.org/h34tnet/tempolin

    경고: 지금까지 사용자는 저 혼자뿐이니 프로덕션에서는 쓰지 마세요. 또한 현재 아직 푸시되지 않은 몇 가지 개선 작업을 진행 중입니다.

  4. fergie

    W3C: 그냥 <includes src="./header.html">만 있으면 끝나는 거 아닌가요?

  5. weitzj

    글 감사합니다. 약 10년 전에 Google Soy 템플릿을 사용했던 기억이 나네요. 지금 Helm 템플릿이나 Go 템플릿을 만들 때 쓰이는 것과 비슷한 것 같습니다.

    HTML 이스케이핑, JavaScript 이스케이핑 등이 내장되어 있죠.

    혹시 Google Soy용 Zig 래퍼 같은 게 있을까요?

이 날의 다른 글

2026-10-12