지그 언어로 안전한 웹 화면을 만드는 도구 'zt' 개발 이야기
1. 이게 뭔가요?
이 글은 하드웨어를 세밀하게 제어하는 데 주로 쓰이는 저수준 프로그래밍 언어인 지그(Zig) 환경에서 웹 사이트의 뼈대를 이루는 에이치티엠엘(HTML) 문서를 안전하고 효율적으로 만들기 위해 개발된 새로운 도구인 'zt' 라이브러리의 배경을 다룹니다. 에이치티엠엘 템플릿이란 웹사이트 화면에 보여줄 구조를 미리 짜 두고 그 안에 동적인 데이터를 채워 넣는 틀을 뜻하며, 이 도구는 템플릿을 지그 언어 코드로 변환하여 변수의 종류가 올바른지 컴퓨터가 미리 확인해주고 보안 취약점을 기본적으로 막아주는 것이 특징입니다.
2. 왜 화제인가요?
웹 개발 역사에서 화면을 만들기 위해 다양한 기술이 쓰였지만, 글자들을 단순하게 이어 붙여 웹 문서를 만들면 오타를 찾기 어렵고 프로그램이 실행될 때가 되어서야 오류를 알게 되는 문제가 있었습니다. 개발자는 기존 방식들에서 아쉬움을 느껴 다른 언어에서 쓰이던 틀 만들기 방식을 참고하여, 지그 언어의 고유한 특징을 살려 컴파일 과정에서 오류를 미리 잡아내고 복잡한 자바스크립트 없이도 편리하게 화면을 구성할 수 있는 새로운 도구를 직접 만들게 되었습니다.
3. 핵심 내용
지그는 하드웨어에 가깝고 세밀한 제어가 필요한 언어이지만, 메모리를 관리하는 효율적인 방식을 활용하면 웹 개발도 충분히 해낼 수 있습니다. 개발자가 만든 'zt'는 고(Go) 언어용 템플 도구를 지그 언어에 맞춰 다시 구현한 것으로, 템플릿 파일은 지그 빌드 과정에서 분석되어 지그 코드로 변환됩니다. 이 덕분에 앱 코드에서 템플릿을 직접 불러다 쓸 수 있으며 템플릿 안에서도 앱 코드를 불러와 쓸 수 있어 모든 매개변수의 형식을 엄격하게 확인할 수 있습니다. 만약 무언가를 화면에 그려낼 수 없는 상태라면 지그 컴파일러가 곧바로 오류를 알려주며, 오류 발생 시 원래 틀 파일의 어느 위치에서 문제가 생겼는지 주석으로 함께 표시됩니다. 생성되는 코드는 입출력 장치에 내용을 기록하는 단순한 역할을 수행하므로 네트워크 소켓에 직접 써넣거나 메모리 버퍼에 모아둘 수 있습니다. 화면에 들어가는 모든 동적인 값은 글자 내용이든 속성이든 웹 공격인 크로스 사이트 스크립팅을 막기 위해 기본적으로 안전하게 변환되며, 웹 주소 연결에 쓰이는 속성 값도 위험한 방식이 숨어 있는지 검사합니다. 가공되지 않은 날것 그대로의 웹 코드를 반드시 출력해야 할 때는 느낌표가 포함된 기호를 써서 의도한 것임을 분명히 밝혀야 합니다. 아울러 재사용할 수 있는 부품 같은 요소를 만들어 값처럼 주고받을 수 있고, 자식 요소를 뜻하는 특수한 기능을 사용해 다른 틀을 감싸는 상위 틀을 만들 수 있으며, 조건문과 반복문 같은 흐름 제어는 지그 언어의 문법을 그대로 따릅니다. 다만 블록 수준의 제어 흐름이 일반 프로그래밍 언어 코드처럼 작성되도록 되어 있어 문장으로 시작하는 줄이 코드로 오인될 수 있는 부분이 있어 앳 기호를 붙이는 방식을 고민하고 있습니다.
4. 나에게 어떤 영향이 있나요?
프로그램을 만드는 개발자라면 지그 언어로 웹사이트 화면을 만들 때 컴파일 단계에서 오류를 검사하고 속도를 높이는 새로운 방식을 살펴볼 수 있습니다. 이 프로젝트는 아직 완성된 지 얼마 안 된 초기 단계이므로 실제 개발 환경에 도입하기 전에 문법 규칙 등을 신중하게 확인해야 하며, 개발자는 깃허브 저장소나 디스코드 채널을 통해 피드백을 주고받을 수 있습니다.