洪民憙 (홍민희) 블로그

이하의 글은 2011년에 쓴 것입니다. 오래된 글인 만큼, 현재의 생각과 전혀 다른 내용도 많이 포함되어 있고, 당시와는 상황이 많이 달라진 점도 있습니다. 또한, 그 당시에 잘못 알려졌던 정보도 포함되어 있을 수 있습니다. 어찌됐든 저는 제 오래된 글이 회자되는 것을 저어합니다. 읽기에 앞서 양해를 부탁드립니다.

개인적으로 템플릿 엔진 역사상 큰 전환점을 가져다 주었다고 꼽는 아이디어가 두 개 있다.

첫번째는 Kid1가 제안한 템플릿 상속블럭 개념. 그 전까지 웹 개발의 템플릿 작업은 어떻게 잘 템플릿을 쪼개서 인클루드할 것이가, 정도의 개념에서 벗어나지 못하고 있었는데, Kid가 제안한 템플릿 상속 아이디어는 템플릿 엔진 설계에 있어서 IoC에 해당하는 것이었다. 결국 Kid 자체는 XML 기반이라는 불편함과2 썩 빠르지 않은 구현 덕분에 망했지만, 템플릿 상속이라는 아이디어 자체는 워낙 훌륭해서 Django 템플릿에도 이어지게 되고, Django가 성공하면서 최근의 템플릿 엔진은 모두 상속 기능을 지니게 되었다.

두번째는 문자열 치환을 잘 하자는 기존의 모든 템플릿 엔진이 고수하던 근본적인 방식을 집어던지고 Haml이 제안한 트리(tree) 자체를 다루자는 획기적인 방식. 어쨌든 출력 결과가 XML/(X)HTML이고, 사람이 볼 데이터가 아니라 다른 소프트웨어가 볼 데이터라면 문자열을 직접 다룰 이유가 없다는 것이다! 대부분 사람들은 Haml이 Python과 같은 들여쓰기 문법을 채택했다는 점을 특징으로 보는데, 사실 들여쓰기 문법을 트리(tree)를 표현하기 좋은 방식으로서 선택된 부수적인 결정이지, 핵심적인 디자인 결정은 결국 문자열 대신 트리를 다루자는 관점이다.

템플릿 상속은 아이디어가 나온지 10년 가까이 된 현재 이미 널리 퍼진 상태고, 문자열 치환 대신 트리 자체를 다루자는 아이디어는 나온지 5년 정도 되었으니, 나머지 5년 안에는 널리 퍼졌으면 하는 바램이다.


  1. 사이트가 망했는지 접속이 안된다. PyPI 패키지 이름은 kid이다.

  2. Kid 설계자가 딱히 XML 취향이라 그랬던 것은 아니고, 그 당시까지 Python 템플릿 엔진들은 죄다 XML 기반이었고 그게 대세였기 때문에 무난하고 익숙한 방식을 따르겠다는 디자인 의도였던 것 같다.