AI 코딩 어시스턴트의 레거시 코드 이해 한계는 텍스트 기반 처리 방식과 할루시네이션(Hallucination) 발생으로 인한 구조·관계 소실 문제에서 비롯됨
AST(Abstract Syntax Tree)는 코드를 문법 구조로 분석하여 IDE처럼 결정론적(Deterministic)이고 관계 보존(Relationship Preservation)이 가능한 접근 방식을 제공함
Kiro Code Intelligence는 tree-sitter와 LSP(Language Server Protocol) 두 레이어로 AST 기반 코드 이해를 지원하며, 설정 없이 바로 사용하거나 타입 정보 기반 정밀 분석이 가능함
Apache Commons Lang 같은 10만 줄 규모 코드베이스에서도 grep 대비 정확한 심볼 검색과 안전한 패턴 재작성(Pattern Rewrite) 기능으로 효율적인 코드 탐색 및 리팩터링 지원
기존 AI 코딩 도구는 코드를 텍스트로 취급하여 벡터 검색(Vector Search) 기반 RAG(Retrieval-Augmented Generation) 방식으로 관련 코드를 찾아 모델에 전달합니다. 하지만 이 방식은 코드의 구조적 관계(Structural Relationship)를 파악하지 못해 할루시네이션(Hallucination)을 유발하고, 호출 경로 추적이나 문맥 유지가 어렵다는 한계가 있습니다. 반면 는 코드를 문법 구조 트리로 변환하여 이고 이 가능한 분석을 제공합니다. 이를 통해 IDE처럼 심볼 정의, 참조, 타입 정보까지 정확하게 파악할 수 있어, 텍스트 유사도만으로는 알 수 없는 코드의 실제 의존성과 흐름을 이해하는 데 훨씬 유리합니다.
Kiro Code Intelligence는 코드 이해를 위해 tree-sitter와 LSP(Language Server Protocol)라는 두 가지 레이어를 통합했습니다. 첫 번째 레이어인 tree-sitter는 설정 없이 즉시 사용 가능하며, 18개 언어에 대해 구문 트리(Syntax Tree) 기반의 가벼운 검색을 지원합니다. 이를 통해 코드 구조 개요 파악이나 특정 호출 패턴 검색이 용이합니다. 두 번째 레이어인 LSP는 언어 서버(Language Server)를 통해 타입 정보, 심볼 참조 등 컴파일러 수준의 정밀한 분석을 제공합니다. 사용자는 필요에 따라 이 두 레이어를 오가며 가벼움과 정확성 사이의 균형을 맞출 수 있으며, 별도의 벡터 DB나 임베딩 파이프라인 구축 없이 기존 워크플로에 통합됩니다.
AST를 활용한 패턴 검색(Pattern Search)은 단순 텍스트 검색의 한계를 뛰어넘습니다. 예를 들어, `StringUtils.isEmpty($ARG)`와 같은 패턴은 인자의 종류에 상관없이 해당 메서드 호출 형태만을 정확히 찾아냅니다. 이는 정규식(Regular Expression)이 주석이나 문자열 내의 같은 글자까지 탐색하는 것과 달리, 실제 코드 구조만을 대상으로 삼기 때문입니다. 또한, 패턴 재작성(Pattern Rewrite) 기능은 `dry-run` 옵션과 함께 제공되어, 메서드 시그니처 변경과 같은 위험한 리팩터링 시에도 영향 범위를 정확히 파악하고 안전하게 적용할 수 있도록 돕습니다. 이는 수만 줄 규모의 코드베이스에서도 일관된 비용으로 적용 가능합니다.
Apache Commons Lang과 같이 10만 줄, 263개 파일 규모의 대규모 코드베이스에서도 AST 기반 접근 방식의 효과는 분명합니다. 단순 키워드 검색(grep)은 69개 파일, 379회 사용된 `isEmpty`를 정의와 호출 구분 없이 뒤섞어 보여주지만, Kiro의 심볼 검색(Symbol Search)은 의도에 따라 메서드 정의부를 정확히 찾아 설명해줍니다. 또한, 패턴 검색(Pattern Search)을 통해 `StringUtils.isEmpty($ARG)`의 사용 패턴을 정교하게 탐색하고, LSP를 활성화하면 타입 기반 참조 수집 및 타입 오류 검증까지 가능해집니다. 이는 코드베이스의 복잡성이 증가할수록 사람의 인지 부하를 줄이고 탐색 및 유지보수 효율성을 극대화하는 데 기여합니다.
AST는 코드의 구조적 정보를 LLM에 전달하는 효과적인 수단입니다. 파싱과 트리 순회를 통해 추출된 구조적 관계(Structural Relationship)는 LLM이 코드의 문맥을 더 정확하게 이해하도록 돕습니다. 예를 들어, `/code overview` 명령은 코드 구조 개요를 생성하여 LLM 컨텍스트에 전달하며, 이는 RAG 방식의 임베딩 파이프라인 및 벡터 DB 구축 비용 없이도 코드베이스 전체의 맥락을 파악하는 데 도움을 줍니다. 비록 개요 생성 시 토큰이 소모되더라도, 불필요한 파일 탐색과 중복 탐색을 줄여 결과적으로는 더 효율적인 코드 이해와 생성을 가능하게 합니다. 즉, LLM의 생성 능력과 AST의 구조 이해 능력이 결합될 때 시너지가 발생합니다.