푸터 콘텐츠로 바로가기
PYTHON 도움말

msgpack Python (개발자를 위한 작동 방식)

MessagePack 은 여러 언어 간의 데이터 교환을 가능하게 하는 효율적인 바이너리 직렬화 형식입니다. JSON과 유사하지만 더 빠르고 간결합니다. Python의 msgpack 라이브러리는 이 형식을 다루는 데 필요한 도구를 제공하며, CPython 바인딩과 순수 Python 구현을 모두 제공합니다.

MessagePack의 주요 기능

  1. 효율성: MessagePack은 속도와 크기 면에서 JSON보다 효율적이도록 설계되었습니다. 이는 바이너리 형식(msgpack 사양)을 사용하여 JSON과 같은 텍스트 기반 형식에서 발생하는 오버헤드를 줄임으로써 달성됩니다.
  2. 언어 간 지원: MessagePack은 여러 프로그래밍 언어를 지원하므로 서로 다른 시스템 및 언어 간에 데이터를 공유해야 하는 애플리케이션에 이상적입니다.
  3. 호환성: Python의 msgpack 라이브러리는 Python 2와 Python 3은 물론 CPython 및 PyPy 구현체와도 호환됩니다.
  4. 사용자 정의 데이터 형식: MessagePack은 고급 압축 해제 제어 기능을 통해 사용자 정의 데이터 형식을 패킹 및 압축 해제할 수 있도록 지원하며, 이는 복잡한 애플리케이션에 유용할 수 있습니다.

설치

MessagePack 데이터를 읽고 쓰기 전에 pip를 사용하여 msgpack 라이브러리를 설치해야 합니다.

pip install msgpack
pip install msgpack
SHELL

기본 사용법

다음은 MessagePack을 사용하여 데이터를 직렬화 및 역직렬화하는 간단한 예입니다.

import msgpack

# Serialize key-value pairs or file-like object
data = {'key': 'value', 'number': 42}
packed_data = msgpack.packb(data, use_bin_type=True)

# Deserialize data
unpacked_data = msgpack.unpackb(packed_data, raw=False)
print(unpacked_data)
import msgpack

# Serialize key-value pairs or file-like object
data = {'key': 'value', 'number': 42}
packed_data = msgpack.packb(data, use_bin_type=True)

# Deserialize data
unpacked_data = msgpack.unpackb(packed_data, raw=False)
print(unpacked_data)
PYTHON

고급 기능

  1. 스트리밍 언패킹: MessagePack은 스트리밍 언패킹을 지원하며, 이를 통해 단일 스트림에서 여러 객체를 언패킹할 수 있습니다. 이는 대규모 데이터 세트 또는 연속적인 데이터 스트림을 처리하는 데 유용합니다.
import msgpack
from io import BytesIO

# Create a buffer for streaming data
buf = BytesIO()
for i in range(100):
    buf.write(msgpack.packb(i))
buf.seek(0)

# Unpack data from the buffer
unpacker = msgpack.Unpacker(buf)
for unpacked in unpacker:
    print(unpacked)
import msgpack
from io import BytesIO

# Create a buffer for streaming data
buf = BytesIO()
for i in range(100):
    buf.write(msgpack.packb(i))
buf.seek(0)

# Unpack data from the buffer
unpacker = msgpack.Unpacker(buf)
for unpacked in unpacker:
    print(unpacked)
PYTHON
  1. 사용자 정의 데이터 유형: 사용자 정의 데이터 유형에 대해 사용자 정의 패킹 및 언패킹 함수를 정의할 수 있습니다. 예를 들어, datetime 사용자 정의 데이터 유형을 처리하려면 다음과 같이 할 수 있습니다.
import datetime
import msgpack

def encode_datetime(obj):
    """Encode datetime objects for MessagePack serialization."""
    if isinstance(obj, datetime.datetime):
        return {'__datetime__': True, 'as_str': obj.strftime('%Y%m%dT%H:%M:%S.%f')}
    return obj

def decode_datetime(obj):
    """Decode datetime objects after MessagePack deserialization."""
    if '__datetime__' in obj:
        return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f')
    return obj

# Serialize data with custom datetime support
data = {'time': datetime.datetime.now()}
packed_data = msgpack.packb(data, default=encode_datetime)

# Deserialize data with custom datetime support
unpacked_data = msgpack.unpackb(packed_data, object_hook=decode_datetime)
print(unpacked_data)
import datetime
import msgpack

def encode_datetime(obj):
    """Encode datetime objects for MessagePack serialization."""
    if isinstance(obj, datetime.datetime):
        return {'__datetime__': True, 'as_str': obj.strftime('%Y%m%dT%H:%M:%S.%f')}
    return obj

