참조 : http://css.dzone.com/news/nosql-job-trends

 

요즘 Nosql 트렌드에 대해서 얘기해드리겠습니다.

indeed라는 취업 전문싸이트에서 job 검색을 통해서 검색이 가능합니다.

 

http://www.indeed.com/jobtrends 라는 싸이트를 통해서 비교해볼 수 있습니다.

 

키워드를 넣고 검색해보니. 최신 데이터는 이렇게 나옵니다.

 

mongoDB > cassandra > memcached > hbase > redis ....  이런 순이네요.

 

mongoDB가 넘사벽으로 쭉쭉 성장하고 있습니다. 안정성이 확보되면서 많이들 사용하고 있는 것 같네요.

 

cassandra, redis, voldemort, simpleDB, couchDB, mongoDb, hbase, hypertable, Riak, memcached Job Trends graph 

 

memcached를 제외한 성장율을 보겠습니다.

mongodb > redis > hbase ....

 

cassandra, redis, voldemort, simpleDB, couchDB, mongoDb, hbase, hypertable, Riak Job Trends graph 
 

여기 말고 simplyhired.com 에서의 정보도 보겠습니다.

 

cassandra = mongodb > hbase > redis ....

 

 

 

 

 

mongdodb를 선택하는 배경에는 설치와 사용이 쉽고, RDBMS 쿼리와 유사하게 실행할 수 있는 장점이 있었습니다.

Document (binary json)기반이고, 복잡한 쿼리를 사용할 수 있으며, 데이터를 잘 저장합니다.(consistency)

또한 규모에 상관없이 꾸준한 성능이 뒤받침되고 있습니다. 또한 php interface를 붙여 연동이 쉽게 되는 장점이 있습니다. 그리고,  master-master replication와 자동 sharding을 해줍니다.

 

해외의 일부 블로그는 새로운 Mysql 이다라고 얘기할 정도로 많이 mongo db를 선호하고 있네요.

 

앞으로 어떻게 될지 지켜봐야할 것 같네요..

 

 

 

 

Posted by '김용환'
,


http://www.trendbird.biz/6278


사용자 삽입 이미지

모바일과 클라우드 또는 클라우드 기반 기술이다.
한국은 클라우드에 대한 수요가 원체 없어서, 모바일이 여전히 대세가 될 듯..
Posted by '김용환'
,


블로그에 작성한 1.5.0.4-beta서버 설치 방법과 비슷하다.


XE 1.5.0 beta 버전의 UI는 아직 익숙치 않고, 어디에 무엇이 있는지 전혀 모르겠음.. 다시 UI를 1.4대로 바꾸는 게 나을 것 같아..

1.4.5.10으로 설치하는 것으로 하고, cubrid 연동하는 것에 대한 설치 문서이다.




ubuntu 에서 가장 먼저  큐브리드 8.4을 설치해야 하고, test 라는 DB를 만든다.
(큐브리드는 버전에 영향을 받으니. 늘 버젼을 기억해야 한다. 하위 호환성을 절대 생각하면 안됨.)

 

$  sudo add-apt-repository ppa:cubrid/cubrid-8.4.0

$  sudo apt-get update

$ sudo apt-get install cubrid


http://www.cubrid.com/zbxe/152840 에 보면. 그 다음 synaptic package manager를 실행하고 재설치하라고 해서.. 재설치해 본다.

 


cubrid를 검색한다.

 

 

다시 설치 표시를 하고 난다 . 또는 설치를 선택한다.


php5-cubrid를 설치하지 말자, 꼬일 수 있다.


툴 바에 있는 Apply를 선택을 하면 아래 창을 뜨면서  설치를 진행할 것인지 묻는다. 설치를 진행한다.

image007.png 


시냅틱 꾸러미 관리자를 사용하고 나면 반드시 종료해야한다. apt-get을 하려다가 시냅틱 꾸러미 관리자가 사용한 lock때문에 진행이 안될 수 있다.


$ vi /home/kimyonghwan/.bashrc

   .   /etc/profile.d/cubrid.sh  추가



$  source /home/kimyonghwan/.bashrc

