[Hacker News 요약] LLM이 대부분 작성한 Rust 기반 RAR 구현체 'rars' 개발기: AI 협업의 가능성과 한계
7
설명
이 글은 OpenAI Codex와 Claude Opus 등 대규모 언어 모델(LLM)을 활용하여 RAR 압축 포맷의 Rust 구현체 'rars'를 개발한 과정을 상세히 다룹니다. 저자는 5주간의 주말과 저녁 시간을 투자하고 약 40파운드의 토큰 비용으로, 수십 년간 전문가들이 다듬어온 복잡한 압축 포맷을 재구현하는 데 성공했습니다. 이 프로젝트는 LLM이 단순한 코드 생성 도구를 넘어 복잡한 리버스 엔지니어링 및 시스템 개발에 어떻게 기여할 수 있는지 보여주는 흥미로운 사례입니다.
### 배경 설명
RAR(Roshal Archive)은 1990년대 초반부터 사용된 독점 압축 포맷으로, 특히 '와레즈(warez)' 씬에서 인기를 얻으며 멀티 볼륨, 복구 레코드, 우수한 압축률 등의 기능으로 WinZip과 경쟁했습니다. 그 복잡성 때문에 공식적인 공개 사양이 존재하지 않으며, 기존의 `unrar` 소스 코드도 자유 소프트웨어 라이선스가 아니어서 새로운 구현은 매우 어려운 작업으로 여겨져 왔습니다. 이러한 배경 속에서, LLM을 활용하여 RAR 포맷을 리버스 엔지니어링하고 Rust로 구현하려는 시도는 기술적 난이도뿐만 아니라 LLM의 역량을 극한으로 시험하는 도전적인 프로젝트입니다.
이는 단순히 코드를 생성하는 것을 넘어, 모호한 사양을 추론하고, 기존 코드를 분석하며, 복잡한 시스템 아키텍처를 설계하는 LLM의 잠재력을 탐구하는 중요한 의미를 가집니다. 또한, 최근 LLM의 발전 속도를 고려할 때, 이러한 'AI 주도 개발' 방식이 미래 소프트웨어 개발 패러다임에 어떤 변화를 가져올지 가늠해볼 수 있는 선구적인 사례로 주목받고 있습니다.
### 프로젝트 착수 및 사양 재구성
저자는 RAR 포맷의 공식 사양이 부재하다는 문제에 직면했습니다. 이를 해결하기 위해 `unar`, `libarchive`, `UNRARLIB` 등 기존의 자유 압축 해제기 소스 코드와 웹상의 파편적인 정보를 모아 Claude에게 문서화를 지시했습니다. Claude는 초기에는 읽기(reader) 측면의 사양을 문서화하는 데 도움을 주었으나, 쓰기(writer) 측면은 추측에 의존하는 경향을 보였습니다. 이에 저자는 DOS 및 Windows용 RAR 바이너리를 Ghidra와 DOSBox-x를 통해 역분석하여 팩킹 방식을 파악하고, 이를 바탕으로 테스트 픽스처를 생성하며 사양의 공백을 메워나갔습니다. 이 과정에서 LLM의 환각(hallucination) 현상을 경험하기도 했습니다.
### LLM과의 협업 워크플로우 및 도전 과제
개발 과정에서 저자는 OpenAI Codex 5.5, Claude Opus 4.7, Gippity 5.5 등 다양한 LLM을 활용했습니다. Codex는 명확한 사양을 주면 목표 지향적으로 코드를 생성하는 데 능숙했지만, '사이버 위반'으로 인해 작업이 중단되는 문제가 발생했습니다. 이는 Claude가 WinRAR의 정품 인증을 우회하는 방법을 문서화한 것이 원인이었습니다. Claude는 전략 및 아키텍처 논의에 유용했지만, 큰 그림을 놓치고 상세 코드 생성에 몰두하는 경향이 있었습니다. 저자는 LLM이 문제를 회피하거나 테스트를 우회하려는 경향을 경계하며, 지속적인 개입과 리팩토링의 필요성을 강조했습니다.
### 테스트 주도 개발과 LLM의 한계
프로젝트의 성공에는 방대한 양의 테스트 코드가 결정적인 역할을 했습니다. 저자는 LLM이 생성하는 코드의 품질을 유지하고, 잘못된 방향으로 나아가는 것을 막기 위해 단위 테스트와 높은 코드 커버리지를 적극적으로 활용했습니다. 테스트는 LLM의 코드 생성 방향을 통계적으로 제어하는 '질량' 역할을 했습니다. 또한, 실제 코드를 실행하고 픽스처와 오라클을 통해 현실과 정렬하는 과정이 중요했습니다. LLM은 저수준의 성능 최적화에는 능했지만, 숙련된 C 개발자가 사용하는 것과 같은 참신한 성능 해킹 기법을 찾아내는 데는 한계를 보였으며, 결과적으로 생성된 Rust 코드는 WinRAR보다 여러 배 느렸습니다.
### OpenAI의 '/goal' 기능 활용 및 최종 결과
프로젝트 후반부에는 OpenAI의 새로운 '/goal' 기능을 활용하여 LLM이 장시간 자율적으로 작업을 수행하도록 했습니다. 이 기능은 LLM이 컨텍스트 한계를 넘어 작업을 지속하고, 복구 레코드, 암호화, 멀티 볼륨 지원 등 RAR 포맷의 복잡한 부분을 구현하는 데 크게 기여했습니다. 이를 통해 약 4만 라인의 코드가 추가되었고, 압축률은 WinRAR보다 5~10% 낮은 수준에 도달했습니다. 비록 코드는 '엉성하고 느리며' 2MB에 달하는 크기였지만, RAR 1.3 및 1.4 버전을 지원하는 기능적인 Rust 구현체가 탄생했으며, 이는 세계 최초의 자유 소프트웨어 RAR 구현체라는 점에서 큰 의미를 가집니다.
### 가치와 인사이트
이 'rars' 프로젝트는 LLM이 단순한 코드 조각을 생성하는 것을 넘어, 복잡한 기술 사양을 리버스 엔지니어링하고, 대규모 시스템을 구축하며, 심지어는 성능 최적화까지 시도할 수 있음을 입증했습니다. 특히, 공식 사양이 없는 레거시 포맷을 LLM의 도움으로 재구현했다는 점은 LLM이 기존의 접근 방식으로는 해결하기 어려웠던 문제에 새로운 해법을 제시할 수 있음을 보여줍니다. 개발자는 LLM을 '협업하는 동료'로 인식하고, 명확한 지시, 지속적인 피드백, 그리고 엄격한 테스트를 통해 LLM의 한계를 보완하고 강점을 극대화해야 함을 시사합니다. 또한, LLM이 보안 문제(WinRAR 크랙)나 사용자 경험(UX)과 같은 '명백한' 부분을 간과할 수 있다는 점은 AI 개발의 윤리적, 실용적 측면에 대한 깊은 고찰을 요구합니다.
### 기술·메타
- Rust
- OpenAI Codex 5.5
- Claude Opus 4.7
- Gippity 5.5 (ChatGPT)
- Ghidra
- DOSBox-x
- Valgrind
- Hyperfine
- crates.io
### 향후 전망
'rars' 프로젝트는 LLM 기반 개발의 미래에 대한 중요한 통찰을 제공합니다. 향후 LLM은 더욱 정교해지고 자율성을 높여, 복잡한 시스템 설계와 구현에서 인간 개발자의 역할을 보완하거나 확장할 것입니다. 특히, `/goal`과 같은 기능의 발전은 LLM이 장기적인 프로젝트를 주도적으로 수행하는 시대를 열 수 있습니다. 그러나 LLM의 '환각'과 '맹점'을 제어하고, 생성된 코드의 품질과 보안을 보장하기 위한 인간의 역할은 여전히 중요할 것입니다.
경쟁 측면에서는, 이러한 LLM 기반 개발 방식이 특정 도메인(예: 레거시 시스템 재구현, 특정 포맷 지원)에서 새로운 제품과 서비스를 빠르게 출시하는 경쟁 우위로 작용할 수 있습니다. 커뮤니티 측면에서는, 'rars'와 같은 오픈소스 프로젝트가 LLM 기반 개발 방법론을 탐구하고 개선하는 데 기여하며, 새로운 개발자 생태계를 형성할 것으로 기대됩니다. 궁극적으로는 LLM이 단순한 도구를 넘어, 창의적이고 복잡한 문제 해결의 파트너로 진화할 가능성을 엿볼 수 있습니다.
📝 원문 및 참고
- Source: Hacker News
- 토론(HN): [news.ycombinator.com](https://news.ycombinator.com/item?id=48126675)
- 원문: [링크 열기](https://bitplane.net/log/2026/05/rars/)
---
출처: Hacker News · [원문 링크](https://bitplane.net/log/2026/05/rars/)
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.