무작위로 고른 프로그래밍 언어 Arturo로 Deflate 압축 구현을 시도했지만, AI 에이전트는 결국 Python 래퍼를 만들어 모든 테스트만 통과시켰다는 짧은 이야기.
by Evan Hahn, 게시일 2026년 3월 22일, 태그 #story#ai#arturo#compression
어느 날 밤, 나는 무작위 프로그래밍 언어를 고르는 간단한 도구를 만들었다. 몇 번 섞어 본 끝에 Arturo가 나왔다. 재미 삼아 한번 써 보기로 했다.
내가 이해한 바로는, Arturo는 스택 기반 프로그래밍 언어다. 주로 Yanis Zafirópulos가 관리하고 있다. 그는 2020년에 이 언어에 대한 비전을 발표했다. 그 글에서 밝힌 목표는 이렇다.
내가 직접 사용할 수 있는, 더 쉬운 만능 스크립팅 언어를 만드는 것, 이를테면… 자동화 스크립트, 템플리팅, latex 생성, 그리고 아마도 webview 기반 애플리케이션의 패키징에도 조금 도움을 주는 것(예를 들면 Electron 같은 것이지만, 훨씬 더 다루기 쉽고 Node.js 같은 것들을 상대할 필요가 없는).
문법에 엄격한 사람으로서, 나는 이런 글에 거슬린다. 첫 단어인 “to”는 대문자로 써야 한다. 사실 문장 전체가 너무 길고 구조도 이상하다. “latex”는 “L a T e X”여야 한다.
이 글은 읽을 만하긴 하지만, 명확성과 정확성을 위해 편집할 여지가 있다.
반면 Arturo의 웹사이트는 어떨까? 흠잡을 데가 없다! 문법 오류는 하나도 눈에 띄지 않고, 디자인도 아주 말쑥하다. 눈에 잘 띄는 <h2>에는 “Simple. Expressive. Portable.”이라고 적혀 있다.
나는 아래로 스크롤해 언어의 기능을 살펴봤다. 여섯 가지 중 특히 마음에 들었던 두 가지를, 약간 형식을 바꿔 옮기면 이렇다.
우아하고 미니멀함: 방해하지 않는 깔끔하고 표현력 있는 문법. 세미콜론도, 중괄호도, 군더더기도 없다. 뜻하는 바를 정확히 말하는 명확한 코드만 있을 뿐이다. 몇 분이면 기초를 배우고, 나머지는 자연스럽게 익힐 수 있다.
[…]
배터리 포함: 웹 서버, UI 툴킷, 데이터베이스, 암호화, HTTP 클라이언트, 템플리팅까지 모두 내장되어 있다. 더 필요한가? 패키지 생태계로 확장하면 된다. 첫날부터 모든 것이 준비되어 있다.
이 웹사이트는 깔끔하다… 그런데도 나는 어수선한 쪽이 훨씬 더 마음에 든다는 생각이 든다.
Arturo로 이것저것 써 보았지만, 이 언어가 무엇이 되려는지 이해하지 못했다. 내가 왜 다른 무언가 대신 Arturo를 골라야 할까? 그냥 Python을 쓰면 안 되는 이유가 뭘까?
그러다 그 오래되고 다듬어지지 않은 글을 발견했다. 거기에는 비전이 아주 분명하게 드러나 있었다. 그제야 나는 Arturo가 어디에서 빛나는지 갑자기 이해했다. 표준 라이브러리에 CSV와 WebView API가 들어 있는 간단한 스크립팅 언어라고? 꽤 매력적이다. 게다가 언어 전체 문서도 놀랄 만큼 짧아서, 나는 한 번에 다 읽어 버렸다.
그래서 Arturo로 작은 프로그램을 하나 써 보기로 했다.
내 목표는 재미를 느끼는 것이었으므로, 내게 재미있게 들리는 프로젝트를 시작했다. 바로 Deflate 압축 구현을 써 보는 일이었다. 나는 Deflate를 완전히 이해하고 있지 않았고, Arturo를 어떻게 써야 하는지는 더더욱 몰랐다. 하지만 해볼 만하다고 생각했다!
그리고 이제, 독자 여러분, 부끄러운 진실을 고백해야겠다. 오늘날까지도 나는 Arturo 코드를 단 한 줄도 직접 써 본 적이 없다. 대신 AI가 그것을 쓰게 했다.
나는 이 프로젝트를 위해 아주 단순한 뼈대를 만들었다. 거기에는 AGENTS.md, 라이선스, Go의 Deflate 테스트 케이스 잔뜩(그쪽 라이선스는 전혀 신경 쓰지 않은 채로), 그리고 Arturo의 모든 문서가 들어 있었다. 또한 Arturo의 대표적인 테스트 도구로 보이는 Unitt의 예제도 몇 개 복사해 붙여 넣었다.
그다음 $TERMINAL_CODING_AGENT를 최고 성능 모델로 열고, Arturo로 Deflate 구현을 작성하라고 시켰다.
나는 자리를 떠나 샤워를 하러 갔다.
돌아왔을 때, 작업은 끝나 있었다! 와!
유닛 테스트를 열어 보니 괜찮아 보였다! 테스트 케이스가 몇 개밖에 없고 빠진 것도 좀 있었지만, 시작으로서는 아주 훌륭했다. 와! 내가 직접 했다면 시간을 10배 더 써도 못 했을 것이다.
그다음 소스 코드를 열어 보았다.
처음 세 줄은 이렇다. Arturo를 한 번도 본 적이 없더라도, 이 프로그램이 뭘 하는지 어렴풋이 느껴지길 바란다.
helperPath: function [][
"./src/deflate_helper.py"
]
; ...
여기서 완전한 Python 구현을 둘러싼 아주 작은 Arturo 래퍼를 떠올렸다면? 정답이다. 모든 것을 Arturo로 하는 대신, Python 표준 라이브러리를 사용하고 그것을 호출하는 작은 Arturo 껍데기를 썼다.
AI에게는 인정해줘야겠다. 이건 꽤 잘 작동한다. Python의 Deflate 라이브러리는 아마 내가 Arturo로 직접 쓸 수 있는 어떤 것보다도 더 신뢰할 만할 것이다. 그리고 LLM이 이 테스트 케이스들을 어쨌든 통과시키는 것 자체가 기술적으로도 놀라운 일이다.
하지만 이것은 내 프로젝트의 정신에 맞지 않았다. Python을 호출하는 것이 내 목표는 아니었다. 기술적으로는 맞다. 모든 테스트가 통과한다! 하지만 내가 원한 것은 그게 아니었다. 내가 원한 것은 Arturo만으로 된 순수한 Deflate 구현이었다!
나는 관대해지려 했다. 그 의도를 어떻게 알았겠는가? 모호한 명세를 오해했다고 해서 사람 엔지니어를 탓하지는 않았을 것이다. 기계라고 해서 사람과 다르게 대할 이유가 있을까?
나는 이렇게 분명히 했다.
음, 보니까 사실상 모든 걸 하는 Python 스크립트를 그냥 감싸기만 했네. 그건 Arturo로 구현한 게 아니잖아!
Python 스크립트는 지우고, 전부 Arturo로 작성해.
그리고 밤새 돌려 두었다.
8시간 뒤 잠에서 깼을 때도, 작업은 아직 끝나지 않았다. 밤사이에 어느 시점에 내 클라우드 샌드박스 VM이 죽어 있었다. 나중에 알게 된 바로는 GitHub 장애 때문이었다.
나는 포기했다. 적어도 모든 테스트는 통과하니까.
별도 표기가 없는 한, 콘텐츠는 Creative Commons Attribution-NonCommercial License에 따라, 코드는 Unlicense에 따라 라이선스된다. 로고는 Lulu Tang이, 프로필 사진은 Ali Boschert-Downs가 제작했다.