$ cubrid createdb test
    512.0M 크기의 데이터베이스 생성 중.

     CUBRID 2008 R4.0

 
$ cubrid service start
@ cubrid master start
++ cubrid master (이)가 수행되고 있습니다.
@ cubrid broker start
++ cubrid broker (이)가 수행되고 있습니다.
@ cubrid manager server start
cubrid manager server is not installed.






데몬이 정상적인지 확인 한다. 잘 되고 있다.

 


   /opt/cubrid/bin 디렉토리에서 db를 생성한다.

$ cubrid createdb test




$ cubrid server start test
@ cubrid server start: test

This may take a long time depending on the amount of recovery works to do.

CUBRID 2008 R4.0

++ cubrid server start: success


$ cubrid server status
@ cubrid server status
 Server test (rel 8.4, pid 5606)


$ ps -ef | grep 5606
1000      5606     1  0 10:48 ?        00:00:00 cub_server test
1000      5829  1874  0 10:49 pts/0    00:00:00 grep --color=auto 5606



 

그 다음은 XE에서 cubrid를 쓸 수 있도록 php-cubrid integration library(so)가 필요하다.  (내용을 읽다보면, 이 방법이 안통할 수 있다. 따라서, apt-get 방식을 사용해야 한다. 아래 내용을 다볼 것!!!)

http://www.cubrid.org/php_api_for_cubrid 에 접속


이 중에서 CUBRID 8.4.0, PHP 5.3.x를 선택하고, CUBRID-PHP5-5.3-LINUX-X86-8.4.0.0003.bin.zip을 클릭

그러면, 다음 주소로 연결된다.

http://sourceforge.net/projects/cubridinterface/files/PHP/PHP%20Driver/CUBRID%208.4.0/Linux/CUBRID-PHP5-5.3-LINUX-X86-8.4.0.0003.bin.zip/download


zip 파일을 /var/www/에 설치후, php5 lib 폴더로 이동한다. php가 로딩하면서 so 파일을 읽어서 작동되게 하기 위함이다.

$ sudo mv /var/www/cubrid.so /usr/lib/php5/20090626+lfs/


 

그리고, php.ini 파일을 수정하고 아파치 서버를 재시작한다.

$ vi /etc/php5/apache2/php.ini

[CUBRID]
extension=cubrid.so



$ sudo service apache2 restart





그러나 에러로그 보니. cubrid 라이브러리 로딩 실패..

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/cubrid.so' - /usr/lib/php5/20090626+lfs/cubrid.so: undefined symbol: executor_globals_id in Unknown on line 0

음. 이거 머냐.. so 파일에 심볼하나가 없다..ㅡ.ㅡ;;





그냥 cubrid 공식 페이지에 있는 apt-get을 이용해서 ubuntu php-cubrid 설치 방법 선택한다.


 

$ sudo rm /usr/lib/php5/20090626+lfs/cubrid.so

$ sudo apt-get install php5-dev
$ sudo apt-get install php-pear
$ sudo pecl install cubrid
$ sudo pecl install cubrid-8.4.0.0003

설치 위치를 물어볼 때. /opt/cubrid 로 선택



다음과 같은 내용이 나오고, cubrid.so파일을 잘 저장했다고 나온다.
 

Build process completed successfully
Installing '/usr/lib/php5/20090626+lfs/cubrid.so'
install ok: channel://pecl.php.net/CUBRID-8.4.0.0003
configuration option "php_ini" is not set to php.ini location
You should add "extension=cubrid.so" to php.ini


다시 한번 확인하고, 아파치 재실행

$ cat /etc/php5/apache2/php.ini

[CUBRID]
extension=cubrid.so


$ sudo service apache2 restart






아파치 에러 로그에 deprecated는 되지만.. 큰 문제는 없다. 그대로 진행

