기업 환경에서 AI 코딩 어시스턴트인 Sourcegraph Cody를 도입할 때 엔지니어링 관리자와 보안 및 컴플라이언스 팀이 가장 주의 깊게 검토하는 과제는 데이터 유출 방지입니다. 독점 알고리즘, 영업 비밀, 금융 결제(PCI-DSS)나 의료 데이터(HIPAA) 등 엄격한 규제를 받는 핵심 비즈니스 코드베이스가 타사 대규모 언어 모델(LLM)에 프롬프트 컨텍스트로 전달되지 않도록 어떻게 완벽히 통제할 수 있을까요?
Sourcegraph Cody는 이를 위해 서버 수준에서 강력하게 강제되는 엔터프라이즈 거버넌스 기능인 컨텍스트 필터(cody.contextFilters)를 제공합니다. 사이트 관리자가 Sourcegraph 사이트 구성(Site Configuration)에서 RE2 정규표현식을 사용하여 저장소 단위의 포함 및 제외 규칙을 정의하면, Cody가 자동완성, 채팅 및 인라인 편집을 수행할 때 참조할 수 있는 코드베이스를 중앙에서 엄격하게 제한할 수 있습니다.
본 가이드에서는 엔지니어링 관리자가 cody.contextFilters를 구성하는 단계별 절차, 정규표현식 문법 및 규칙 평가 우선순위, 엔터프라이즈 환경에서의 다층 방어 보안 전략을 상세히 설명합니다.
사전 요구 사항 및 클라이언트 호환성
컨텍스트 필터를 적용하기 전에 인프라 및 개발자 클라이언트가 다음 요구 사항을 충족하는지 확인하십시오.
- Sourcegraph 인스턴스 버전: 활성 Cody Enterprise 라이선스가 적용된 Sourcegraph Enterprise
5.4.0이상. - 기능 플래그 (Feature Flag):
cody-context-filters-enabled플래그가true로 설정되어 있어야 합니다. - 지원되는 IDE 클라이언트 버전:
- VS Code 확장 프로그램:
1.20.0이상 - JetBrains 플러그인:
6.0.0이상 - Sourcegraph 웹 클라이언트 기본 지원
- VS Code 확장 프로그램:
클라이언트 호환성 매트릭스 및 정책 강제
개발자가 구버전 IDE 확장 프로그램을 사용하여 엔터프라이즈 필터링 정책을 우회하는 것을 방지하기 위해 Sourcegraph 인스턴스는 다음과 같이 엄격하게 정책을 적용합니다.
| 클라이언트 | 확장 프로그램 버전 | Sourcegraph v5.4.0 동작 | Sourcegraph v5.4.12303+ 동작 |
|---|---|---|---|
| VS Code | < 1.16.x | Cody 비호환 | 정책 강제 준수; 플러그인 업데이트 요청 |
| VS Code | 1.18.0 ~ < 1.20.0 | Cody 비호환 | 정책 강제 준수; 플러그인 업데이트 요청 |
| VS Code | >= 1.20.0 | 정책 완전 준수 | 정책 완전 준수 |
| JetBrains | <= 5.5.9 | Cody 비호환 | 정책 강제 준수; 플러그인 업데이트 요청 |
| JetBrains | 5.5.10 ~ < 6.0.0 | Cody 비호환 | 정책 강제 준수; 플러그인 업데이트 요청 |
| JetBrains | >= 6.0.0 | 정책 완전 준수 | 정책 완전 준수 |
최신 Sourcegraph 서버 환경에서는 컨텍스트 필터 지시어를 해석하지 못하는 레거시 클라이언트의 컨텍스트 전송을 원천 차단하고 업그레이드를 안내하므로 보안 사각지대가 발생하지 않습니다.
구성 스키마 및 RE2 정규표현식 문법
컨텍스트 필터는 Sourcegraph 사이트 구성 JSON 파일 내의 최상위 cody.contextFilters 필드에 정의됩니다. 스키마는 include(허용 목록)와 exclude(제외 목록)라는 두 개의 선택적 배열을 지원합니다.
{
"cody.contextFilters": {
"include": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/.*"
}
],
"exclude": [
{
"repoNamePattern": ".*-sensitive$"
},
{
"repoNamePattern": "^github\\.com\\/example-corp\\/core-payments.*"
}
]
}
}
스키마 작성 핵심 규칙:
cody.contextFilters가 선언된 경우include또는exclude중 최소 하나 이상의 블록이 포함되어야 합니다.- 각 블록의 객체에는 필수 속성인
repoNamePattern이 포함됩니다. repoNamePattern은 RE2 정규표현식 문법(Go 언어 표준 정규표현식 엔진)을 엄격히 따라야 합니다.- JSON 문자열 내에 작성되므로 역슬래시는 반드시 이중 이스케이프(
\\) 처리해야 합니다. 예를 들어 점(dot) 리터럴은\\.으로, 슬래시는\\/또는 직접/로 작성합니다. - 매칭 대상은 Sourcegraph 데이터베이스에 등록된 전체 저장소 고유 경로(예:
github.com/organization/repo-name또는 사내 GitLab 경로)입니다.
필터 평가 로직 및 우선순위 규칙
Cody는 구성된 include 및 exclude 배열의 조합에 따라 다음과 같은 평가 로직을 실행합니다.
1. 필터 미정의 (기본 동작)
cody.contextFilters 설정이 존재하지 않으면, Cody는 현재 사용자가 Sourcegraph에서 읽기 권한을 가진 모든 저장소를 자유롭게 컨텍스트로 활용할 수 있습니다.
2. include 규칙만 정의된 경우 (엄격한 화이트리스트 모드)
저장소 이름이 include에 정의된 정규식 패턴 중 적어도 하나와 일치할 때만 Cody가 컨텍스트로 사용할 수 있으며, 지정되지 않은 모든 저장소는 기본적으로 차단됩니다.
- 보안 요구 수준이 매우 높은 조직에서 법무나 보안 검토를 마친 공용 오픈소스 또는 공통 라이브러리만 AI 컨텍스트로 허용하는 제로 트러스트(Zero-Trust) 배포에 적합합니다.
include배열 내의 조건 중 하나만 일치해도 허용됩니다.
{
"cody.contextFilters": {
"include": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/frontend-.*"
},
{
"repoNamePattern": "^github\\.com\\/example-corp\\/public-docs$"
}
]
}
}
3. exclude 규칙만 정의된 경우 (블랙리스트 제외 모드)
exclude에 지정된 정규표현식 패턴과 일치하는 저장소를 제외한 나머지 모든 저장소의 코드를 Cody가 컨텍스트로 참조할 수 있습니다.
- 일반적인 비즈니스 개발 생산성을 유지하면서 극소수의 고위험 저장소(암호화 키 관리, 결제 원장, 보안 익스플로잇 도구 등)만 정밀 차단하려는 기업에 적합합니다.
exclude에 전체 와일드카드.*를 지정하면 전사 인스턴스에서 Cody의 컨텍스트 참조를 즉시 전면 차단하는 킬스위치(Kill-Switch) 역할을 수행합니다.
{
"cody.contextFilters": {
"exclude": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/crypto-vault$"
},
{
"repoNamePattern": ".*payment-processing.*"
},
{
"repoNamePattern": ".*-restricted$"
}
]
}
}
4. include와 exclude가 모두 정의된 경우 (복합 세분화 모드)
두 배열이 모두 지정된 경우 저장소가 컨텍스트로 채택되려면 다음 두 가지 조건을 모두 만족해야 합니다.
include패턴 중 최소 하나와 일치해야 합니다.exclude패턴 중 어느 것과도 일치하지 않아야 합니다.
제외 규칙은 항상 포함 규칙보다 우선합니다. 아래 예시에서는 example-corp 산하의 모든 저장소를 허용하되, compliance가 포함되거나 -secret으로 끝나는 저장소는 예외 없이 엄격하게 제외합니다.
{
"cody.contextFilters": {
"include": [
{
"repoNamePattern": "^github\\.com\\/example-corp\\/.+"
}
],
"exclude": [
{
"repoNamePattern": ".*compliance.*"
},
{
"repoNamePattern": ".*-secret$"
}
]
}
}
관리자 단계별 구성 가이드
기업 Sourcegraph 인스턴스에서 컨텍스트 필터를 안전하게 적용하고 검증하는 절차는 다음과 같습니다.
1단계: 저장소 이름 및 명명 규칙 확인
Cody는 Sourcegraph 인스턴스에 인덱싱된 전체 정규 저장소 이름을 기반으로 정규식을 평가합니다.
- Sourcegraph 웹 콘솔에서 Site Admin > Repositories로 이동합니다.
- 코드 호스트 접두사(예:
github.com/my-org/...또는 내부 GitLab 도메인)를 확인합니다. - 차단 대상인 민감 저장소의 명명 규칙을 파악하여 정규표현식 계획을 수립합니다.
2단계: 사이트 구성 에디터 접속
- 사이트 관리자(Site Admin) 권한 계정으로 Sourcegraph에 로그인합니다.
- 우측 상단의 사용자 프로필 아이콘을 클릭하고 Site Admin을 선택합니다.
- 좌측 탐색 메뉴에서 Configuration(
/site-admin/configuration)을 클릭합니다.
3단계: cody.contextFilters 설정 블록 추가
루트 JSON 구성 객체 내에 기능 플래그와 필터링 블록을 입력합니다.
{
// ... 기존 사이트 구성 ...
"cody-context-filters-enabled": true,
"cody.contextFilters": {
"include": [
{
"repoNamePattern": "^github\\.com\\/my-org\\/.*"
}
],
"exclude": [
{
"repoNamePattern": "^github\\.com\\/my-org\\/core-trading$"
},
{
"repoNamePattern": ".*proprietary.*"
},
{
"repoNamePattern": ".*sec-tools.*"
}
]
}
}
4단계: 변경 사항 저장 및 실시간 적용
페이지 하단의 Save changes를 클릭합니다. Sourcegraph는 서비스 중단이나 서버 재시작 없이 구성을 실시간으로 동적 갱신합니다.
5단계: 개발자 환경에서 차단 검증
보안 정책이 정확히 동작하는지 IDE 클라이언트에서 검증합니다.
- VS Code 또는 JetBrains IDE에서 제외 대상으로 지정된 저장소의 프로젝트 파일을 엽니다.
- 인라인 편집(Edit)을 시도하거나 코드 생성 명령을 실행합니다. 확장이 요청을 차단하고 다음과 같은 오류를 표시하는지 확인합니다.
Edit failed to run: file is ignored (due to cody.contextFilters Enterprise configuration setting) - Cody 채팅 창에서
@-mention을 사용하여 해당 저장소의 파일이나 함수를 호출해 봅니다. 컨텍스트 추천 목록에 표시되지 않으며 프롬프트 컨텍스트로 코드가 전송되지 않는 것을 확인합니다.
개발자 사용 환경 및 영향
필터가 적용된 저장소에서 작업하는 개발자의 동작 방식을 사전에 이해하면 내부 안내를 원활하게 진행할 수 있습니다.
- 일반 채팅 사용 가능: 제외된 저장소의 파일을 열고 있어도 언어 문법, 일반 알고리즘 설명, 공용 라이브러리 사용법에 대한 일반적인 질의는 계속 수행할 수 있습니다. 단, 로컬 프로젝트 코드가 모델에 전송되지 않습니다.
- 전역 컨텍스트 기반 명령 제한: 저장소 전체 코드를 참조해야 하는 사전 정의 프롬프트(Prompts) 등은 제외된 프로젝트에서 실행되지 않거나 오류를 반환합니다.
- 자동완성(Autocomplete) 차단: 제외된 저장소의 파일 내부에서는 코드 스니펫이 외부 LLM 추론 서버로 전송되지 않으므로 소스 코드 유출을 방지합니다.
다층 거버넌스 아키텍처: 보안 제어 비교
기업의 소스 코드 데이터 보호는 단일 기능이 아닌 다계층 심층 방어 체계로 완성됩니다.
| 거버넌스 계층 | 설정 위치 | 적용 범위 및 세분성 | 관리 주체 | 개발자 우회 가능 여부 |
|---|---|---|---|---|
| 엔터프라이즈 컨텍스트 필터 | 사이트 구성 (cody.contextFilters) | RE2 정규식을 통한 저장소 전체 단위 | 사이트 관리자 / 보안 팀 | 우회 불가 (서버 강제 적용) |
| 저장소 파일 제외 규칙 | 저장소 루트의 .cody/ignore | 특정 파일, 하위 디렉터리, 확장자 패턴 | 저장소 관리자 / 개발 리드 | Git 커밋을 통해 전 팀원 적용 |
| 클라이언트 로컬 제외 | IDE 설정 (settings.json) | 로컬 임시 디렉터리나 파일 확장자 | 개별 개발자 | 우회 가능 (개인 PC 로컬 한정) |
| 코드 접근 권한 관리 | Sourcegraph RBAC 및 OAuth 동기화 | 저장소 레벨 읽기 권한 | 사내 IAM / 보안 인프라 | 우회 불가 (권한 없는 코드는 호출 불가) |
| 업스트림 모델 데이터 계약 | Cody Gateway 무저장 합의 (Zero-Retention) | 전체 LLM API 전송 구간 | 클라우드 공급업체 기업 계약 | 우회 불가 (데이터 미저장 및 학습 미사용) |
서버 측의 cody.contextFilters로 전사적 저장소 보안 경계를 설정하고, 개별 프로젝트 내 로컬 시크릿이나 설정 파일은 .cody/ignore로 차단하며, Cody Gateway의 제로 리텐션 계약을 결합함으로써 기업은 생성형 AI의 생산성을 누리면서도 지적 재산과 규제 준수를 안전하게 지킬 수 있습니다.