C 언어에서도 구글 프로토콜 버퍼(Protocol Buffers)를 활용하여 효율적으로 데이터 직렬화 및 역직렬화할 수 있다. C는 시스템 수준의 프로그래밍과 임베디드 시스템에서 널리 사용되므로, 작은 메모리 사용량과 빠른 성능을 가진 프로토콜 버퍼와 궁합이 좋다.
C에서는 공식적으로 protobuf-c
라이브러리를 활용하여 프로토콜 버퍼를 사용할 수 있으며, 이를 통해 메시지를 정의하고 C 구조체를 활용하여 데이터를 직렬화할 수 있다.
C에서 프로토콜 버퍼를 사용하려면 protobuf
및 protobuf-c
라이브러리를 설치해야 한다.
먼저, protoc
컴파일러를 설치해야 한다.
sudo apt update
sudo apt install -y protobuf-compiler
protobuf-c
라이브러리를 설치하면 C에서 프로토콜 버퍼를 사용할 수 있다.
sudo apt install -y libprotobuf-c-dev protobuf-c-compiler
먼저, 사용할 .proto
파일을 작성한다.
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
string email = 3;
}
protoc
및 protobuf-c
컴파일러를 사용하여 C 코드로 변환한다.
protoc --c_out=. person.proto
위 명령을 실행하면 person.pb-c.h
및 person.pb-c.c
파일이 생성된다.
생성된 코드를 활용하여 데이터를 직렬화하고 역직렬화할 수 있다.
#include <stdio.h>
#include <stdlib.h>
#include "person.pb-c.h"
int main() {
Person person = PERSON__INIT;
person.name = "홍길동";
person.age = 30;
person.email = "hong@example.com";
size_t size;
void *buffer;
size = person__get_packed_size(&person);
buffer = malloc(size);
person__pack(&person, buffer);
printf("직렬화된 데이터 크기: %zu 바이트\n", size);
free(buffer);
return 0;
}
Person *new_person = person__unpack(NULL, size, buffer);
if (new_person == NULL) {
fprintf(stderr, "역직렬화 실패\n");
return 1;
}
printf("이름: %s, 나이: %d, 이메일: %s\n", new_person->name, new_person->age, new_person->email);
person__free_unpacked(new_person, NULL);
C는 성능이 중요한 환경에서 많이 사용되며, 프로토콜 버퍼는 빠르고 가벼운 직렬화 방식이므로 성능을 최적화할 수 있다. 또한, 메모리를 적게 사용하여 임베디드 시스템이나 마이크로컨트롤러 환경에서도 유용하다.
비교 항목 | 프로토콜 버퍼 | JSON |
---|---|---|
데이터 크기 | 작음 | 큼 |
속도 | 빠름 | 느림 |
가독성 | 낮음 | 높음 |
시스템 부하 | 낮음 | 높음 |
C 환경에서는 JSON을 사용하면 문자열 파싱 과정이 추가되면서 성능이 저하될 수 있다. 반면, 프로토콜 버퍼는 이진 포맷을 사용하여 속도가 훨씬 빠르다.
프로토콜 버퍼는 기본적으로 이진 데이터 형식이므로 직접 보기 어렵다. 하지만, hexdump
를 사용하여 데이터를 확인할 수 있다.
hexdump -C serialized_data.bin
또한, JSON 형식으로 변환하여 확인하려면 protoc --decode
명령어를 활용할 수 있다.
protoc --decode=Person person.proto < serialized_data.bin
protobuf
: 구글에서 제공하는 기본적인 프로토콜 버퍼 라이브러리로, C++을 기반으로 동작한다.protobuf-c
: C에서 직접 사용하도록 만들어진 경량 프로토콜 버퍼 구현체로, C의 구조체와 직접 연동할 수 있다..proto
파일을 반드시 작성해야 한다..proto
파일을 컴파일해야 하므로 빌드 과정이 복잡해질 수 있다.C 환경에서 프로토콜 버퍼를 사용하면 메모리 사용량을 줄이고, 빠른 데이터 직렬화 및 역직렬화가 가능하다. protobuf-c
라이브러리를 활용하면 C 구조체와 쉽게 연동할 수 있으며, JSON보다 더 효율적인 데이터 처리를 할 수 있다. 성능이 중요한 임베디드 시스템, 네트워크 통신, 대용량 데이터 처리 환경에서 유용하게 사용할 수 있다.
**츠유(つゆ)**는 일본 요리에서 국물, 소스, 양념 등 다양한 용도로 활용되는 감칠맛 소스입니다. 일본식 우동, 소바,…
패션은 단순한 의류 선택이 아니라, 문화와 기능, 스타일이 반영된 중요한 요소입니다. 남성옷과 여성옷은 디자인뿐만 아니라…