[

Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBCubrid.class.php on line 682, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBCubrid.class.php on line 735, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBFirebird.class.php on line 710, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBMssql.class.php on line 552, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBMssql.class.php on line 596, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBMysql.class.php on line 460, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBMysql.class.php on line 487, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBPostgresql.class.php on line 587, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBPostgresql.class.php on line 621, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBSqlite2.class.php on line 436, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBSqlite2.class.php on line 467, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBSqlite3_pdo.class.php on line 465, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] PHP Deprecated:  Call-time pass-by-reference has been deprecated in /var/www/xe/classes/db/DBSqlite3_pdo.class.php on line 502, referer: http://localhost/xe/index.php?act=dispInstallCheckEnv
[Thu Oct 13 11:44:32 2011] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico

 
phpinfo로 cubrid가 제대로 설치되었는지 확인한다.


이렇게만 따라오면, xe 설치에서 DB를 cubrid로 선택할 수 있다.


터미널에서 cubrid 의 db와 계정을 만들어야 한다.

cubrid 서버를 실행할때 함께 띄우는 db를 지정하고, cubrid 서버를 재시작한다.

$ vi /opt/cubrid/conf/cubrid.conf

# server=foo,bar

이렇게 되어 있는 설정을 아래와 같이 수정 (아까 위에서 test라는 db를 만들었었다.)

server=test

 

$ sudo cubrid server restart


kimyonghwan@kimyonghwan-desktop:~$ csql test

 CUBRID SQL 수행기


도움말 메시지를 보려면 ';help' 명령어를 입력하세요.

csql>




csql 이라는 명령어를 이용해서 test 라는 db에 잘 접근했다.


xe 설치화면에서 cubrid DB 설정에서 admin 계정으로 접근하면 그냥 더이상의 진전이 안된다.


그래서, 오류 메시지가 잘 나오는 큐브리드 쿼리 브라우져를 이용하였다. 윈도우에 설치하고, ubuntu에 설치된 cubrid db에 접근해보았다.





xe 설정에서 admin계정으로 접근하니. 165 에러 발생


검색해보니. 계정에러이다.

4, Error Code:-165
"User "aaa(user name)" is invalid
- 원인 및 확인 사항:
1) aaa(user name) user가 없는 경우

   

윈도우에 큐브리드 DB 를 설치할 때는 admin /admin 으로 접속 가능했지만, 리눅스는 따로 계정을 만들어야 한다.


$ csql -C -u dba test

 CUBRID SQL 수행기


도움말 메시지를 보려면 ';help' 명령어를 입력하세요.

csql> create user root password 'root';

csql> commit

csql> select * from db_user;

 
만들어진 root 계정으로 접속하면, 잘 접근이 된다.

$csql -C -u root test


 

사용자 등록을 마치고 나서 XE DB  &관리자 정보 입력 에 정보만 잘 지정하면 된다.



db : test
사용자 이름 : root
비밀번호 : root
ip : 192.168.56.102
port : 30000

이렇게 입력하고 등록 버튼을 누른다.



 

 







큐브리드 쿼리 브라우저를 통해서 보면.. 아래와 같이 잘 table이 만들어졌는지 확인가능하다.

Posted by '김용환'
,

웹 서비스 개발/ 운영을 위해서는 개발환경을 만들어주고 copy&pate를 많이 하는 경우가 있다.

virtualbox나 vmware를 이용해서 guest os를 설치하고 guest os 상에서 테스트를 할 때, main os 간의 내용을 서로 전달할 필요가 있을 때 크롬을 쓰면 좋을 것 같다. 

virtualbox은 확장 모듈이 있으며, 에버 노트와 같은 웹 서비스도 활용할 수 있다.


구글 크롬에서 공식적으로 아래와 같이 메모를 사용할 수 있는 방법을 제공하고 있다. 
http://www.google.com/support/chrome/bin/answer.py?answer=185277





동기에 대한 내용을 살펴볼 수 있는데..

◦동기화할 항목 선택: '고급'을 클릭하고 메뉴에서 '동기화할 대상 선택'을 선택합니다. 동기화하려는 항목의 확인란을 선택합니다. 
■Chrome 웹 스토어의 애플리케이션
■자동완성(신용카드 번호 제외)
■북마크
■Chrome 웹 스토어의 확장 프로그램(플러그인을 포함하는 경우 제외) 
■비밀번호
■환경설정 
홈페이지 및 시작 설정비밀번호 프롬프트 표시피싱(Phishing) 및 악성코드 감지DNS 프리페칭검색주소창 추천검색어 표시탐색 오류 시 추천사항 표시다운로드 위치 프롬프트 표시웹 콘텐츠 설정브라우저 데이터 대화상자 선택사항 지우기번역 메뉴 표시브라우저 인터페이스 언어, 선호 웹페이지 언어 및 언어 인코딩맞춤법 검사기 설정북마크바 표시페이지 확대/축소 설정
■테마



