JProfiler 16: 에이전트형 Java 애플리케이션 프로파일링
AI에 프로파일링이 필요한 이유
기존의 프로파일링은 메서드 소요 시간, 메모리 할당, 스레드 동기화 문제처럼 JVM의 내부 실행에 초점을 맞춥니다. JProfiler의 과거 주요 혁신 중 하나는 프로브(probe)에 기반을 두고 있습니다. 바로 HTTP, JDBC, RPC 호출처럼 상위 수준 시스템에 대한 측정입니다. LangChain4j나 Spring AI 같은 LLM 프레임워크가 등장하면서 새로운 성능 과제가 생겨났습니다. LLM 상호작용은 표준 CPU 프로파일링으로는 맥락을 파악할 수 없는, 매우 비결정적인 지연 시간과 상당한 리소스 비용을 가져옵니다. JProfiler는 AI 상호작용을 새로운 프로브의 데이터 소스로 다룸으로써 이 간극을 메울 수 있는 독보적인 위치에 있습니다.
AI 프로브: LLM 워크플로우를 위한 관측 가능성
JProfiler 16의 핵심은 새로운 AI 프로브입니다. AI 프로브는 애플리케이션이 LLM과 상호작용하는 방식을 관찰하는 수단을 제공하며, 성능과 비용이라는 두 가지 중요한 문제를 최적화하는 데 도움이 되는 컨텍스트 인식 메트릭을 전달합니다.
지금까지 프로브는 이벤트의 소요 시간에만 초점을 맞춰 왔지만, JProfiler 16은 전환 가능한 기본 메트릭(primary metrics)을 도입했습니다. AI 프로브의 경우 여기에 입력 토큰과 출력 토큰이 포함됩니다. 이를 통해 어떤 프롬프트가 비용을 끌어올리거나 지연 시간 급증을 유발하는지 파악할 수 있습니다.
프로브 이벤트 뷰에서는 각 프롬프트의 전체 내용을 살펴볼 수 있습니다. 이는 잠재적으로 매우 방대한 양의 데이터입니다. 우리는 이 기회를 활용하여 이번 릴리스에서 JProfiler의 이벤트 시스템을 디버깅 보조 도구라는 원래 역할에서 파일 기반 고성능 데이터 스토어로 발전시켰습니다. 덕분에 AI 프로브와 같은 이벤트 중심 뷰가 가능해졌으며 기존의 다른 모든 프로브도 그 혜택을 받습니다.
이제 프로브를 다룰 때 이벤트 뷰가 컨트롤 센터 역할을 할 수 있습니다. 고급 필터링 기능을 사용하면 여러 차원에 걸쳐 이벤트 집합을 좁힐 수 있고, 하단의 보조 뷰를 통해 핫스팟(hot spot), 호출 트리, 분포 히스토그램, 타임라인을 살펴볼 수 있습니다.


스크립팅과 사용자 지정 핫스팟
많은 프로브에서 가장 유용한 관점은 해당 프로브의 핫스팟을 살펴보는 것입니다. 예를 들어 JDBC 프로브는 측정된 모든 prepared statement에 대한 누적 데이터를 보여 줍니다. 반면 AI 프로브에서는 여러 동시 요청에 대해 "핫스팟" 문자열을 추출하는 방법과 그 이름을 붙이는 방법이 그리 명확하지 않습니다.
기본적으로 JProfiler는 모델 이름을 표시합니다. 이는 유효한 핫스팟 관점이며 특히 여러 모델을 다룰 때 유용하지만, 다른 많은 사용 사례와 문제 시나리오에서는 부족합니다.
이번에도 JProfiler의 폭넓은 스크립팅 지원이 해결책이 됩니다. 코드 완성, 검사, 빠른 수정, 리팩토링 기능을 갖춘 최신 Java 편집기에서 LLM 요청을 분류하는 문자열을 추출하는 스크립트를 작성할 수 있습니다. 필요한 데이터를 추출하기 쉽도록 JProfiler는 요청을 모델링하는 API를 함께 제공합니다.
JProfiler는 스크립트를 컴파일하여 프로파일링 대상 JVM으로 전송합니다. 호출이 이루어질 때마다 스크립트가 실행되고 누적 핫스팟 뷰에 사용할 데이터가 계산됩니다.


실습 탐구: LLM 데모
에이전트형 애플리케이션 개발을 고려 중인 개발자를 위해 이번 릴리스에는 데모 앱이 포함되어 있습니다. 실제 애플리케이션에 접근할 필요 없이 AI 프로브의 기능을 탐색할 수 있습니다.
AI 프로브의 주제에 맞춰 이 데모는 arXiv 프리프린트 서버에서 논문 요약을 다운로드하고 그로부터 키워드를 추출합니다. 한 배치의 논문을 처리한 후에는 유사한 키워드를 통합합니다.
이 데모를 통해 HTTP Client 프로브를 AI 프로브와 함께 사용하여 여러 처리 단계에서 워크플로우를 검사하는 방법도 확인할 수 있습니다.


미래를 위한 기반
이번 릴리스의 세 가지 주요 주제는 AI 관측 가능성, 프로브 이벤트의 대규모 확장성, 그리고 최신 JVM에 대한 깊이 있는 지원입니다.
하지만 여기서 멈추지 않습니다. JProfiler 16과 함께 우리의 혁신은 가속화되었고 앞으로도 계속될 것입니다. 오늘날 JProfiler는 결정론적 코드와 확률론적 모델 사이의 상호작용을 해석하는 데 필요한 원시 수준의 가시성을 제공합니다. 또한 그 이면에서는 향후 버전이 순수한 관찰을 넘어 자동화되고 AI가 보조하는 성능 휴리스틱으로 나아갈 수 있게 할 기반을 다지고 있습니다. 기대해 주세요!