최근 'Gen-system'이라는 새로운 오픈소스 프로젝트가 공개되어, 로컬 대규모 언어모델(LLM)이 소스 코드를 더 정확하게 이해하고 생성할 수 있도록 돕는 새로운 접근 방식을 제시했습니다. 이 시스템은 LLM이 기존 코드베이스에 대한 추측 없이 정확한 정보를 바탕으로 코드를 작성하도록 지원하며, 특히 Go, COBOL, Java, TypeScript, Python 등 다양한 프로그래밍 언어의 내부 구조를 파싱(parsing)하여 상세한 정보를 제공하는 것이 특징입니다.
Gen-system의 핵심은 LLM이 코드 생성에 참여하기 전에, 사람이 작성한 파서(parser)가 먼저 소스 코드의 구문 트리(syntax tree), 심볼 인덱스(symbol index), 호출 그래프(call graph), 제어 흐름 그래프(control flow graph)를 구축한다는 점입니다. 이 과정에는 LLM이 전혀 개입하지 않으므로, 항상 동일한 코드에 대해 동일한 분석 결과를 보장합니다. 이렇게 얻은 정보를 바탕으로 각 루틴의 입력, 호출, 데이터 쓰기 작업 등을 '믿음(belief)'이라는 형태로 목록화하고, LLM이 추가하는 '주장(claim)' 중 파서와 모순되는 내용은 걸러내어 사용하지 않습니다. 개발자는 이 '믿음'을 직접 수정하고 검증할 수 있으며, 오직 검증된 정보만이 코드 생성에 활용됩니다. 실제로 Gen-system은 Qwen3:14b와 Qwen2.5-coder:14b 같은 로컬 LLM을 활용해 Go 서비스를 계획하고 코드를 생성하며, 생성된 각 작업은 서비스 파일에 통합되기 전에 반드시 컴파일되어야 합니다. 실패한 코드는 '구현되지 않은 스텁(not implemented stub)'으로 처리되며, 전체 서비스에 대해 `go vet`, `go build`, `go test`를 실행하여 다시 파서로 결과를 검증하는 과정을 거칩니다.
이러한 접근 방식은 LLM 기반의 코드 생성 도구가 직면하는 주요 문제 중 하나인 '환각(hallucination)' 현상을 줄이고, 생성된 코드의 신뢰성을 크게 높일 수 있다는 점에서 중요합니다. 기존 시스템에 대한 정확한 이해 없이 코드를 생성하는 LLM의 한계를 극복하여, 개발자들이 LLM을 활용해 더 복잡하고 중요한 시스템을 개발하고 유지보수하는 데 큰 도움을 줄 것입니다. 특히 레거시 시스템이나 특정 도메인 언어(DSL)를 다루는 환경에서 LLM의 활용성을 높여, 개발 생산성을 향상시키고 잠재적인 오류를 줄이는 데 기여할 것으로 기대됩니다.