최근 'Snafu'라는 새로운 에이전트 기반 AI 도구가 소스 코드의 '이름 짓기' 문제를 해결하기 위해 등장했습니다. 이 도구는 대규모 언어모델(LLM)을 활용하여 코드 내 심볼(변수, 함수 등) 이름의 모호성을 정량적으로 측정하고, 더 명확한 이름으로 개선하는 과정을 안내합니다. 이는 개발자들이 흔히 겪는 '이름 짓기의 어려움'을 AI의 도움으로 극복하려는 시도입니다.
Snafu의 핵심은 '이름 모호성 지수(NAN: Name Ambiguity Number)'를 계산하는 것입니다. 먼저, 코드에서 심볼을 추출한 뒤, 해당 심볼 이름만을 LLM에 전달하여 어떤 의미로 해석될 수 있는지, 각 해석의 확률은 얼마인지 분석합니다. 예를 들어, 'process_request'라는 이름에 대해 '요청 전체 처리(55%)', '요청 객체 변환(30%)', '요청 기록(15%)'과 같은 해석과 확률을 제시합니다. 이 해석 분포를 기반으로 섀넌 엔트로피(Shannon Entropy)를 계산하고, 이를 다시 변환하여 NAN을 도출합니다. NAN이 1에 가까울수록 모호성이 낮고, 숫자가 높을수록 여러 의미로 해석될 가능성이 크다는 것을 의미합니다.
NAN 계산 후, Snafu는 사용자에게 LLM이 제시한 해석 중 실제 의미를 확인하도록 요청합니다. 이 '인간 참여(Human-in-the-loop)' 단계를 통해 정확한 의미를 파악한 뒤, LLM은 해당 의미를 가장 잘 나타내는 새로운 이름을 제안합니다. 제안된 이름은 다시 NAN 분석을 거쳐 기존 이름보다 모호성이 개선되었는지(NAN delta > 0) 확인하며, 최종적으로 전체 맥락(full context)에서 새 이름의 적합성을 검토하는 과정을 거쳐 사용자에게 최적의 이름을 추천합니다.
이러한 접근 방식은 코드의 가독성(readability)과 유지보수성(maintainability)을 획기적으로 개선할 수 있습니다. 명확한 이름은 개발자가 코드를 이해하는 데 드는 인지 부하(cognitive load)를 줄여주고, 협업 효율성을 높이며, 잠재적인 버그 발생 가능성도 낮춥니다. Snafu는 파이썬(Python)을 기본 지원하며, Tree-sitter를 통해 루비(Ruby), C#(C-Sharp), 자바(Java), 자바스크립트(JavaScript), 타입스크립트(TypeScript), PHP, 러스트(Rust), 고(Go) 등 다양한 언어의 심볼 추출도 지원하여 활용 범위를 넓혔습니다.
Snafu는 OpenAI, Anthropic, Gemini 등 다양한 LLM 공급자를 지원하며, 개발자는 원하는 모델을 선택하여 사용할 수 있습니다. 이 도구는 단순히 이름 변경을 제안하는 것을 넘어, 이름의 품질을 정량적으로 측정하고 개선 과정을 체계적으로 안내함으로써, 소프트웨어 개발의 고질적인 문제 중 하나를 AI의 힘으로 해결하려는 중요한 진전을 보여줍니다. 이는 개발 생산성 향상과 더불어 고품질 코드 작성 문화 확산에 기여할 것으로 기대됩니다.