1번 PC에서 컴파일한 apk를 폰에 올려서 작업하다가, 2번 PC에서 컴파일한 apk를 폰에 올리려고 하니깐, certification 어쩌구 하면서 에러가 난다. 그래서, 그 apk를 uninstall 하고 다시 해보니깐 된다. 여차저차해서 알아보니, signing이 되지 않은 상태의 앱은, PC마다 key가 달라서, 업데이트가 안되는 것 같다.

안드로이드는 uninstall을 할때, 관련된 db를 마이그레이션 하는게 아니고, 모두 지워버리기 때문에, -_-;; 꽤 난감한 시츄에이션. 1번 PC로 컴파일한 녀석을 사용하면, 업그레이드 버전도 모두 1번 PC에서만 컴파일해야 되기 때문이다.

"응? 왜???" 라고 생각되어 찾아보니, Signing Your Applications 라는 글이 있더라. 안드로이드를 여러달 만졌지만, 마켓에 올린 적은 없어서 그냥 배포할때만 쓰는 건 줄 알았는데.. 겸허한 마음가짐으로 찬찬히 읽어보면, Signing을 해야만, 여기서 컴파일하든, 저기서 컴파일하든, 같은 key를 이용할 수 있는 것 같고, 마켓에 올릴 수 있는 것 같다. 별도로 Signing을 하지 않으면, Debug Mode 에서는 기본적으로 각 PC마다 별도의 key가 생성되는데, 이는 임시 키로, 디버깅을 위해서 마련된 key이기 때문에, 해당 apk 파일은 컴파일한 후에 1년간만 사용할 수 있다는 것 같다.

에뮬에 올리는 경우야 어차피, 에뮬 자체를 공유하지 않으니깐 상관 없지만, 폰에 올리면서 여러 PC에서 작업하는 경우는 숙지하고 있어야 하는 것 같다. 배포할때는 물론이고.

아, 주의할 점은, 마켓에 올리지 않고, apk 파일을 직접 돌려서 공유한다고 하더라도, Signing을 하지 않았을 경우에, bin 폴더에 생성되는 apk 파일은, Debug Mode라는 점이다. Ant로 컴파일 할 경우엔, apk 이름에 debug 라는 단어가 붙었던 것으로 기억하는데, 이클립스에서 컴파일 할 때에는, 이런 단어가 붙지 않아서, release 모드로 오해하기 쉽다. (나만 그래? -_-;)

-- 이상한 나라의 종텐.


여차저차 하다가, 모토로이를 갖고 앱 개발을 하게 되었다. 에뮬레이터만 쓰다가, 기기를 달아놓고 개발을 하니, 개발 속도가 훨씬 빨라졌다. (예전이 느렸던거겠지만). 에뮬 안에다가 apk를 install 하는 속도보다, 실제 기기에 usb로 install 하는게 훨씬 빠르다. 실행 속도는 두말할 나위 없고. 에뮬만으로 안드로이드 개발을 하는 것은, 한손으로 개발하는 것과 같다. -_-

일단, 모토로이에 대한 사용자 입장의 느낌을 몇가지 단어로 나열하자면, 우왕. 안드로이드다. 그럴싸하군. 근데 좀 느리네. 가끔 죽네. 내부 용량(어플 설치 가능한 용량)이 100M 밖에 안된다니!(열폭). /* 안드로이드의 현재 버전은, 외부 SD카드엔 앱을 설치할 수 없다. 보안상 제한인듯 싶은데, 안드로이드 다음 버전에서는 개선된다는 소문도 있다. 아이폰에 비해서 상당히 애매한 문제다. */

모토로이 드라이버를 깔고, 여차저차 해주니, 기존 adb 명령어도 다 먹고 참으로 좋은데, 앱 안에서 /sdcard 로 접근이 안되더라. 알고보니, PC에서 모토로이의 SD카드를 사용할 때는, 안드로이드 폰에서, (병행성 문제인 듯 싶지만) /sdcard 의 파티션이 unmount 되는 것. 모토로이의 알림창에서 USB연결을 누르고, 없음을 선택하면, PC와 연결된 상태에서도, 앱 안에서 /sdcard 를 사용할 수 있다. (PC에서의 SD카드 접근은 동시에는 안되지만).

