반응형
# 설치
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 | 쉬운 설치, 충분한 성능 |
이러한 특성을 고려하여 프로젝트의 요구사항에 맞는 라이브러리를 선택하면 됩니다.
'파이썬 > Basic' 카테고리의 다른 글
Geopy : 지리 정보 다루기 (2) | 2025.02.10 |
---|---|
lru_cache : 캐싱 메모리 (0) | 2025.02.08 |
함수 하나로 여러 가지 처리하기? Python 오버로딩 (2) | 2024.12.27 |
자료구조 : deque, Queue, heapq (0) | 2024.12.10 |
next()와 제너레이터 표현식 (1) | 2024.12.09 |