Protobuf, 그건 또 머고?

한 주간 마크애니 소식을 전합니다.

위클리 마크애니

지난 1월, DevOps 김종석 프로님을 시작으로 마크애니 사내교육 프로그램이 부활했는데요!

마크애니 많은 임직원 분들이 열정적으로 교육에 참가해주셨죠 🔥마크애니는 임직원분들의 성원에 힘입어 두 번째 교육도 진행했어요. 

바로, 프로토버프(Protobuf)에 대한 내용이랍니다!

protobuf_2
© 마크애니 ​

프로토버프 교육은 영상플랫폼 사업부의 손창대 프로님이 진행해주셨어요. 

손창대 프로님은 마크애니 영상플랫폼 사업부의 솔루션, 지능형 선별관제 SmartEYE에 인공지능 모델을 프로그램에 적용하는 업무를 담당하고 계시는데요. 팀 내 협업 진행툴인 프로토버프를 마크애니 전사에서 이용하면 좋을 것 같다고 생각하셔서 교육을 진행하시게 되셨다고해요. 

포스트를 보는 개발자분들 중에서도 프로토버프가 낯선 분들이 계실텐데요!

손창대 프로님의 알기쉬운 프로토버프(Protobuf) 강의, 살짝 들여다볼까요?

protobuf_1
LRD1팀 손창대 프로님 © 마크애니 ​
프로토버프
(출처=구글)

프로토콜 버퍼(Protocol Buffers), 일명 프로토버프(Protobuf)는 구글에서 개발한 직렬화 데이터 구조(serializing data structure) 예요. 쉽게 설명하면 데이터 전송방식이죠.

 

데이터 교환 방식을 정의하는 약속을 의미하는 프로토콜(Protocol)과 데이터를 임시로 저장하는 메모리 버퍼(Buffer)의 합성어로 데이터를 주고받을 때 효율적으로 데이터를 정의하고 압축해주는 구조예요.

 

그래서 언어와 플랫폼이 중립적이고 확장성이 좋고 굉장히 빠르고요.

포맷을 정하기만 하면 컴파일로 C++, Java, Python 등 다양한 언어로 코드형태를 바꿀 수 있죠.

❓’언어와 플랫폼이 중립적이다’라는게 뭐에요?

*️⃣ 어떤 언어나 플랫폼에서도 사용가능하다는 의미예요 ‘◡’

자, 그럼 예를 한번 들어볼게요!

protobuf
© 마크애니

위 그림과 같이 C++, 파이썬(Python), 구글 프로그래밍 언어 GO가 데이터 1개를 서로 주고 받는다(통신한다)고 가정해볼게요. 이해하시기 쉽도록 주고 받는 데이터는 ‘사람’에 대한 데이터라고 가정할게요.

이때 3가지 문자열을 사용할 수 있는데요.

protobuf
© 마크애니
© 마크애니

첫 번째로 데이터 변수를 콤마로 구분하고 주고받는 방법인데요.

쉽고 빠른 방법이지만 복잡한 데이터는 전달하기 어렵죠

두 번째는 JSON 구조를 사용하는 방법이에요.

가독성이 좋고 구현이 쉽지만 특정 언어에서는 지원이 안되고 데이터 크기가 커지죠.

© 마크애니

그래서 나온 것이 바로 프로토버프예요.

다양한 프로그래밍 언어를 지원해 여러 언어를 사용하는 개발 환경에서도 유용하게 활용할 수 있고 데이터를 바이너리 형식으로 저장하기 때문에 전달 속도가 빨라져요. 

사용 방법은 .ptoro라는 확장자를 가진 파일로 데이터 구조를 정의한 뒤 프로토버프 컴파일러를 통해서 사용하고자 하는 언어로 컴파일해요. 

그럼 프로토파일을 어떻게 작성하고 컴파일하는지 알아볼까요?

프로토버프
© 마크애니

첫 번째 신택스는 .proto파일을 작성할 때 사용하는 문법버전이에요.

(버전에는 proto2,proto3이 있는데 주로 3버전을 사용해요.)

