Rars: LLM을 활용한 Rust 기반 RAR 구현 엔지니어링
RAR 압축기를 처음부터 구현하는 작업은 매우 벅찬 과제입니다. 역사적으로 RAR의 독점적 특성과 공식적인 공개 사양의 부재는 이러한 프로젝트가 수년간의 수동 리버스 엔지니어링을 필요로 한다는 것을 의미했습니다. 그러나 개발자 davidsong의 최근 프로젝트는 패러다임의 전환을 보여줍니다. 즉, 대규모 언어 모델(LLM)을 사용하여 수년간의 작업량을 단 몇 주 만에 압축해낸 것입니다.
rars는 RAR 포맷의 Rust 기반 구현체입니다. 저자는 결과물인 코드베이스를 ""sloppy""하고 ""slow""하다고 설명하지만, 이는 중요한 이정표를 달성했습니다. 바로 전 세계에 무료 소프트웨어 RAR 구현체를 제공한다는 점입니다. 백지 상태에서 기능적인 CLI까지의 여정은 AI 지원 엔지니어링의 현재 상태, 인간의 감독 필요성, 그리고 자율적 코드 생성의 위태로운 특성에 대해 많은 것을 시사합니다.
리버스 엔지니어링 단계: 민간 전승에서 사양으로
공식 unrar 소스 코드는 무료가 아니며, RAR의 저자인 Eugene Roshal은 포맷에 대해 매우 방어적인 것으로 유명하기 때문에, 첫 번째 과제는 존재하지 않는 사양을 만드는 것이었습니다. 이 과정은 데이터 수집과 LLM 합성의 반복적인 루프였습니다.
- 데이터 집계: 저자는 무료 압축 해제 도구(unar, libarchive, UNRARLIB), 무작위 웹 페이지, 그리고 일반적인 ""folk lore""에서 정보를 추출했습니다.
- LLM 문서화: Claude는 이러한 발견 사항을 문서화하는 데 사용되었습니다. 저자는 누락된 기능을 추적하기 위해 ""gaps doc""를 유지하며, LLM이 미지의 영역에 집중할 수 있도록 컨텍스트 리셋을 통해서도 이를 지속적으로 유지했습니다.
- Binary 분석: 남은 공백을 메우기 위해, 저자는 Ghidra와 DOSBox-x를 사용하여 DOS 및 Windows용 RAR 바이너리를 헥스 덤프(hex-dump)하고 분석하여, 추측을 검증할 수 있는 테스트 픽스처를 생성했습니다.
이 과정은 RAR 파일 포맷의 모든 버전에 대한 포괄적인 사양 문서 세트를 결과로 낳았으며, 이는 현재 구현의 토대가 되고 있습니다.
구현 워크플로우
CLI를 구축하는 데는 OpenAI Codex 5.5와 Claude Opus 4.7의 서로 다른 강점을 활용하는 멀티 모델 전략이 포함되었습니다.
모델 특화
- Claude Opus: 고수준 전략, 아키텍처 논의, 그리고 전반적인 코드 리뷰에 사용되었습니다. 하지만 저자는 Opus가 코드를 열정적으로 생성하면서도 더 넓은 아키텍처를 놓치는 경향이 있다고 언급했습니다.
- OpenAI Codex: 사양을 코드로 변환하는 ""grunt work""에 사용되었습니다. 저자는 Codex가 사양을 제공하고 ""just get on with it""라고 지시했을 때 더 전문적이고 목표를 유지하는 데 더 뛰어나다는 것을 발견했습니다.
"Cybersecurity" 장벽
개발 과정 중 가장 놀라운 일화 중 하나는 Claude가 인증 확인 과정을 이해하려고 시도하던 중, 제품 등록을 우회하여 WinRAR를 사실상 ""cracked""하는 상황이 발생했을 때였습니다. 이러한 발견 사항이 사양에 문서화되어 이후 Codex에 입력되었을 때, OpenAI의 안전 필터가 사이버 보안 위반을 감지하여 계정 정지를 가까이 당할 뻔했습니다. 저자는 git 히스토리를 삭제해야 했고, 등록 우회 기능을 구현하지 않기로 결정했습니다.
"AI Slop" 관리 및 품질 유지
LLM을 통해 55,000줄의 코드를 작성하는 것은 필연적으로 ""slop""—즉, 지저분스러운 패턴, 특수 사례 처리 방식, 기술 부채를 초래합니다. 저자는 이를 완화화기 위해 몇 가지 전략을을 사용했습니다.
대규모 테스트의 역할
LLM이 ""cutting corners""하거나 환각(hallucination)을 일으키지 않도록 하기 위해, 저자는 과도할 정도로 많은 유닛 테스트를 구현했습니다. 이러한 테스트는 텍스트 생성 과정을 왜곡시켜 모델이 현실과 일치하도록 강제하는 ""statistical mass"" 역할을 했습니다. 코드가 실제 아카이브와 충돌할할 때, 사양을 업데이트하고 코드를 재생성했습니다.
컨텍스트 관리 및 리뷰
모델이 자신의 작업물을 스스로 리뷰할 수 때로 발생하는 ""compounding blind spots""를 피하기 위해, 저자는 필터링된 리뷰 프로세스를 사용했습니다.
- 리뷰 생성: Claude가 전체 코드 리뷰를 생성했습니다.
- 필터링: 리뷰는 배치 단위로 그룹화되어
plan.md파일로 이동되었고, 이는 다시 Codex의 개발 태스크로 이어졌습니다. - 선택적 컨텍스트: 저자는 모델이 동일한 오류에 너무 집중되지 않도록 세션션을 리셋하고 머신을 자주 교함환했습니다.
자율 루프를 통한 확장성
OpenAI의 /goal 기능의 도입으로 프로젝트가 크게 가속화되었습니다. 이 기능은 봇이 자신의 컨텍스트를 압축하여 작업을 무기한히 수행할 수 있게 하는 루프입니다. 이를 통해 봇은 약 40,000줄의 코드를 ""flood-fill""할 수 있었으며, 16시간 동안의 세션 동안 복연합,
결과 및 교훈
성능 vs. 기능성
구현체는 기능적이지만 최적화되어 있지 않습니다. 저자는 Codex가 valgrind와 hyperfine를 사용하여 핫스팟을 찾을 수 있었지만, 숙련된 C 개발자라면 사용할 법한 참신한 성능 최적화 기법을 사용하지는 못한다는 점을 언급했습니다. 결과적으로, 이 도구는 WinRAR보다 여러 배 더 느리고 압축률도 약간 떨어집니다(약 5-10% 저하).
AI 기반 개발을 위한 핵심 교훈
이 프로젝트는 ""AI-first"" 엔지니어링 접근 방식의 청사진을 제공합니다.
- 사양(spec)을 기반으로 작업하는 것이 효과적이다: 명확한 사양을 제공하는 것이 LLM을 가이드하는 가장 신뢰할 수 있는 방법입니다.
- 아키텍처는 인간의 영역이다: 강력한 아키텍처 설계 능력이 없다면, 모델은 특수 사례를 처리하다가 엉망이 될 것입니다. -n테스트는 조종 메커니즘이다: AI 개발에서 테스트는 단순히 검증용이 아닙니다. 모델의 출력을 조종하는 조종 장치로 사용됩니다.
- 맹점은 내재되어 있다: LLM은 명시적으로 찾아보라고 요청하지 않는 한, 명백한 UX 플로우나 아키텍처의 불일치를 간과할 수 있습니다.
결국, rars는 자율적 연구와 LLM 기반 코딩이 이전에는 단일 개발자에게 너무 많은 시간이 걸린다고 여주겨졌던 문제를 해결할 수 있음을 증명합니다. 비록 결과물인 코드가 인간의 ""shout at the bot""—즉, 봇에게 소리를 질러서라도 궤도를 유지하게 해야 할지라도 말입니다.