피드로 돌아가기
SJF4J vs Jayway JsonPath: Up to 7x Faster in Java Benchmarks
Dev.toDev.to
Backend

SJF4J가 JSONPath 쿼리 엔진을 네이티브 Java 객체 그래프에서 직접 실행하도록 재설계해 Jayway JsonPath 대비 최대 7배 빠른 성능 달성

SJF4J vs Jayway JsonPath: Up to 7x Faster in Java Benchmarks

Yu Han2026년 3월 29일3intermediate

Context

기존 JSONPath 라이브러리들은 데이터를 JSON AST(Abstract Syntax Tree)로 강제 변환한 후 쿼리를 실행하므로, 이미 Map/List 또는 POJO 형태의 Java 객체를 다루는 애플리케이션에서 불필요한 변환 오버헤드가 발생한다.

Technical Solution

  • SJF4J 설계: JSONPath 쿼리를 JSON AST 변환 없이 네이티브 Java 객체 그래프(Map/List, JOJO, POJO)에서 직접 실행
  • 경로 평가 최적화: 추상화 계층 제거로 경로 컴파일과 쿼리 실행 단계의 오버헤드 감소
  • 다양한 객체 모델 지원: Map/List(가장 빠름), JOJO(JSON Object + Java Object 하이브리드), POJO(직접 실행 가능)
  • JMH 벤치마크 검증: 5회 300ms 워밍업, 8회 300ms 측정, 2개 포크, 1개 스레드로 6가지 JSONPath 표현식 검증

Impact

정의된 경로 쿼리(JsonNode 기준): SJF4J 2.35~2.40배 빠름 비정의된 경로 쿼리(JsonNode 기준): SJF4J 1.29~2.66배 빠름 Map/List 정의된 경로 쿼리: SJF4J 5.42~7.50배 빠름 Map/List 비정의된 경로 쿼리: SJF4J 4.59~7.73배 빠름 경로 컴파일: SJF4J 1.28배 빠름(97 ns/op vs 125 ns/op)

Key Takeaway

JSONPath 엔진 선택 시 데이터가 이미 네이티브 Java 객체(Map/List 또는 POJO)로 존재한다면 불필요한 AST 변환 계층을 제거하는 설계가 2~7배 성능 향상을 가져올 수 있다는 교훈을 제공한다.


Map/List나 POJO 객체 그래프에서 JSONPath 쿼리를 빈번하게 실행하는 Java 애플리케이션에서는 SJF4J를 도입해 POJO → JsonNode → JSONPath → result 파이프라인을 POJO → JSONPath → result로 단순화하면, 특히 비정의된 경로 쿼리(와일드카드, 재귀 검색 포함)에서 4배 이상의 레이턴시 감소를 기대할 수 있다.

원문 읽기