/data/data/패키지이름/ 디렉토리의 접근은 잘 된다. 읽기/쓰기 다 된다. adb shell 에서는 쓰기는 할 수 없다. adb push가 있으니 상관 없겠지만.

작업관리자가 실제로 프로세스를 죽이지 못하는 경우도 있었는데, 개발을 하던 중에, 앱에서 mp3 를 재생시켰는데, 어플을 닫아도, mp3가 안 끝나더라. 그래서, 작업관리자에서 해당 앱을 죽였는데도 노래가 계속 나오더라. 당황하여 adb shell 로 들어가서, ps를 찍어봤는데... 헐. 프로세스가 살아있어?? 게다가, 에뮬과 달리, 실 기기에서는, 퍼미션이 적용되어 있기 때문에, kill -9 를 할 수도 없는데. -_- 노래가 계속 나와 ㅠㅠ

이건 안드로이드의 이슈이지만, 이미 종료된 앱이고, 작업관리자에도 없는데, 프로세스가 종료되는 시점은 정확히 알 수 없다. 종료되지 않을 수도 있다. 생각보다 꽤 오랫동안 프로세스가 살아 있다.

그 외에, 의외로 괜찮았던 구석도 있고, 생각만큼 별로였던 구석도 있고, 생각보다 더 별로였던 점도 있는데, -_-;; 안드로이드 개발자에겐 어쨌든 모토로이든 뭐든, 기기는 필수인 것 같고(개발속도가 엄청 차이난다), 사용자 입장에선 아이폰보다 별로인 것 같다. (나 아이폰 유저다.). 멀티태스킹이 되는 건 좋지만, 딱 그 뿐이다. 그 때문에 엄청 느려진다. 자주. 아... 뭐, 스카이프 같은 어플에겐, 안드로이드쪽이 더 좋아지겠다 싶다. (아이폰은 스카이프 쓰다가 문자가 오거나, 전화가 오면, 끊긴다. ㅠㅠ 어플이 죽으니깐.)

-- 이상한 나라의 종텐.


DVCS의 유용성

2009/12/15 15:25

예전에는, 버전 관리 시스템으로는 CVS를 사용하다가, 2004년부터는 Subversion을, 2009년부터는 Mercurial(= hg)을 사용하고 있는데, 폴더마다 .svn 이 생기지 않는다는 것과, 오프라인에서 commit이 가능하다는 점, 공유되지 않은 코드를 부담 없이 롤백 및 revert 할 수 있다는 점, TAG가 branch가 아니라는 점 등의 이유 때문이었다. Distributed의 진짜 장점은 체감하진 못하고 있었는데…

몇 일 전에, 멤버십에서 진행하던 프로젝트에서, 버전관리를 위해 중앙 저장소로 사용하던 서버를 사용할 수 없게 되는 초유의 불상사가 생겼다. 대체 소스코드 공유를 어떻게 해야 하나? 이 난관을 어떻게 극복해야 하나? 한~참을 고민하다가, Mercurial은 DVCS라는 것이 기억났다. 우와!

Subversion 이었으면, diff와 patch로 극복하거나, 임시로 다른 서버를 구해서 저장하거나 했겠지만, Mercurial은 그럴 필요가 없었다. 각 사용자가 가지고 있는 Repository 하나하나가 하나의 서버나 마찬가지다. Mercurial은 (Subversion과 다르게) 서버의 저장소 구조와 클라이언트의 저장소 구조가 전혀 차이가 없다. 단 한 명만이, hg serve를 실행하고, 나머지 사용자들은 기존대로 자기의 저장소에 commit 하다가, 모아서 hg serve를 실행한 사용자의 IP로 push를 하면 된다. 나중에 중앙 저장소 서버가 복구되면, 그쪽으로 push 해주면 그만이다. 같은 족보니깐 문제도 없다. 그래. Mercurial은 중앙 저장소가 필요 없는, 분산 버전 관리 시스템이잖아.

