Graphify가 11월 8일 저장소 경로를 실행 코드와 분리하고 언어별 호출 관계 분석을 보완한 새 버전을 공개했다. 소스 코드에서 어떤 함수가 어디로 이어지는지 살펴보는 개발자는 경로를 통한 코드 실행 위험을 줄이고, 이전에 빠졌던 호출 관계를 그래프에서 확인할 수 있게 됐다.
1. 저장소 경로를 실행 코드와 분리
/graphify 실행 안내서가 생성하는 코드 블록은 스캔 경로를 파이썬 코드의 문자열에 직접 끼워 넣지 않게 됐다. 첫 단계에서 경로를 graphify-out/.graphify_root 파일에 기록하고, 이후 분석과 갱신 단계는 이 파일을 읽는다.
이전에는 경로에 따옴표나 $(...)가 있으면 Path('INPUT_PATH')의 문자열을 벗어나 코드로 실행될 수 있었다. 이제는 경로를 명령이 아닌 주소 데이터로 취급한다. 저장소 이름에 들어 있는 문자가 실행 코드의 일부가 되던 통로를 바꾼 것이다.
2. 위치가 달라도 같은 프로젝트의 노드 유지
파이썬에서 가져올 대상을 확정하지 못할 때 쓰는 임시 노드의 식별자는 저장소 위치에 덜 의존하도록 바뀌었다. 절대 경로 대신 프로젝트 내부 위치를 기준으로 삼아, 저장소를 다른 폴더에 내려받거나 캐시를 옮겨도 같은 식별자를 유지한다. 그래프 속 대상에 붙이는 이름표가 저장소의 주소 변경만으로 달라지던 문제를 고친 셈이다.
윈도에서도 같은 파일의 경로 표기가 다르다는 이유로 캐시 항목이 나뉘던 문제를 수정했다. 긴 경로를 사용하는 저장소에서도 파일 상태를 기록하는 키를 루트 기준 상대 경로로 유지해, 옮기거나 복제한 코드 모음에서 캐시를 빠르게 찾는 방식을 계속 쓴다.
하위 폴더를 대상으로 새로 만든 그래프를 오래된 형식으로 오인하던 판정도 수정됐다. 새 그래프에 불필요한 강제 추출 안내가 뜨지 않게 해, 프로젝트 전체가 아닌 일부 폴더만 분석하는 흐름을 보완했다.
3. Solidity와 C# 호출을 선언에 연결
솔리디티에서는 블록체인에서 자동 실행되는 스마트 계약이나 인터페이스 타입의 값을 통해 함수를 호출할 때 해당 선언으로 연결되도록 바뀌었다. 아래는 릴리스 노트의 예시다. 토큰 변수의 함수 호출이 어떤 선언을 가리키는지 그래프에 연결하는 사례다.
IERC20 token; token.transfer()using A for T 지시문으로 특정 타입에 붙여 쓰는 라이브러리 함수와 독립 함수의 호출도 연결한다. 이전에는 이런 방식으로 붙인 함수를 호출해도 해당 함수까지 관계가 이어지지 않던 부분을 보완했다.
C#에서는 인스턴스·정적 생성자와 타입 선언에서 매개변수를 받는 주 생성자, 타입 선언에 함께 정의하는 생성자를 각각 독립 노드로 기록한다. 생성자 안의 호출을 해당 노드에 귀속하고, 객체를 만들거나 다른 생성자를 부르는 코드를 인자 개수가 맞는 생성자에 연결한다.
속성과 인덱서의 접근자, 속성 값을 읽거나 바꾸는 부분 내부에서 일어나는 호출도 해당 멤버에 연결된다. 인덱서는 배열처럼 대괄호로 값을 읽고 쓰는 기능이다. 식으로 작성한 본문과 연산자·형 변환 본문 속 호출도 기록해, 일반 메서드 밖에서 일어나는 호출의 누락을 줄였다.
솔리디티는 대상 타입을 알 수 없거나 후보를 하나로 좁히지 못하면 연결을 보류한다. C#도 인자 개수가 맞는 생성자 후보가 둘이거나 기반 클래스의 생성자를 확인할 수 없으면 생성자 연결을 추가하지 않는다.
4. 변경 감시는 필요한 재구축에 집중
감시 도구가 이벤트 필터를 지원하면 읽기 전용 이벤트를 감시 대상에서 빼고 변경 이벤트만 처리한다. 큰 디렉터리에서 이벤트 대기열이 넘치는 일이 반복되던 문제를 막기 위한 조치다.
감시 중 그래프 파일이 없으면 일부 정보만으로 불완전한 그래프를 만들지 않고 전체를 다시 구축한다. 자바스크립트·타입스크립트에서 가져오기 경로를 결정하는 설정 파일이나 잠금 파일이 바뀔 때도 전체를 재구축한다. 설정이 바뀌었는데도 이전 파일 연결이 그래프에 남던 문제를 고친 것이다.
5. 정확성 개선과 캐시 재계산 비용
이번 변경은 저장소 이동에도 식별자를 유지하고 언어별 호출 누락을 줄이는 대신, 일부 분석을 다시 수행하는 비용을 수반한다. 구문 분석 결과를 저장하는 코드 구조와 저장 형식을 정하는 AST 캐시 스키마가 40으로 올라, 기존 캐시가 있으면 영향을 받는 솔리디티·C# 추출을 다시 실행한다. 파이썬의 식별자 수정에는 캐시 스키마 변경이 필요하지 않다.
Graphify 0.9.104는 경로 이동과 언어별 호출 추적의 신뢰도를 높이는 대신, 일부 변경에서는 추출 또는 전체 그래프의 재계산을 요구한다.
