프로토콜 버퍼와 구조체

Seong Kim·2022년 12월 23일

프로토콜 버퍼

언어와 플랫폼에 상관없이 쓸 수 있고 확장할 수 있는 데이터를 구조화 하고 직렬화 하는 메커니즘

장점

  • 자료형 안정성 보장
  • 스키마 위반 방지
  • 빠른 직렬화
  • 하위 호환성 제공

프로토콜 버퍼를 사용하면 데이터 구조를 정의 가능하고 지원되는 많은 언어의 코드로 컴파일 할 수 있으며 이후 구조화 된 데이터를 다른 데이터 스트림에 쓰거나 읽을 수 있다.

예제

Twiter에서 일하며 Tweets object type을 다뤄야 한다고 상상해보자. Tweet은 최소한 작정자의 메시지가 있어야 한다.

syntax = "proto3";

package twitter;

message Tweet {
	string message = 1;
}

1. Protobuf를 사용하는 이유

1.1 일관된 스키마

protobuf로 의미하는 바를 인코딩하고 서비스 전반에 걸쳐 사용하면 전체 시스템의 일관성이 보장.

1.2 버전관리 제거

버전을 확인할 필요성을 없애고 다음과 같은 지저분한 코드 작겅을 피한다.

if (version == 3) {
	...
} else if (version > 4) {
	if (version == 5) {
    	...
    }
    ...
}

protobuf에서는 메시지의 필드마다 번호를 매기는데 새로운 기능을 내놓거나 변경할때 하위 호환성을 관리하려는 것이다.

1.3 줄어드는 boilerplate code

compile로생성한 protobuf library에 encoding decoding method가 만들어진다. 직접 관련된 코드를 짤 필요가 없다.

1.4 확장성

protobuf compiler는 확장을 지원한다. 자신만의 컴파일 로직으로 protobuf를 컴파일할 수 있다는 뜻.

1.5 성능

고성능이며 payload가 적고, 직렬화할 때 JSON보다 6배나 빠르다.

0개의 댓글