정적 분석 (Static Analysis)

컴퓨터과학·AI
한 줄 정의: 프로그램을 실제로 실행하지 않고 소스 코드 자체만 살펴보아, 버그나 보안 취약점, 코드 스타일 문제 등을 미리 찾아내는 검사 기법입니다.

쉽게 풀면

요리 레시피를 실제로 요리해보지 않고 글만 읽고 검토하는 상황을 떠올려 보세요. "3번 순서에서 소금을 넣으라는 말이 없는데 마지막에 간을 본다고 되어 있네, 순서가 이상하다"처럼, 직접 만들어보지 않아도 글의 논리만으로 문제를 찾아낼 수 있습니다. 정적 분석도 이와 비슷합니다. 프로그램을 실행하지 않고 소스 코드의 구조와 흐름만 분석해서, "이 변수는 값을 넣기도 전에 사용되고 있다"거나 "이 조건문은 절대 참이 될 수 없다" 같은 문제를 컴파일 이전 단계에서 자동으로 찾아냅니다.

왜 중요한가

정적 분석은 소프트웨어 결함을 실제 배포 이전, 가급적 개발 초기 단계에서 잡아낼 수 있어 소프트웨어공학과 보안 연구에서 핵심적인 위치를 차지합니다. 대규모 코드베이스나 오픈소스 생태계 전체를 대상으로 취약점을 자동 스캔하거나, 새로운 분석 기법(타입 추론, 데이터 흐름 분석, 기계학습 기반 탐지 등)의 성능을 검증하는 연구가 꾸준히 이어지고 있어, 관련 학회에서 비중 있게 다뤄지는 주제입니다.

논문에서는 이렇게 쓰입니다

"제안한 도구는 정적 분석을 통해 컴파일 이전 단계에서 널 포인터 역참조 취약점의 87%를 탐지하였으며, 오탐률은 6%에 그쳤다."

이 문장은 소프트웨어 보안이나 코드 품질을 다루는 논문에서, 프로그램을 실행하지 않고도 잠재적 결함을 얼마나 잘 찾아내는지 그 성능을 보고하는 대목입니다. 정적 분석은 대규모 코드베이스에서 사람이 일일이 확인하기 어려운 취약점을 자동으로 찾아내는 방법으로 소프트웨어공학 논문에서 널리 사용됩니다.

"모바일 애플리케이션 저장소를 대상으로 정적 분석을 수행하여 과도한 권한 요청 패턴을 자동으로 식별하였다."

모바일 보안 연구에서 앱을 실제로 설치하거나 실행하지 않고도, 코드에 포함된 권한 요청 관련 패턴만으로 잠재적 프라이버시 위험을 대규모로 스캔했다는 의미입니다.

"딥러닝 기반 코드 임베딩을 활용한 정적 분석 모델을 제안하여 기존 규칙 기반 도구 대비 탐지 재현율을 향상시켰다."

전통적인 규칙 기반 정적 분석의 한계를 극복하기 위해 딥러닝 모델을 결합한 새로운 접근을 제안했다는 뜻으로, 정적 분석 방법론 자체의 발전을 다루는 연구입니다.

조금 더 깊게 보면

정적 분석 도구는 흔히 추상구문트리(AST) 순회, 제어흐름그래프(CFG) 분석, 데이터흐름 분석 등의 기법을 조합해 코드의 논리 구조를 추적합니다. 논문에서는 도구의 성능을 정밀도(precision)와 재현율(recall)로 나타내는 경우가 많으며, 오탐(false positive)과 미탐(false negative) 사이의 균형이 실무 적용 가능성을 판단하는 중요한 기준으로 다뤄집니다.

주의할 점

정적 분석은 코드를 실행하지 않기 때문에, 실제 실행 환경이나 입력값에 따라서만 드러나는 문제까지 완벽히 잡아내지는 못합니다. 또한 실제로는 문제가 없는데도 문제라고 잘못 판단하는 오탐(false positive)이 발생할 수 있어, 통합 테스트 (Integration Testing) 같은 실행 기반 검증과 함께 사용하는 것이 일반적입니다.

관련 용어