-- 이상한 나라의 종텐.


얼마전에, 구글에서 만들고 있는 오픈소스 프로그래밍 언어를 하나 발표했다.
이름하야, The Go Programming Language.


일단, 로고가 귀여우니 합격.

...이 아니고, 2007년에 디자인하기 시작해서, 작년부터 구현하기 시작했다는데, 초창기 개발자 3명중에, B언어와 Unix의 창시자Ken Tompson과, 그 유명한, Rob Pike잖아?! 교과서에나 나오는 이 할아버지/아저씨들이 구글에 있었어???

소개한 pdf 를 잠깐 훓어 봤는데, 흥미롭다. 잘 모르는데, 어설프게 설명을 하자면 안 될 것 같고, 롭 파이크 아저씨의 영상을 첨부한다.


lameproof에 굉장히 좋은 글이 올라왔다. 무언가를 모르는 9가지 이유라는 글이다. 이 우주에는 날로 먹으려고 하는, **(심의상 삭제)한 생명체들이 참 많다. 아서라. 그러다가 배탈 난단다.

1. 읽지 않는다
참고서, 메뉴얼 등을 읽지 않는다. 읽을 생각도 전혀 없다.

2. 조사하지 않는다
인터넷 등에서 최소한의 내용도 스스로 조사하려고 하지 않는다.

3. 시험하지 않는다
귀찮다, 등의 이유로 실행해보지 않는다. 할 생각도 없다.

4. 기억하지 않는다
누군가에게 쉽게 들은 대답은 자기 것이 되지 않기에 문제해결 직후 잊어버린다.

5. 설명을 할 수 없다
무엇이 문제인지, 제 3자에게 정확하게 전달할 문장을 쓸 수 없다.

6. 이해력이 부족하다
아니, 이해력보다도, 이해하려고 하지도 않는다.

7. 사람을 이용하려고만 생각한다
응석을 부리거나 억지로, 사람을 부려 임시로 그 문제만 극복하려고 한다.

8. 감사하지 않는다
가르쳐주는 것은 당연. 일이 끝나면 굿바이~

9. 적반하장
자신이 생각하는대로 안 되면 자기가 모르고, 잘못한 것임에도 도리어 화를 낸다.


Python + Django + Oracle

2009/11/05 01:37

Java + IIS + Tomcat + Spring + iBatis + Oracle 로 진행 하려던, 두 달짜리 프로젝트를, IIS + Python + Django + Oracle 로 하기 위해서 찾아보다가, "Django에 오라클 지원이 되긴 하지만, 커넥션 풀이 지원되지 않는 것 같다??"는 정보를 얻고는, 이를 극복하기 위해 여러 방안을 알아보고 있다. ㅠㅠ (IIS와 Oracle은 고객(?)의 환경인듯. -_-)

더불어, Django를 올리더라도, IIS에서 파이썬 프로세스가 매번 재실행되지 않아야 할텐데 싶어서 이것도 동시에 알아보고 있다. 이 쪽은 원래는 wsgi로 생각하다가, twisted.web(비동기인 모양이다)의 성능이 엄청나다고 해서, 이쪽에 또 혹~했다. -_-;; 근데 뭔가 알아볼수록 점점 더 복잡해지는 것 같아서, 이러다가 다시 자바로 돌아가는게 아닌지 걱정이 좀 된다.

내가 원하는 것은, IIS가 돌아가는 환경에서, 오라클을 DBCP 쓰듯이 쓰면서, WAS는 Django의 컨트롤러와 간단한 템플릿 엔진을 사용하고, 모델은 Django를 사용할 수 있으면 이걸 쓰고, 안되면, SQLAlchemy를 사용하는 것인데... 뭔가 간단치 않은 것 같다. 자바로 개발하기는 싫은데. ㅠㅠ (멤버십에 있는 내 PC에서 이클립스가 너무 느려서 파이썬으로 하려는거 아니다... 진짜다... 후... 그냥 PC를 사버리고, 자바로 할까... -_-;;)

