개발자 가이드: 서비스 호출 그래프 생성

이 문서에서는 장기 실행 aura_engine.py의 시각적 호출 그래프를 생성하기 위한 강력하고 스레드로부터 안전한 방법을 설명합니다. 우리는 ‘yappi’ 프로파일러(멀티스레딩 지원용)와 시각화를 위해 ‘gprof2dot’를 사용합니다.

전제 조건

전역적으로 또는 가상 환경에 필요한 도구가 설치되어 있는지 확인하세요.

# Required Python libraries for profiling
pip install yappi gprof2dot

# Required system library for visualization
# Linux: sudo apt install graphviz 

1단계: 프로파일링을 위한 서비스 수정

yappi 프로파일러를 수동으로 시작하고 중단 시 프로파일링 데이터를 정상적으로 저장하려면(Ctrl+C) aura_engine.py 스크립트를 수정해야 합니다.

aura_engine.py의 주요 변경 사항:

  1. 가져오기 및 신호 처리기: yappi를 가져오고 generate_graph_on_interrupt 함수(이전에 구현된 대로)를 정의하여 yappi.stop()stats.save(...)를 호출합니다.

  2. 시작/중지: if __name__ == "__main__": 블록 내에 yappi.start()signal.signal(signal.SIGINT, ...)를 추가하여 main(...) 실행을 래핑합니다.

2단계: 서비스 실행 및 데이터 수집

수정된 스크립트를 직접 실행하고 충분한 시간(예: 10-20초) 동안 데이터를 처리하여 스레드된 기능(예: LanguageTool 수정)을 포함한 모든 핵심 기능이 호출되도록 합니다.

# Execute the service directly (do NOT use the pycallgraph wrapper)
python3 aura_engine.py

Ctrl+C를 한 번 눌러 신호 처리기를 트리거합니다. 이렇게 하면 프로파일러가 중지되고 원시 데이터가 다음 위치에 저장됩니다.

\mathbf{yappi\_profile\_data.prof

3단계: 시각적 그래프 생성 및 필터링

우리는 gprof2dot을 사용하여 원시 pstats 데이터를 SVG 형식으로 변환합니다. --include--threshold와 같은 고급 필터링 옵션은 특정 환경에서 지원되지 않을 수 있으므로 기본 --strip 필터를 사용하여 경로 정보를 정리하고 시스템 내부의 혼란을 줄입니다.

시각화 명령을 실행합니다:

python3 -m gprof2dot -f pstats yappi_profile_data.prof --strip | dot -Tsvg -o yappi_call_graph_stripped.svg

4단계: 문서화(수동 자르기)

결과 yappi_call_graph_stripped.svg(또는 .png) 파일은 크지만 모든 스레드를 포함한 전체 실행 흐름을 정확하게 포함합니다.

문서화 목적으로 이미지를 수동으로 잘라서 중앙 논리(10~20개 핵심 노드 및 해당 연결)에 초점을 맞춰 저장소 문서화에 대한 집중적이고 읽기 쉬운 호출 그래프를 만듭니다.

아카이빙 중

수정된 구성 파일과 최종 호출 그래프 시각화는 문서 소스 디렉터리에 보관되어야 합니다.

유물

위치

수정된 서비스 파일

doc_sources/profiling/aura_engine_profiling_base.py

최종 자른 이미지

doc_sources/profiling/core_logic_call_graph.svg

원시 프로파일링 데이터

(선택사항: 최종 저장소 문서에서 제외되어야 함)

yappi_call_graph