반응형
✨ Protobuf란?
Protocol Buffers(약칭: Protobuf)는 Google이 개발한 데이터 직렬화(serialization) 포맷입니다.
간단히 말하면, 데이터를 작고 빠르고 확장 가능하게 표현하고 전송하기 위한 바이너리 기반 데이터 교환 포맷입니다.
JSON보다 작고, XML보다 빠르며, 다양한 언어에서 사용할 수 있는 "데이터의 공통 언어"입니다.
🚀 어디에 사용될까? – 사용 사례
1. 마이크로서비스 간 통신
- 다양한 언어로 작성된 마이크로서비스 간의 효율적인 데이터 교환.
- 예: Python으로 작성된 서버가 Go 기반 서비스에 요청을 보낼 때.
2. gRPC 기반 API
- Google이 만든 고성능 RPC 프레임워크 gRPC에서 Protobuf는 기본 메시지 포맷입니다.
- JSON 대신 Protobuf를 사용해 빠르고 타입 안정성 있는 API 통신 가능.
3. IoT 및 엣지 디바이스
- 네트워크 대역폭이 제한적인 환경에서 압축률이 뛰어난 Protobuf가 효과적.
- 센서 데이터, 로그 스트리밍 등에 활용.
4. 모바일 앱과 서버 간 통신
- REST + JSON 구조보다 더 빠르고 데이터 크기가 작아지므로, 모바일 앱의 반응속도 향상.
5. 데이터 저장 포맷
- NoSQL/DB 또는 로그 시스템에 바이너리 형태로 데이터를 저장할 때도 사용 가능.
🔧 어떻게 사용하는가? – 실전 사용법 (Python 기준)
1. .proto
파일로 데이터 구조 정의
// file: task.proto
syntax = "proto3";
message TaskRequest {
string type = 1;
string agent = 2;
Payload payload = 3;
}
message Payload {
string text = 1;
string lang = 2;
}
message
는 객체 개념- 각 필드는
타입 이름 = 고유 번호
형태로 정의 - 번호는 필드 순서가 아니라, 데이터 포맷의 식별자 역할
2. Python 코드 자동 생성
# protoc 컴파일러 설치 필요
protoc --python_out=. task.proto
- 실행 결과:
task_pb2.py
자동 생성 - 이 파일에는
TaskRequest
,Payload
클래스가 정의됨
3. Python에서 사용하기
▶ 객체 생성 및 값 할당
import task_pb2
req = task_pb2.TaskRequest()
req.type = "task_request"
req.agent = "translator"
req.payload.text = "hello"
req.payload.lang = "ko"
▶ 직렬화 (전송용 바이너리 변환)
data = req.SerializeToString()
▶ 역직렬화 (받은 바이너리 → 객체로 복원)
req2 = task_pb2.TaskRequest()
req2.ParseFromString(data)
print(req2.payload.text) # 출력: hello
📌 Protobuf vs JSON 간단 비교
항목 | Protobuf | JSON |
---|---|---|
포맷 | 바이너리 | 텍스트 |
크기 | 작음 | 큼 |
속도 | 빠름 | 느림 |
타입 안전성 | 높음 (스키마 기반) | 낮음 |
인간 가독성 | 없음 | 있음 |
버전 관리 | 용이 | 수동 처리 필요 |
gRPC, 마이크로서비스, IoT, 모바일 통신 등 현대적인 분산 시스템에서 점점 더 많이 활용되고 있습니다.
초기에 설정이 조금 복잡하더라도, 한 번 익혀두면 JSON보다 훨씬 강력한 도구가 되어줍니다.
반응형
'AI 개발' 카테고리의 다른 글
Gemini CLI 설치 & 초기 설정 (0) | 2025.06.28 |
---|---|
gRPC 란 무엇인가? gRPC 활용 사례와 구현 방법 (1) | 2025.06.17 |
MCP 서버와 클라이언트 개발 방법 (2) | 2025.06.06 |
Cursor에서 Supabase MCP 연동하기 - 자연어로 DB 테이블 생성 (0) | 2025.06.06 |
멀티모달 추천 시스템이란? (1) | 2025.05.30 |