ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MCP + LSP의 시너지 - Serena가 Claude Code를 근본적으로 향상시키는 원리
    실제 경험과 인사이트를 AI와 함께 정리한 글 2025. 10. 1. 15:16

    MCP + LSP의 시너지 - Serena가 Claude Code를 근본적으로 향상시키는 원리

    Claude Code의 컨텍스트 유지 문제는 단순한 버그가 아니라 대형 언어 모델의 구조적 한계에서 비롯됩니다. MCP Serena는 이 한계를 우회하는 게 아니라, 완전히 새로운 패러다임으로 문제를 해결합니다. Model Context Protocol과 Language Server Protocol의 결합은 단순한 기술 통합이 아닌 건축학적 혁신입니다.

    트랜스포머의 한계: 왜 Claude는 잊어버릴 수밖에 없나

    Attention의 위치 편향

    트랜스포머 모델의 어텐션 메커니즘은 최근 토큰에 더 높은 가중치를 부여합니다. 대화가 길어질수록 초반 정보의 영향력이 기하급수적으로 감소합니다. 이는 설계상의 특징이지 버그가 아닙니다.

    수학적 현실: 10,000 토큰 대화에서 첫 1,000 토큰의 어텐션 가중치는 마지막 1,000 토큰의 1/10 이하로 떨어집니다.

    컨텍스트 윈도우의 롤링 화이트보드

    LLM은 대화 전체를 매번 하나의 긴 문서로 읽습니다. 진짜 메모리는 없습니다. 50,000 토큰 메시지를 10번 주고받으면, 모델은 500,000 토큰을 처리합니다. 이 과정에서:

    1. 자동 압축: 컨텍스트가 한도에 가까워지면 오래된 내용을 요약하거나 제거
    2. 정보 손실: 압축 과정에서 프로젝트 구조, 아키텍처 결정, 코딩 컨벤션이 증발
    3. 컨텍스트 리셋: 새 세션은 완전히 빈 상태에서 시작

    현업 영향: 개발자들은 세션당 평균 10-15분을 프로젝트 컨텍스트 재구축에 소비합니다.

    Model Context Protocol: 표준화된 도구 인터페이스

    MCP의 아키텍처 레이어

    MCP는 Anthropic이 2024년 11월 도입한 오픈 스탠다드로, AI와 외부 도구 간의 표준화된 통신 프로토콜입니다. 이전에는 N개의 AI 앱이 M개의 도구와 연동하려면 N×M개의 커스텀 통합이 필요했습니다. MCP는 이를 N+M으로 줄입니다.

    3-Layer Architecture:

    1. Host (Container & Coordinator)

    • 여러 클라이언트 인스턴스 관리
    • 보안 정책과 권한 제어
    • AI/LLM 통합과 컨텍스트 병합
    • 예: Claude Desktop, Claude Code, Cursor IDE

    2. Clients (Session Managers)

    • 사용자 요청을 MCP 형식으로 변환
    • 각 서버와 1:1 관계 (한 클라이언트당 한 서버)
    • 인터럽션, 타임아웃, 재연결 처리
    • 응답 파싱 및 에러 핸들링

    3. Servers (Capability Providers)

    • 도구, 리소스, 프롬프트를 표준 인터페이스로 노출
    • 독립 프로세스로 실행 (JSON-RPC 통신)
    • 로컬(stdio) 또는 원격(HTTP/SSE) 가능
    • 예: Serena MCP Server

    MCP 프리미티브: 세 가지 상호작용 모델

    1. Tools (모델 제어형)

    {
      "name": "find_symbol",
      "description": "전역/로컬 심볼 검색",
      "inputSchema": {
        "symbol_name": "string",
        "symbol_type": "enum[class|function|variable]"
      }
    }

    AI가 자율적으로 실행을 결정. 예: search_for_pattern, replace_symbol_body

    2. Resources (애플리케이션 제어형)

    {
      "uri": "serena://project/symbols",
      "mimeType": "application/json",
      "description": "프로젝트의 모든 심볼 정의"
    }

    부작용 없이 컨텍스트 제공. 예: 파일 내용, 심볼 정의, 프로젝트 구조

    3. Prompts (사용자 제어형)

    {
      "name": "onboard_project",
      "description": "프로젝트 구조 분석 및 메모리 생성",
      "arguments": ["project_path"]
    }

    추론 전에 선택하여 모델 동작 가이드

    JSON-RPC 통신 프로토콜

    MCP는 JSON-RPC 2.0으로 상태를 유지하는 세션 관리:

    // 1. Initialization (능력 교환)
    Client -> Server: {"method": "initialize", "params": {"capabilities": {...}}}
    Server -> Client: {"result": {"capabilities": {"tools": [...], "resources": [...]}}}
    
    // 2. Tool Execution
    Client -> Server: {"method": "tools/call", "params": {"name": "find_symbol", "arguments": {...}}}
    Server -> Client: {"result": {"content": [{"type": "text", "text": "..."}]}}

    Transport 옵션:

    • stdio: 서브프로세스 통신 (클라이언트가 서버 생성)
    • SSE: HTTP 기반 (원격 시나리오용)
    • Streamable HTTP: 더 유연한 전송 (MCP v2.0)

    Language Server Protocol: IDE의 두뇌를 빌려오다

    LSP의 시맨틱 분석 계층

    LSP는 Microsoft가 Visual Studio Code를 위해 개발한 오픈 스탠다드로, 에디터와 언어 서버 간의 표준 인터페이스입니다. 핵심 아이디어: 언어 인텔리전스를 에디터에서 분리하여, 하나의 언어 서버가 모든 LSP 호환 에디터와 작동하게 만듭니다.

    LSP가 제공하는 시맨틱 계층:

    1. Symbol Tables (심볼 테이블)

    {
      "authenticate_user": {
        "type": "function",
        "return_type": "bool",
        "parameters": ["username: str", "password: str"],
        "defined_at": "auth.py:45",
        "scope": "module",
        "references": ["app.py:123", "api.py:67", "tests/test_auth.py:34"]
      }
    }

    2. Abstract Syntax Trees (추상 구문 트리)

    FunctionDef(
      name='authenticate_user',
      args=[Arg(name='username'), Arg(name='password')],
      body=[If(...), Return(...)]
    )

    3. Type Information (타입 정보)

    • 식별자와 표현식의 타입 추적
    • 정적 타입 언어는 완벽, 동적 타입도 타입 힌트로 커버

    4. Scope Analysis (스코프 분석)

    • 변수 가시성과 라이프타임 이해
    • 로컬 vs 글로벌 변수 구분 (같은 이름이어도 다른 엔티티)

    LSP 핵심 기능

    Code Navigation:

    // textDocument/definition - 정의로 이동
    Request: {symbol: "authenticate_user", position: "app.py:123"}
    Response: {uri: "auth.py", range: {start: {line: 45, char: 0}}}
    
    // textDocument/references - 모든 사용처 찾기
    Request: {symbol: "authenticate_user"}
    Response: [{uri: "app.py", range: ...}, {uri: "api.py", range: ...}]
    
    // workspace/symbol - 프로젝트 전역 심볼 검색
    Request: {query: "auth"}
    Response: [
      {name: "authenticate_user", kind: "function", location: ...},
      {name: "AuthService", kind: "class", location: ...}
    ]

    시맨틱 vs 텍스트 검색의 차이

    시나리오: "read" 함수 이름 변경

    텍스트 방식 (grep/regex):

    grep -r "read" .
    # 결과: "readyState", "already", "thread", 주석 속 "read" 모두 매칭
    # 문제: 관련 없는 곳까지 변경, 실제 참조 놓침 가능

    시맨틱 방식 (LSP):

    lsp.rename(symbol="read", new_name="fetch_data")
    # 결과: 해당 함수의 정의와 모든 정확한 참조만 변경
    # 보장: 스코프 존중, 타입 안전, 다른 "read"는 건드리지 않음

    LSP가 이해하는 것:

    • 심볼 타입 (함수, 클래스, 변수, 파라미터)
    • 데이터 타입 (string, int, 커스텀 클래스)
    • 스코프와 가시성
    • 정의 위치 및 모든 참조 위치
    • 연관 심볼 (호출자, 피호출자, 상속 계층)

    Serena의 MCP + LSP 융합: 건축학적 혁신

    4-Layer Architectural Stack

    Serena의 진짜 힘은 MCP와 LSP를 단순히 연결한 게 아니라 융합했다는 점입니다.

    Layer 1: MCP Server (External Interface)

    class SerenaMCPServer:
        """MCP 스펙 구현, 외부 클라이언트와 JSON-RPC 통신"""
        def handle_tool_call(self, tool_name, arguments):
            return self.agent.execute_tool(tool_name, arguments)

    Layer 2: Agent Orchestration

    class SerenaAgent:
        """중앙 조율자: 프로젝트 상태, 언어 서버, 도구 레지스트리 관리"""
        def __init__(self):
            self.language_servers = {}  # 파일 타입별 LSP 인스턴스
            self.tools = self._register_tools()
            self.memory_system = MemoryManager()

    Layer 3: Tool Execution

    class FindSymbolTool(Tool):
        """개별 도구 구현, ThreadPoolExecutor로 순차 실행"""
        def apply(self, symbol_name, symbol_type=None):
            return self.language_server.find_symbols(symbol_name, symbol_type)

    Layer 4: LSP Integration (The Brain)

    class SolidLanguageServer:
        """추상 베이스 클래스, 모든 언어에 통일된 LSP 인터페이스 제공"""
        def find_symbols(self, query):
            # multilspy 위에 구축된 순수 동기식 LSP 호출
            return self._lsp_client.workspace_symbol(query)

    기술적 혁신 포인트

    1. 심볼 레벨 토큰 효율성

    # 전통적 접근: 전체 파일 읽기
    read_file("auth.py")  
    # 비용: 2000 tokens, 컨텍스트 창에 부담
    
    # Serena 접근: 심볼 타겟팅
    find_symbol("authenticate_user")        # 50 tokens (시그니처만)
    get_symbols_overview("auth.py")         # 100 tokens (모든 함수/클래스 개요)
    read_symbol_body("authenticate_user")   # 200 tokens (필요시 본문)
    
    # 결과: 동일한 정보를 350 tokens로 획득 (82% 절감)

    실제 보고 수치: 복잡한 기능 구현 시 60-70% 토큰 감소

    2. 컨텍스트 보존 편집

    replace_symbol_body(
        file="auth.py",
        symbol="authenticate_user",
        new_body="""
        if not username or not password:
            return False
        user = database.find_user(username)
        return user.verify_password(password)
        """
    )

    Serena가 자동 처리하는 것:

    • 올바른 들여쓰기 유지
    • 함수 시그니처 보존
    • 파일 내 정확한 위치 계산
    • 트레일링 뉴라인 처리

    에디터 없이 IDE 수준 정확도 달성

    3. 크로스-언어 일관성

    # Python
    lsp_python = SolidPythonServer()
    
    # TypeScript  
    lsp_typescript = SolidTypeScriptServer()
    
    # Rust
    lsp_rust = SolidRustServer()
    
    # 모두 동일한 인터페이스
    for lsp in [lsp_python, lsp_typescript, lsp_rust]:
        symbols = lsp.find_symbols("authenticate")
        # 일관된 결과 형식, 언어 무관

    멀티 언어 모노레포: Vue.js (TS) + .NET (C#) + Terraform 프로젝트에서 완벽 작동 보고됨

    메모리 시스템 아키텍처

    Persistent Project Knowledge Graph

    .serena/
    └── memories/
        ├── project_structure.md       # 온보딩 시 자동 생성
        ├── tech_stack.md              # 사용 기술 스택
        ├── development_workflow.md    # 빌드/테스트 절차
        ├── architectural_decisions.md # 수동 추가 가능
        └── [feature_name]_progress.md # prepare_for_new_conversation으로 생성

    Memory Lifecycle:

    1. Creation (Onboarding)

      def onboard_project(project_path):
       structure = analyze_directory_structure(project_path)
       tech_stack = determine_programming_languages(project_path)
       write_memory("project_structure", structure_summary)
       write_memory("tech_stack", tech_stack_summary)
    2. Retrieval (Session Start)

      def start_session():
       available_memories = list_memories()
       # LLM decides which memories to read based on task
       for memory in prioritized_memories:
           context += read_memory(memory)
    3. Update (During Work)

      def prepare_for_new_conversation():
       summary = llm_generate_summary(current_session_context)
       write_memory(f"{task_name}_progress", summary)
       # 다음 세션에서 이 메모리를 읽어 연속성 확보

    혁명적 의미: 메모리는 디스크에 영구 저장됩니다. Claude의 컨텍스트가 리셋되어도, 프로젝트 이해는 남아있습니다.

    Contexts and Modes: Dynamic Behavior Tuning

    Contexts (Startup Configuration)

    # ~/.serena/ide-assistant.yml
    available_tools:
      - find_symbol
      - replace_symbol_body
      - get_symbols_overview
      - write_memory
    
    disabled_tools:
      - execute_shell_command  # IDE already provides this
      - replace_regex  # Claude Code has built-in
    
    optimization:
      frugal_mode: true  # Minimize context consumption

    Modes (Task-Specific Behavior)

    # Editing Mode
    modes:
      editing:
        tool_priorities:
          - replace_symbol_body
          - insert_after_symbol
        instruction_emphasis: "Precise, minimal changes"
    
    # Planning Mode  
    modes:
      planning:
        tool_priorities:
          - find_symbol
          - get_symbols_overview
          - search_for_pattern
        instruction_emphasis: "Understand structure before acting"

    Dynamic Switching:

    # 세션 중간에 모드 전환 가능
    switch_modes(["editing", "interactive"])

    실제 성능: With vs Without 정량 비교

    Scenario: OAuth 구현 in Next.js App

    Without Serena (기존 Claude Code)

    단계 소요 시간 토큰 사용
    1. OAuth 구현 요청 2분 500
    2. 제너릭 코드 생성 3분 2000
    3. 프로젝트 구조 설명 5분 3000
    4. 기존 패턴 설명 5분 2500
    5. 구식 API 수정 5분 1500
    6. 컴포넌트 구조 적응 10분 4000
    Total 30분 13,500

    문제점:

    • 전체 파일 8개 읽음 (각 2000 tokens)
    • 프로젝트 패턴 무시
    • 구식 문서 기반 코드 생성
    • 수동 통합 작업 필요

    With Serena + Sequential Thinking + Context7

    단계 소요 시간 토큰 사용
    1. Sequential Thinking 요구사항 분석 2분 300
    2. Serena: find_symbol("auth*") 30초 150
    3. Serena: get_symbols_overview(auth files) 30초 200
    4. Context7: 최신 NextAuth.js 문서 1분 800
    5. 완전한 구현 생성 4분 2500
    Total 8분 3,950

    이점:

    • 시간: 73% 절감 (30분 → 8분)
    • 토큰: 71% 절감 (13,500 → 3,950)
    • 품질: 기존 패턴 자동 준수, 최신 베스트 프랙티스, 완벽한 통합

    사용자 증언: "생성된 코드가 우리 프로젝트의 기존 패턴을 완벽하게 따랐다. 마치 우리 팀원이 작성한 것 같았다."

    Scenario: 대형 모노레포 버그 수정

    흥미로운 Caveat: 일부 사용자는 버그 찾기에서 Serena를 끈 게 더 나았다고 보고

    이유 분석:

    Without Serena (광범위한 탐색)

    • 여러 파일 전체를 읽으며 "우연한 발견" 가능
    • 연관되지 않아 보이는 코드에서 단서 발견
    • 컨텍스트가 넓어 패턴 인식 용이

    With Serena (타겟팅된 검색)

    • 심볼 레벨 정밀도가 오히려 "노이즈 제거" 효과
    • 버그가 예상 밖 위치에 있으면 놓칠 수 있음
    • 효율적이지만 탐색적 분석에는 제한

    Best Practice:

    1. 탐색 단계: Serena OFF, 광범위하게 파일 읽기
    2. 원인 파악 후: Serena ON, 정확한 수정 실행

    이는 도구의 결함이 아니라 use-case specific tradeoff입니다.

    프로토콜 시너지: 1+1=3의 효과

    MCP의 강점

    표준화된 도구 인터페이스

    • 어떤 MCP 클라이언트와도 작동 (Claude, Cursor, Codex, ChatGPT via mcpo)
    • 벤더 락인 없음
    • 새로운 AI 도구가 나와도 즉시 호환

    명확한 권한 모델

    • 도구 실행 전 사용자 승인 요청
    • Read-only 모드 지원
    • 선택적 도구 비활성화

    리소스 추상화

    • 파일 시스템, 데이터베이스, API를 통일된 인터페이스로
    • AI는 구현 세부사항 모르고 사용 가능

    LSP의 강점

    정확한 구조적 이해

    • 텍스트가 아닌 AST 레벨 분석
    • 타입 안전성 보장
    • 스코프 존중 (로컬 vs 글로벌 변수 구분)

    언어 무관 일관성

    • 15+ 언어에서 동일한 동작
    • 각 언어의 성숙한 언어 서버 활용 (rust-analyzer, gopls, pylsp 등)

    검증된 안정성

    • IDE에서 수년간 검증된 기술
    • 프로덕션 그레이드 파서와 분석기

    융합의 마법: Complementary Strengths

    능력 LLM LSP MCP Serena (융합)
    자연어 이해
    의도 파악
    구조적 정확성
    크로스-파일 추적
    표준화된 툴링
    프레임워크 무관
    영구 메모리

    시너지 효과:

    • LLM: 사용자가 원하는 것을 이해
    • LSP: 코드에서 정확히 어떻게 할지 알려줌
    • MCP: 두 세계를 표준화된 방식으로 연결
    • Serena: 세 가지를 조율하여 IDE 품질의 코딩 에이전트 실현

    RAG vs LSP: 보완적 접근

    많은 코딩 에이전트가 RAG (Retrieval-Augmented Generation)를 사용합니다. Serena와 어떻게 다를까요?

    RAG 접근 방식

    # 코드 청크를 벡터 임베딩으로 변환
    embeddings = embed_code_chunks(codebase)
    
    # 유사도 검색
    query = "authentication logic"
    similar_chunks = vector_search(embeddings, query, top_k=5)
    
    # 컨텍스트로 제공
    context = "\n".join(similar_chunks)
    llm_generate(context + user_query)

    장점:

    • 시맨틱 유사성 발견 (개념적으로 비슷한 코드)
    • 주석과 문서화도 검색 가능
    • 언어 무관

    한계:

    • 정확한 의존성 추적 불가
    • 심볼 경계 이해 못함
    • 리팩토링 시 보장 없음

    LSP 접근 방식 (Serena)

    # 심볼 정의와 모든 참조 찾기
    symbol = find_symbol("authenticate")
    references = find_referencing_symbols(symbol.location)
    
    # 구조적으로 정확한 정보
    call_hierarchy = get_call_hierarchy(symbol)
    type_hierarchy = get_type_hierarchy(symbol)

    장점:

    • 100% 정확한 관계 추적
    • 안전한 리팩토링 보장
    • 타입 안전성

    한계:

    • 개념적 유사성 발견 못함
    • 언어 서버가 있는 언어만 지원

    보완적 사용

    이상적 조합:

    1. RAG로 개념적으로 관련된 코드 발견
    2. LSP로 정확한 관계와 의존성 파악
    3. LLM이 두 정보를 종합하여 구현

    Serena는 LSP에 집중하지만, 다른 MCP 서버와 함께 쓰면 RAG와도 협력 가능합니다.

    아키텍처 레벨 최적화 원리

    Thread Pool Synchronization

    class SerenaAgent:
        def __init__(self):
            # ThreadPoolExecutor로 모든 도구 실행 순차화
            self.executor = ThreadPoolExecutor(max_workers=1)
    
        def execute_tool(self, tool_name, arguments):
            # 모든 실행이 선형으로 처리됨
            future = self.executor.submit(tool.apply, **arguments)
            return future.result()

    이유:

    • LSP 서버는 stateful (동시 요청 처리 불가)
    • 순차 실행으로 일관성 보장
    • MCP 서버는 여전히 responsive (별도 스레드)

    Language Server Caching

    class SolidLanguageServer:
        def __init__(self):
            self.symbol_cache = {}  # .pkl 파일로 디스크 저장
    
        def find_symbols(self, query):
            if query in self.symbol_cache:
                return self.symbol_cache[query]  # 즉시 반환
    
            result = self._lsp_client.workspace_symbol(query)
            self.symbol_cache[query] = result
            return result

    효과:

    • 대형 프로젝트에서 10x 속도 향상
    • project index 명령으로 미리 캐시 구축 가능

    Hierarchical Configuration

    Global Config (~/.serena/serena_config.yml)
        ↓
    Command-line Arguments (--context ide-assistant)
        ↓
    Project Config (.serena/project.yml)
        ↓
    Context/Mode Overrides

    유연성:

    • 글로벌 기본값 설정
    • 프로젝트별 커스터마이제이션
    • 런타임 모드 전환

    한계와 트레이드오프

    설계상 한계

    1. 구조화된 코드 의존성

    # 잘 작동
    class AuthService:
        def authenticate(self, user): ...
        def authorize(self, user, resource): ...
    
    # 덜 효과적
    def god_function():
        # 2000 lines of spaghetti code
        ...

    Serena는 모듈화되고 심볼 경계가 명확한 코드에서 최고 성능을 발휘합니다.

    2. 언어 서버 품질 의존

    • Java: 느린 시작 (특히 초기)
    • Kotlin: Pre-alpha 언어 서버 (버그 가능)
    • Ruby: Solargraph 대신 ruby-lsp로 마이그레이션 필요 (대형 코드베이스)

    3. 작은 프로젝트에서 오버헤드

    • 온보딩 비용 (토큰 + 시간)
    • 인덱싱 오버헤드
    • 설정 복잡도

    파일 5개 미만 프로젝트에서는 Serena 없는 게 나을 수 있습니다.

    엔지니어링 트레이드오프

    편집 로버스트니스

    • LSP 서버가 때때로 부정확한 위치 반환
    • LLM이 라인 카운팅에 약함
    • 해결책: 심볼 기반 편집 우선, 라인 기반은 최후 수단

    메모리 정확도

    • 온보딩이 생성한 메모리에 오류 가능
    • 수동 검증 및 수정 필요
    • 장기적으로는 LLM 정확도 개선으로 해결 예정

    미래 방향

    MCP 프로토콜 진화 (v2.0)

    Streamable HTTP Transport

    // 기존: HTTP + SSE (두 연결 필요)
    // 신규: Streamable HTTP (단일 연결, 양방향)
    const transport = new StreamableHTTPTransport(url);

    OAuth 2.1 Authentication

    • 원격 MCP 서버 보안 인증
    • 기업 환경 지원

    JSON-RPC Batching

    // 여러 도구 호출을 한 번에
    [
      {"method": "find_symbol", "params": {...}},
      {"method": "get_references", "params": {...}}
    ]

    Serena 로드맵

    VSCode 확장

    • 네이티브 IDE 통합 (네이티브 UI)
    • 매끄러운 편집 경험

    Debug Adapter Protocol (DAP)

    • 디버깅 기능 추가
    • 브레이크포인트, 스택 트레이스 지원

    Enhanced LSP Features

    • Inlay hints (타입 정보 인라인 표시)
    • Semantic tokens (문법 강조 개선)
    • Call hierarchy visualization

    생태계 성장

    MCP 표준 채택:

    • OpenAI (2025년 3월): ChatGPT Desktop + Agents SDK
    • Google DeepMind (2025년 4월): Gemini 통합
    • Microsoft: Semantic Kernel MCP 지원

    영향: Serena는 MCP 생태계 성장의 직접적 수혜자입니다. 더 많은 클라이언트, 더 나은 도구, 커뮤니티 성장.

    결론: 패러다임 시프트

    근본적 문제 해결

    Claude Code의 컨텍스트 손실:

    • 근본 원인: 제한된 컨텍스트 윈도우 + 최근 편향 + 영구 메모리 부재
    • Serena 솔루션: 심볼 레벨 작업으로 토큰 절감 + 디스크 메모리 시스템 + 시맨틱 이해로 반복 컨텍스트 구축 방지

    정량적 개선:

    • 60-70% 시간 절약 (복잡한 기능)
    • 60-70% 토큰 절감
    • 더 높은 코드 품질 (패턴 일관성)
    • 세션 간 연속성

    기술적 혁신의 본질

    단순한 통합이 아닌 융합:

    1. MCP: AI ↔ 도구 표준 브릿지
    2. LSP: 시맨틱, 심볼 레벨 코드 이해
    3. Serena: 두 프로토콜을 조율하여 IDE 품질 코드 인텔리전스를 AI에 제공

    결과: AI 어시스턴트가 텍스트 조작에서 진정한 시맨틱 이해로 진화

    더 넓은 그림

    Serena는 프로덕션 그레이드 AI 툴링의 청사진을 제시합니다:

    핵심 원칙:

    • 기존 표준 활용 (LSP, MCP) - 재발명하지 않기
    • 상호 보완적 강점 - LLM은 시맨틱스, 정적 분석은 구조
    • 명확한 아키텍처 경계 - 관심사 분리로 유연성 확보
    • 커뮤니티 주도 - 오픈소스, 확장 가능, 무료

    MCP + LSP 조합은 단순한 기술적 호기심이 아니라 AI 어시스턴트가 코드와 상호작용하는 방식의 패러다임 시프트입니다. 텍스트 조작에서 진정한 시맨틱 이해로의 전환입니다.

    실무 적용 가이드

    Serena가 빛나는 곳:
    ✅ 대형 구조화된 코드베이스
    ✅ 멀티 파일 리팩토링과 분석
    ✅ 토큰 예산이 타이트한 환경
    ✅ 세션 간 컨텍스트 유지가 중요한 장기 프로젝트
    ✅ TypeScript, Python, Rust, Go 같은 강타입 언어

    신중해야 할 곳:
    ⚠️ 작은 스크립트 프로젝트
    ⚠️ 처음부터 작성하는 초기 단계
    ⚠️ 광범위한 컨텍스트가 필요한 버그 헌팅
    ⚠️ 구조화되지 않은 레거시 코드베이스

    최종 권장사항:

    대형 프로젝트를 다루는 개발자라면, Serena는 필수 도구입니다. 설치 5분, 온보딩 한 번으로 Claude Code의 컨텍스트 유지 문제를 근본적으로 해결하고, 70% 효율 개선을 경험할 수 있습니다.

    더 중요한 건, Serena가 보여주는 건축 철학입니다. 프로토콜 우선, 상호보완적 설계, 명확한 관심사 분리 - 이것이 차세대 AI 개발 도구의 방향입니다.

    지금이 시작할 때입니다.

Designed by Tistory.