TornadoWeb (epoll을 쓰기 때문에, Windows에서는 안된다.)
http://www.tornadoweb.org/

Twisted.Web
http://twistedmatrix.com/trac/wiki/TwistedWeb

SQLAlchemy - Connection Pooling
http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/pooling.html

SQLAlchemy - Oracle
http://www.sqlalchemy.org/docs/05/reference/dialects/oracle.html

Oracle Backend with SessionPool (Django #7732)
http://code.djangoproject.com/ticket/7732

Django with twisted.web.wsgi
http://clemesha.org/blog/2009/apr/23/Django-on-Twisted-using-latest-twisted-web-wsgi/

Building Oracle Database-backed Web Applications in Django
http://www.oracle.com/technology/pub/articles/vasiliev-django.html

Connecting To Oracle Directly (Without settings.py)
http://blog.awarelabs.com/2007/connecting-to-oracle-directly-without-settingspy/

Django and Oracle (한글)
http://biohackers.net/wiki/DjangoAndOracle

pyorapool : An oracle connection pooling daemon for python based projects
http://pyorapool.googlecode.com/

Oracle & Python
http://demmer.ipax.at/blog/oracle-python/

Django on Windows with IIS and SQL Server
http://code.djangoproject.com/wiki/DjangoOnWindowsWithIISAndSQLServer

원래는, "검증된 것만 사용해서 빨리빨리 끝내자"라는 계획이었는데, 뭔가 점점 일이 커지는 것 같기도 하고;; 아 그냥, 순결한 마음가짐으로, servlet/jsp 날코딩으로 RESTful하게 만들어놓고, SproutCore와 jQuery로 적당히 때워줘야 하는걸까? 흠...

고객(?)의 요구사항에, "아무나 불러서 유지보수하기 쉽게"도 있었는데, (유지보수 비용을 낮추기 위한 프레임웍들임에도 불구하고) 뭔가 유지보수와는 점점 거리가 멀어지는 것 같기도 하고. -_-

-- 이상한 나라의 종텐.


오늘, 오전에 A 작업을 하다가, B 문제점이 드러났다. B 문제점을 수정하던 중에, C 클래스가 이상하다는 느낌이 들었다. C 클래스가 하는 역할이 무려 2~3가지였다. B 문제점을 수정하면서, C 클래스를 리팩토링 하기 시작했다. 내겐 머큐리얼이 있다. 언제든지 revert 하면 된다구!

... C 클래스를 수정하던 중에, 또 다른 D 문제가 나타났다. 게다가 뭔가 왕창 엎어야 하는 분위기!

그래. 어쩔 수 없지. 리팩토링 비용이 상승하는 것은 어쩔 수 없지만, 피해갈 수 없는 요소라 판단했다. 열심히 뜯어고쳤다. 복작복작. 뚝딱뚝딱... 하루가 그렇게 끝났다. -_-;; D 문제는 해결되지 않았고, 이걸 해결하려면, 하루는 더 걸릴 것 같았다. 사실, 이틀이 걸릴지도 모른다. 하지만, 우리의 스프린트는 이미 밀려있었고, 일정은 매우 빠듯한 상황이었다.

팀장님이랑 일일회고를 하던 중에...

종텐 : 냉정히 생각해보니, 지금 당장 급한 것은 B 문제였는데요.. 그냥 C 클래스를 뜯어고치기 이전으로 revert 해야겠어요. (언젠가 다시 고쳐야 할) 지저분한 코드를 그대로 안고 가는 것은 끔찍하지만, D 문제를 해결하려던 것은, 원래 오늘 계획한 일이 전혀 아니었잖아요. 비록, 3~4시간 정도 작업하면서 많은 부분을 고치긴 했지만, 이 코드는 모두 버려야겠어요. 이 리팩토링을 지금 하는 것은 적절하지 않아요.

팀장님 : 하하. 어른이 되어가는군요.

종텐 : 아......

어른이 되어간다는 것은, 조금 슬프구나. 이상을 포기하고, 현실에 적응하려는 것 처럼 느껴진다. 하지만, 이 결정은 이상을 포기하는 것이 아니다. 나는 여전히 이상주의자다. 존재하지 않는 것을 향해, 허공에 떠있는 것이 아닌, 두 다리를 현실이라는 대지에 단단히 딛고 있지만, 하늘을 바라보며 별을 추구하는 것이 이상주의자다. 그렇게, 조금씩 어른이 되어간다.

-- 이상한 나라의 종텐.


크롬을 띄웠다. 자주 가는 사이트 8개에 강컴이 있다.
신간이 나왔나 확인하기 위해 강컴을 누른다.
갑자기, C++ 템플릿 가이드를 사기로 했다는 생각이 들었다.
결재를 해야되니깐, IE8을 띄워서 강컴에 접속했다.
강컴에서 이상하게 IE에서만 페이지가 안 뜬다.
다른 사람들의 IE에선 잘 되던데, 내 노트북에서만 안된다. ㅠㅠ

사실, 지난 몇달동안은 IE에서 강컴이 안되길래, 알라딘을 이용했는데...
덕분에 강컴에서 내 아이디가 우수회원에서 일반회원으로 떨어졌길래 ㅠㅠ
왠지, 이번엔 강컴에서 사고 싶었다.
이것이 모든 것의 시작이었다.

Chrome과 Firefox에선 잘 나온다.
하지만, 결재는 IE에서만 되잖아!
IE에서 강컴에 들어가기 위해서, 에러 페이지 내용을 구글링 해본다.
The parameter is incorrect 라고 나오는데, 무슨 파라미터가 잘못되었는진 안 나온다.
치사한 IIS 6.0.

어쩔 수 없군.
패킷 캡쳐를 해야겠다.
Wireshark 다운로드.
HTTP만 필터링 한다.
IE8에서 강컴 접속.
HTTP Request 패킷을 덤프했다.
흠. 수정해서 보내봐야겠다.

python 실행.
일단, urllib.urlopen()을 때려본다. 잘 나온다.
socket을 열어서, 강컴의 80포트에 접속한다.
덤프한 내용을 밀어넣는다.
헐퀴! 타임아웃이 난다. ㅠㅠ
settimeout()을 하지 않고 보내본다.
음... 응답이 안 오고 있어?!
send()는 되는데, recv()가 안된다?!
아하! \r\n 한개가 빠졌었구나.

일단, 패킷을 좀 간단히 해서, 다시 시도.
Bad request -_-;
다시 수정해서 시도.
우왕. 200 OK가 떨어졌다.
근데, 내용이 없다?!

이상하네? urllib로 하면, 내용이 나오는데,
301 redirect도 아닌데, 왜 내용이 없지?????
아하! 끝나기 전에 recv()를 반복하지 않아서 그랬나보다.
소켓을 오랜만에 했더니 @_@;;
여차저차 수정하고, 에러 재현 완료.
200 OK가 떨어진 직후에, 400 Bad request로 변신한다. -_-;;

이제, 파라미터를 하나씩 바꿔본다.
아… 찾아냈다!
여차저차 수정을 하다보니, 302가 정상적으로 떨어진다!
User-Agent 항목에서 FDM을 제거하니깐 된다.
FDM은, Free Download Manager라는 내가 사용하는 프로그램인데,
이게 설치되면, IE에서만 Http Request의 Header에 포함 되나보다.

강컴에 접속하기 위해서, FDM을 지워야 하나 -_-;;;
다른 모든 사이트는 잘 되는데;;
일단은 지우고나서, IE에서 강컴에 접속하니 잘 된다.
해당 파이썬 소스와, 에러가 발생하는 http header를 강컴에 메일로 보내줘야겠다.

이상으로, 종텐의 1시간 가량의 강컴 삽질기 종료!

-- 이상한 나라의 종텐.

p.s. 우와. 나한테 상으로 책 한권 줘야하는거 아닌가? ㅋㅋ

p.s.2. 월요일 아침에 바로 강컴에서 (해결했으니 확인 부탁드린다는) 전화가 왔다. 다시 FDM을 설치하고, 다시 패킷캡쳐를 하면서 IE에서 접속을 해보니, 이번에도 User-Agent에 FDM 항목이 있는데, 이젠 잘 된다. 강컴의 발빠른 대응에 감사. :-)


