기술 분석 환경 및 부트스트랩 과정
Electron 프레임워크 기반의 VS Code와 깃허브 코파일럿(GitHub Copilot)은 Chromium의 네트워크 스택을 공유한다. 분석자는 `mitmproxy`를 활용해 클라이언트와 서버 사이에 중간자(Man-in-the-Middle) 프록시를 설정하고, TLS 암호화를 복호화하여 HTTP 트래픽을 캡처했다. 이를 위해 VS Code 설정에서 `Http Proxy`를 `http://localhost:8080`으로 지정하고, `Http Proxy Strict SSL` 체크를 해제하며, `Http: Proxy Support`를 `override`로 설정해 확장 프로그램의 트래픽까지 강제로 라우팅했다.
부트스트랩 단계에서 코파일럿은 인증 및 세션 확인, 구성 및 정책 조회, MCP 레지스트리 확인, 저장소 컨텍스트 로드 순으로 요청을 보낸다. 특히 모델 탐색 과정에서는 두 단계의 API 호출이 발생한다. 먼저 `/models` 엔드포인트를 통해 계정 및 플랜에서 사용 가능한 일반 모델 목록을 가져온 뒤, `/agents/swe/models`를 호출해 소프트웨어 엔지니어링(SWE) 에이전트 기능에 특화된 모델 목록을 별도로 확인한다.
의도 분류 라우팅과 로컬 상태 관리
사용자가 메시지를 전송하면 실제 모델이 응답하기 전 `/models/session/intent` 엔드포인트로 요청이 먼저 전달된다. 입력된 프롬프트는 코드 생성(code-gen), 디버깅(debugging), 추론(reasoning), 도구 사용(tool-use) 등의 의도로 분류되며, 이 결과에 따라 해당 태스크를 수행할 최적의 모델이 결정되는 라우팅 구조를 가진다.
로컬 환경의 상태 관리는 `session-store.db`라는 SQLite 데이터베이스를 통해 이루어진다. 코파일럿은 `session_store_sql`이라는 도구를 통해 이 DB에 SQL 쿼리를 실행하며, 여기에는 사용자의 프롬프트와 LLM의 응답 내역이 `user_message`와 `assistant_response` 컬럼에 평문(plain text)으로 저장된다. 모델은 DB 스키마를 미리 알지 못하며, 초기 쿼리 실패 후 스키마 메타데이터를 직접 조회(introspection)하여 테이블 정의를 파악한 뒤 데이터를 추출하는 방식으로 작동한다.
컨텍스트 주입 메커니즘과 보안 제약
코드 레벨에서 확인한 `sessionStore.ts` 파일의 쓰기 경로에는 데이터 마스킹이나 필터링, 세니타이징 단계가 존재하지 않는다. 즉, 로컬 DB에 평문으로 저장되는 구조는 설계된 동작이다. 또한, 인라인 완성(inline completions) 시 발생하는 컨텍스트 주입은 `recentEdits.tsx`에 정의된 슬라이딩 윈도우 방식을 따른다. 기본 설정은 최대 20개의 파일, 8개의 편집 요약, 각 변경 사항 주변의 3줄 컨텍스트를 포함한다.
이러한 구조로 인해 특정 파일(예: `.env`)에 대해 코파일럿 기능을 비활성화하더라도 보안 취약점이 발생한다. 사용자가 `.env`가 아닌 다른 파일(예: `pyproject.toml`)을 편집할 때, 슬라이딩 윈도우 범위 내에 `.env` 파일의 내용이 포함되어 있다면 해당 민감 정보가 API 요청에 함께 실려 전송되기 때문이다. 현재 개인 플랜에서는 `.gitignore` 연동이나 파일 확장자 기반의 자동 제외 규칙이 적용되지 않으며, 이러한 제한은 비즈니스/엔터프라이즈 플랜의 '저장소 정책(repository policy)'을 통해서만 관리자로 제어 가능하다.
AI 코딩 도구가 단순한 챗봇을 넘어 워크스페이스, 편집 이력, 대화 기록, 로컬 DB를 결합한 상태 유지 시스템(stateful system)으로 진화함에 따라, 개발자는 모델의 성능보다 컨텍스트가 수집되고 전송되는 경계(boundary)를 정의하는 하네스(harness) 설계와 데이터 기밀성 유지 방안을 우선적으로 검토해야 한다.




