POOOLING FOREST
33년 전의 자동화 코드를 Rust와 WASM으로 되살려낸 이야기 - 1991년 고안된 AutoLISP 자동화 시스템을 Rust와 WASM으로 복원한 프로젝트를 통해, 시간이 지
Engineering & Tech

33년 전의 자동화 코드를 Rust와 WASM으로 되살려낸 이야기

1991년 고안된 AutoLISP 자동화 시스템을 Rust와 WASM으로 복원한 프로젝트를 통해, 시간이 지나도 변치 않는 엔지니어링의 본질적 가치와 자동화의 중요성을 탐구합니다.

김테크

8년차 개발자

안녕하세요. 풀링포레스트 8년차 개발자 김테크입니다.

개발자로서 연차가 쌓이다 보면 '레거시(Legacy)'라는 단어를 마주할 때 복잡미묘한 감정이 듭니다. 보통은 유지보수의 고통을 떠올리며 한숨부터 나오기 마련이지만, 가끔은 선배 개발자들의 기발한 아이디어에 감탄하며 경외감을 느끼기도 하죠. 최근 해커뉴스에서 발견한 흥미로운 프로젝트 하나가 딱 그런 느낌을 주었습니다. 무려 1991년에 고안된 CAD 워크플로우를 현대적인 기술인 Rust와 WebAssembly(WASM)로 되살려낸 이야기인데, 오늘 이 글에서는 그 속에 담긴 엔지니어링의 본질적인 가치에 대해 이야기해보고자 합니다.

이 프로젝트의 이름은 acadlisp입니다. 이름에서 알 수 있듯이 AutoLISP 인터프리터를 구현한 것인데, 놀랍게도 브라우저에서 돌아갑니다. 이야기는 33년 전, 독일의 한 소형 전기 회사에서 시작됩니다. 당시 엔지니어들은 기계가 설치될 때마다 맞춤형 전기 회로도를 그려야 했는데, 이게 여간 고역이 아니었습니다. 수작업으로 일일이 도면을 그리는 건 시간 낭비였고 실수하기도 쉬웠으니까요.

여기서 등장한 해결책이 바로 AutoCAD에 내장된 프로그래밍 언어인 AutoLISP였습니다. 당시 개발자는 CSV 파일에 구성요소를 정의하고, 템플릿과 LISP 코드를 결합하여 기술 도면을 자동으로 생성하는 파이프라인을 구축했습니다. 스프레드시트 하나만 수정하면 복잡한 도면이 뚝딱 나오는 시스템이었죠.

솔직히 말해, 이 대목을 읽으면서 저는 무릎을 탁 쳤습니다. 우리가 지금 풀링포레스트에서 MSA 환경의 인프라를 구축할 때 사용하는 'Infrastructure as Code(IaC)'나, 설정 파일 기반으로 리소스를 배포하는 방식과 논리적으로 완전히 동일하기 때문입니다. 도구만 Terraform이나 Helm 차트가 아닐 뿐, "반복적인 작업을 코드로 자동화한다"는 엔지니어링의 핵심은 30년 전이나 지금이나 변함이 없다는 사실을 뼈저리게 느꼈습니다.

이 프로젝트가 더 흥미로운 지점은 'LISP'라는 언어의 특성입니다. LISP는 코드와 데이터가 동일한 구조(리스트)를 공유하는 '호모아이코니시티(Homoiconicity)'라는 특징을 가집니다. 즉, 프로그램이 자기 자신을 수정하고, 코드가 코드를 작성할 수 있다는 뜻입니다. 1991년의 그 회로도 생성기는 단순히 선을 긋는 명령을 내린 게 아니라, 구성요소가 다른 구성요소를 불러오고 템플릿이 또 다른 템플릿을 생성하며 스스로 도면을 '증식'시켜 나갔습니다. 요즘 우리가 생성형 AI를 보며 신기해하는 자기 수정이나 코드 생성의 원형이 이미 그 시절 LISP 안에 살아 숨 쉬고 있었던 셈입니다.

그리고 2024년 현재, 원작자는 이 오래된 지혜가 사라지는 것을 막기 위해 최신 기술인 Rust와 WASM을 선택했습니다. AutoCAD라는 거대한 소프트웨어 설치 없이도, 브라우저만 있으면 그 시절의 LISP 코드가 돌아가도록 만든 것이죠. Rust의 강력한 메모리 안전성과 성능, 그리고 웹 어디서나 실행 가능한 WASM의 이식성이 만나 33년 전의 유산을 완벽하게 보존해냈습니다. 실제로 이 인터프리터는 defun, setq 같은 기본 함수는 물론이고 SVG와 DXF 포맷 출력까지 지원합니다.

제가 이 프로젝트를 보며 주니어, 미들급 개발자분들에게 꼭 전하고 싶은 메시지가 있습니다. 기술 스택은 3년만 지나도 낡은 것이 되곤 합니다. 저 역시 입사 초기에 썼던 프레임워크들이 이제는 잘 쓰이지 않는 것을 보며 막막함을 느꼈던 적이 있습니다. 하지만 acadlisp 사례처럼, 문제를 해결하려는 접근 방식과 자동화를 향한 집념은 시간이 지나도 낡지 않습니다.

Rust나 WASM 같은 '핫'한 기술을 배우는 것도 중요합니다. 하지만 그 기술을 '왜' 사용하는지, 과거의 엔지니어들은 비슷한 문제를 '어떻게' 해결했는지를 들여다보는 시야를 가졌으면 좋겠습니다. 때로는 가장 혁신적인 아이디어가 가장 오래된 레거시 속에 숨어있기도 하니까요. 33년 전의 LISP 코드가 Rust라는 새 옷을 입고 웹에서 돌아가는 모습을 보며, 우리가 지금 작성하는 코드도 언젠가 후배들에게 좋은 영감을 줄 수 있기를 바라봅니다.

오늘도 트러블슈팅 하느라 고생 많으셨습니다. 자동화가 주는 짜릿함을 잊지 마세요.

지금 읽으신 내용, 귀사에 적용해보고 싶으신가요?

상황과 목표를 알려주시면 가능한 옵션과 현실적인 도입 경로를 제안해드립니다.