지난 9월 4일 금요일, 켄트 벡의 “반응적 설계” 세미나를 다녀왔다. 켄트 벡과 같이 사진을 찍는 사람이 아무도 없어서, 같이 찍지는 못하겠구나 싶었는데, 오픈마루 스프링노트 팀이 사진을 찍는 틈을 타서, “저,저도!”라고 외치고 옆에 살짝 서있었다. (웃음).

왼쪽부터, 프리버즈님, 프로도님, 나이누님, 종텐(본인), 켄트 벡, 김창준님.

세미나를 들으면서, 정말 필기를 많이 했다. 아직은, 나름 학생인데, 88,000원임에도 자비(自費)로 신청한 것이었고, 듣고 난 후에 얻은 이야기들을 여기저기 전파하고 싶은 욕심에서였다. 무려, 43,000 바이트 가량의 필기를 했다. 옆에 앉아계셨던 분께 상당히 죄송하다. 타자 소리가 꽤 시끄러웠을 듯. 하지만, 이 모든 내용을 블로그에 쓰진 못할 것 같다. 기록하지 못한 부분도 있고, 아직 켄트 벡의 생각에 대한 내 입장도 좀 애매하고, 소화하지 못한 부분도 있는 듯 하다. 잘 모르겠다.

반응적 설계(이하, RD)에 대한 자세한 내용은, 아래 링크들에서 얻을 수 있다.