즉, 아래 크롬 웹 스토어에 대한 것만 동기화됩니다. 만약 플러그인의 경우는 동기가 안됨.

https://chrome.google.com/webstore

 

크롬의 Preferences를 선택한다.


동기화를 선택한다.



동기화할 계정을 선택한다.

 


 

 

동기화 설정에 대해서 모두 다 할지 , customize할지 결정 한다. 




동기가 되었다. 테마를 바꾸면 다른 브라우져에서도 바뀐다.



크롬 웹 스토어에서 어플을 설치한다. 그러면 다른 크롬 브라우져에서는 자동으로 웹 앺이 설치된다. 








그리고,다른 브라우져에서 그 앺을 실행하면 잘 동기화되는지 확인가능하다.






Posted by '김용환'
,

javaone은 원래 pt 자료를 공개하지 않았는데요. 올해 (2011년 )부터는 공개하고 있다.

https://oracleus.wingateweb.com/scheduler/eventcatalog/eventCatalogJavaOne.do

Posted by '김용환'
,

 

 

폰 갭은 KTH의 에스프레소처럼 웹 표준의 코드(여러 언어를 사용하지 않음)를 이용해서 iOS, Android, BlackBerry, window Phone 7, HP web OS, Symbian, Samsung Bada에서도 동작할 수 있는 HTML5 플랫폼입니다.

 

'PhoneGap is an HTML5 app platform that allows you to author native applications with web technologies and get access to APIs and app stores. PhoneGap leverages web technologies developers already know best... HTML and JavaScript."

 

 

 

PhoneGap to become an Apache project as Adobe acquires Nitobi

 

9월 28일. Nitobi 회사의 폰갭 개발자 Brian LeRoux는 폰갭 개발자들에게 폰갭 소스를 ASF(Apache Software Foundataion)에 contribution 하는 절차를 가질 것을 시작했다라고 공식적으로 메일로 공유했습니다. 당분간 인큐베이터를 거쳐서 상위 프로젝트로 올라갈 계획을 가지고 있습니다.

 

여전히 free software일 것이고, Apache/BSD/MIT license가 될 수 있을 것이라고 얘기했습니다. 현재 큰 이슈는 PhoneGap이라는 이름을 계속 가질 것이냐는 내용입니다. 용도에 맞게 Apache DeviceReady라는 이름이 될 수 있다고 했습니다.(deviceready.com은 이미 도메인은 안드로이드 진영에서 사용하고 있는 도메인입니다. )

 

최근에 이름을 Apache  Callback이라는 이름으로 바꾸어서 Proposal을 하고 있습니다. 확실히 정해진 것은 아니라 하며, Callback, Cordova, WebKeg, CallMOB 라는 후보군 중에 하나를 선택할 예정입니다.

 

이에 대한 10월 3일 폰갭사의 홈페이지에서는 재미있는 내용을 언급하였습니다. 폰갭 개발사의 Nitobi가 Adobe 사에게 인수될 예정이라고 발표했습니다. 이와 동시에 Adobe의 MAX 11 컨퍼런스에서도 발표가 되었습니다.

 

이것은 Adobe가 모바일 앱 개발하는데 필요한 html5, css, javascript에 개발자들과 리소스를 투입한다고 뿐 아니라 Adobe Air(flash)도 추가될 예정이라고 합니다.  또한 이클립스, 비주얼 스튜디오, 드림위버를 통해서 웹 앱을 폰갭을 통해서 개발할 수 있는 IDE까지 제공할 것이라고 얘기했습니다.

 

Adobe는 Nitobi의 ASF 재단에 폰갭을 donation한 것에 대해서 기쁘게 받아들이며, 다양한 브라우져 개발사와 모바일 OS 회사와 협업을 할 것이라고 하였습니다. 드림위버에서는 최신 폰갭 어댑터가 장차되어 있어서 이미 개발을 진행했다고 하네요.

 

