Bun의 Rust 재작성은 놀라운 성과입니다

MMaximilian Schwarzmüller
컴퓨터/소프트웨어창업/스타트업AI/미래기술

스크립트

00:00:00BUN이 SIG에서 Rust로 포팅되었습니다.
00:00:02아마 들어보셨겠지만,
00:00:04여기에는 풀 이야기가 많습니다.
00:00:06지난주에 많은 드라마가 있었지만,
00:00:08흥미로운 일들도 많이 벌어지고 있죠.
00:00:10BUN, SIG, Rust 중 무엇에 관심이 있든 간에,
00:00:14정말 흥미로운 주제입니다.
00:00:15또한 AI가 어떻게 활용되었는지,
00:00:18그리고 그것이 우리 업계의 유사한 프로젝트에
00:00:20어떤 의미가 있을지에 대해서도요.
00:00:22참고로 말씀드리면,
00:00:24저는 개인적으로 BUN을 상당히 좋아합니다.
00:00:26대부분의 프로젝트에서 제가 기본으로 사용하는
00:00:29JavaScript 런타임이죠.
00:00:30공교롭게도,
00:00:32지난주에 BUN에 대한 새 코스를 출판했습니다.
00:00:35그리고 당연히 SIG 버전과 마찬가지로
00:00:37Rust 버전에서도 잘 작동합니다.
00:00:39BUN에 대해 더 깊이 알아보고 싶거나,
00:00:41제공되는 모든 핵심 API를 배우고 싶다면,
00:00:44그게 바로 BUN의 가장 큰 장점 중 하나니까요.
00:00:46많은 것이 기본 내장되어 있죠.
00:00:48싫어하는 사람도 있지만, 전 정말 좋아합니다.
00:00:50더 배우고 싶으시다면,
00:00:51그 코스가 도움이 될 겁니다.
00:00:53그럼 이제 전체적인 포팅 타임라인을
00:00:54더 자세히 살펴볼까요?
00:00:58사실 두 달 전에 일어난 일입니다.
00:01:01블로그 포스트는 7월 지난주에 나왔지만,
00:01:04포팅 자체는 5월에 이루어졌습니다.
00:01:085월 초에 공식 BUN GitHub 저장소에서
00:01:10CloudFaserPort 브랜치가 발견되면서 시작됐죠.
00:01:13그 브랜치에는 포팅 관련 MD 파일이 있었는데,
00:01:15SIG 코드를 Rust 코드로 변환하는
00:01:18방법이 적힌 마크다운 파일과,
00:01:21포팅 방법, 변환 테이블,
00:01:23그리고 일반적인 지침들이 담겨 있었습니다.
00:01:27이 파일이 어떻게 만들어졌는지에 대해서는
00:01:28나중에 다시 언급하겠지만,
00:01:30당연히 AI가 관여했습니다.
00:01:32예상하셨겠지만, 잠시 후에 자세히 말씀드리죠.
00:01:34그렇게 발견되었습니다.
00:01:36당연히 Hacker News와 X에서 논의가 이어졌죠.
00:01:40기대하는 사람들도 있었고,
00:01:43매우 비판적인 사람들도 있었습니다.
00:01:46그 시점엔 알려진 게 별로 없었거든요.
00:01:47Rust를 둘러싼 양극화는 분명 존재하니까요.
00:01:52저처럼 Rust를 사랑하는 사람도 있고,
00:01:55Rust를 싫어하는 사람도 있죠.
00:01:57모든 것을 Rust로 다시 써야 한다는
00:01:58주장을 싫어하는 사람들도 있습니다.
00:02:00프로그램 XYZ를 Rust로 다시 쓰라는
00:02:03요청을 자주 접하니까요.
00:02:06그게 짜증나는 건 충분히 이해합니다.
00:02:08어쨌든 그 때문에,
00:02:09많은 양극화가 일어났습니다.
00:02:11하지만 포팅은 아직 일어나지 않았었죠.
00:02:15그게 5월 말에 바뀌었습니다.
00:02:165월 14일에 공식 풀 리퀘스트가 열렸고,
00:02:22병합까지 되었으며,
00:02:24실제로 BUN 코드베이스 전부를
00:02:28SIG에서 Rust로 마이그레이션했습니다.
00:02:30보시다시피 엄청난 규모의 풀 리퀘스트였죠.
00:02:32백만 줄 이상의 코드가 추가되었습니다.
00:02:35SIG 코드 제거는
00:02:39다른 단계에서 이루어졌고요.
00:02:40그래서 단순 교체가 아니었던 겁니다.
00:02:42하지만 보시다시피 7,000개에 가까운 커밋으로,
00:02:44엄청난 변화였죠.
00:02:46당연히 이 코드는 사람의 검토를 거치지 않았습니다.
00:02:51전부는 아니더라도 말이죠.
00:02:52AI가 검토했습니다.
00:02:54테스트는 통과했지만 사람의 검토는 없었죠.
00:02:59AI가 어떻게 사용됐는지는 잠시 후에 다시 이야기하죠.
00:03:02아무튼 그렇게 병합되었습니다.
00:03:06물론 더 많은 논의가 이어졌고요.
00:03:08방금 언급했듯이 사람의 검토를 거치지 않았죠.
00:03:10그 기간 내에 사람이 검토하는 건 불가능하니까요.
00:03:14하지만 커뮤니티가 뛰어들어 내용을 분석했습니다.
00:03:17그 후 첫 번째 블로그 포스트가 나왔죠.
00:03:19모든 세부 사항을 다룬 공식적인 글은 아니지만,
00:03:23Buntine에서 unsafe 사용에 대해
00:03:25발표한 첫 번째 성명서였습니다.
00:03:29왜냐하면 이 풀 리퀘스트 이후 가장 큰 비판 중 하나가
00:03:32Rust 코드가 관용적인 Rust가 아니라는 점이었거든요.
00:03:37처음부터 만들었다면 쓰지 않았을
00:03:41그런 종류의 Rust 코드였던 겁니다.
00:03:44오히려 SIG에서 Rust로의 변환에 가까웠죠.
00:03:46즉, 모든 Rust 모범 사례나
00:03:50패턴이 사용된 건 아니었습니다.
00:03:54특히 꽤 많은 양의
00:03:55unsafe 코드가 포함되어 있었죠.
00:03:58unsafe를 이해하려면,
00:04:00Rust의 메모리 관리 방식을 알아야 합니다.
00:04:03그게 Rust의 가장 큰 장점 중 하나이고,
00:04:05다른 언어와는 상당히 다르니까요.
00:04:08대부분의 언어에는 가비지 컬렉터가 있어서,
00:04:10프로그램에서 더 이상 사용되지 않는 값을
00:04:14감지해 메모리를 해제해주죠.
00:04:16편리하지만 리소스를 소모합니다.
00:04:19아니면 직접 해야 하죠.
00:04:21C 언어처럼 직접 할당하고 해제해야 합니다.
00:04:24SIG에서도 마찬가지고요.
00:04:26메모리를 할당할 수 있지만,
00:04:28더 이상 필요하지 않을 때 free를 호출해야 하죠.
00:04:31defer를 사용할 수 있는데 이건 편리합니다.
00:04:33실행되기 전에 미리 호출해두면,
00:04:37스코프가 끝날 때 자동으로 호출되니까요.
00:04:40상황에 따라 다르긴 하지만,
00:04:43값의 필요성이 사라지는 경우가 많습니다.
00:04:47수동으로 메모리를 관리할 때는
00:04:49실수할 가능성이 많죠.
00:04:52세밀한 제어가 가능해서 효율적이지만,
00:04:55복잡한 프로그램에서는
00:04:58메모리 해제를 잊어버리거나,
00:05:00두 번 해제해서 에러를 발생시키기 쉽습니다.
00:05:04그래서 상충 관계가 있는 거죠.
00:05:05Rust는 다른 접근 방식을 취합니다.
00:05:07소유권 개념을 사용하는데,
00:05:09모든 값은 딱 하나의 소유자를 가집니다.
00:05:11스코프에 묶여 있죠.
00:05:15중괄호로 스코프를 만들 수 있고,
00:05:16함수도 자체 스코프를 가집니다.
00:05:19JavaScript에서도 익숙하시겠죠.
00:05:20값은 해당 스코프에 소유되고,
00:05:23스코프가 끝나면 메모리도 해제됩니다.
00:05:25수동으로 관리할 필요가 없어서 매우 편리하죠.
00:05:27가비지 컬렉터도 필요 없습니다.
00:05:30대신 명확한 규칙이 있습니다.
00:05:32값을 전달해야 하는 복잡한 프로그램에서는
00:05:36조금 복잡해질 수 있지만,
00:05:38생각의 전환이 필요합니다.
00:05:39결과적으로 메모리 안전성을 보장받죠.
00:05:41unsafe 키워드를 쓰지 않는 한 말입니다.
00:05:43자바스크립트에서 이미 알고 계실 개념이죠.
00:05:46메모리 관리는 이제 전적으로 여러분의 몫이죠.
00:05:47왜 이런 걸 할까요?
00:05:49예를 들어, C 라이브러리를 사용할 때,
00:05:51Rust에서도 C 코드를 부를 수 있는데,
00:05:53C 코드는 본질적으로 안전하지 않기 때문에
00:05:55그 코드를 호출하는 영역은 unsafe로 처리됩니다.
00:05:58그래서 외부 라이브러리와 상호작용하려면 필수죠.
00:06:00공식 성명에서도 언급했듯이,
00:06:02코드베이스 내 unsafe 사용의 상당 부분은
00:06:05실제로 C 라이브러리 호출과 관련이 있습니다.
00:06:07이건 어쩔 수 없는 부분이죠.
00:06:08하지만 코드를 개선하고
00:06:11unsafe를 줄일 수 있는 부분도 찾아냈습니다.
00:06:14후속 풀 리퀘스트를 통해 계속 개선 중입니다.
00:06:19처음 포팅은 시작점일 뿐이고,
00:06:22시간이 지나며 정제되고 있는 셈이죠.
00:06:24그래도 그 거대한 풀 리퀘스트에서
00:06:26테스트는 이미 통과했다는 점은 짚고 넘어갑시다.
00:06:28안정적이었다는 거죠.
00:06:29다만 애초에 Rust로 처음부터
00:06:31작성된 코드와 같은 수준의 품질은 아니었습니다.
00:06:33그게 목표가 아니었으니까요.
00:06:345월 21일까지의 이야기입니다.
00:06:37그 후엔 침묵이 이어졌죠.
00:06:40그리고 이 버전의 BUN은 아직 출시되지 않았습니다.
00:06:44제가 녹화하는 지금도 라이브 상태는 아닙니다.
00:06:48지금 BUN을 설치해도 여전히 SIG 버전을 받지만,
00:06:52조만간 바뀔 겁니다.
00:06:54그러다 7월 8일에,
00:06:56포팅에 대한 흥미로운 세부 정보가 담긴
00:07:00공식 블로그 포스트가 올라왔습니다.
00:07:04읽어볼 가치가 충분하죠.
00:07:07배울 점이 많으니 아래에 링크해 두겠습니다.
00:07:08비밀도 아니지만, 이 포팅 전체는
00:07:10AI의 도움으로 이루어졌습니다.
00:07:13BUN은 Anthropic이 소유하고 있다는 점도
00:07:14기억해 둘 필요가 있습니다.
00:07:15그들은 모든 토큰에 자유롭게 접근할 수 있었고,
00:07:18특히 대중에 공개되기 전인
00:07:20Claude 3.5 모델을 사용했죠.
00:07:22이번 포팅은 바로 그 Claude 3.5로 진행되었습니다.
00:07:24그건 그렇고, 지금 Cloud Code를 설치하신다면,
00:07:26Rust 버전인 BUN 1.4가 아직 안 나왔음에도,
00:07:28Cloud Code는 벌써
00:07:30미출시 BUN 버전 위에서
00:07:32돌아가고 있는 셈입니다.
00:07:35더 자세히 알아보겠습니다.
00:07:37이게 전체적인 흐름입니다.
00:07:40이 과정에서 배울 수 있는 게 정말 많거든요.
00:07:43그럼 이제,
00:07:45본격적으로 논의해 보죠.
00:07:46단순히 번역 도구로 AI를 쓴 게 아닙니다.
00:07:49그 이상의 의미가 있죠.
00:07:50포팅 과정에서 AI가 코드베이스를
00:07:52어떻게 이해했는지,
00:07:54그리고 어떤 실수가 있었는지,
00:07:56어떻게 교정되었는지 등 말입니다.
00:07:58모두가 궁금해할 부분이죠.
00:07:59특히 거대 프로젝트에서 AI를 통한
00:08:02전체 마이그레이션이 어떻게 가능했는지,
00:08:04그 실무적인 부분은
00:08:06정말 흥미롭습니다.
00:08:07단순한 자동 번역이 아니라,
00:08:08구조적인 해석이 필요했으니까요.
00:08:11그래서 아주 정교한 단계가 필요했습니다.
00:08:13AI의 도움을 받아 진행되었습니다.
00:08:15참고로 BUN은 Anthropic 소유라는 점을 기억할 필요가 있습니다.
00:08:18그래서 그들은 모든 토큰에 자유롭게 접근할 수 있었고,
00:08:22특히 Fable 5가 대중에 공개되기 전에도
00:08:24사용할 수 있었습니다.
00:08:26이번 포팅은 Fable 5로 진행되었습니다.
00:08:29참고로 지금 Cloud Code를 설치 중이라면,
00:08:32Rust 버전인 BUN 1.4가 아직 출시되지 않았음에도,
00:08:36Cloud Code는 이미
00:08:39미출시된 BUN 버전, 즉 Rust 버전 위에서
00:08:42실행되고 있다는 사실입니다.
00:08:44그렇습니다.
00:08:45아무튼 이번 포팅은 Cloud Code를 사용했고,
00:08:48당연히 BUN이 Anthropic의 일부라 무료 토큰을 기반으로
00:08:52진행된 것이나 다름없습니다.
00:08:54이 점을 기억하는 게 중요한 이유는,
00:08:56블로그 게시물에서 알 수 있듯이,
00:08:58모든 토큰 사용량을 합산하고
00:09:03일반적인 API 가격으로
00:09:04계산해 보면,
00:09:08전체 포팅 비용이 약 16만 달러에 달했을 것이기 때문입니다.
00:09:13놀라운 액수지만, 사실,
00:09:18이 프로젝트의 규모를 생각해 보면,
00:09:20BUN의 SIG 코드 규모가 53만 5천 줄이었음을 감안할 때,
00:09:26그 규모와,
00:09:28인력이 직접 Rust로 포팅하는 데 걸릴 시간을 고려하면,
00:09:3216만 달러는 생각보다 나쁘지 않은 비용일지도 모릅니다.
00:09:36어디에 사느냐에 따라 다르겠지만요.
00:09:38그럼에도 불구하고, 어떤 오픈 소스 프로젝트도
00:09:43이걸 해내기는 어려울 겁니다.
00:09:44대부분의 기업들도 포팅에
00:09:47그만한 비용을 들이기는 힘들 것입니다.
00:09:50이게 가능했던 건 BUN이 Anthropic 소속이기 때문입니다.
00:09:54물론, 이는 Anthropic 입장에서
00:09:58훌륭한 마케팅 수단이기도 합니다.
00:09:59그게 주된 의도는 아니었을 수도 있겠죠.
00:10:03저는 알 수 없습니다.
00:10:04하지만 확실히 멋진 마케팅이죠.
00:10:06이런 점들을 항상 유념해야 합니다.
00:10:08어쨌든 블로그 게시물에서,
00:10:10우리는 Jared가 어떻게 그 포팅 작업을 수행했는지,
00:10:14즉, 어떻게 포팅을 성공시켰는지 알 수 있습니다.
00:10:18모든 것은 'porting.md' 파일에서 시작되었습니다.
00:10:21그는 Claude와의 대화를 통해 이 파일을 만들었는데,
00:10:25블로그에서 언급했듯이
00:10:263시간 동안 논의하면서,
00:10:28Claude Code 및 Anthropic 모델들과 협력하여
00:10:32결정했습니다.
00:10:35SIG를 Rust 코드로 번역하기 위해
00:10:37어떤 형태의 'porting.md' 파일이 필요한지 말이죠.
00:10:40그 후 반복적으로 수정하여 만족스러운 결과를 얻었고,
00:10:44처음에는 3개의 파일로 테스트를 진행했습니다.
00:10:46결과가 만족스러워지자,
00:10:48Claude를 전체 BUN 코드 베이스에 적용했습니다.
00:10:53이제 블로그 게시물에서,
00:10:54그는 단순히 Claude에게 BUN을 Rust로
00:10:57다시 작성하라고 명령한 게 아니라는 점을 분명히 합니다.
00:11:00오히려 정교한 시스템을 구축했죠.
00:11:03메인 에이전트 하나를 두고,
00:11:07서브 에이전트들도 구동하면서
00:11:09'porting.md' 파일에 따라 포팅을 진행했습니다.
00:11:13그런 다음 두 개의 적대적 검토 에이전트를 두어
00:11:16메인 에이전트의 작업이 완료되면 결과물을 검토하고
00:11:19피드백을 제공했습니다.
00:11:21그리고 수정 에이전트가 그 피드백을 적용하도록 했죠.
00:11:24이 모든 과정을 루프로 실행하고,
00:11:25당연히 여러 워크 트리에 분산시켜
00:11:30전체 코드 베이스를 처리하며
00:11:33작업을 이어나갔습니다.
00:11:35블로그 게시물에서,
00:11:35그는 Claude Code의 50개 동적 워크플로우를 사용해
00:11:38BUN을 Rust로 재작성했다고 언급했습니다.
00:11:40이 워크플로우들은 11일 동안 수많은
00:11:43서브 에이전트를 생성하는 방식입니다.
00:11:46관련해서 유용한 차트도 포함되어 있습니다.
00:11:48일반적으로 블로그 게시물에는
00:11:49이해를 돕는 멋진 그래픽들이 있어서,
00:11:51내용을 더 쉽게 파악할 수 있습니다.
00:11:53일자별로 생성되어 푸시된 커밋 양을 보여주며,
00:11:56시간대별 진행 상황도
00:11:58나타내고 있습니다.
00:12:00이 모든 과정은 Claude Code의 루프와,
00:12:04수많은 서브 에이전트의 도움,
00:12:05그리고 메인 에이전트, 검토 에이전트, 수정 에이전트의
00:12:08명확한 프로세스 덕분에 가능했습니다.
00:12:10또한 그는 별도의 경로를 통해
00:12:15모든 테스트가 작동하도록 만들었습니다.
00:12:20그 과정에서 자체적인 어려움도 따랐는데,
00:12:22테스트 스위트가 워낙 크고 복잡해서,
00:12:25다양한 인프라 제약에 부딪혔기 때문입니다.
00:12:29메모리를 많이 소모하는 테스트들이 있어,
00:12:31병렬로 여러 테스트를 실행하는 것이
00:12:33그래서 제대로 작동하지 않았죠.
00:12:34하지만 결국 AI의 도움을 받아 그 문제도 모두 해결했습니다.
00:12:39테스트를 실행하고, 코드를 수정하고,
00:12:42테스트를 다시 돌리는 식이었죠.
00:12:43정말 많은 반복 작업과 에이전트, 하위 에이전트들이 동원되었고,
00:12:47당연하게도 토큰도 엄청나게 소비되었습니다.
00:12:49토큰 비용으로만 16만 5천 달러가 들어간 셈이죠.
00:12:53물론 여러분도 직접 더 자세히 살펴볼 수 있고,
00:12:55그런 세부적인 내용에 관심이 있으시다면
00:12:57직접 확인해보시길 권해드립니다.
00:12:59그 과정이 잘 기록된 정말 훌륭한 블로그 게시물이거든요.
00:13:03아무튼 요약하자면, 11일 동안 포팅 작업이 어떻게 진행되었는지,
00:13:08여러 워크플로우에 걸쳐 얼마나 많은 에이전트와 하위 에이전트가 쓰였는지,
00:13:12그리고 11일이 넘는 기간 동안 50개의 워크플로우가 돌아갔다는 점,
00:13:17API 비용으로만 16만 5천 달러가 소모되었다는 사실을 알 수 있습니다.
00:13:24마지막으로, 블로그 게시물을 마치면서 그는,
00:13:29Bun 1.4가 이전 Zig 버전의 여러 버그를 수정했고,
00:13:35메모리 효율이 더 높으며 더 가볍다고 언급했습니다.
00:13:38Zig 제작자인 앤드류 켈리의 반응에서 알 수 있듯이,
00:13:43이러한 개선 사항 중 일부는 아마 Zig로도 충분히 가능했을지도 모릅니다.
00:13:47하지만 그 블로그 게시물은 수정된 이력이 있어 꽤 흥미롭습니다.
00:13:53처음보다 분노가 훨씬 덜 섞여 있거든요.
00:13:57첫 버전은 인신공격으로 가득 차 있었는데,
00:14:00그러고는 정작 자신은 인신공격할 의도가 없었다고 말하는 게 참...
00:14:03그렇지만 분명 인신공격 투성이었죠.
00:14:05아래에 링크해 드릴 최종 버전 역시 여전히 상당히 자극적입니다.
00:14:11결국 첫 번째 버전을 읽어보면 분명히 알 수 있듯이,
00:14:14이번 버전도 마찬가지지만,
00:14:16Zig의 제작자 앤드류와 Bun의 제작자 재러드는,
00:14:21이제 다시는 절친한 친구가 될 일은 없겠구나 싶습니다.
00:14:26그는 Bun이 Zig를 재정적으로 지원해 준 것에 고마워하면서도,
00:14:31Bun 코드가 제대로 된 Zig로 작성되었다면 이런 포팅은 전혀 필요 없었을 거라며 화를 내는 식이죠.
00:14:41그는 Bun 저장소의 Zig 버전 코드 품질이 좋지 않아
00:14:44많은 문제가 발생했다고 매우 명확하게 주장합니다.
00:14:48글쎄요, 그게 사실일 수도 있고 아닐 수도 있겠죠.
00:14:53저는 Bun 정도 규모의 프로젝트라면 충분히 그럴 수 있다고 봅니다.
00:14:56Bun처럼 아주 빠르게 발전하는 프로젝트에서는 말이죠.
00:15:01코드 품질이 Zig 제작자의 기준에는 못 미쳤을 수도 있습니다.
00:15:06사실 대부분의 코드 프로젝트가 최상의 코드 품질을 유지하는 건 아니라는 점을 감안하면,
00:15:12논란의 여지는 충분히 있을 겁니다.
00:15:15그러니 여러분도 각자 판단해 보시면 될 것 같아요.
00:15:18이제 이 얘기는 여기서 마무리하겠습니다.
00:15:21제 생각에 그 답변 블로그 게시물은 상당히 설득력이 떨어집니다.
00:15:24분노가 너무 강하게 묻어있거든요.
00:15:29물론 타당한 지적들도 있습니다.
00:15:33재러드가 블로그 게시물에서 언급했듯이,
00:15:35Zig에서 Rust로의 포팅이 검증되었다는 점은 맞죠.
00:15:40물론 리뷰어 에이전트들이 있었지만, 테스트 스위트를 돌려서 작동하게 만든 것도 사실이니까요.
00:15:46앤드류가 정확히 지적했듯, 그 동일한 테스트 스위트가
00:15:48Zig 버전의 우수성을 입증하는 데에도 충분했어야 하는 것 아니냐는 거죠.
00:15:51어쩌면 테스트 스위트 자체도 개선되었어야 했을지도 모릅니다.
00:15:56어쨌든 이 둘이 절친이 될 일은 없다는 건 분명해 보이네요.
00:16:00Zig와 Rust 중 어느 언어가 Bun에 더 적합한지에 대해서는 의견이 없습니다.
00:16:04다만, AI 시대에는 Rust의 메모리 모델과
00:16:09컴파일 타임에 메모리 관련 오류를 잡을 수 있다는 점이 엄청난 장점이라고 생각합니다.
00:16:17이번 전체 포팅 작업이 AI 활용 측면에서 정말 인상적인 것 또한 사실이니까요.
00:16:23물론 대부분의 회사가 감당할 수 있거나, 감당하고 싶어 하지 않을 방식일 수는 있습니다.
00:16:30하지만 이런 작업을 AI로 해냈다는 것 자체가 대단한 거죠.
00:16:38단순한 '바이브 코딩'이나 무작정 프롬프트를 날리는 수준이 아닙니다.
00:16:41그 뒤에는 명확한 프로세스가 있었죠.
00:16:45많은 고민이 녹아있고, 자세한 기술적 내용을 들여다보면 그 사실이 더 분명해집니다.
00:16:48철저한 계획과 반복 작업, 그리고 접근 방식까지,
00:16:52절대 프롬프트 하나 던져서 나온 결과물이 아니라는 겁니다.
00:16:56이런 작업 방식이 바로 AI로 할 수 있는 일의 본보기겠죠.
00:16:59코드베이스를 한 언어에서 다른 언어로 옮기는 것은 AI를 활용하기에 아주 좋은 사례입니다.
00:17:05생각해 보면 AI가 처음부터 코드를 작성하는 데는 어려움을 겪을 수 있어요.
00:17:08원하는 대로 코드를 작성하지 않거나 컨벤션을 따르지 않아서 일을 망칠 수도 있죠.
00:17:13물론 새로운 소프트웨어를 만드는 데도 AI는 정말 놀랍습니다.
00:17:17하지만 포팅 작업은 또 다른 문제에 직면하게 되죠.
00:17:21가장 큰 장점은 AI가 직접 참고할 수 있는 기존 코드베이스가 있다는 것,
00:17:27그리고 기존 테스트 스위트가 존재한다는 점입니다.
00:17:32기반으로 삼을 만한 것들이 아주 많다는 거죠.
00:17:36이 포팅 작업이 분명히 증명하듯이, AI 활용 사례로 아주 훌륭합니다.
00:17:40이번 사례에서 얻을 수 있는 가장 흥미로운 교훈이라고 생각해요.
00:17:43과거에는 불가능했던 프로젝트도 이제는 시도할 수 있게 되었다는 점입니다.
00:17:47물론 모든 기업을 위한 것은 아니겠지만, 규모가 있는 기업이라면 충분히 고려해 볼 만하죠.
00:17:53AI를 통한 레거시 소프트웨어 현대화가 아주 좋은 활용 사례가 될 수 있을 겁니다.
00:17:57이미 가능하다는 점이 이번에 입증되었으니까요.
00:17:59물론 Bun 1.4가 아직 정식 출시 전이라,
00:18:04한 달 뒤에 다 망해서 다시 예전으로 돌아가야 할 상황이 올지 지켜봐야겠죠.
00:18:08그럴 가능성을 완전히 배제할 수는 없겠지만, 제 생각엔 그러지 않을 것 같습니다.
00:18:12이미 Cloud Code CLI 같은 곳에서 초기 도입하여 프로덕션 환경에 사용 중이거든요.
00:18:13인간 리뷰어는 없었지만, AI를 통해 광범위하게 테스트되고 검토되었습니다.
00:18:18그래서 꽤 잘 해결될 것이라 확신합니다.
00:18:19정말 인상적인 성과이자 아주 훌륭한 AI 활용 방식이었다고 생각해요.
00:18:26물론 언제나 그렇듯, 이번 사례에 대해 여러분은 어떻게 생각하시는지도 궁금하네요.
00:18:30자, 오늘은 여기까지입니다.
00:18:32지금까지의 내용에 대해 어떻게 생각하시나요?
00:18:36댓글로 자유롭게 의견을 나눠주세요.
00:18:40이미 Cloud Code CLI와 같은 일부 얼리어답터들은 실무 환경에서 이를 사용하고 있죠.
00:18:47물론 사람이 아니라 AI가 검토한 것이긴 하지만, 광범위하게 테스트되고 검토를 거쳤습니다.
00:18:54그래도 저는 이게 잘 풀릴 거라고 꽤 확신하고, 정말 인상적인 성과이자 AI를 아주 인상적으로 활용한 사례라고 생각합니다.
00:19:03하지만 언제나 그렇듯, 여러분은 이 모든 것에 대해 어떻게 생각하시는지도 궁금합니다.

