iOS dependency 인 cocoapods 를 사용하여 depdency 관리를 하다 보면 Podfile.lock 에 위와 같이 Protobuf dependency 가 설정된다.
Protobuf 가 무엇이길래 이렇게 많이 보이는 것일까?
궁금하니 알아 보도록 하자.
Cocoapods 를 단서로 검색해보자. (물론 google 에서 검색했으면 더 빨랐을지도 모른다...)
Cocoapods 사이트에서 ProtoBuf 로 검색해보자.
설명에 있는 Protocol Buffers? 이건 또 뭘까요?
검색 결과 오른쪽에 있는 Site 버튼을 눌러 접속해 보자.
https://github.com/protocolbuffers/protobuf
README.md 에도 설명이 부족하다!
첫번째 보이는 링크로 들어가니 공식 문서를 확인할 수 있다.
와.. 이것도 google 이네..
https://developers.google.com/protocol-buffers
공식 문서를 바탕으로 간략한 설명은 이렇다.
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 |