Flash의 역사가 다시 써질까요? ㅎ

 

https://groups.google.com/forum/#!topic/phonegap-dev/vFy8GCcHiY4

 

http://wiki.phonegap.com/w/page/46311152/apache-callback-proposal

 

http://www.phonegap.com/2011/10/03/nitobi-enters-into-acquisition-agreement-with-adobe-2/

 

http://arstechnica.com/open-source/news/2011/10/phonegap-to-become-an-apache-project-as-adobe-acquires-nitobi.ars?comments=1

 

http://www.eweek.com/c/a/Application-Development/Adobe-We-Love-Flash-and-HTML5-Equally-279478/

Posted by '김용환'
,

Apache Avro 맛보기

scribbling 2011. 10. 4. 18:47




다운받을 pdf



예제 소스



Posted by '김용환'
,
그냥 이해를 위한 발번역임.. 필요한 내용만 작성

http://floatingsun.net/articles/thrift-vs-protocol-buffers/

여러분이 어느 정도 규모 있는(non-trivial) 소프트웨어 시스템--특별히 분산 시스템같은 것--을 개발했을때, 아마도 포팅이 잘되게 만들거나 데이터를 효율적으로 저장하고 교환하는 니드(need)가 있다는 것을 여러분 스스로가 잘 발견했을 것이다.

이것은 Apache Thrift와 Google Protocol buffer가 제공하는 것에 대한 글이다. 통신 프로토콜이나 데이터를 저장에 사용하는 구조적인 데이터를 serialization할 수 있는 언어와 플렛폼을 제공하는 두 플랫폼에 대한 내용이다.




Thrift vs. Protocol Buffers

 
thrift와 google protocol buffer는 가장 인기있고, 사람들로부터 어느것을 써야 합니까라고 물어는 경우가 많다. 또한 많은 토론고, 성능에 대한 이야기가 많다. 나는 이 두개의 솔루션을 여러분이 필요를 위해서 어느 것이 가장 괜찮은지 평가해서 좀더 사람들에게 밝혀 주고 싶다. (그러나 걱정도 좀 든다.)


<특징>

Thrift의 가장 큰 매력 요소중의 하나는 protocol buffer 보다 더 많은 특징들과 지원을 한다는 점이다. 

1. protocol buffer는 C++, java, python을 제공한다. 다른 3rd party 코드 생성기가 있지만 공식적으로 발표한 것은 아니다. 반면, Thrift는 C++, java, python, php, ruby, erlang, perl, haskell, c#, cocoa, javascript, node.js, smalltalk, OCaml등을 지원한다.

2. protocol buffer runtime은 serialization과 deserialization 모두를 제공한다. 이것은 RPC stub을 생성할 수 있겠지만, runtime에서는 RPC 구현체를 같이 넣을 수 없다. (번역자: RPC 스택을 protocol buffer가 제공하지 않는다.따라서 알아서 구현해야 한다. ) 반면, Thrift는 RPC 구현을 (client, server) 다양한 언어에서 구현할 수 있으며, 비동기적인 구현이 가능하다.

3. thrift 의 문법은 protocol buffer보다 훨씬 많다. typedef, constants, unions, list, sets, map 같은 것은 thrift에만 있다.


요점) Thrift가 좀 더 많은 언어에 대한 특징과 지원을 가진데 반해 protocol buffer는 좀더 robust하고 consistent한 구현을 가지고 있다.



<성능>

RPC network stack이 있는 thrift와 RPC network stack이 없는 protocol buffer는 비교자체가 어렵다.
이에 대한 성능 자료는 아래 벤치 마크 싸이트를 확인하면 된다.
https://github.com/eishay/jvm-serializers/wiki/


요점) serializaion/deserialization 성능은 솔루션을 결정하는 factor는 아닐 수 있다.

추가 ) Python으로 구현한 Thrift serializaion/deserializaion은 protocol buffer 디플트 구현보다 훨씬 빠르다.



<Code Quality 와 Design>

