핵심 작동 원리 심층 해부 (Under the Hood)
어떻게 텍스트에 불과한 소스 코드가 지능적인 그래프로 변환되는지, 그 내부 아키텍처를 단계별로 살펴보겠습니다.
1단계: 다국어 파싱과 하이브리드 타입 추론
가장 먼저, 코드를 정확하게 읽어내야 합니다. codebase-memory-mcp는 158개에 달하는 프로그래밍 언어를 지원하는 Tree-sitter 파서를 기반으로 작동합니다. 구문 분석을 통해 단순한 문자열을 AST(추상 구문 트리)로 변환하고, 그 속에서 클래스, 함수, 변수 선언 등을 노드(Node)로 식별합니다.
하지만 구문 분석만으로는 한계가 있습니다. 자바스크립트나 파이썬처럼 동적 타이핑을 사용하는 언어에서는 user.login()이라는 코드가 정확히 어느 클래스의 login 메서드를 호출하는지 알기 어렵기 때문입니다. 이를 해결하기 위해 내부에 경량화된 하이브리드 LSP(Language Server Protocol) 해상도 엔진을 탑재하여, 6가지 전략(6-strategy call resolution)을 통해 모호한 호출 관계를 정확히 찾아냅니다.
%%{init: {"theme":"base","themeVariables":{"primaryColor":"#F0EEE9","primaryBorderColor":"#2a78d6","primaryTextColor":"#2b2926","secondaryColor":"#e8f0fb","secondaryBorderColor":"#4a3aa7","secondaryTextColor":"#2b2926","tertiaryColor":"#eafaf3","tertiaryBorderColor":"#1baf7a","tertiaryTextColor":"#2b2926","lineColor":"#8a8578","textColor":"#2b2926","edgeLabelBackground":"#F0EEE9","noteBkgColor":"#F0EEE9","noteTextColor":"#2b2926","noteBorderColor":"#8a8578","clusterBkg":"#faf9f6","clusterBorder":"#d8d4c8","fontFamily":"Pretendard, sans-serif"}}}%%
flowchart LR
IN["원시 소스 코드"]
IN --> P1["Tree-sitter 구문 분석기"]
P1 --> P2["LSP 기반 하이브리드 타입 추론"]
P2 --> P3["SQLite 관계형 엣지 생성"]
P3 --> OUT["영구 지식 그래프"]
2단계: 로컬 데이터베이스를 통한 관계 구축
분석이 끝난 요소들은 메모리에서 휘발되지 않고, 로컬 환경의 SQLite 데이터베이스에 저장됩니다. 외부 클라우드로 코드를 전송하지 않으므로 철저한 보안이 유지됩니다.
이 데이터베이스 안에서 코드는 다음과 같은 형태의 엔티티(Entity)와 관계(Relationship)로 매핑됩니다.
%%{init: {"theme":"base","themeVariables":{"primaryColor":"#F0EEE9","primaryBorderColor":"#2a78d6","primaryTextColor":"#2b2926","secondaryColor":"#e8f0fb","secondaryBorderColor":"#4a3aa7","secondaryTextColor":"#2b2926","tertiaryColor":"#eafaf3","tertiaryBorderColor":"#1baf7a","tertiaryTextColor":"#2b2926","lineColor":"#8a8578","textColor":"#2b2926","edgeLabelBackground":"#F0EEE9","noteBkgColor":"#F0EEE9","noteTextColor":"#2b2926","noteBorderColor":"#8a8578","clusterBkg":"#faf9f6","clusterBorder":"#d8d4c8","fontFamily":"Pretendard, sans-serif"}}}%%
erDiagram
CODE_FILE {
string path
string language
}
CODE_CLASS {
string name
string module
}
CODE_FUNCTION {
string name
string visibility
}
CODE_FILE ||--o{ CODE_CLASS : "DEFINES"
CODE_CLASS ||--o{ CODE_FUNCTION : "CONTAINS"
CODE_FUNCTION ||--o{ CODE_FUNCTION : "CALLS"
CODE_FILE ||--o{ CODE_FILE : "IMPORTS"
3단계: 커뮤니티 탐지와 아키텍처 식별
단순히 점과 선을 연결하는 데 그치지 않고, Louvain 커뮤니티 탐지(Community Detection) 알고리즘을 적용합니다. 이 알고리즘은 촘촘하게 얽힌 함수와 파일 무리를 자동으로 분석하여 “아, 이 부분은 데이터베이스 접근 계층이구나”, “여기는 결제 처리 모듈이구나”라고 거시적인 아키텍처 경계를 스스로 찾아냅니다. 에이전트가 단편적인 코드뿐만 아니라 시스템 전체의 그림을 이해할 수 있도록 돕는 핵심 기술입니다.