JProfiler, 힙 덤프를 AI 에이전트에 유용하게 만들다
JProfiler 16.3은 자체 MCP 서버를 통해 모든 주요 JProfiler 서브시스템을 AI 에이전트에 제공합니다. 그중 가장 유용한 추가 기능 중 하나가 힙 덤프 분석입니다. 이제 에이전트는 힙 내 객체들을 검사하고 참조를 따라가며 가비지 컬렉션되지 않은 이유를 파악할 수 있습니다.
런타임 데이터가 없으면 AI 에이전트는 어떤 객체가 살아 있는지, 무엇이 그 객체들을 도달 가능한 상태로 유지하는지 볼 수 없습니다. JProfiler는 이 간극을 메워서 에이전트가 실제 증거에서 출발해 관련 소스 코드를 찾아낼 수 있게 해 줍니다.
HotSpot의 반격: JEP 544, GraalVM 시작 성능 독점의 끝인가?
HotSpot JVM에 흥미진진한 시대가 찾아왔습니다: JEP 544: Ahead-of-Time Code Compilation이 Java 28용으로 방금 제안되었습니다. 이를 통해 HotSpot AOT 캐시가 GraalVM에 필적하는 시작 성능을 확보하되, GraalVM의 그런 고충은 하나도 겪지 않아도 될 것으로 기대됩니다. 다만 AOT 캐시를 학습시키는 것은 GraalVM으로 사전 컴파일하는 것과는 다르기 때문에, 실제로는 어느 쪽이 어떻게 비교될까요?SBOM이 15개월 후 의무화됩니다. 당신의 SBOM은 아마 잘못되어 있을 것입니다.
2027년 12월 11일부터 EU 사이버 복원력법(Cyber Resilience Act)의 SBOM 의무 사항이 적용됩니다. 즉, EU에서 소프트웨어를 배포하려면 곧 SBOM이 필요해집니다. EU만의 현상이 아니라, 이러한 선언적 접근 방식으로 공급망 보안을 강제하는 것은 전 세계적인 추세입니다. 미국은 2021년부터 연방 소프트웨어 공급업체에 SBOM을 요구해 왔고, CISA/NSA/FBI는 올해 7월 업데이트된 SBOM 최소 요소를 발표했습니다.
SBOM을 정확하게 작성하는 일은 쉽지 않으며, 소프트웨어와 함께 인스톨러를 배포하는 경우에는 한층 더 어려워집니다. 이제 어떻게 해야 할까요? 함께 살펴보겠습니다.
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 서버를 사용해 보고 있었기 때문입니다. 이 글에서는 에이전트가 클래스 파일 읽기를 두 배 이상 빠르게 만든 방법과, 프로파일링이 더 이상 시작할 이유를 필요로 하지 않게 된 배경을 소개합니다.