핵심 요약

Bun은 53만 5천 줄의 Zig 코드를 Claude 3.5 기반의 멀티 에이전트 자동화 시스템을 통해 11일 만에 Rust로 성공적으로 마이그레이션하며 레거시 소프트웨어 현대화의 새로운 가능성을 입증했습니다.

하이라이트

  • JavaScript 런타임 Bun은 기존 Zig 코드를 Rust로 완전히 마이그레이션했습니다.

  • 이번 마이그레이션에는 53만 5천 줄의 코드가 포함되었으며, Claude 3.5 모델을 통해 약 11일 만에 완료되었습니다.

  • 포팅 과정에서 발생한 API 사용료는 일반적인 가격 책정 기준 환산 시 약 16만 5천 달러에 달합니다.

  • 마이그레이션은 메인, 서브, 적대적 검토, 수정 에이전트로 구성된 정교한 자동화 루프 시스템으로 진행되었습니다.

  • 기존 Zig 버전의 품질 문제와 메모리 관리 방식을 보완하기 위해 Rust의 소유권 모델과 메모리 안전성을 채택했습니다.

타임라인

Bun의 Rust 포팅 타임라인과 배경

  • Bun의 Rust 포팅은 5월 초 GitHub 저장소에서 관련 브랜치가 발견되며 시작되었습니다.
  • 5월 14일 7,000개에 가까운 커밋과 100만 줄 이상의 코드가 포함된 풀 리퀘스트가 병합되었습니다.
  • 해당 마이그레이션은 사람의 직접적인 검토 없이 AI 기반의 자동화 프로세스를 거쳤습니다.