그 다음에는 패키지 명을 명시하는데요. 패키지 명 아래에 정의되는 데이터구조가 어떤 패키지에 소속되는지 분류해요. 여기서는 C++로 패키징될 거예요.

 

세 번째는 메시지예요. 메시지는 하나의 객체를 뜻해요. 위 그림에서 보시면 Person이라는 메시지(객체)안에 이름, 나이, 성별이라는 변수가 있다는 것을 말하죠. 마지막으로 repreated는 배열이라고 생각하시면 돼요. Person배열을 다루는 객체를 생성하고 싶을 때 사용하시면 됩니다.

자, 이렇게 .proto파일을 만드셨다면 컴파일해야겠죠?

프로토버프
© 마크애니

프로토버프 컴파일러인 ‘protoc’ 파일을 이용해 컴파일할 수 있어요. protoc파일은 구글에서 제공하고 있고 인터넷에서 다운받아 사용할 수 있어요. 

protoc 컴파일러에서 –cpp, –pyhton 옵션을 주면 .proto파일이 c++과 파이썬 코드로 컴파일되죠.

바로, 아래처럼 말이죠! 🫢 👇

© 마크애니

이렇게 만들어진 코드는 각 언어에 적용해 사용할 수 있죠.

너무 신기하고 편리하지 않나요? 

프로토버프의 장점을 정리해보자면

© 마크애니

바이너리 포맷이라 데이터 용량이 가볍고, 데이터 구조만 정의하면 대부분의 언어로 호환할 수 있고요.

또, 데이터 구조를 명시한 하나의 파일을 여러 명이 공유할 수 있어요. 마치 근로계약서 처럼요.

근로 계약서를 쓸 때 하나의 계약 내용을 뽑아 두 장으로 인쇄해 근로자와 채용자가 나눠 가지는데요. 이는 위변조를 방지하고 서로 동일 내용임을 확인하기 위해서죠. 데이터 구조도 똑같아요. 

계약서처럼 하나의 데이터구조를 각자의 언어로 컴파일해 여러명이 나눠가질 수 있기 때문에 서로의 데이터구조가 완전히 동일한 구조임을 보장할 수 있죠. 

처음 프로토버프를 접하는 분들에게는 개념자체가 생소할 수 있지만

여러 언어를 사용하는 개발 환경에서 유용하게 사용할 수 있으니 한번 도입해보시길 바래요!

처음 프로토버프를 접하는 분들도 쉽게 이해하실 수 있도록 직접 예시까지 만들어주신 손창대 프로님의 열정, 느껴지시나요? 😊🔥

약 30분간 진행된 교육 후 Q&A시간이 진행됐어요.

© 마크애니
© 마크애니
© 마크애니

