
솔직히 말해봅시다. C++ 개발자라면 누구나 한 번쯤 겪어봤을 겁니다. 새벽 3시, 원인 모를 Segmentation fault 때문에 모니터 앞에서 머리를 쥐어뜯던 경험 말입니다. 포인터 주소 끝자리가 이상하게 바뀌어 있고, 메모리 누수는 어디서 터졌는지 감도 안 잡히는 그 상황. 저도 삼성전자 시절부터 15년 가까이 시스템 소프트웨어를 만지면서 지겹도록 겪은 일입니다.
Rust가 답이라고들 합니다. 맞습니다. Rust의 Borrow Checker는 훌륭합니다. 하지만 현업의 현실은 그렇게 낭만적이지 않습니다. 수십 년간 쌓인 거대한 C++ 레거시 코드를 당장 내일부터 Rust로 다시 짜자고요? 그건 경영진 입장에서 TCO(총 소유 비용)를 전혀 고려하지 않은 헛소리입니다.
그렇다면 우리는 영원히 dangling pointer와 use-after-free의 공포 속에 살아야 할까요? 최근 흥미로운 시도가 있어 소개합니다. 바로 AI를 활용해 C++ 코드 위에 Rust 스타일의 정적 분석기를 덮어씌우는 방법입니다.
왜 기존 도구로는 안 되는가
C++에 Rust의 안정성을 가져오려는 시도는 많았습니다.
구글의 시도: 매크로를 이용해 Borrow checking을 구현하려 했지만, C++ 문법의 한계로 실패했습니다.
Circle C++: 훌륭하지만, 폐쇄적인 컴파일러에 의존해야 합니다.
g++이나clang을 못 쓴다는 건 실무에서 치명적인 제약입니다.
우리가 필요한 건 컴파일러를 바꾸지 않으면서, 기존 코드에 안전장치를 거는 '가벼운' 솔루션입니다.
AI를 갈아 넣어 만든 rusty-cpp
이 아이디어의 핵심은 간단합니다. 컴파일러를 건드리는 대신, 소스 코드의 AST(추상 구문 트리)를 분석해서 Rust의 규칙을 위반하는지 검사하는 별도의 툴을 만드는 겁니다. 이론적으로는 완벽하지만, 문제는 리소스였습니다. 정적 분석기를 바닥부터 만드는 건 엄청난 엔지니어링 리소스가 들어갑니다. 박사과정 학생을 시키자니 논문 거리가 안 되고, 직접 하자니 시간이 없죠.
여기서 게임 체인저가 등장합니다. 바로 Claude 같은 AI 코딩 어시스턴트입니다.
이 프로젝트의 진행 과정은 놀라웠습니다. 단순히 코드를 짜달라고 한 게 아닙니다.
- 설계 위임: "Rust 스타일의 C++ 정적 분석기를 만들고 싶다"고 던졌더니, AI는 실행 가능한 아키텍처를 제안했습니다.
- TDD 루틴: 프로토타입을 만들고, 테스트 케이스를 짭니다. 실패하면 고치고, 다시 테스트를 늘립니다. 이 지루한 반복 작업을 AI는 지치지도 않고 수행했습니다.
- 검증: 실제 RPC 컴포넌트 리팩터링에 투입했고, 사람이 놓친 버그를 잡아냈습니다.
주니어보다 나은 AI, 위기이자 기회
초기 모델(Sonnet 3.7 등)은 주니어 개발자 같았습니다. 시키는 건 하는데 실수가 잦았죠. 하지만 최신 모델(Opus 4.5 등)은 달랐습니다.
저는 단순히 TODO 리스트만 던져줬습니다. AI는 스스로 코드를 분석하고, 수정하고, 검증했습니다. 결과물을 보고 소름이 돋았습니다. 웬만한 박사과정 학생보다, 어쩌면 저보다 엔지니어링 속도가 빨랐으니까요. 제가 한 일이라곤 구현 옵션 A, B, C 중 가장 합리적인 B를 고르는 의사결정뿐이었습니다.

기술적 타협점: 주석 기반 문법
이 프로젝트가 영리했던 건, C++ 문법을 파괴하지 않았다는 점입니다. 새로운 문법을 만드는 대신, 주석을 활용했습니다.
@safe: 안전한 함수임을 명시@unsafe: 위험한 포인터 연산이 포함됨을 명시
이 방식은 모든 C++ 컴파일러와 호환됩니다. 기존 빌드 파이프라인을 건드리지 않고도 정적 분석 단계만 추가하면 되는 겁니다. 이것이 바로 현업에서 먹히는 '실용주의'입니다.
결론: 시스템 엔지니어의 미래
이 사례가 시사하는 바는 명확합니다. 앞으로 "코드를 짤 줄 아는 능력"만으로는 경쟁력이 없습니다. AI가 3년 차 개발자의 코딩 속도를 이미 추월했습니다.
이제 우리에게 필요한 건 '무엇을 만들 것인가'를 정의하는 설계 능력과, AI가 내놓은 결과물 중 최적의 해를 선택하는 안목입니다. C++의 복잡성을 탓하며 Rust로 도망갈 생각만 하지 마십시오. 지금 있는 도구와 AI를 활용해, 현재의 레거시를 제어 가능한 상태로 만드는 것. 그것이 진짜 엔지니어의 생존법입니다.
오늘 당장 여러분의 레거시 코드에 AI를 붙여보세요. 밤샘 디버깅을 줄이는 열쇠가 될지도 모릅니다.