5월 초 공식 저장소에서 포팅 방법과 변환 테이블이 담긴 마크다운 파일이 발견되면서 포팅 사실이 공개되었습니다. 이후 5월 14일, 53만 5천 줄 이상의 기존 코드베이스를 Rust로 전환하는 대규모 풀 리퀘스트가 병합되었습니다. 이 과정은 사람이 일일이 검토하기 불가능한 규모였으며, 사실상 전적으로 AI에 의해 검증되고 테스트되었습니다.

기술적 선택과 메모리 관리 방식

  • 이번 포팅의 주요 비판점은 Rust 모범 사례를 따르지 않는 'unsafe' 코드의 빈번한 사용이었습니다.
  • 많은 unsafe 코드는 외부 C 라이브러리와 상호작용하기 위한 불가피한 선택이었습니다.
  • Rust의 소유권 모델은 가비지 컬렉터 없이도 안전한 메모리 관리를 가능하게 합니다.

기존 Zig 코드의 메모리 관리 방식과 달리, Rust는 소유권 개념을 통해 메모리 안전성을 보장합니다. 그러나 포팅된 코드에는 Rust의 관용구와 다른 방식이 사용되었고, 성능과 하위 호환성을 위해 unsafe 키워드가 포함되었습니다. 개발팀은 이를 개선하기 위해 후속 풀 리퀘스트를 통해 지속적으로 unsafe 범위를 줄여나가고 있습니다.

