파이썬/Basic

Python JSON 라이브러리 비교: json vs ujson vs orjson

코샵 2025. 2. 26. 10:48
반응형
# 설치
pip install ujson
pip install orjson

각 라이브러리의 특징

import json
import ujson
import orjson

# 기본 json
data = {"name": "John", "age": 30}
json_str = json.dumps(data)
json_obj = json.loads(json_str)

# ujson
ujson_str = ujson.dumps(data)
ujson_obj = ujson.loads(ujson_str)

# orjson
orjson_bytes = orjson.dumps(data)
orjson_obj = orjson.loads(orjson_bytes)

성능 비교

import timeit
import datetime

test_data = {
    "string": "hello world",
    "number": 123.456,
    "boolean": True,
    "null": None,
    "array": [1, 2, 3, 4, 5],
    "object": {"key": "value"},
    "date": datetime.datetime.now()
}

# 직렬화 성능 테스트
def test_json_dumps():
    json.dumps(test_data, default=str)

def test_ujson_dumps():
    ujson.dumps(test_data, default=str)

def test_orjson_dumps():
    orjson.dumps(test_data)

# 결과 예시:
# json: 10.5 μs
# ujson: 5.2 μs
# orjson: 2.1 μs

특수 타입 처리

from decimal import Decimal
from datetime import datetime
import uuid

special_data = {
    "decimal": Decimal("123.456"),
    "datetime": datetime.now(),
    "uuid": uuid.uuid4(),
    "bytes": b"binary data"
}

# json
json.dumps(special_data, default=str)

# ujson
ujson.dumps(special_data, default=str)

# orjson
orjson.dumps(
    special_data,
    default=lambda x: x.isoformat() if isinstance(x, datetime) else str(x)
)

메모리 사용량 비교

import sys

large_data = [{"id": i, "value": f"test{i}"} for i in range(100000)]

# 메모리 사용량 측정
def get_size(obj):
    return sys.getsizeof(obj)

json_size = get_size(json.dumps(large_data))
ujson_size = get_size(ujson.dumps(large_data))
orjson_size = get_size(orjson.dumps(large_data))

라이브러리 특징 비교

특징 json ujson orjson
구현 언어 Python C Rust
상대적 성능 느림 빠름 매우 빠름
메모리 사용량 높음 중간 낮음
타입 지원 기본 제한적 광범위
설치 난이도 기본 내장 쉬움 중간
유지보수 매우 안정적 안정적 활발한 개발

사용 케이스 권장사항

사용 케이스 권장 라이브러리 이유
일반적인 사용 json 호환성, 안정성
대용량 데이터 orjson 최고 성능, 메모리 효율
간단한 고성능 ujson 쉬운 설치, 충분한 성능

 

이러한 특성을 고려하여 프로젝트의 요구사항에 맞는 라이브러리를 선택하면 됩니다.