교육에 참가한 임직원 분들은 오프라인, 온라인 가리지 않고 정말 적극적으로 질문해주셨어요. 마크애니 솔루션 중 프로토버프를 도입하면 좋은 솔루션은 무엇인지, 처음 도입시 진입장벽은 무엇인지 등 말이죠. 많은 질문에도 웃음을 잃지않고 답변해주신 손창대 프로님 덕분에 개발자, 비개발자 모두 프로토버프에 대해 이해할 수 있었답니다 (´◡`)

교육이 끝나고, 이번 프로토버프 교육을 준비해주신 손창대 프로님을 만나봤어요.

© 마크애니

*️⃣: 손창대 프로님, 안녕하세요! 블로그 포스트로 처음 만나는 분들을 위해 간단한 자기소개 부탁드려요.

손창대: 마크애니 소프트웨어 개발자 손창대입니다. 현재 영상플랫폼 사업부 선별관제 솔루션 ‘스마트아이(SmartEYE)’에 인공지능 모델을 적용하는 업무를 하고 있어요. 데이터를 학습한 인공지능이 CCTV 관제화면에서 객체를 빠르게 분석할 수 있도록 연산 작업을 하는 일이죠. 또 인공지능이 분석한 데이터를 프로그램에 적용할 수 있도록 언어를 변환하고요.

*️⃣: 실제로 업무하시면서 프로토버프를 많이 사용하시나요?

손창대: 거의 모든 업무에 프로토버프를 사용하고 있어요. 보통 프로그램 하나를 개발할 때 웹과 API서버가 다른 언어로 개발돼요. 언어마다 특장점이 있기 때문에 환경에 맞춰 사용하거든요. 마크애니가 개발한 스마트아이도 비슷해. 프로그램은 C#, 고랭을 이용해서 개발하지만 인공지능을 분석할 때는 C++을 사용하죠. 이러면 데이터를 주고받을 때 언어 변환이 복잡해져요. 인공지능이 분석한 데이터는 C++인데 프로그램 개발자에게는 C#이나 고랭으로 전달해야하니깐요. 아시다시피 언어마다 또 문법이 다르잖아요. 꽤 복잡한 일이죠. 그런데 프로토버프를 이용하면 간단하게 언어를 변환할 수 있고 데이터가 가벼워지니 데이터도 빠르게 전달할 수 있어요. 여러 명이 하나의 파일을 공유하니 혼선도 없고요. 전 다른 프로그램 개발 프로젝트에 투입돼도 프로토버프를 사용할 것 같아요. (웃음)

© 마크애니

*️⃣: 개발자에게는 정말 유용한 기능이네요. 그러나 말씀하신대로 생소한 개념이라 처음 도입할 때는 진입장벽도 있겠어요.

손창대: 맞아요. 프로젝트가 진행되고 있는 중에 프로토버프에 대해 알게돼서 도입을 한다고 하시면 굉장히 귀찮으실 수도 있어요. 기존에 작성한 코드를 프로토버프에서도 사용할 수 있도록 코드를 수정해야하거든요. 그래서 프로젝트를 시작할 때부터 프로토버프 사용을 고려하고 코드를 짜시는 것을 추천드려요.

*️⃣: 직무교육을 진행하시는 것은 이번이 처음이라고 들었는데요. 교육을 진행해보시니 어떠셨나요?

손창대: 정말 많이 떨렸어요. 개발자, 비개발자 모두를 대상으로 진행하는데 쉽고 정확하게 내용을 전달할 수 있을까 하는 걱정도 엄청했고요. 프레젠테이션 수정을 몇 번이나 했는지 몰라요. 그래도 소프트웨어 엔지니어로서 제가 아는 언어를 많은 이들에게 말할 수 있는 기회가 있다는 것이 감사했어요. 

*️⃣: 요즘 개발자를 꿈꾸는 분들이 많죠. 어떤 프로그램을 만들든 소프트웨어 엔지니어는 꼭 필요하니깐요. 예비 개발자 분들에게 해주시고 싶은 이야기가 있으신가요?

손창대: 최근 개발자 수요가 정말 많죠. 그만큼 소프트웨어 개발을 공부하시는 분들도 많고요. 이렇게 수요와 공급이 많은 상황에서 특색있는 소프트웨어 개발자가 되기 위해서는 여러 언어를 경험해보시는 것이 중요하다고 생각해요. 또 포트폴리오도 중요해요. 자신이 경험한 것을 알아보기 쉽도록 정리해 가치를 설명할 수 있어야 한다고 생각해요. 저도 깃헙을 이용해 프로필을 관리하고 있는데요. 참고해보실 수 있도록 제 깃헙 주소를 살짝 남겨두고 갑니다. (웃음)

같은 회사에 근무하더라도, 같은 직무라도 서로의 인사이트는 매우 달라요.

그래서 마크애니는 임직원분들이 지닌 각자의 인사이트를 공유하고 함께 성장할 수 있는 기회를 만들기위해 사내 직무교육을 진행하고 있답니다 😊

앞으로도 더 다양한 마크애니 사내 직무교육을 기대해주시길 바라며 다음 포스팅에서는 더 유익하고 즐거운 마크애니 소식과 함께 돌아올게요!

즐거운 한 주 보내시길 바래요 🤚

Edit, Photo 김미소

관련기사 더보기

日 킨키대학, 마크애니 기업탐방 프로그램 진행
Healthcare Security Symposium 2023 마크애니 현장스케치
지식 블로그 리스트 보기