CodeMender는 cm find 명령어를 통해 세 가지 고유한 스캔 모드를 제공합니다.
각 모드는 속도, 범위, 심층성을 균형 있게 조정하여 소프트웨어 개발 수명 주기의 특정 단계를 위해 설계되었습니다.
찾기 모드 비교
다음 표에서는 세 가지 cm find 스캔 모드를 비교합니다.
| 모드 | 명령어 | 타겟 범위 | 일반적인 런타임 | 용도 |
|---|---|---|---|---|
| 표준 스캔 | cm find PATH |
지정된 디렉터리 | 중간 런타임 | 로컬 개발자 검색, 빠른 확인, 탐색적 검토 |
| Diff 스캔 | cm find PATH --diff[=REF] |
수정된 파일 및 종속 파일 (예: 호출자 및 호출 대상) | 빠른 런타임 | pull 요청 CI/CD 파이프라인 (GitHub Actions, Cloud Build), 커밋 전 후크 |
| 정밀 스캔 | cm find PATH --deep |
전체 저장소 | 더 긴 런타임 | 예약된 감사, 출시 준비, 규정 준수 인증 (SOC 2, ISO) |
표준 스캔 (기본값)
표준 스캔은 추가 스캔 플래그를 제공하지 않고 cm find를 실행할 때의 기본 모드입니다. 지정된 타겟 디렉터리의 단일 세션 자율 스캔을 실행합니다. 스캔 중에 CodeMender는 소스 파일을 검색하고, 취약점 패턴을 기반으로 우선순위를 지정하고, 초기 보안 분석을 실행하고, 심각도 및 유형별로 그룹화된 잠재적 취약점을 보고합니다.
다음 예에서는 타겟 디렉터리에서 표준 스캔을 실행하는 방법을 보여줍니다.
# Scan a directory using the default model
cm find ./src
# Scan with a specific Gemini model
cm find ./src --model gemini-3.8-flash
강점
표준 스캔은 구성이 필요 없으며 추가 플래그나 매개변수가 필요하지 않습니다. 중간 런타임으로 속도와 범위를 균형 있게 조정하고 최소한의 토큰과 컴퓨팅을 사용하여 일상적인 개발에 비용 효율적입니다.
장단점 및 제한사항
표준 스캔은 단일 세션 컨텍스트 내에서 작동하므로 대규모 코드베이스에서 재현율이 낮고 대규모 다중 패키지 엔터프라이즈 저장소의 모든 파일을 탐색하지 못할 수 있습니다. 또한 개별 파일 내의 로컬 패턴에 주로 초점을 맞추므로 교차 패키지 분석이 제한되고 멀리 떨어진 패키지에 걸쳐 있는 취약점을 놓칠 수 있습니다.
사용 시기
다음 시나리오에서는 표준 스캔을 사용하세요.
- 변경사항을 커밋하기 전에 로컬 머신에서 스캔을 실행하여 로컬 개발 중에 빠른 의견을 받습니다.
- 새로 클론된 저장소 또는 소규모 프로젝트를 검사하여 보안 상황을 초기 평가합니다.
- 잠재적 문제를 조사할 때 특정 하위 디렉터리 또는 모듈을 검사합니다.
Diff 스캔
Diff 스캔은 변경된 파일과 추가된 파일을 검사하여 pull 요청 워크플로 및 CI/CD 파이프라인에 대한 Git diff 분석을 수행하고 변경된 정확한 줄 범위 (diff hunk)에 초점을 맞춥니다. 변경된 줄을 검사하는 것 외에도 수정된 함수와 기호를 호출하거나 가져오거나 종속하는 저장소에서 수정되지 않은 파일을 검색하기 위해 영향 분석을 수행합니다. 이렇게 하면 한 파일에서 계약 또는 함수 서명을 변경하는 변경사항이 종속 파일에 취약점을 도입하지 않도록 할 수 있습니다.
스캔 중에 CodeMender는 수정되지 않은 코드에서 기존 취약점을 자동으로 격리하므로 기존 문제로 인해 스캔이 실패하거나 pull 요청이 차단되지 않습니다. 그런 다음 --fail-on 정책에 따라 결과를 평가하고 결과를 표, JSON 또는 SARIF v2.1.0 형식으로 출력합니다.
다음 예에서는 작업 사본 변경사항, 스테이징된 변경사항 또는 타겟 브랜치에 대해 diff 스캔을 실행하는 방법을 보여줍니다.
# Scan working copy changes versus HEAD
cm find . --diff
# Scan staged changes only (pre-commit)
cm find . --diff --staged
# Scan a pull request branch against the main branch in CI/CD
cm find . --diff=origin/main --format=sarif --output=results.sarif \
--fail-on=CRITICAL,HIGH
엔드 투 엔드 파이프라인 구성은 Integrate with CI/CD를 참조하세요.
강점
Diff 스캔은 빠르고 결정적이며 일반적으로 2분 이내에 완료되어 CI/CD 파이프라인 런타임을 짧게 유지합니다. 변경된 줄만 검사하는 diff 스캐너와 달리 --diff는 호출자 및 호출 대상 관계를 검사하여 교차 파일 보안 회귀 및 계약 위반을 포착합니다. 수정되지 않은 코드에서 결과를 억제하므로 스캔은 변경사항으로 인해 발생하거나 영향을 받는 문제에 대해서만 pull 요청을 차단하여 시끄러운 보고서와 불필요한 빌드 실패를 방지합니다. Diff 스캔은 GitHub Code Scanning 주석 및 Cloud Build 대시보드에 직접 통합하기 위해 SARIF v2.1.0도 내보냅니다.
장단점 및 제한사항
Diff 스캔은 pull 요청의 영향을 받는 영역 내의 코드만 분석하며 저장소의 수정되지 않은 부분에서 기존 취약점을 찾지 않습니다. 또한 타겟 기본 참조에 액세스할 수 있는 Git 저장소가 필요합니다.
사용 시기
다음 시나리오에서는 diff 스캔을 사용하세요.
- GitHub Actions, Cloud Build, GitLab CI 또는 Jenkins와 같은 CI/CD 파이프라인의 모든 pull 요청에 대해 자동 검사를 실행합니다.
- 코드를 원격 저장소로 푸시하기 전에 커밋 전 또는 푸시 전 후크에서 로컬 변경사항이 정리되었는지 확인합니다.
- 출시 브랜치 간의 병합으로 인해 회귀가 발생하지 않는지 확인합니다.
정밀 스캔
정밀 스캔은 포괄적인 저장소 전체 보안 감사를 위해 설계된 포괄적인 스캔 모드입니다. 병렬 작업자 (--deep-workers로 구성되며 기본값은 8이고 1~16 범위 지원)를 사용하여 전체
저장소에서 소스 파일을 동시에 감사합니다. 후보 결과를 발견하면 결과를 보고하기 전에 주변 코드 컨텍스트에 대해 결과를 검증하고 확인하여 거짓양성을 필터링합니다.
다음 예에서는 저장소 전체에서 정밀 스캔을 실행하는 방법을 보여줍니다.
# Run an exhaustive deep scan across the entire repository
cm find . --deep
# Tune concurrency and use the cyber-specialized security model
cm find . --deep --deep-workers=8 --model=gemini-3.8-flash-cyber
강점
정밀 스캔은 대규모 엔터프라이즈 코드베이스에서 높은 재현율과 포괄적인 취약점 검색을 제공하여 단일 세션 스캔보다 성능이 우수하고 자동 검증을 사용하여 높은 정밀도를 유지합니다. 여러 언어를 지원하며 플랫폼 독립적입니다. 언어별 컴파일러, 빌드 설정 또는 문법 파일이 없어도 Gemini에서 지원하는 모든 언어에서 작동합니다. 또한 프로덕션 코드에 분석을 집중하고 비프로덕션 파일의 컴퓨팅 및 토큰 소비를 최소화하여 리소스 사용을 최적화합니다.
장단점 및 제한사항
정밀 스캔을 pull 요청을 차단하는 동기식 검사로 사용하지 마세요. 정밀 스캔은 철저한 저장소 전체 분석을 수행합니다. 따라서 표준 스캔 또는 diff 스캔보다 런타임이 길고 토큰 소비가 더 많습니다.
사용 시기
다음 시나리오에서는 정밀 스캔을 사용하세요.
- 모든 프로덕션 저장소에서 야간 또는 주간 일정에 따라 예약된 보안 감사를 실행합니다.
- 메이저 버전 출시 또는 프로덕션 배포 전에 전체 출시 전 보안 감사를 실행합니다.
- SOC 2, ISO 27001, FedRAMP 또는 PCI-DSS 규정 준수 및 인증 검토를 위한 감사 증거를 생성합니다.
- 새 코드베이스를 CodeMender에 온보딩할 때 초기 보안 기준을 설정합니다.
찾기 모드 선택
다음 참조 표를 사용하여 워크플로에 적합한 스캔 모드를 선택하세요.
| 워크플로 또는 환경 | 사용 사례 및 목표 | 권장 모드 | 명령어 예 |
|---|---|---|---|
| 로컬 터미널 | 특정 모듈에 대한 빠른 검색 또는 신뢰도 확인 | 표준 스캔 | cm find ./src |
| 로컬 터미널 | 푸시하기 전에 스테이징된 변경사항에 대한 커밋 전 검사 | Diff 스캔 | cm find . --diff --staged |
| CI/CD 파이프라인 | 변경된 코드 및 호출자에 대한 자동 pull 요청 게이팅 | Diff 스캔 |
cm find . --diff=origin/main --fail-on=CRITICAL,HIGH
|
| 예약된 파이프라인 또는 감사 | 야간 감사, 출시 전 게이트, SOC 2 규정 준수 | 정밀 스캔 | cm find . --deep --deep-workers=8 |
모드별 명령어 플래그 참조
다음 표에서는 각 스캔 모드에서 지원하는 명령줄 플래그를 설명합니다.
일반 플래그 (모든 모드)
다음 플래그는 모든 cm find 스캔 모드에 적용됩니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
-c, --context TEXT |
"" |
아키텍처 노트와 같이 스캔 에이전트를 안내하는 추가 컨텍스트입니다. |
--model MODEL_NAME |
gemini-3.8-flash |
사용할 Gemini 모델 (gemini-3.8-flash,
gemini-3.8-flash-cyber)입니다.
|
-y, --yes |
false |
모든 대화형 확인 프롬프트를 건너뜁니다. |
--unrestricted |
false |
파일 시스템 샌드박스를 사용 중지합니다. |
Diff 스캔 플래그
다음 플래그는 cm find --diff 스캔을 구성합니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--diff[=REF] |
사용 안함 |
origin/main 또는 HEAD~1과 같은 타겟 참조에 대해 diff 모드를 사용 설정합니다.
REF가 없으면 HEAD와 비교합니다.
--deep와 함께 사용할 수 없습니다.
|
--staged |
사용 안함 |
스테이징된 색인으로만 diff 범위를 지정합니다 (git diff --cached).
--diff가 필요합니다.
|
--diff-depth DEPTH |
1 |
영향 분석의 순회 깊이 (1~3, 기본값: 1홉). |
--diff-workers COUNT |
4 |
pull 요청 감사 작업의 동시 작업자 수 (1~16). |
--diff-max-neighbors COUNT |
10 |
검사할 종속 호출자 또는 호출 대상 파일의 최대 개수입니다. |
--fail-on SEVERITIES |
CRITICAL,HIGH |
쉼표로 구분된 심각도로 인해 cm find가 코드 1로 종료됩니다.
|
--fail-on-truncation |
사용 안함 | 인접 항목 검색이 한도를 초과하면 코드 1로 종료합니다. |
--format FORMAT |
table |
출력 형식: table, json 또는
sarif.
|
--output FILE |
표준 출력 | 표준 출력 대신 파일에 보고서를 작성합니다. |
정밀 스캔 플래그
다음 플래그는 cm find --deep 스캔을 구성합니다.
| 플래그 | 기본값 | 설명 |
|---|---|---|
--deep |
false |
포괄적인 저장소 전체 정밀 스캔을 사용 설정합니다.
와 함께 사용할 수 없습니다--diff.
|
--deep-workers COUNT |
8 |
정밀 스캔의 동시 작업자 수 (1~16). |