태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'pb2'에 해당되는 글 1건

  1. 2010.02.04 사용소감: Google protocol buffer (4)

사용소감: Google protocol buffer

Tech 2010. 2. 4. 16:57
일단 관련 링크 몇개


회사에서 새로 만드는 시스템을 크게 몇 개의 컴포넌트로 잘라서 디커플링을 시도했다. 시스템 전체를 흐르는 데이터가 거치는 각 단계마다 투입되는 자원량을 조절할 수 있어야 하며, 머신도 나뉘어야 ... 하고 코드 의존성도 님하 좀 ㅠㅠ

이 과정에서 함수 인자, 혹은 글로벌 자료구조 등으로 공유하던 데이터를 넘겨줄 방법 - 그러니까 IPC - 이 필요하게 되었고, 대부분의 정보 전달을 Queue with Persistent layer 로 대체할 수 있었다. 반응성보다는 단위 시간당 처리량이 중요한 시스템이라서 ...

여러개의 큐 서버가 만들어지고, 여기에 데이터를 넣고 빼고 하게 되는데 이 과정에서 딸려오는 귀차니즘이 소켓통신. 그리고 몇 가지 이유로 인하여 큐 서버를 포함하여 관련되는 코드들이 자바/C/C++/Python 들이 섞일 수 있는 가능성을 가지게 되었다. (사실 이게 디커플링의 의도중 하나이긴 한데 ...)

파이썬만 있다면야 pickling 이라는 편한 방법이 있지만, 다른 언어가 들어오면 조금 골치아파지고... 이런 상황에서 Google protocol buffer 가 떠올라서 가져다 사용. 가장 큰 특징은,

  1. Code generation
  - 유피넬의 누군가(...)가 세미나에서도 이야기했던 방법인데, Definition data structure -> Code to handle 방향으로 코드를 생성해 버린다. 코드 레벨에서 서버/클라를 포함한 이 데이터를 다루는 녀석들이 모두 공유할 수 있다.
  - 코드 생성이기 때문에, 오타라던가 ( ... ) 양쪽 코드의 불일치 등으로 생기는 문제는 거의 제로
  - 데이터 정의가 바뀌면 코드 생성->컴파일->링크 를 다시 해야 한다
  - 이 툴(그러니까 google protocol buffer)를 도입함으로써 생기는 제약이 별로 없다 - 프레임웍을 가져다 쓰는거에 비하면야...

  2. Structured data definition
  - 일반적인 클래스 디자인과 비슷하게 데이터를 정의할 수 있다
  - 만들어진 데이터 타입들을 조합하여 복잡한 블럭을 만들 수 있다

  3. Language support
  - 고려중인 Java/C++/Python 세가지 모두 코드를 찍어내준다
  - 언어와 상관 없이 이 코드들은 서로 호환되는 데이터를 만든다 (Serialize/Parse 결과가 일치한다는 뜻)

그리고 부가적으로 빠르다, 같은게 있긴 하다. ... 하지만 아직 확인해보진 않았으니 뭐 ... 그래봐야 내가 직접 만든 코드보다 백만배 빠르진 않겠지... 훌륭한 점은 퍼포먼스 저하를 최소한으로 막고(과연 그럴까?는 코드를 까봐야 알겠지만...) 사용하기 편해졌어! 를 확보한 것, 이라고 생각할 수 있는데.

뭐 이 장점들은 확실히 강력한 것 같다. 단점은... Composite type 에 대한 assignment를 막아놓은게 좀 귀찮은데, 이건 내부 구현에 따라오는 이슈인 것 같다. 로직에서 다루는 데이터 타입과 데이터 주고받기에 쓰이는 타입이 다르면 - 로직에서 프로토콜 버퍼 객체를 사용하지 않으면 - Send/Recv 할 때 데이터의 복사가 한번 일어나게 되는데 이건 좀 곤란한 것 같다. ... 하지만, 잘 살펴보면 보내거나 받는 데이터를 Stream으로 만들어서 해결할 수 있을 것 같기도 한데, 지금은 튜토리얼만 슥 보고 대충 가져다 쓰는거라 뭐 ... 복사 없이도 처리가 가능할 것 같긴 하니까 이건 패스.

큰 코드조각은 아니지만, 유용한 걸 잘 만든다. 구현 자체는 논외로 하고, 컨셉이 좋지. (더불어 리카님도 굿 ㅋ) 어느 정도에서 Abstraction layer를 만들어야 사용성을 최소한으로 해치면서 Drawback을 줄일 수 있을지 - 에 대한 감이 좋아 보인다. 이런건 좀 배우자.

쓰고 나서 보니 소감이라기엔 좀 이상하다. 그냥 "써봤음" 문서. 낄낄낄.

'Tech' 카테고리의 다른 글

iterator invalidation  (5) 2010.05.10
사용소감2: Google protocol buffer  (1) 2010.02.11
사용소감: Google protocol buffer  (4) 2010.02.04
TDD: 켄트백아저씨가 쓴 책이지?  (2) 2009.12.29
git/git-svn on working machine  (2) 2009.12.17
Links on xml and related techs  (1) 2009.12.09
Trackbacks 0 : Comments 4
  1. Favicon of http://ricanet.com Rica 2010.02.05 07:46 Modify/Delete Reply

    네?_?....

    • Favicon of http://deisys.net dgoon 2010.02.05 08:52 Modify/Delete

      엇.. 리카 아니엇나? 내가 '이런 경우에는 코드를 찍어내자!' 는 아이디어를 첨 들은건 리카한테서였던것 같은데 ... ?

  2. Favicon of http://ricanet.com Rica 2010.02.05 10:08 Modify/Delete Reply

    제가 썼던 방식은 프리프로세서 매크로였어요. 그나마 ipkn의 아이디어를 가져다가 새로 구현한 거였고요.
    (핸들링 체계는 독자적으로 만들었지만)
    참고: http://ricanet.com/new/view.php?id=blog/091007

    rein이 코드 제너레이터를 사용한 것으로 알고 있습니다.
    참고: http://rein.kr/blog/archives/1924
    구글 프로토콜 버퍼를 언급하고 있네요. ㅋ_ㅋ

    • Favicon of http://deisys.net dgoon 2010.02.05 10:37 Modify/Delete

      아항 그랬군... 오래되서 기억이 가물가물 (..) 치매인가.

Write a comment