AI 코딩 어시스턴트가 대규모 레거시 코드베이스에서 부정확한 답변을 내놓는 근본 원인은 모델 성능이 아니라 "코드를 관계가 있는 구조로 읽지 않고 텍스트로 처리하기 때문"이다. 주류 접근법인 RAG(벡터 유사도)는 임베딩 과정에서 의존성·호출 관계가 사라져 경로 추적이 불가능하다. Kiro Code Intelligence는 AST(추상 구문 트리)와 LSP 두 계층으로 이 문제를 해결한다. tree-sitter로 18개 언어에 걸쳐 설정 없이 즉시 구조를 파악하고, 필요 시 LSP로 컴파일러 수준의 정밀도를 더하는 방식이다.
핵심 포인트- RAG의 근본 한계: 코드 임베딩 과정에서 구조·의존 관계가 손실되어 텍스트 유사도와 실제 의존 관계가 다른 환각 발생
- AST 핵심 특성 3가지: 결정론적(동일 코드=동일 그래프), 비용 없는 파싱(LLM 토큰 불필요), 관계 보존(import/calls/implements가 명시적 엣지)
- 2계층 설계: tree-sitter(즉시, 18개 언어, 설정 無) + LSP(컴파일러 수준 정밀도, 타입·참조 인덱스)
- 패턴 검색/재작성: AST 노드 매칭으로 주석·문자열 내 동일 텍스트를 필터링, `$VAR`·`$$$` 메타변수로 정교한 패턴 지정
- grep vs 심볼 검색 격차: "isEmpty" 텍스트 검색 → 379개 결과/69개 파일 혼재, 심볼 검색 → 정의·호출 구분 + 맥락화된 결과
- 정밀 리팩터링 적용: `StringUtils.isEmpty($ARG)` → `StringUtils.isEmpty($ARG, false)` 패턴 재작성을 dry-run 확인 후 실제 호출부만 안전 적용
상세 정리- RAG 한계 4가지: 구조/관계 손실(임베딩 과정), 환각(텍스트 유사도≠실제 의존관계), 경로 추적 불가(호출 흐름 재구성 불가), 컨텍스트 휘발성(세션 종료 시 이해 소멸)
- AST 기반 관계 추출 예시: Python `PaymentService(PaymentGateway)` 클래스에서 `implements`, `calls` 엣지 자동 추출
- IDE가 이미 AST를 사용: Go to Definition·Find All References·Rename Symbol·Outline 모두 AST 기반 — grep Rename과의 차이가 바로 AST
- tree-sitter 계층: Java/TypeScript/Python/Go/Rust 등 18개 언어, 사전 설정 없이 `/code overview` 즉시 실행 가능
- LSP 계층 언어별 설치: TypeScript(typescript-language-server), Rust(rust-analyzer), Python(pyright), Go(gopls), Java(jdtls), Ruby(solargraph), C/C++(clangd), Kotlin(kotlin-language-server)
- LSP 활성화: `/code init` → `.kiro/settings/lsp.json` 생성 후 서버 시작, 이후 타입 오류 즉시 확인·시그니처 검토 가능
- Spring PetClinic(1,800줄) 실전: `/code overview`로 4개 패키지 구조 즉시 파악, `/code summary`로 AGENTS.md·README 초안 자동 생성
- Apache Commons Lang(10만 줄, 263파일) 실전: StringUtils 메서드 240개를 grep으로 찾으면 379개 결과/69개 파일 혼재 → 심볼 검색으로 정의·호출 정확히 구분
- 자연어 인터페이스: "Owner 클래스가 참조되는 곳을 찾아줘" → Kiro가 내부 구조 질의로 변환, 에이전트도 트리 순회 코드 없이 동일 정밀 정보 접근
- 주요 명령어: `/code overview`(구조 개요), `/code summary`(문서 초안), `/code init`(LSP 활성화), `/code status`, `/code logs`
- 벡터 DB·임베딩 파이프라인 불필요: AST는 기존 워크플로우 안에서 동작, 추가 인프라 필요 없음
왜 읽나AI 코딩 도구의 코드 이해 실패가 "모델 능력"이 아닌 "구조 전달 방식"의 문제임을 AST vs RAG 비교로 명확히 설명하며, Kiro IDE에서 tree-sitter + LSP 두 계층을 실제 코드베이스에 적용하는 방법을 설치 명령부터 10만 줄 실전 예시까지 구체적으로 따라갈 수 있다.