아드레날린 중독증

2010/03/12 23:29
풋풋한 스무살이었던 대학교 2학년때부터, 나는 프로젝트가 망하는 것을 막기 위해, 방법론이나 생산성, 프로젝트 관리 방법, 팀플레이 등에 대해 병적일 정도로 집착해왔지만, 여전히 프로젝트는 항상 어렵다. 코드는 시간이 좀 지나면 나쁜 냄새들로 가득하고, 일정은 밀리기 일쑤고, 완성도는 예상에 미치지 못한다.

19회 졸트상을 받은, "프로젝트가 서쪽으로 간 까닭은"을 읽기 시작했는데, 첫 번째 챕터에, "아드레날린 중독증"이라는 말이 나온다. 아마, 국내 대부분의 IT기업이 해당되지 않을까 싶은데, "조직이 미친 듯이 바쁘게 움직이는 모습을 생산성이 높은 증거라고 믿는다"는 것이다.

다음이 아드레날린 중독증에 걸린 조직이 보이는 특성이다.
  1. 우선순위가 계속 변한다.
  2. 어제까지 모든 결과물이 나왔어야 했다.
  3. 시간이 언제나 부족하다.
  4. 모든 프로젝트가 긴급하다.
  5. 긴급한 프로젝트가 계속 쏟아진다.
  6. 모두가 언제나 미친듯이 바쁘다.

최근에, 멤버십에서 진행하던 과제가, 1,2,3,6번에 해당하는 것 같다. -_-;; 책에서는, 아드레날린 중독증에 걸린 조직은 계획보다 전력질주가 최선의 방법이라 믿는다고 하는데, 이는 Scrum의 스프린트와 헷갈릴 수 있겠단 생각이 든다. 익스트림 프로그래밍이나 스크럼에선, 설계나 문서보단 동작하는 코드를 우선시하고, TDD는 심지어, 테스트를 먼저 만들지 않나? Scrum은 전력질주를 추천하고 말이다. 프로젝트 관리에 대해서 얕게 알고 있는 사람들은 이 차이가 헷갈리기 너무 쉬운 것 같다. (내가 얕아서, 나만 그런가?). 이 차이를 관리자나 경영자가 오해하게 되면, 결국 개발자들을 비생산성과 비효율성과 스트레스 속으로 몰아넣고, 프로젝트를 우주로 날려버리고, 회사를 말아먹는데에 딱 좋은 것 같다.

아, 영웅에 대한 얘기도 나오는데, (이 항목을 보면서, 페어 프로그래밍과 코드리뷰의 필요성이 좀 더 강하게 느껴졌지만) 아드레날린 중독증에 걸린 조직은 병목을 일으키는 요인이 하나 이상 존재하는데, 모든 설계를 결정하는 영웅이나, 모든 요구사항을 결정하는 영웅이나, 모든 아키텍쳐 결정을 내리는 영웅이라고 한다. 영웅은 두 가지 역할을 수행하는데, 첫째는, 미미한 중생은 꿈도 못 꿀 정도로 바쁘게 보이는 역할이고, 두번째는 의사 결정 흐름을 막는 역할이라고 한다. 이는, 어떻게 보면, "결정권자의 필요성"에서 언급한 사안과는 좀 다른 듯이 보일 수도 있으나, 실은, 완전 반대의 상황이다. 결국은, "프로젝트를 안드로메다로 보내는 방법"에서 언급한 것 처럼, 책임과 권한의 적절한 배분 문제.

-- 이상한 나라의 종텐.

p.s. 이 책의 페이지가 넘어갈수록, 내 얘기 같구만 이거.

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 를 할 수도 없는데. -_- 노래가 계속 나와 ㅠㅠ

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

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

-- 이상한 나라의 종텐.


예전엔, 웹 2.0 어쩌구 저쩌구 사업을 해서 자기도 부자가 되겠다는 사람들이 넘쳐난 반면에, 요즘엔, 아이폰이나 안드로이드 마켓에서 히트를 쳐서, 부자가 되려는 꿈을 가진 사람들이 발에 채인다. 그 중에, 순진한 사람들이 정말정말 많은데..

  • 1위, 자기는 아이폰 해킹해서 쓰면서, 자기가 앱스토어에 올릴 예정인 프로그램은 많이 팔리길 기대하는 사람들. 남들도 너처럼 해킹해서 받는단다 아가야.
  • 2위, 매일매일 새로운 아이디어를 내놓지만, 아이디어 뿐인 사람들. 만들기나 해라 아가야. 마켓에 올려야 뭐가 팔리든 말든 하지?
  • 3위, 아이폰이나 안드로이드를 써본 적도 없으면서, 자기 아이디어는 대박이라고 믿는 사람들. 그런건 무료 어플도 많단다. 너 빼곤 다 쓰고 있어.

-- 이상한 나라의 종텐.


아이폰 생겼다!

2010/01/27 02:42

iphone

네이버 체크아웃 이벤트에 당첨됐다.
경품으로 받았다.
아이폰 3GS 16G.
개통했다.


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은 중앙 저장소가 필요 없는, 분산 버전 관리 시스템이잖아.

-- 이상한 나라의 종텐.


종텐닷컴 모바일 대응!!
http://jong10.com/m 으로 접속하면, 아이폰 등에 적합한 화면으로 나온다.

…이긴 한데, 사실은 티스토리에서 모바일 페이지를 지원 하더라.
블로그 주소에 /m 을 붙이면 다 되더라.
그래서, 종텐닷컴(jong10.com)에도 /m 을 붙이니깐 나오더라.

-- 이상한 나라의 종텐.


얼마전에, 구글에서 만들고 있는 오픈소스 프로그래밍 언어를 하나 발표했다.
이름하야, 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로 적당히 때워줘야 하는걸까? 흠...

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

-- 이상한 나라의 종텐.


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