def decode_datetime(obj):
    """Decode datetime objects after MessagePack deserialization."""
    if '__datetime__' in obj:
        return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f')
    return obj

# Serialize data with custom datetime support
data = {'time': datetime.datetime.now()}
packed_data = msgpack.packb(data, default=encode_datetime)

# Deserialize data with custom datetime support
unpacked_data = msgpack.unpackb(packed_data, object_hook=decode_datetime)
print(unpacked_data)
PYTHON

IronPDF 소개합니다

msgpack python (개발자를 위한 작동 원리): 그림 1

IronPDF 는 HTML, CSS, 이미지 및 JavaScript 사용하여 PDF를 생성, 편집 및 서명하도록 설계된 강력한 Python 라이브러리입니다. 이 제품은 낮은 메모리 사용량으로 상업용 수준의 성능을 제공합니다. 주요 특징은 다음과 같습니다.

HTML을 PDF로 변환

HTML 파일, HTML 문자열 및 URL을 PDF로 변환합니다. 예를 들어, Chrome PDF 렌더러를 사용하여 웹페이지를 PDF로 렌더링할 수 있습니다.

크로스 플랫폼 지원

.NET Core, .NET Standard, .NET Framework 등 다양한 .NET 플랫폼과 호환됩니다. 이 프로그램은 윈도우, 리눅스, macOS를 지원합니다.

편집 및 서명

속성을 설정하고, 암호 및 권한으로 보안을 강화하고, PDF에 디지털 서명을 적용하세요.

페이지 템플릿 및 설정

머리글, 바닥글, 페이지 번호 및 조정 가능한 여백을 사용하여 PDF를 사용자 지정하세요. 반응형 레이아웃과 사용자 지정 용지 크기를 지원합니다.

표준 준수

PDF/A 및 PDF/UA와 같은 PDF 표준을 준수합니다. UTF-8 문자 인코딩을 지원하며 이미지, CSS, 글꼴과 같은 자산을 처리합니다.

IronPDF 와 msgpack을 사용하여 PDF 문서를 생성합니다.

import msgpack
import datetime
from ironpdf import * 

# Apply your license key for IronPDF
License.LicenseKey = "key"

# Serialize data
data = {'key': 'value', 'number': 42}
packed_data = msgpack.packb(data, use_bin_type=True)

# Deserialize data
unpacked_data = msgpack.unpackb(packed_data, raw=False)
print(unpacked_data)

# Custom Data Types
def encode_datetime(obj):
    """Encode datetime objects for MessagePack serialization."""
    if isinstance(obj, datetime.datetime):
        return {'__datetime__': True, 'as_str': obj.strftime('%Y%m%dT%H:%M:%S.%f')}
    return obj

def decode_datetime(obj):
    """Decode datetime objects after MessagePack deserialization."""
    if '__datetime__' in obj:
        return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f')
    return obj

datat = {'time': datetime.datetime.now()}
packed_datat = msgpack.packb(datat, default=encode_datetime)
unpacked_datat = msgpack.unpackb(packed_datat, object_hook=decode_datetime)
print(unpacked_datat)  

# Render a PDF from a HTML string using Python
renderer = ChromePdfRenderer()
content = "<h1>Awesome Iron PDF with msgpack</h1>"
content += "<h3>Serialize data</h3>"
content += f"<p>{data}</p>"
content += f"<p> msgpack.packb(data, use_bin_type=True):</p><p>{packed_data}</p>"
content += "<h3>Deserialize data</h3>"
content += f"<p> msgpack.unpackb(packed_data, raw=False):</p><p>{unpacked_data}</p>"
content += "<h3>Encode Custom Data Types</h3>"
content += f"<p>{datat}</p>"
content += f"<p> msgpack.packb(datat, default=encode_datetime):</p><p>{packed_datat}</p>"

pdf = renderer.RenderHtmlAsPdf(content)
pdf.SaveAs("Demo-msgpack.pdf")  # Export to a file
import msgpack
import datetime
from ironpdf import * 

# Apply your license key for IronPDF
License.LicenseKey = "key"

# Serialize data
data = {'key': 'value', 'number': 42}
packed_data = msgpack.packb(data, use_bin_type=True)

# Deserialize data
unpacked_data = msgpack.unpackb(packed_data, raw=False)
print(unpacked_data)

# Custom Data Types
def encode_datetime(obj):
    """Encode datetime objects for MessagePack serialization."""
    if isinstance(obj, datetime.datetime):
        return {'__datetime__': True, 'as_str': obj.strftime('%Y%m%dT%H:%M:%S.%f')}
    return obj

def decode_datetime(obj):
    """Decode datetime objects after MessagePack deserialization."""
    if '__datetime__' in obj:
        return datetime.datetime.strptime(obj['as_str'], '%Y%m%dT%H:%M:%S.%f')
    return obj

