본문 바로가기

Programming

Protocol Buffers - protobuf 는 무엇인가? (1/3)

반응형

Podfile.lock

iOS dependency 인 cocoapods 를 사용하여 depdency 관리를 하다 보면 Podfile.lock 에 위와 같이 Protobuf dependency 가 설정된다.

 

Protobuf 가 무엇이길래 이렇게 많이 보이는 것일까?

궁금하니 알아 보도록 하자.

 

Cocoapods 를 단서로 검색해보자. (물론 google 에서 검색했으면 더 빨랐을지도 모른다...)

 

https://cocoapods.org  

 

CocoaPods.org

CocoaPods is built with Ruby and is installable with the default Ruby available on macOS. We recommend you use the default ruby. Using the default Ruby install can require you to use sudo when installing gems. Further installation instructions are in the g

cocoapods.org

Cocoapods 사이트에서 ProtoBuf 로 검색해보자.

Protobuf

설명에 있는 Protocol Buffers? 이건 또 뭘까요?

검색 결과 오른쪽에 있는 Site 버튼을 눌러 접속해 보자.

 

https://github.com/protocolbuffers/protobuf

 

protocolbuffers/protobuf

Protocol Buffers - Google's data interchange format - protocolbuffers/protobuf

github.com

README.md 에도 설명이 부족하다!

 

첫번째 보이는 링크로 들어가니 공식 문서를 확인할 수 있다.

와.. 이것도 google 이네..

Protocol Buffers README.md

 

https://developers.google.com/protocol-buffers

 

Protocol Buffers  |  Google Developers

Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data.

developers.google.com

 

공식 문서를 바탕으로 간략한 설명은 이렇다.

 

Protocol Buffers

구조한 된 데이터를 저장하거나 전송하려면 호환 가능한 연속된 byte 로 변환해야 한다.

이러한 작업을 직렬화 (Serialization) 이라고 한다.

이때 많이 사용되는 포맷이 xml, json 등이다.

 

Protocol Buffers 는 이러한 직렬화를 위한 플랫폼 중립적이고 확장 가능한 메커니즘이다.

즉 Protocol Buffers (protobuf) 를 사용하여 struct, class 형태의 데이터를 저장, 전송 가능한 형태로 변환하는 기능을 제공한다.

 

많이 사용되고 있는 XML 보다 size 가 적고 빠르고 간단하다고 한다.

XML은 DOM 형태라서 구조화는 잘 되어 있지만... 파싱이 오래 걸리고 space, character 가 많은 단점 등이 있다. (자세한 건 google 이 알고 있다.)

 

Protocol Buffers 는 데이터 구조만 정의하면 된다.

일반적으로 사용되는 Data type 을 정의하는 것과 비슷하다.

swift 에서 struct 로 구조화하는 것과 유사하다.

 

Protocol Buffers 가 제공하는 compiler 를 이용하여 구조가 정의된 .proto 파일을 compile 하면 원하는 언어로 코드가 생성된다.

Java, Python, Objective-C, C++을 지원하고 proto3 에서는 dart, go, ruby, c# 등을 지원한다.

 

swift 는 공식 지원하고 있지 않지만 apple 에서 만든 것이 있다. 

나중에 알아보자.

 

생성된 코드에는 개발 중 사용할 수 있는 data type 과 getter, setter, 직렬화/역직렬화 할 수 있는 함수 등을 제공하여 쉽게 이용할 수 있다.

하위 버전과의 호환성도 좋다고 한다. (구조를 잘 선언해야 한다.. optional 을 잘못 쓰면 이것도 어려울 수 있다.)

 

REST API 의 response 를 Protocol buffers 로 직렬화한 값을 주고 client 에서는 그것을 역직렬화 (deserialization) 하여 사용하면 불필요한 파싱 부분을 많이 줄일 수 있을 것 같다.

물론 파일 저장도 마찬가지

 

 

Protocol Buffers - protobuf 는 무엇인가? (1/3)

Protocol Buffers - Python (2/3)

 

Protocol Buffers - Swift (3/3)

반응형

'Programming' 카테고리의 다른 글

Protocol Buffers - Python (2/3)  (1) 2020.12.01
무료 SSL 인증서 발급 적용  (0) 2020.11.27
GitHub Free vs Pro  (0) 2020.07.10
[Perfect] Dependency 추가  (2) 2016.10.18
[Perfect] 프로젝트 생성하기  (1) 2016.10.15