Thrift는 facebook으로 이직한 前 구글 직원들이 개발한 코드이다. 그러나 protocol buffer의 코드는 thrift 코드에 비해서 좀 더 괜찮고(mature), 튼튼하다(robust). 이것은 thrift의 폭풍우과 같은 진화때문인데. 알려다시피 2007년에 facebook에 의해서 오픈 소스화 되었고, 최근에 apache 재단의 top level project가 되었다. 
오픈소스화되면서 메일링, 홈페이지가 계속 바뀌면서 불명확한 스타일 가이드와 우선순위의 충돌등이 생겼다. 어떠한 사람과 조직이 오너쉽을 가지고 개발이 되지 못했다. 이런 변화들이 코드에 반영되었다.
(번역자 : 코드에는 역사가 담겨있다. 사람이 코딩하는 거라, 불명확한 가이드라인과 서로간의 의견충돌은 예쁘지 않은 코드로 나올 수 밖에 없다. )

반면, protocol buffer는 2008년에 오픈할 때까지 구글에서 이미 많이 사용했었다. 코딩 스타일, 일관성, 테스트 코드 모두에 구글이 신경쓰고 있던 상태였다.

이런 부분을 잘 이해하려면 다음의 코드를 확인하면 알 수 있다.

1. definition 비교 
protocol buffer 의 message definition
thrift의 struct definition

2. java generator 비교
protocol buffer 의 java generator
thrift의 java generator


여기 protocol buffer의 디지안이 좀더 좋은 예제를 들고자 한다.

1. protocol buffer 컴파일러는 기본적으로 "Descriptor" 객체의 tree를 생성한다. 다양한 "Code Generator"는 이 Descriptor tree를 가지고 언어별 코드로 만들어낸다.이 것은 code 생성 과정으로부터 파싱 하는 것을 decouple하기 위함이다. 이렇게 독립적으로 만들어진 코드는 사람들이 새로운 언어를 쉽게 추가할 수 있도록 할 수 있다. 또한 runtiime시 컴파일러가 "plugin"을 호출할 수 있을 것이다. 
반면 thrift 컴파일러는 코드 생성기에 매우 couple 되어 있다. 이것은 결국은 새로운 언어를 추가할 때마다 코드의 중복을 계속 만들어낼 수 밖에 없게 된다. thrift는 새로운 코드 생성기를 만들어야 할 수 밖에 없다.

2. protocol buffer에 의해서 빌더 패턴으로 만들어진 자바 클래스는 코드 생성 시점에 'required' 필드에 값이 지정되지 않은 것들에 대해서 문제를 빨리 찾기 쉽다. 반면, thrift는 닥치는 대로 자바 객체를 생성하고 serialized/deserialized될 때까지 에러를 발견하기 어렵다. 
 

코드를 쭉 따라가다 보면 이런 예제들은 많이다.

요점 : protocol buffer는 좋은 디자인과 code quality 을 thrift에 비해서 잘 가지고 있다.


<개발 프로세스 와 오픈정도>

Thrift는 아파치 프로젝트이다. 따라서 open issue tracker를 통해서 개발이 이루어진다. 이 tracker는 누구나 접속할 수 있고, 아무나 패치를 공헌할 수 있다. 프로젝트 방향에 대해서 강한 콘트롤할 개인이나 조직이 없다. 
apache 프로젝트 특성상, 실력주의를 기본으로 하고 있고, 여러개의 높은 성공 프로젝트가 있을 정도로 잘 관리되고 있다. 그러나 프로젝트가 생성하고 진화하는 프로세스는 결정이다. 리뷰 프로세스는 주로 자기네들끼리 하며 어떤 특정 로드맵이나 제품 출시 예측이나 누군가가 강하게 리드하지 못한다. 
(번역자: 꼭 그런 것만은 아닌 것 같음. 예를 tomcat 같은 경우는 spring에서 tc server와 잘 구축할 수 있도록 code commitor를 잘 붙이지 않았는가? tomcat의 리딩은 실제로 spring에서 하는 듯.. 그러나 다른 프로젝트의 경우는 code commitor가 된다면 대부분 민주적으로 하는 것 같았음.)