일단, 결론부터 말하자면, 흠… 반응적 설계(이하, RD) 자체에 대한 것은, 좀 평이한 내용들이 많았다. 하지만, 그것을 풀어나가는 과정에 있어서의 설명들과, 다양한 이야기들은 만족스러웠다. 또한, 아직 RD가 완성되지 않은 형태(정리를 하고, 개선을 해서, 책을 쓸 계획이라 했다)라서, 더 보완되리라 생각한다.

뭔가 내용을 기대하고 스크롤바를 내린 분들께 좀 죄송하다. 의견을 교환하고 싶은 내용이 많지만, 파스칼의 말을 빌리자면, 시간이 없어서 글이 길어졌다. 그래서, 필기를 했던 파일통째로 올린다. 중간중간에 내 의견을 써놓긴 했으나, 놓친 부분도 많고, 사실, 나중에 정리를 하려고 했었기 때문에, 의견을 써놓은 부분은 굉장히 적다. insight를 교환하고 싶은데 매우 아쉽다. 그 당일에 회고 모임이라도 추진 해 볼껄 그랬다. 나중에라도, 정리를 하게 되면, 다시 포스팅을 할 수 있지 않을까 하는 희망을 조금은 품어본다.

아무튼. 필기한 파일(+ 약간의 의견) 업로드 합니다. 라이센스는 "대인배 라이센스"입니다. 국 끓여 드셔도 되요.

kent_rd.txt

p.s. 세미나 장소에서 우연히 만난, 프리버즈님, 프로도님, 나이누님, 박계홍님, 달룟님, 컴키드님, 김승범님, K-Dog님, 강성희님, 나부군님. 반가웠습니다!


에릭 감마와!!

지난 화요일, 디자인패턴의 창시자 중 한 명이자, 이클립스 프로젝트의 창시자인 에릭 감마의 세미나에 다녀왔다. 에릭 감마가 새로 3~4년째 만들고 있는 협업 플랫폼인 Jazz와 그 플랫폼 상에서 동작하는 RTC(Rational Team Concert)에 관한 이야기들이었다.

