SJF4J vs Jayway JsonPath: Java 벤치마크에서 최대 7배 빠름

발행: (2026년 3월 29일 AM 11:41 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

벤치마크 개요

  • SJF4J
  • Jayway JsonPath

Result: SJF4J is up to 7× faster. → **결과: SJF4J가 최대 7배 빠릅니다.

The JMH benchmark suite compared:

  • SJF4J v1.5.0
  • Jayway JsonPath v2.9.0

Across three workload shapes:

  1. Path compilation → 1. 경로 컴파일
  2. Query on a shared JsonNode → 2. 공유된 JsonNode에 대한 쿼리
  3. Query on Map/List object graphs → 3. Map/List 객체 그래프에 대한 쿼리

JMH 구성

  • 워밍업: 5 × 300 ms
  • 측정: 8 × 300 ms
  • 포크: 2
  • 스레드: 1

사용된 표현식

$.store.book[1].price
$.store.bicycle.color
$.store.book[*].author
$..price
$.store.book[?(@.price > 10)].title
$.store.book[0,2].title

헤드라인 결과

기하 평균 (낮을수록 좋음)

벤치마크 그룹SJF4JJayway결과
compile97 ns/op125 ns/op1.28배 빠름
query_definite100 ns/op237 ns/op2.38배 빠름
query_indefinite656 ns/op1 294 ns/op1.97배 빠름
query_map_list_definite31 ns/op200 ns/op6.38배 빠름
query_map_list_indefinite280 ns/op1 301 ns/op4.65배 빠름

요약 – 일반 쿼리에서는 약 2배 빠르고, Map/List에서는 최대 7배 빠르며, 컴파일 속도도 향상되었습니다.

Shared JsonNode에 대한 쿼리

확정 쿼리

ExpressionSJF4JJayway결과
$.store.book[1].price111 ns/op260 ns/op2.35× faster
$.store.bicycle.color90 ns/op216 ns/op2.40× faster

불확정 쿼리

ExpressionSJF4JJayway결과
$.store.book[*].author342 ns/op910 ns/op2.66× faster
$..price1 736 ns/op3 877 ns/op2.23× faster
$.store.book[?(@.price > 10)].title1 292 ns/op1 660 ns/op1.29× faster
$.store.book[0,2].title242 ns/op478 ns/op1.98× faster

결론: SJF4J는 JSONPath 엔진으로서 일관되게 더 빠릅니다.

Source:

Map/List 객체 그래프에 대한 쿼리

정확한 쿼리

ExpressionSJF4JJaywayResult
$.store.book[1].price37 ns/op280 ns/op7.50× faster
$.store.bicycle.color26 ns/op142 ns/op5.42× faster
$.store.book[*].author135 ns/op1 045 ns/op7.73× faster
$..price543 ns/op2 495 ns/op4.59× faster
$.store.book[?(@.price > 10)].title823 ns/op1 836 ns/op2.23× faster
$.store.book[0,2].title102 ns/op598 ns/op5.89× faster

불확정 쿼리

ExpressionSJF4JJaywayResult
(위와 동일한 집합, “불확정” 그룹에서 측정)

요약: 애플리케이션이 이미 Map/List 객체 그래프에서 동작하고 있다면, SJF4J가 가장 큰 성능 향상을 제공합니다.

객체 표현별 벤치마크

벤치마크 그룹Map/List (ns/op)JOJO (ns/op)POJO (ns/op)
definite314394
indefinite270373554

상세 표현식 성능

표현식Map/ListJOJOPOJO
$.store.book[1].price37 ns/op46 ns/op102 ns/op
$.store.bicycle.color26 ns/op40 ns/op87 ns/op
$.store.book[*].author131 ns/op196 ns/op374 ns/op
$..price496 ns/op914 ns/op955 ns/op
$.store.book[?(@.price > 10)].title807 ns/op876 ns/op1 100 ns/op

이 결과가 의미하는 바

  • Map/List 가 가장 빠릅니다 (추상화가 없음).
  • JOJO (JSON Object + Java Object 하이브리드)는 최소한의 오버헤드만 추가합니다.
  • POJO 가 더 느리지만 여전히 실용적입니다.

핵심 인사이트

중간 JSON AST 로 변환하지 않고 도메인 모델에 바로 JSONPath 를 적용할 수 있습니다:

POJO → JSONPath → result

전통적인 방식:

POJO → JsonNode → JSONPath → result

이렇게 하면 데이터 처리 파이프라인에서 전체 레이어를 제거하게 되어, 위에서 관찰된 성능 차이를 얻을 수 있습니다.

결론

  • SJF4J는 다른 라이브러리에서 요구되는 변환 작업을 피합니다.
  • Jayway JsonPath는 기본 사용에는 괜찮지만, 성능이 중요한 경우—특히 Map/List 또는 POJO 객체 그래프에서—SJF4J가 단순히 더 빠릅니다.

GitHub:
Benchmark source: JsonPathCompareBenchmark.java

0 조회
Back to Blog

관련 글

더 보기 »

성능 & 재귀

센서 없이 참가자 수 세기 옵션 1: 사람을 한 명씩 차례대로 세기 – 1, 2, 3, 4… 옵션 2: 두 명씩 세기 – 2, 4, 6, 8… 옵션 3: 페어링 전략 사용…

Java 예외 처리 소개

예외 처리란 무엇인가? Java에서 예외 처리는 런타임 오류를 처리하여 프로그램의 정상 흐름을 유지할 수 있게 하는 메커니즘이다. An exc...

#22 Known는 Drop! for loop in Java

정의: 반복 횟수가 알려져 있을 때 일반적으로 코드 블록을 여러 번 반복하는 데 사용되는 제어문입니다. 구문: java for initializer; co...