JProfiler, 힙 덤프를 AI 에이전트에 유용하게 만들다
JProfiler 16.3은 자체 MCP 서버를 통해 모든 주요 JProfiler 서브시스템을 AI 에이전트에 제공합니다. 그중 가장 유용한 추가 기능 중 하나가 힙 덤프 분석입니다. 이제 에이전트는 힙 내 객체들을 검사하고 참조를 따라가며 가비지 컬렉션되지 않은 이유를 파악할 수 있습니다.
런타임 데이터가 없으면 AI 에이전트는 어떤 객체가 살아 있는지, 무엇이 그 객체들을 도달 가능한 상태로 유지하는지 볼 수 없습니다. JProfiler는 이 간극을 메워서 에이전트가 실제 증거에서 출발해 관련 소스 코드를 찾아낼 수 있게 해 줍니다.
Apache Fory JSON을 4.5배 더 빠르게 만든 방법
최근 필자는 Java 직렬화 프레임워크들을 비교해 왔습니다. 바이너리 페이로드에 관한 한, 웹 사이트에서 "blazingly-fast"(번개처럼 빠르다)를 내세우는 Apache Fory의 확고한 팬이 되었는데, 실제로도 정말 그렇습니다. 이번 비교에서는 JSON 페이로드와 바이너리 페이로드를 구분해서 다루었습니다. Jackson은 (Kotlin에서도) JSON 직렬화의 왕이었고, 바이너리 페이로드에서는 Apache Fory가 압도적이었습니다.
최근 Apache Fory 1.7.0 릴리스에서는 주요 신규 기능으로 JSON 지원이 추가되었습니다. 그래서 자연스럽게도 궁금해진 필자는 직렬화 데모에 Fory JSON을 추가했습니다. 이 페이로드에 대한 수치를 보고는 도저히 믿을 수 없었습니다. Fory가 실제로 Jackson보다 2.8배나 느렸습니다. 뭔가 잘못된 것이 분명했고, 그 근본 원인을 끝까지 파고들기로 했습니다.
Java vs. Kotlin: 누가 (역)직렬화를 더 빠르게 할 수 있을까?
이전 포스트에서 저는 Java 직렬화 프레임워크들을 프로파일링했고, Apache Fory가 Java 직렬화와 그 밖의 경쟁 기술들을 큰 격차로 앞선다는 사실을 확인했습니다. 이 덕분에 Kotlin 프레임워크들은 어떤 비교 결과를 보일지에 대한 관심이 생겼습니다. Kotlin 생태계에는 자체적인 직렬화 라이브러리들이 있는데, 가장 대표적인 것은 컴파일 타임 코드 생성을 제공하는 JetBrains의 공식 라이브러리인 kotlinx.serialization과 KSP 기반 어댑터 생성을 제공하는 Moshi입니다. 과연 생성된 코드가 Jackson 같은 리플렉션 중심의 Java 방식들을 능가할까요?
이를 알아보기 위해 비교 프로젝트에 동등한 Kotlin 데이터 모델을 추가하고 JProfiler로 왕복 처리를 프로파일링했습니다. 결론부터 말하면 모델 클래스의 언어는 그다지 중요하지 않습니다. 다만 정말 놀라운 발견들이 몇 가지 있었습니다.
Apache Fory는 왜 그렇게 빠른가? Java 직렬화 프레임워크 5종 프로파일링
JDK 설계자들이 Java 직렬화를 몹시 싫어한다는 것은 공공연한 사실입니다. Java 직렬화는 보안상의 악몽이고, 새로운 언어 기능이 추가될 때마다 상당한 복잡성을 더하며, 게다가 속도까지 매우 느립니다. 그렇기 때문에 다른 직렬화 프레임워크들이 존재합니다. 최근에는 인상적인 성능을 내놓는 새로운 프레임워크가 등장했습니다. 바로 Apache Fory입니다. 이 블로그 포스트에서는 Fory가 이전 이름(예전에는 "Fury"였습니다)에 어울리는 성능을 내는지 살펴보고 기존 프레임워크들과 비교해 보겠습니다.
비교를 위해 다섯 가지 프레임워크로 현실적인 객체 그래프의 직렬화 및 역직렬화 왕복을 프로파일링했습니다:
- Java 직렬화
- Kryo
- Apache Fory
- Jackson - JSON과 CBOR 백엔드 모두 포함
이 프로파일링 데이터는 Apache Fory가 선두에 있는 이유, 그리고 Java 직렬화가 하는 일의 대부분은 사실 직렬화가 아니라는 점을 설명해 줍니다.
jvmguard 소개: 자동 프로덕션 프로파일링
JProfiler를 만든 팀이 새로운 오픈 소스 도구를 선보입니다. jvmguard는 여러분의 회사가 프로덕션에서 JVM을 프로파일링하도록 도와줍니다.
프로덕션에서의 프로파일링은 위험하지만, 문제를 이해할 수 있는 유일한 방법인 경우가 많습니다. jvmguard를 사용하면 프로파일링 캡처가 승인 및 감사를 거치며, 사람, 자동 트리거, AI 에이전트 중 무엇이든 시작할 수 있습니다.
jvmguard는 JProfiler와 함께 작동하지만 이 통합에만 국한되지 않습니다. JFR 스냅샷, HPROF 힙 덤프, 스레드 덤프도 기록하므로 다른 도구로 분석할 수 있습니다. jvmguard의 기본 아이디어는 경량 신호는 항상 활성화되어 있고, 심층 캡처는 특정 조건에서만 수행된다는 것입니다.
JProfiler MCP 서버를 더 약한 모델에서도 견고하게 만들기
플래그십 모델이 모든 코딩 작업에 이상적인 것은 아닙니다. 이 모델들은 느리고 비용도 많이 듭니다. 따라서 많은 작업, 특히 단순 반복 작업은 더 민첩하게 동작하며 훨씬 적은 비용으로 작업을 처리하는 하위 등급 모델이 더 적합합니다. 다만 이러한 모델들의 도구 호출 동작은 최상위 모델이 보여주는 수준보다 불안정할 수 있습니다.
JProfiler 16.1에서는 AI 코딩 에이전트가 Java 애플리케이션을 프로파일링하고 그 결과를 분석할 수 있도록 MCP 서버를 추가했습니다. 이 기능은 고객들로부터 많은 호평을 받았기 때문에, 앞으로의 릴리스에서 이 분야를 더욱 확장해 나갈 계획입니다.
초기 릴리스에서는 대부분의 테스트를 주로 Claude Code로 진행했습니다. JProfiler 16.2에서는 다른 AI 모델에서도 훨씬 견고하게 동작하도록 MCP 서버를 개선했습니다. 다른 모델들이 어떤 부분에서 실수를 했는지, 그리고 이러한 단점에 대비해 프로파일링 워크플로를 어떻게 견고하게 만들었는지 계속 읽어 보시기 바랍니다.
JProfiler 16.2: 명령줄에서 프로파일링하기
JProfiler 16.2는 오프라인 프로파일링을 한층 더 편리하게 만들어 줍니다. "오프라인 프로파일링"은 JProfiler GUI 없이 프로파일링을 수행하는 모드입니다. CI 서버, 컨테이너, 프로덕션 시스템에서 유용합니다. 이전 JProfiler 버전에서는 프로파일링 설정을 명령줄로 에이전트에 전달하려면 JProfiler GUI에서 내보낸 설정 파일을 사용해야 했고, 기록 명령은 Controller API, JProfiler MBean 또는 "jpcontroller" 명령줄 유틸리티를 통해 실행해야 했습니다.
많은 경우 이 워크플로는 불필요하게 복잡합니다. 이제 가장 일반적인 프로파일링 설정과 간단한 자동 기록 시퀀스를 명령줄에서 직접 설정하는 실용적인 방식을 도입했습니다. 바로 -agentpath VM 파라미터, jpenable attach 도구, 그리고 Gradle 및 Ant 프로파일링 태스크에서 설정할 수 있습니다. 이는 자동화 작업을 크게 간소화할 뿐만 아니라, 명령줄의 최신 주민인 AI 에이전트에게도 엄청난 이점을 제공합니다.
JProfiler MCP로 jclasslib 성능을 두 배로 개선한 방법
최근 저는 Codex와 프로파일링 에이전트를 사용해 제 오픈 소스 JVM 바이트코드 뷰어인 jclasslib의 성능을 개선했습니다. 특별한 문제가 있어서가 아니라, JProfiler 16.1과 함께 출시된 저희 MCP 서버를 사용해 보고 있었기 때문입니다. 이 글에서는 에이전트가 클래스 파일 읽기를 두 배 이상 빠르게 만든 방법과, 프로파일링이 더 이상 시작할 이유를 필요로 하지 않게 된 배경을 소개합니다.
Claude가 코드를 읽고서는 절대 찾을 수 없었던 핫스팟
CommaFeed는 제가 매일 사용하는 RSS 리더입니다. 오픈 소스이며, 개발자가 commafeed.com에서 무료 공개 인스턴스를 운영하고 있습니다. 피드를 새로 고칠 때마다 다른 누군가의 서버가 그 작업을 대신 처리해 줍니다. 그래서 그 작업이 실제로는 어디로 가는지 궁금해졌을 때, Claude Code와 JProfiler MCP를 여기에 연결해 보았습니다.
그 결과 데이터베이스 최적화 하나가 CommaFeed에 병합되었습니다. 수정 자체는 복잡하지 않았지만, Claude는 소스 코드만으로는 절대 이 수정을 떠올리지 못했을 것입니다. 나중에 물어보니 실제로 그렇다고 확인해 주었는데, 자연스럽게 시도했을 첫 번째 방법은 엉뚱한 곳을 고치는 것이었을 거라고 했습니다. JProfiler MCP 서버에 연결된 Claude Code가 어떻게 저의 단순한 호기심을 병합된 PR까지 이끌었는지 계속 읽어 보시기 바랍니다.
JProfiler 16.1: 이제 AI 에이전트가 Java 애플리케이션을 프로파일링할 수 있습니다
JProfiler 1.0 이래로 프로파일링은 개발자가 GUI로 수행하는 작업이었습니다. 세션을 시작하고, 뷰를 탐색하고, 데이터를 해석합니다. 실제로 이는 컨텍스트 전환을 정당화할 만큼 문제가 심각할 때만 성능 분석이 이루어진다는 뜻이며, 많은 문제가 프로파일링조차 거치지 않은 채 프로덕션으로 배포됩니다.
JProfiler 16.1에서는 프로파일링의 작동 방식을 바꾸고 있습니다. 이제 AI 코딩 에이전트가 Java 애플리케이션을 프로파일링하고, 결과를 분석하며, 그 결과에 따라 조치를 취할 수 있습니다. 이는 JProfiler가 시작된 이래 개발자의 프로파일링 활용 방식에서 가장 큰 변화입니다.
@ej-technologies/jprofiler-mcp npm 패키지로 제공되는 새로운 JProfiler MCP 서버는 Model Context Protocol을 통해 JProfiler의 프로파일링 및 힙 분석 기능을 노출합니다. Claude Code, Cursor, Codex, Gemini CLI를 비롯해 MCP를 지원하는 모든 AI 코딩 도구와 함께 작동합니다.