MessagePack의 특징 및 사용법MessagePack은 JSON의 더 빠르고 데이터 크기가 작은 버전으로 이해할 수 있습니다.
-
성능: JSON보다 약 10배 빠르며, Google의 Protocol Buffers보다도 빠릅니다. 특히 긴 문자열을 포함할 때 높은 성능을 보입니다.
-
간단한 사용법: ‘require ‘msgpack’’ 후 ‘object.to_msgpack’으로 바이너리를 얻고, ‘MessagePack.unpack(binary)’으로 객체를 복원할 수 있습니다.
-
스트림 역직렬화: 표준 입력, 파일 등 IO 객체를 받아 ‘MessagePack::Unpacker.new(io).each’를 통해 객체를 순차적으로 효율적이고 빠르게 처리할 수 있습니다.
MessagePack RPC의 기능 및 활용MessagePack RPC는 MessagePack을 기반으로 한 다국어 간 통신(Ruby, C++, Python, Java, Haskell 등)을 가능하게 하는 라이브러리입니다.
-
간단한 RPC 호출: ‘gem install msgpack-rpc’ 후 클라이언트를 생성하고 ‘client.call(method, *args)’를 통해 원격 프로시저를 호출할 수 있습니다.
-
비동기 호출 (Async Call) 및 병렬 파이프라이닝:
- ‘call_async’ 메서드를 사용하면 결과 대신 ‘Future’ 객체를 반환받아 비동기 호출을 수행할 수 있습니다.
- ‘Future
get’은 호출 순서와 관계없이 결과를 가져올 수 있어, 느린 작업이 빠른 작업을 기다리지 않도록 하는 ‘병렬 파이프라이닝’을 지원합니다. 이는 HTTP와 같은 순차적 처리 방식과 차별화됩니다.
-
이벤트 기반 아키텍처 지원: P2P 애플리케이션이나 수백 대의 서버와 통신하는 프로그램 작성 시 효율적인 이벤트 기반 통신을 지원합니다.
-
지원 프로토콜: TCP, UDP, Unix 도메인 소켓을 지원하여 다양한 환경에서 활용 가능합니다.
-
연결 풀링: 연결을 유지하여 매번 연결을 재설정하는 오버헤드를 줄이며, 타임아웃 처리 등 견고하게 구현되어 Thrift나 Avro보다 사용 편의성과 안정성에서 우수합니다.
실제 활용 사례
-
Ameba Now: Apache Solr와 MessagePack을 결합하여 실시간 검색을 구현하며, MessagePack으로 데이터 크기를 줄여 검색 인덱스 효율성을 높였습니다.
-
Ceryu: 상용 분산 검색 엔진으로, 스케일아웃 시스템 내의 통신 부분에 MessagePack을 활용합니다.
-
Kumofs: 발표자가 개발한 키-값 저장소에서도 MessagePack을 사용하고 있습니다.