AI 기반 마이그레이션 프로세스

  • 포팅 작업에는 50개의 동적 워크플로우와 Claude 3.5 모델이 활용되었습니다.
  • 메인 에이전트, 적대적 검토 에이전트, 수정 에이전트로 구성된 자동화 루프가 구축되었습니다.
  • Anthropic의 내부 리소스를 활용해 진행되었으며, 비용은 약 16만 5천 달러로 추산됩니다.

단순 번역을 넘어 정교한 에이전트 시스템이 도입되었습니다. 메인 에이전트가 작업을 수행하면 두 개의 적대적 검토 에이전트가 결과를 비판하고, 수정 에이전트가 이를 반영하는 구조입니다. 이 프로세스는 11일 동안 50개의 워크플로우로 실행되었으며, 수많은 반복 테스트를 통해 인프라 제약 문제까지 해결했습니다.

커뮤니티 반응과 현대화의 의의

  • Zig 제작자인 앤드류 켈리는 포팅 과정에서의 코드 품질과 비판적 언사에 대해 강한 불만을 표출했습니다.
  • Bun 1.4는 메모리 효율성을 개선하고 기존 버그를 수정하는 등 기술적 진전을 보였습니다.
  • 이번 사례는 규모가 큰 레거시 프로젝트도 AI 에이전트를 통해 현대화할 수 있음을 증명했습니다.

Zig 제작자와 Bun 제작자 사이의 갈등은 프로젝트의 코드 품질 논란으로 이어졌습니다. 하지만 실제 결과물인 Bun 1.4는 더 가볍고 효율적인 성능을 보여줍니다. 결과적으로 이번 사례는 프롬프트 한 번으로 끝나는 '바이브 코딩'이 아니라, 철저한 기술적 계획과 루프형 에이전트 구조가 대규모 소프트웨어 재작성에도 성공할 수 있음을 보여주는 이정표가 되었습니다.

커뮤니티 글

모든 글 보기