datat = {'time': datetime.datetime.now()}
packed_datat = msgpack.packb(datat, default=encode_datetime)
unpacked_datat = msgpack.unpackb(packed_datat, object_hook=decode_datetime)
print(unpacked_datat)  

# Render a PDF from a HTML string using Python
renderer = ChromePdfRenderer()
content = "<h1>Awesome Iron PDF with msgpack</h1>"
content += "<h3>Serialize data</h3>"
content += f"<p>{data}</p>"
content += f"<p> msgpack.packb(data, use_bin_type=True):</p><p>{packed_data}</p>"
content += "<h3>Deserialize data</h3>"
content += f"<p> msgpack.unpackb(packed_data, raw=False):</p><p>{unpacked_data}</p>"
content += "<h3>Encode Custom Data Types</h3>"
content += f"<p>{datat}</p>"
content += f"<p> msgpack.packb(datat, default=encode_datetime):</p><p>{packed_datat}</p>"

pdf = renderer.RenderHtmlAsPdf(content)
pdf.SaveAs("Demo-msgpack.pdf")  # Export to a file
PYTHON

코드 설명

이 스크립트는 msgpack과 IronPDF 를 통합하여 데이터를 직렬화 및 역직렬화하고 HTML 콘텐츠에서 PDF 문서를 생성하는 방법을 보여줍니다.

고장

  1. msgpack을 이용한 데이터 직렬화:

    • Python 데이터(이 경우 딕셔너리)를 use_bin_type=True를 사용하여 msgpack.packb()와 함께 packed_data로 이진 형식으로 변환합니다.
  2. msgpack을 이용한 데이터 역직렬화:

    • 이진 packed_dataraw=False를 사용하여 msgpack.unpackb()와 함께 다시 Python 데이터 (unpacked_data)로 변환합니다.
  3. 사용자 정의 데이터 유형 처리:

    • msgpack을 사용하여 직렬화 및 역직렬화 과정 중 datetime 객체를 처리하기 위한 사용자 정의 인코딩 (encode_datetime) 및 디코딩 (decode_datetime) 함수를 정의합니다.
  4. PDF 생성을 위한 HTML 콘텐츠:

    • 다음을 포함하는 HTML 문자열 (content)을 만듭니다:
      • 직렬화된 데이터에 대한 헤더와 하위 섹션 (datapacked_data).
      • 역직렬화된 데이터 (unpacked_data).
      • 사용자 정의 데이터 유형 직렬화 (datatpacked_datat).
  5. IronPDF 이용한 PDF 생성:

    • IronPDF (ChromePdfRenderer)를 사용하여 구성된 HTML 콘텐츠 (content)에서 PDF 문서 (pdf)를 생성합니다.
  6. PDF 저장하기:

    • 생성된 PDF 문서를 "Demo-msgpack.pdf"로 저장합니다.

출력

msgpack python (개발자를 위한 작동 원리): 그림 2

PDF

msgpack python (개발자를 위한 작동 원리): 그림 3

IronPDF 라이선스

IronPDF Python 라이선스 키를 사용하여 실행됩니다. IronPDF for Python은 사용자가 구매 전에 다양한 기능을 확인해 볼 수 있도록 무료 평가판 라이선스 키를 제공합니다.

IronPDF 패키지를 사용하기 전에 스크립트 시작 부분에 라이선스 키를 배치하십시오.

from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
from ironpdf import * 
# Apply your license key
License.LicenseKey = "key"
PYTHON

결론

MessagePack은 Python에서 효율적인 데이터 직렬화를 위한 강력한 도구입니다. 컴팩트한 바이너리 형식, 다양한 언어 지원, 그리고 사용자 정의 데이터 유형 처리 기능 덕분에 여러 응용 분야에서 다용도로 활용할 수 있습니다. 서로 다른 시스템 간의 데이터 교환 작업을 하든, 데이터 처리 작업의 성능을 최적화하든, MessagePack은 강력한 솔루션을 제공합니다.

IronPDF 는 Python 애플리케이션에서 직접 PDF 문서를 생성, 조작 및 렌더링할 수 있도록 설계된 다목적 Python 라이브러리입니다. 이 프로그램은 HTML을 PDF로 변환하거나, 대화형 PDF 양식을 만들거나, PDF 파일을 병합 및 분할하는 등의 다양한 문서 조작 작업을 간소화합니다. IronPDF 기존 웹 기술과의 완벽한 통합을 통해 개발자에게 동적 PDF 생성을 위한 강력한 도구 세트를 제공하여 문서 관리 및 프레젠테이션 작업의 생산성을 향상시켜 줍니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해