행사장에 조금 늦었는데, 도착했을 때에는 시작한 지 10분쯤 지난 후였고, 동시 통역이 진행되고 있었다. 포스 넘치는 에릭 감마 아저씨가 이클립스 프로젝트에 대한 이야기를 하고 있었다. API에 대한 이야길 하는 중이었는데, API는 변화에 대한 리스크가 크기 때문에, 최소한으로 유지하는 것이 중요하다는 점. 그래서, 이클립스가 취한 전략은, Everything is a plug-in 이라고 말했다. “no exceptions”라고도 했다. APIs are a huge commitment이기 때문에, 이런 전략을 취했다고 했다. 즉, API 자체는 정말정말 최소화 하고, 기능 자체를 플러그인으로 만들었다는 소리다.

그 후에, 이클립스의 방향에 대해서 말했다. 2002년에 회사에서 이클립스를 오픈소스화 했을 때에는, 이렇게 잘 될줄은 몰랐다고 했다. 커뮤니티의 힘은 정말 굉장했다면서, 현재의 개발방향 추세에 대해서 말했다. 이클립스 프로젝트가 전세계의 많은 개발자들이 인터넷 상으로 협업을 하는 내용에 다루면서, 어떤 식으로 협업을 하는지에 대해 이야길 했다. 또한, 개발 프로세스에서 Iteration에 대한 이야길 조금 해줬다. 이 팀은 애자일 방법론들을 적용했는데, 특정 방법론에 치우친 것이 아니라, 필요한 부분만 사용했다고 했다. 그러면서, Iteration에 대한 이야길 했다. “It is all about being continuous”라고 하면서, 디자인/리팩토링, 통합/테스팅, 배포/데모, 피드백, learning 등등 모두 continuous하다고 했다.

이클립스의 observer들은 오리가 물에 떠있기 위해서 발을 엄청나게 휘젓듯이, 이클립스 팀이 그 안에서 얼마나 많은 work/stress/human factor를 소비하는지 모른다고 했다. 특히, 팀으로 프로젝트가 진행될 때의 Pain에 대한 이야기가 나왔는데, Collaboration, Development, Project Management에 대한 이야길 해줬다. 그러면서, 슬슬 내용은 (이제서야;;) 본론인 Jazz 로 넘어갔다.

Jazz는 팀 프로세스를 위한 협업 플랫폼이다. 개발, 프로젝트 관리, 애자일 프로세스 등이 통합된 플랫폼이다. 이 중에서도, RTC라고 해서, Rational Team Concert라는 플러그인(?)이 있는데, 이 플러그인이 오늘 얘기의 중점이었다. 온라인용, 또는 회사용, 애자일 개발 도구 세트 같은 느낌?

90년대말은 Point Tools에 포커스가 맞춰졌다. 이클립스는 One Developer에게 포커스가 맞춰졌다. 이젠, Team과 Collaboration을 위한 것이 있어야 한다고 했다. 이클립스 프로젝트의 주역 멤버들이 4년전부터 만들기 시작했고, 자신에게 있어서 Dream Project라고 했다. 왜냐면, 항상 이런 것을 필요로 하고 있었기 때문! (나도 완전 필요했다고!!). 이걸로 개발자들의 삶을 개선할 수 있기를 희망한다고 했다.

현대의 프로세스는, 민첩성을 원하지만, 여전히 예측이 중요하다. 투명성도 중요하다. 생산성은 하나의 개발자를 위한 것이 아닌, 전체 팀을 위한 것이라 했다. (스크럼의 소멸차트가, 개인별로 그려지는 것이 아닌, 팀 위주로 그려지는 이유도 마찬가지라 생각한다). 그래서 이런 것을 위한 것이 Jazz 플랫폼이다.