Protocol buffer의 경우는 개발 프로세스를 오픈하지 않는다. 구글에 의해서 통째로 콘트롤 되고 있다. 강한 오너쉽을 가지고 개발되고 있다는 사실을 느낄 수 있었다.

요점 : Thrift는 많이 오픈되어 있지만, protocol buffer는 잘 하고 있다.


<누가 사용하고 있는가?>
Facebook은 Thrift를 사용하고 있지만, Google은 protocol buffer를 사용하고 있다. 그러나 위키에 나와 있듯이  많은 회사들은 빠르게 Thrift 채택을 하고 있다. 
Hadoop 의 에코시스템 프로젝트가 Thrift를 사용하고 있으며 공헌을 하고 있다. (cassandra, scribe)

나는 protocol buffer의 경우에 대해서는 어떠한 사람으로부터 채택되었는지 잘 모른다.

요점 : protocol buffer보다 thrift가 더 크고 사용자 가 많다.

<문서>

요점 : protocol buffer는 문서가 좋다. 그러나 Thrift는 조만간 잡을 듯
Thrift: The Missing Guide.



 




 

'scribbling' 카테고리의 다른 글

폰갭이 아파치 프로젝트에 들아갈 예정  (0) 2011.10.07
Apache Avro 맛보기  (0) 2011.10.04
Apache Thrift 조사  (1) 2011.09.26
Maven 컴파일 을 더 빠르게  (0) 2011.08.31
OTN Java Developer Day 발표자료 다운로드  (0) 2011.08.31
Posted by '김용환'
,

Apache Thrift 조사

scribbling 2011. 9. 26. 15:52

Pdf 다운 받기







<장점>

- 버전닝 지원
- 여러 언어에서 사용 가능하며 언어에 맞도록 소스가 생성되고, 언어간의 Serialization 가능
- Sync, Async Server API 제공
- XML 설정이 필요 없음
- Layer에 맞는 Interface를 사용 및 Customizing 구축 가능
- RPC 기능 제공 (Google Protocol Buffer에는 없는 기능)
- 서버 기능 좋음
    -- 서블릿 제공(org.apache.thrift.server.TServlet)
   -- 멀티쓰레드 지원 (org.apache.thrift.server.ThreadPoolServer : worker thread 지정)
   -- Async 지원 (org.apache.thrift.server. TNonblockingServer : single threaded)
   -- Multi-thread Half-Sync/Half-Async지원 : org.apache.thrift.server. THsHaServer
   -- Exception을 제공 (Google Protocol Buffer에는 없는 기능)
   -- Set, Map 지원 (Google Protocol Buffer에는 없는 기능)

 

 

 <단점>

- 자바로 코드가 생성될 때, Slf4j를 기본적으로 가지고 가며, 내부 코드는 모두 thrift lib가 필요함
- C++의 Server threading part는 Boost에 의존을 가짐
- 자바 쪽 이클립스 플러그인 없음
- Thrift lib의 api가 자주 바뀌어서, 버전 업마다 소스를 좀 보고 코딩해야 함. (인터넷 예제가 거의 없음)

   인터넷 예제랑 달라서, 컴파일 에러 안나게 하는게 귀찮음...
- XML Serialization/Deserialization 기능 없음
- 문서가 확실히 적음 (허허~)
- 생성된 코드가 Google Protocol Buffer에 비해서 보기는 편하지는 않음 (특히 C++)

Posted by '김용환'
,

maven 이클립스 플러그인과 nexus를 공유한 sonatype에서 일 하나를 벌였다.
mvnsh라고 maven 컴파일을 더 빠르게 해주는 툴이 생겼다.

컴파일시간이 길면 길수록 효과는 좋은 것 같다.

http://shell.sonatype.org/index.html


Mvnsh is a CLI interface for Apache Maven that enabled faster turn-around, and a more intellifent interaction with repositories and projects. Using Mvnsh, you will be able to speed up your builds because project information and Maven plugins are loaded into a single, always-ready JVM instance which can execute a Maven build.


다운로드
http://repo1.maven.org/maven2/org/sonatype/maven/shell/dist/mvnsh-assembly/1.0.1/



Posted by '김용환'
,