CodeQL 점진적 분석으로 C/C++, Go 코드 분석 속도 UP!
CodeQL 분석 속도 향상을 위해 C/C++ 및 Go 언어 대상 점진적 분석(Incremental Analysis) 기능이 추가됨
기존 C#, Java 등 언어에 적용된 개선 사항을 C/C++, Go에도 확대 적용함
7일간의 테스트 결과, 기존 대비 분석 시간 단축 효과를 확인했으며, 기본 CodeQL 쿼리 스위트 사용 시 적용됨
CodeQL CLI 버전 2.25.5부터 서드파티 CI 시스템에서도 점진적 분석 지원 시작
점진적 분석(Incremental Analysis)의 작동 원리
점진적 분석은 이전 분석 이후 변경된 코드 부분만 재분석하여 전체 코드 스캔 대비 시간 복잡도(Time Complexity)를 크게 줄이는 방식이다.
변경 사항 추적: 빌드 시스템 또는 파일 시스템 감시를 통해 수정된 소스 파일(Modified Source Files) 및 의존성(Dependencies)을 식별한다.
증분 데이터베이스 업데이트: CodeQL은 이전 분석 결과를 캐시하고, 변경된 부분에 해당하는 데이터베이스(Database) 노드만 업데이트하여 전체 데이터베이스 재생성 비용(Recreation Cost)을 절감한다.
쿼리 실행 최적화: 변경된 코드와 관련된 쿼리만 재실행하거나, 이전 분석 결과를 활용하여 쿼리 실행 계획(Query Execution Plan)을 최적화한다.
이러한 메커니즘을 통해 분석 시간(Analysis Time)을 수 분에서 수 초 단위로 단축하여 개발 워크플로우(Development Workflow)의 효율성을 높인다.
기존 분석 대비 성능 향상 효과
본문에서 제시된 15,000개 이상의 저장소 대상 테스트 결과, 점진적 분석은 전통적인 전체 스캔 방식 대비 상당한 속도 향상(Significant Speed Up)을 보였다.
분석 시간 분류: 저장소를 '3분 이하', '3~7분', '7분 이상' 그룹으로 나누어 측정했으며, 모든 그룹에서 점진적 분석의 효율성이 입증되었다.
주요 언어 적용: 특히 C/C++와 Go 언어에 대한 개선 사항 적용으로, 해당 언어 기반 프로젝트의 코드 스캔(Code Scanning) 성능이 개선되었다.
기본 설정 적용: 이 개선 사항은 기본 CodeQL 쿼리 스위트(Default CodeQL Query Suite)를 사용하는 프로젝트에 기본적으로 적용되어 별도 설정 없이 성능 향상을 기대할 수 있다.
CodeQL CLI와 CI/CD 통합
CodeQL CLI 버전 2.25.5부터는 서드파티 CI 시스템(Third-party CI Systems)에서도 점진적 분석 기능이 지원된다.
CI/CD 워크플로우 통합: 젠킨스(Jenkins), GitLab CI 등 다양한 CI/CD 파이프라인에 점진적 분석을 내장하여 코드 품질 검증 속도를 높일 수 있다.
빌드 모드(Build Mode) 설정: 'build mode none' 추출 메커니즘을 사용하는 프로젝트의 경우, github.com 뿐만 아니라 외부 CI 환경에서도 기본 활성화된다.
개발 생산성 향상: CI/CD 파이프라인의 실행 시간 단축은 개발자 피드백 루프(Developer Feedback Loop)를 개선하고, 지연된 코드 리뷰(Delayed Code Review) 문제를 완화하는 데 기여한다.
점진적 분석의 적용 범위 및 제약
이번 개선된 점진적 분석 기능은 기본 CodeQL 쿼리 스위트(Default CodeQL Query Suite)를 사용하는 프로젝트에 적용된다.
쿼리 스위트 의존성: 사용자 정의 쿼리 스위트나 특정 분석 시나리오의 경우, 점진적 분석의 효과가 제한적일 수 있으며 추가적인 최적화가 필요할 수 있다.
빌드 모드: 'build mode none' 추출 메커니즘에 최적화되어 있어, 다른 빌드 모드(Other Build Modes)를 사용하는 경우 동작 방식에 대한 추가 확인이 필요할 수 있다.
언어 지원: 현재 C/C++, Go 외 다른 언어에 대한 점진적 분석은 이전 릴리스에서 이미 지원되었으므로, 최신 개선 사항은 해당 언어에 직접 적용되지 않을 수 있다.