에릭 감마가 직접 시연을 보여줬는데, 전체 느낌은, 이클립스 + 버전 트래킹 + 이슈 트래킹 + 소멸차트와 같은 애자일에 필요한 도구들 + 온라인 협업 + 코드를 쉽게 추적할 수 있는 기능 + 팀별로 룰과 프로세스를 정할 수 있는 기능 (신입은 커밋을 허락을 받아야 한다던가) + 등등의 많은 기능들을 RTC라는 이름에 다 때려넣었다. 뭔가 사용법은 이클립스를 처음 접했을때 만큼이나 복잡해보였지만 -_-;;; 익숙해지면, 엄청난 향상을 가져올 것 같은 느낌?

중요한 것은, 팀별로 각자의 프로세스가 있는데, RTC에서는 이런 규칙을 정할 수 있다고 했다. 개인별로 대쉬보드가 주어지고, 팀별 대쉬보드도 나오고, 프로세스에 대한 규칙을 정할 수도 있다. 대쉬보드는 현황을 파악하는 것 보다는, 문제에 초점이 맞춰져서, 해당 버그나 기능을 바로바로 추적해서 “지금 당장 어디부터 일을 해야하는지”를 쉽게 파악할 수 있게 해준다. 또한, 전체 프로젝트 리더를 위한, team of team을 위한 대쉬보드도 주어지고, Baglog Plan을 세울 수 있게 하고, Release, Iteration, Daily 등에 대한 것과 현재 진행사항을 정할 수 있고, Burndown Chart도 나온다. Jazz.net에서 현재 버전을 사용해 볼 수 있고, 재즈의 목적은, 각각의 개발자와 구성원들간의 팀 프로세스 상에서의 투명성과 방향성을 제공하여, 커뮤니케이션 비용을 낮추고, 협업을 돕는 것에 있다.

에릭 감마의 발표가 끝나고, 잠시 휴식을 취한 후에, 질답이 이어졌다. 질답은 무려 1시간이 넘게 했고, 많은 질답이 오갔는데, 기록을 별로 못했다. -_-a 기억에 남는 것 몇가지만 추스리자면,

Q. 에릭 감마씨는 API 개발을 많이 해보셨을텐데, API 설계시에 가장 중점을 두는 부분은 무엇인가요?
A. 첫째는, 사용의 용이성. 이해하기 쉬운가. API는 사용의 편리함이 가장 중요하다. 두번째는 UnitTest. 유닛테스트 자체가 사용 용이성의 척도이기도 하다. 세번째는, 고객의 피드백. 완성 전에 고객을 API 개발에 참여시켜야 한다. (고객이라 함은, 해당 API를 사용하는 프로그래머를 의미).

Q. 에릭 감마씨는 GoF 디자인 패턴의 저자인데, 아까 말씀하셨을 때에, 설계시에 가장 중요한 것은 “경험”이라고 하셨는데, 패턴을 굳이 학습해야 하는 이유는 무엇인지? GoF 책 말고도, 다른 패턴들이 있는데, 이것도 모두 학습을 해야 하는지?
A. 그 책은 웹브라우저보다도 오래된 패턴이 있어서, 가끔 얼굴이 화끈거린다. 다시 쓰고 싶은 부분도 있다. 하지만, 패턴은 중요하다. 책의 패턴을 템플릿처럼 그대로 쓰려고 하지 마라. GoF에 나오는 것은 물론이고, 그 책에 안 나온 더 많은 패턴을 익혀라. (예를 들어, 마틴 파울러의, 엔터프라이즈 패턴이라던가, Pattern-Oriented Software Architecture 시리즈에 나오는 패턴들이라던가.) 많은 경험이 소프트웨어 설계에서 가장 중요한 항목인 것은 맞지만, 그런 경험이 없으면, 패턴을 통해 다른 프로그래머들의 경험을 학습할 수 있다. 패턴도 많이 익히고, 경험도 많이 쌓아라.

그리고 마지막으로, 에릭 감마가, “Design is NEVER Easy”라고 강조하며 말했다. 그러니깐, 계속 수련을 하라고.

-- 이상한 나라의 종텐.


« Previous : 1 : 2 : 3 : 4 : 5 : ... 8 : Next »