Uno Kim
by Uno Kim

Categories

Tags

다양한 Java JSON 라이브러리들

현업에서 개발하는 많은 REST API는 응답 데이터 포맷으로 JSON을 선택한다. API를 호출한 자바 프로그램에서는 이 응답 데이터를 파싱하여 자바 객체로 변환하는 역직렬화(deserialization) 과정이 필요할 것이다. 현재 굉장히 많은 자바 JSON 라이브러리가 존재하는데(json.org 에서 관련 자료를 확인할 수 있다), 어떤 것을 사용해야 할까?

보다 많은 커뮤니티와 업계에서 사용하여 보편적이고, 접근하기 용이하고, 패키지 무게가 가벼우며, 성능이 뛰어난 라이브러리일 수록 좋을 것이다. 오픈 소스라면 더욱 좋다. 2014년 4월 기고된 developer.com 관련 기사에서는 당시 가장 핫한 오픈 소스 JSON 처리 라이브러리 7가지를 소개하고 있는데, 자체 벤치마크 결과 그래프를 함께 제공하여 어떤 라이브러리가 자신의 프로젝트에 가장 적합할지를 선택하는데 도움을 주고 있다.

벤치마크 대상이 된 라이브러리 목록은 다음과 같다.

  • Jackson
  • Google-gson
  • JSON-lib
  • Flexjson
  • Json-io
  • Genson
  • JSONij

각 라이브러리의 특징을 기사 내용을 바탕으로 리스트 형식으로 간략하게 요약하였다.

1. Jackson

  • 상당히 잘 알려진 JSON 라이브러리
  • 컨셉: “다목적 자바-JSON 처리 라이브러리. 빠르고 정확하고 가벼우며 개발자에게 친숙하다. (multi-purpose Java library for processing JSON who aims to be the best possible combination of fast, correct, lightweight and ergonomic for developers)”
  • 코드가 심플한 편
  • 특히 고용량(100MB 이상)의 JSON 데이터 처리 성능이 탁월
  • 패키지는 무거운 편
  • 메이븐(Maven) 저장소 지원

2. Google-gson

  • 오우(Oh), 구글!
  • 소스코드 구하기, 레퍼런스 찾기 용이
  • 가벼운 JSON 데이터 처리 성능 탁월, 전반적으로 고성능
  • 상대적으로 가벼운 패키지 무게
  • 하나의 jar 파일로 구성, 메이븐 저장소 지원

3. JSON-lib

4. Flexjson

  • 자바 객체를 JSON으로 직렬화하거나 비직렬화할 수 있는 경량 라이브러리
  • 다른 외부 라이브러리와 의존성 없음
  • 성능은 무난하나 아주 적은 패키지 사이즈가 장점
  • 소스코드: http://sourceforge.net/projects/flexjson/files/

5. Json-io

  • 초경량 라이브러리
  • JsonReader, JsonWriter 두 클래스로 구성 -> 직렬화 담당하는 stream 객체가 필요 없음
  • 대부분의 경우 JDK의 ObjectInputStream, ObjectOutputStream보다 빠른 직렬화 성능을 제공
  • 메이븐 저장소 지원

6. Genson

7. JSONiJ

성능 측정(benchmark) 결과

다음은 위 7종의 라이브러리를 사용한 테스트 결과를 그래프로 나타낸 것이다.

figure 1.

  • 작은 용량 직렬화(Object->JSON, 실질적 내보내기) 1, 2등: Flexjson, gson
  • 작은 용량 직렬화/비직렬화 종합 1, 2등: gson, genson

figure 2.

  • 작은 용량 전체 시간 1, 2등: gson, genson

figure 3.

  • 큰 용량 직렬화(Object->JSON, 실질적 내보내기) 1, 2등: Jackson, JSON-lib
  • 큰 용량 직렬화/비직렬화 종합 1, 2등: Jackson, JSON-lib

figure 4.

  • 큰 용량 전체 시간 1, 2등: Jackson, JSON-lib

figure 5.

  • 라이브러리 사이즈 1, 2등: json-io, Flexjson

결론

난 gson! (근데 회사에서 줄곧 Jackson 쓰고 있음)

Reference