LLM 기반 코드 생성에서 발생하는 중복 구현 문제를 Neo4j 지식 그래프로 해결한 실전 도입기다. 쏘카에서 AI가 이미 존재하는 함수·컴포넌트를 모르고 재구현하는 문제가 반복되자, 코드베이스 전체를 그래프 DB에 색인하고 MCP 프로토콜로 LLM 컨텍스트에 연결하는 방식을 채택했다.
핵심 포인트- 중복 구현을 유발하는 근본 원인: LLM은 컨텍스트 창에 없는 코드를 "없는 것"으로 간주함
- Neo4j로 함수·클래스·모듈 간 의존 관계를 그래프로 모델링해 코드베이스를 인덱싱
- MCP 서버를 통해 LLM이 코드 생성 전 지식 그래프를 쿼리해 기존 구현 여부를 확인
- 도메인 주도 설계(DDD) 개념을 지식 그래프 스키마 설계에 적용해 바운디드 컨텍스트 단위 탐색 가능
- 그래프 쿼리 결과를 LLM 프롬프트에 동적으로 주입해 기존 API·유틸 재사용을 유도
상세 정리- 문제 정의: 팀이 AI 코드 어시스턴트를 쓸수록 `utils/format.ts`나 `useAuthGuard()` 같은 기존 함수가 다른 이름으로 재탄생하는 사례 증가
- 해결 방향 탐색: RAG(벡터 검색)는 의미 유사도 중심이라 정확한 함수명·시그니처 매칭에 약하다고 판단
- 그래프 DB 선택: 노드(함수/클래스/파일)와 엣지(import/호출/상속) 구조가 코드 의존성을 자연스럽게 표현
- Neo4j 스키마 설계: `Module`, `Class`, `Function`, `Interface` 노드 + `DEPENDS_ON`, `CALLS`, `EXPORTS` 릴레이션
- 코드 파싱 파이프라인: TypeScript AST 파서로 함수 선언·export를 추출해 Neo4j에 upsert
- MCP 서버 구현: `search_existing_code(query)` 툴을 노출해 Cypher 쿼리로 유사 함수 탐색
- LLM 연동: 코드 생성 요청 시 MCP 툴 호출 결과를 시스템 프롬프트에 삽입해 중복 방지
- DDD 적용: 바운디드 컨텍스트(auth, payment, booking)별로 노드에 레이블 추가해 도메인 경계 탐색 지원
- 실험 결과: 파일럿 4주간 AI 생성 중복 함수가 약 60% 감소
- 한계 및 향후 과제: 동적 import, 런타임 생성 코드는 정적 파싱으로 미탐 — 런타임 트레이싱 연계 검토 중
왜 읽나AI 코드 어시스턴트 도입 후 코드베이스가 오히려 비대해지는 문제를 겪는 팀에게 실용적 처방을 제시한다. Neo4j + MCP 연동 구현 코드와 실제 적용 수치가 포함돼 있어 바로 참조 가능하다.