토요일, 9월 28, 2013

[일상다반사] (유명 인사들로부터 배우는) 창의력이란 무엇일까?

What Is Creativity? Cultural Icons on What Ideation Is and How It Works라는 글을 읽으며 대가들의 창의력에 대해 다시 한번 되짚어봤다. 독자 여러분을 위해 흥미로운 몇 가지 내용을 번역해봤다.

모리스 센닥이 편집자에게 보낸 편지에 적힌 내용:

지식은 창의적인 열정을 동작하게 만드는 원동력이다.

빌 모이어즈의 의견:

창의력은 일상을 날카롭께 꿰뚫어 거짓말 같은 사건을 찾아낸다.

알버트 아인슈타인의 생각:

구어든 문어든 말이나 언어는 내 생각의 메커니즘에 큰 몫을 하지 못하는 듯이 보인다. 생각의 구성 요소를 이루는 듯이 보이는 물리적인 개념을 출발점으로 점점 명확한 상이 생성되며 합쳐진다.
물론 이런 구성 요소와 관련 논리 개념 사이에는 연관 관계가 존재한다. 논리적으로 연결된 개념에 도달하려는 욕구는 위에 언급한 구성 요소로 이리저리 놀아보는 감정적인 기초라는 사실도 명확하다. 하지만 심리학적인 관점에서 보면, 이런 결합 놀이는 생산적인 사고에 있어 핵심적인 특징인 듯이 보인다.

스티븐 제이 굴드와 인터뷰 내용 중:

무관하게 보이는 대상 사이에 연결점을 파악하는 특이한 굴드의 능력은 창의력의 본질에 경종을 울린다. 의심할 바 없이, 굴드는 창의력에 대한 가장 인기 있는 다방면의 정의를 원점으로 되돌렸다. 무관한 둘 사이를 효과적으로 연결한다는 아이디어가 출발점이다. 이런 연결 관계에셔 경험한 놀라움은 발걸음을 멈춰 생각하게 만든다. 이게 바로 창의력이다.

스티브 잡스의 의견:

창의력은 단순히 사물의 연결이다. 창의적인 사람들에게 어떻게 그런 일을 했느냐고 물어볼 때, 이들이 죄의식을 조금 느끼는 이유는 실제로 그런 일을 한 게 아니라 뭔가를 보았을 따름이기 때문이다. 조금 시간이 흐르면 창의적인 사람들에게는 (자신이 한 일이) 당연한 듯 느껴진다. 창의적인 사람들이 겪은 경험을 연결해 새로운 뭔가를 합성해낼 능력이 있기 때문이다. 그리고 다른 사람보다 경험에 대해 더 많이 생각했거나 더 많은 경험을 했기에 창의적인 작업을 할 수 있다. 불행히도 이는 주변에서 찾기에 아주 드문 특성이다. 우리 업계에 있는 많은 사람들은 엄청나게 다양한 경험을 하지 못했다. 따라서 연결 가능한 충분한 점이 없으며, 문제에 대해 넓은 시각이 없이 아주 선형적인 해법만 내고 끝난다. 사람의 경험에 대한 이해가 더 넓어질수록 더 좋은 디자인이 나온다.

조지 루이스의 의견:

창의력은 거의 어떤 문제도 풀 수 있다. 창의적인 행동, 타고난 버릇의 타파는 모든 것을 극복한다.

말콤 그레드웰의 의견:

창의력은 항상 우리에게 놀라움으로 다가온다. 따라서 절대로 창의력에 의존할 수 없으며, 실제로 창의력이 발현될 때까지는 감히 믿을 엄두도 내지 못한다. 다시 말해, 우리는 창의력이 발현될 필요가 확실한 성공적인 과업에 의식적으로 관여하지 못한다. 따라서, 창의적인 자원을 완벽하게 활용하려면 해당 과업의 특성을 완전히 오판해 좀더 반복적이고 단순하고 창의력을 요구하지 않는 형태로 받아들이는 방법이 필요하다. 나중에야 해당 과업에서 창의력이 필요하다고 밝혀질 것이다.

존 클리즈의 의견:

창의력은 재능이 아니다. 운영 방식이다.

자 그렇다면 여러분이 생각하는 창의력은?

EOB

화요일, 9월 24, 2013

[B급 프로그래머] git를 위한 공개 키 인증 해법 정리

윈도와 각종 *nix 환경에서 산전수전 공중전에 잠수함전까지 다 겪은 B급 프로그래머지만, 제대로 사용하기 위해 git 만큼 머리를 써야하는 환경을 아직 보지 못했다. git는 사용법도 아주 복잡하지만 설정 자체도 (과거에 비해 쉬워졌다고는 하나...) 사용법에 못지 않게 상당히 복잡하다. 오늘은 그 중에서 특히 공개 키 인증 해법을 애독자 여러분 뿐만 아니라 B급 프로그래머 본인을 위해(!) 총정리하겠다(지금 키 설정하다 잠시 길을 잃은 상황...).

가장 먼저 공개 키 인증이 무엇인지부터 간단하게 설명할 필요가 있다. 대다수 무따기(약어처럼 무작정 따라할 수 있으면 좋겠지만 SSH 관련 무따기 문서들은 잘되면 다행이지만 혹시라도 문제가 생겼을 경우 지옥으로 가는 급행 티켓이다. T_T)에서는 독자들이 여기에 대해 충분히 안다고 가정하고 넘어가는 경향이 있는데... 나중에 뒷목 잡지 않기 위해 우분투의 공식 문서인 SSH/OpenSSH/Keys를 읽어보는 편이 바람직하다. 공개 키 인증 방식은 텍스트 암호 입력을 사용한 인증 방식에 비해 훨씬 더 보안이 강화되고 편의성도 높다는 장점이 있다. 이 글에서 암호학을 설명할 의도는 없으므로 문서 중에 가장 중요한 내용만 요약해 함께 읽어보자.

With public key authentication, every computer has a public and a private "key" (a large number with particular mathematical properties). The private key is kept on the computer you log in from, while the public key is stored on the .ssh/authorized_keys file on all the computers you want to log in to.

한글로 정리하면 다음과 같다. 공개 키 인증을 위해, 컴퓨터마다 공개 키와 개인 키를 설치해야 하는데, 개인 키는 여러분이 다른 곳으로 접속할 출발지 컴퓨터에 보관해야 하고, 공개 키는 여러분이 실제 접속할 목표 컴퓨터에 보관해야 한다. 이제 한 가지 사실은 명확해졌다. git 중앙 저장소(좋은 예: github.org나 bitbucket.com)에는 반드시 여러분의 공개 키를 올려야 한다(하긴 개인 키를 만인에게 공개한다는 생각 자체가 우습긴 하지만 실수는 누구나 한다. T_T). 참고로 깃허브나 비트버킷 사이트로는 원격 셸 접속이 가능하지 않으므로 .ssh/authroized_keys에 공개 키를 저장하는 대신 관리 도구를 사용해야 한다. 잠시 후에 살펴보기로 하고... 우선 음식 재료인 공개 키와 개인 키를 만드는 방법에 집중하자.

공개 키와 개인 키는 쌍(pair)으로 존재한다. 따라서 하나를 잃어버리면... 재앙이 닥친다 새로 만들어 항상 쌍을 유지해야 한다. 공개 키와 개인 키를 만드는 방법을 간단히 설명하겠다. 리눅스를 사용하는 분들이라면 OpenSSH 패키지에 들어 있는 ssh-keygen 명령을 사용해 다음과 같이 한 방에 키 쌍을 생성할 수 있다(보안 강화를 위해 DSA 대신 RSA를 사용하자. '-t rsa' 옵션을 붙이면 된다).

$ ssh-keygen -t rsa

윈도를 사용하시는 분들이라면 putty에 들어있는 PuTTYgen(Putty Key Generator)을 떠올리실지도 모르겠는데, Msys기반 Git for Windows를 설치했다면 ssh-keygen.exe가 따라오므로 리눅스와 동일한 방식으로 공개 키와 개인 키를 생성하면 된다. ssh-keygen이 기본으로 키를 생성하는 위치는 (리눅스와 윈도 모두) 사용자 홈의 .ssh 디렉터리 아래다. id_rsa가 개인 키이며 id_rsa.pub가 공개 키라는 사실을 기억하자. 보안을 높이려면 passphrase를 입력해 개인 키 자체에 암호를 거는 방법도 있다(물론 이렇게 암호를 걸어놓으면 SSH로 접속할 때마다 암호를 물어볼 것이다. 물론 나중에 설명하겠지만 한번만 암호를 입력하면 되는 방법도 있다!). 이제 재료를 구했으니 본격적으로 요리를 시작하자.

앞서 만든 공개 키($HOME/.ssh/id_rsa.pub 또는 %HOME%\.ssh\id_rsa.pub)를 깃허브와 비트버킷에 올리자. 로컬 컴퓨터에서 적당한 편집기로 id_rsa.pub를 열어 텍스트 내용을 복사한 다음 웹 브라우저의 Key textarea 영역에 붙여넣고 저장하면 된다. 백문이 불여일견이라는 충고에 따라 그림으로 정리해봤다.


(깃허브: Title과 Key 예는 비트버킷 내용을 참조한다)

(비트버킷: 여기 나온 키는 가짜 공개 키이므로 생긴 모양새만 확인하기 바란다.)

그리고 나서... 정말 제대로 동작하는지 시험해보자. 가장 손쉬운 방법은 ssh를 사용해 직접 접속해보면 된다. 리눅스나 Msys 기반 Git for Windows가 설치된 환경이라면 다음과 같이 확인하면 된다. (주의: 직관에 반하는 이야기처럼 들리겠지만... git라는 계정을 개인 계정으로 바꾸면 안 된다.)

$ ssh -vT git@github.com
$ ssh -vT git@bitbucket.org

처음 접속할 경우 'The authenticity of host 'bitbucket.org (131.103.20.167)' can't be established." 또는 "The authenticity of host 'github.com (192.30.252.130)' can't be established."와 유사한 경고 메시지가 뜨며 RSA key fingerprint를 보여주며 접속할지 말지를 물어본다. 'yes'라 답하면 로컬 컴퓨터의 $HOME/.ssh/known_hosts나 %HOME%\.ssh\known_hosts에 공개 키가 영구적으로 등록되어 자동으로 해당 호스트를 신뢰하게 된다. 가장 마지막 부분에 주목하자. 혹시라도 다음과 같은 메시지가 나오면 키 쌍에 문제가 생긴 상황이다.

debug1: Next authentication method: publickey
debug1: Trying private key: $HOME/.ssh/identity
debug1: Offering public key: $HOME/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: Trying private key: $HOME/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

제대로 키 쌍을 맞췄는지 다시 한번 확인하고 로그를 확인하며 디버깅을 반복하자.

자 여기까지 읽었으면 기초 지식은 습득한 셈이다. '해법'이라 부르기에 너무 싱겁다고? 그렇다면... 두 가지 고급 지식을 전수해드리겠다. 만일 개인 키-공개 키 쌍이 여러 개인 경우에는 어떻게 될까? 예를 들어, 사내 리눅스 운영체제에 셸 접속을 위한 개인 키 - 공개 키 쌍과 비트버킷 접속을 위한 개인 키 - 공개 키 쌍이 다르다면? 그럴 경우에는 ssh 설정 파일을 활용하면 된다. $HOME/.ssh/config 또는 %HOME%\.ssh\config 파일을 만들고 다음 내용을 채우자. 여기서 id_rsa_bitbucket은 구분을 위해 이름을 변경한 비트버킷용 개인 키다.

Host bitbucket.org
  IdentityFile ~/.ssh/id_rsa_bitbucket

이렇게 하고 나서 ssh -vT 명령을 사용해 비트버킷 사이트에 테스트 접속하면 중간 디버깅 로그에 id_rsa_bitbucket을 사용한다는 메시지(debug1: Trying private key: $HOME/.ssh/id_rsa_bitbucket)가 나올 것이다.

마지막으로 앞서 언급했던 개인 키에 passphrase를 걸어놓아 매번 git 명령을 내릴 때마다 암호를 입력해야 하는 번거로운 상황을 피하려면 어떻게 해야 할까? 리눅스나 맥OS X이라면 OpenSSH 패키지에 들어 있는 인증 에이전트를 사용하면 된다. '$ ssh-agent /bin/bash; ssh-add ~/.ssh/id_rsa/id_rsa_bitbucket'라는 명령을 내리면 ssh-agent가 id_rsa_bitbucket 개인 키에 대한 암호를 기억해 클라이언트에 (사람) 대신 자동으로 입력해준다. 그렇다면 윈도는? 다행히 누군가 이미 해법을 만들어 놓았다. $HOME/.bashrc라는 파일을 만들고(눈치 빠른 독자들이라면 bashrc 셸 초기화 스크립트는 윈도 명령 프롬프트에서 동작하지 않는다는 사실을 지적할 것이다. 잠시 뒤에 이에 대한 다른 해법을 소개할테니 조금만 참고 기다리자) 다음 내용을 입력하자. 앞서 나온 id_rsa_bitbucket 개인 키에 passphrase를 걸어놓았다면 다음 내용 중간에 나오듯 '/usr/bin/ssh-add ~/.ssh/id_rsa_bitbucket'처럼 명시적으로 개인 키 이름을 설정해야 한다.

SSH_ENV=$HOME/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    /usr/bin/ssh-add ~/.ssh/id_rsa_bitbucket
}

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

git 패키지에 들어있는 git bash를 수행하면 다음과 같은 문구가 나오며 passphrase 입력을 1회 요청한다.

Initializing new SSH agent...
succeeded
Enter passphrase for $HOME/.ssh/id_rsa_bitbucket:
Identity added: $HOME/.ssh/id_rsa_bitbucket ($HOME/.ssh/id_rsa_bitbucket)

입력을 끝내고 나면 identity가 추가되었다는 문구가 출력된다. 다음 명령을 내려 제대로 인증 정보가 들어갔는지 확인하자.

$ ssh-add -l

git bash에서 ssh 명령을 내리면 passphrase가 걸려 있는 개인 키인 경우에도 암호 입력 없이 접속에 성공할 것이다.

$ ssh -vT git@bitbucket.org

혹시 윈도 환경에서 Source Tree 등을 사용하거나 git bash 이외 윈도 명령 프롬프트나 명령 프롬프트 대체품인 ckw을 사용한다면 PuTTY 패키지의 Pageant를 활용하는 방법도 생각해봐야 한다. Pageant는 ppk 형식의 키만 사용 가능하므로, 먼저 PuTTY 패키지의 Puttygen을 사용해 RSA 개인 키를 ppk로 변환하고 나서('Conversions' 메뉴에서 'Import key'를 선택하고 파일 선택 대화 상자가 나오면 개인 키인 id_rsa_bitbucket 파일을 선택하고 passphrase를 입력하면 키를 로드한다. 화면 상단에서 개인 키가 맞는지 확인한 다음 'Save the generated key' 항목의 [Save private key] 버튼을 눌러 적당한 이름을 붙인 ppk 개인 키로 저장하면 된다) Pageant를 띄운 다음 변환된 개인 키를 등록하면 된다.

준비가 끝나면 GIT_SSH 환경 변수를 설정하자. 참고로 Putty 다운로드 페이지에서 Windows Installer 버전을 받으면 Putty, Puttygen, Plink, Pageant를 한번에 설치할 수 있다. 다음과 같이 명령 프롬프트에서 plink 설치 경로를 GIT_SSH 환경 변수에 설정하기 바라며, 윈도 고급 시스템 설정에도 해당 환경 변수를 추가하면 더욱 간편하게 사용할 수 있다.

C:\> set GIT_SSH=C:\Program Files (x86)\PuTTY\plink.exe

아쉽게도 git 패키지에 들어있는 ssh 명령은 GIT_SSH 환경 변수를 인지해 passphrase를 자동으로 입력받지 못하므로 ssh 명령 자동화가 필요한 경우 git bash를 사용하기 바란다.

이 정도 내용이면 윈도/리눅스/맥OS X 환경에서 git 공개 키 인증 설정에 별다른 무리가 없으리라 본다. 혹시 빠진 내용이 있으면 댓글에 달아주면 감사하겠다.

EOB

토요일, 9월 21, 2013

[B급 프로그래머] 2013년 9월 3주 소식 정리

격주(1, 3주)로 프로그래머들에게 도움이 될만한 소식을 간단하게 정리하는 컬럼을 연재하기로 마음 먹었다. 컬럼 반응이 좋으면 기획/관리자들에게 도움이 될만한 각종 소식도 정리해볼 예정이다.

  • libPhenom: 페이스북에서 사용하는 C 라이브러리로 고성능/고확장성을 위한 이벤트 프레임워크를 제공한다. 요즘 주로 자바나 루비와 같은 프로그래밍 언어를 위한 프레임워크 공개가 유행처럼 되어 있는데, 간만에 C로 나온 버전을 보니 무척 반가웠다. 리눅스와 MacOS를 지원하며, 카운터를 사용한 메모리 관리, 스케줄러, 스트리밍 I/O, 유용한 자료 구조(해시 테이블, 리스트, 큐), JSON 파서 등을 포함한다. 라이선스는 아파치 2.0이다.
  • The MySQL Ecosystem at Scale: 최근 구글이 MySQL을 MariaDB로 이전한다는 소식이 화제가 되었는데, 이와 관련한 발표 자료다. MySQL 에코 시스템을 간략하게 정리하고 있다.
  • PostgreSQL 9.3 released!: PostgreSQL 버전 9.3이 발표되었다는 소식이다. MySQL에 비해 열세였던 복제 기능이 'carrier grade' 수준으로 강화되었다고 하는데, 분석해봐야겠다.
  • Infinitest: 이클립스와 IntellJ를 위한 지속적인 테스팅 플러그인이다. 소스 코드에 변경이 가해지면 자동으로 테스트를 돌려준다(일일이 수동으로 테스트를 수행할 필요가 없다!).
  • TOP GITHUB LANGUAGES FOR 2013(8월말 기준): 2013년도에 github에서 가장 인기 있는 프로그래밍 언어를 조사한 결과인데, #1은 자바스크립트, #2는 루비, #3는 자바, #4는 PHP, #5는 파이썬, #6는 C, #7은 C++, #8은 오브젝티브 C, #9은 C#, #10은 무려 셸이다.
  • AWS Console for iOS/Android Now Supports ELB, RDS: AWS 콘솔 앱이 iOS와 안드로이드 버전으로 출시되었다. 아쉽게도 아이패드(HD)용으로는 출시되지 않았다. 참고로 AWS 명령행 인터페이스도 최근 GA 버전으로 업그레이드 되었다. Announcing AWS Command Line Interface - General Availability를 참고하기 바란다. 아마존에서 정식 버전이 나오기 훨씬 전에 루비로 AWS 콘솔 기능을 개발괴발 구현한 적이 있는데 기회가 되면 API 동작 방식 등을 설명해드리겠다.

그러면 따끈한 소식을 정리해 10월 1주에 찾아뵙도록 하겠다.

EOB

화요일, 9월 17, 2013

[일상다반사] 쑥쑥오름교실과 클래스캐스트

지난번 소개드린 우리 집 네트워크 입문&활용을 집필한 신재훈님께서 이번에 쑥쑥오름교실이라는 교육용 사이트를 만들었다는 기쁜 소식을 접했다. 그래서 여러분들께 간략하게 소개드리려 한다.

쑥쑥오름교실은 초등학교 5/6학년 과학 수업을 위한 온라인 공개 수업 웹 사이트로 클래스캐스트라는 루비온레일즈로 만들어진 오픈소스를 기반으로 구축되어있다. 신재훈님은 현직 초등학교 교사로서 직접 MOOC를 접해 프로그래밍 언어 강의를 성공적으로 수강하고 여기서 배운 루비를 사용해 국내 실정에 맞는 사이트를 개통했다고 소감을 밝히셨는데, 정말 대단하다는 생각이 든다(2013년 상반기 동안 B급 프로그래머는 뭐했지? T_T). 물론 기반 소프트웨어도 중요하지만 컨텐츠가 더욱 중요하기에 뜻있는 분들께서 클래스캐스트를 활용해 다양한 수업 교재를 만들어내면 정말 좋겠다는 생각을 해본다.

지난번 소개드린 The Architecture of Open Source Applications Volume II에서도 PHP로 만든 교육용 소프트웨어인 Moodle을 설명하고 있는데, 이미 한국에서도 한국무들사용자모임이 결성되어 여러 학교에서 시험적으로 온라인 강좌를 도입하는 상황이다. 또한 구글도 MOOC에 관심을 보여 EdX와 제휴한다는 소식도 있다. 구글이 직접 뛰어들어 온라인 교육에 필요한 여러 가지 기술을 지원해주겠다고 하니 바야흐로 온라인 교육이 서서히 주류로 자리잡고 있다는 느낌이 든다.

여전히 오프라인을 기반으로 하는 전통적인 대학교 학위가 중요시되는 대한민국에서 '사이버 대학교'를 넘어 온라인 교육 시스템의 영향력이 과연 얼마나 될지는 갸늠하기 어렵지만 세상이 바뀌고 있다는 사실 하나는 분명하다. 학생숫자가 줄어들고 점점 학교(특히 대학)에서 가르치는 내용이 사회와 괴리될 가능성이 높은 현 시점에서 온라인 교육 시스템의 기반 구조가 튼튼하게 갖춰지고 있다는 현실은 시사하는 바가 크다. 지식 전달 체계가 구술에서 텍스트로 바뀌는 만큼이나 강력한 영향력을 미칠지(아쉽게도 멀티미디어는 텍스트만큼의 영향력을 미치지 못했다. 물론 대한민국에서는 '인강'이라는 아주 특수한 형태로 상업적으로도 대박을 치긴 했지만...), 아니면 찻잔속 태풍으로 끝날지 지켜볼 필요가 있겠다. 인터넷 앞에서 전통적인 어학 사전이나 백과 사전 업체들이 무릎을 꿇었듯이 과연 기존 교육 체계가 백기를 들지 타협을 할지 아니면 계속 살아남을지 무척 궁금해진다.

EOB

토요일, 9월 14, 2013

[독서광] 사라진 실패

한동안 경제/경영 블로그 답지 않게 컴퓨터랑 소설 이야기만 잔뜩 늘어놓았기에 더위 먹은 거 아니냐는 독자 여러분들의 걱정아닌 걱정을 불식하기 위해 오늘은 정말 간만에 '경영' 책 한 권을 소개하려 한다. 오늘 주인공은 트위터에 올라온 책 소개에 '실패'라는 단어가 보이자마자 바로 구매를 해버리고 잽싸게 읽은 '사라진 실패'다.

한국에서 정말로 금기시 되는 단어 중 하나는 '실패'다. 실패도 최종적으로는 성공으로 이어지는 스토리텔링 기법을 발휘하지 않는 이상 책이고 강연이고 나발이고 절대 언급되면 안 될 강력한 금칙어다. 누구나 '실패를 묻어버리는 바람에 '성공담'이 판을 치며 모두 성공으로 가는 열차에 한 자리를 차지하고 싶어 야단법썩이다. 얄팍한 자기타인 계발서도 알고보면 '개인의 성공'을 담보하는 티켓으로 포장된다. 하지만 성공한 기업과 사람의 특징을 그대로 분석해 자신에게 적용해봐야 성공할 가능성은 지극히 낮다. 차라리 실패한 기업과 사람의 경험을 곱씹고 이를 회피하는 편이 성공할 가능성을 높여준다는 생각까지 들곤 한다.

이 책을 손에 쥐지마자 가장 먼저 한 작업은 바로 '삼성'과 'LG'의 스마트폰 시나리오의 분석이었다. 이유는 간단하다. 내가 잘 아는 분야니까. 그런데 놀랍게도 다소 무미건조하다고 느껴질만큼 중립적인 어조에 숨어있는 분석 능력이 무릎을 탁 치게 만들었다. 이거 정말 대단한 물건인데? 계속해서 르노삼성, 한화, 웅진, 오리온, 농심, 신한금융지주, 현대그룹, 금호아시아나, NHN(!), 신세계, 하이트 순으로 각 기업들이 실패(?)한 이유를 쉬지 않고 읽어내려갔다. 물론 이 책에서 다루는 일부 기업이 실패했다고 인정하지 않는 분들도 많겠지만(신한금융지주, NHN, 삼성이 실패했다고 말하면 술자리에서 왕따 당하기 딱 쉽다. 이게 현실이다. T_T), '실패'가 무엇을 의미하느냐에 따라 사실상 실패했다고 볼 수도 있다는 생각이 들었다.

경제/경영에 나름 관심이 많아 언론에서 실패한 기업들의 분석 기사가 나올 때마다 눈여겨 봤지만, 이 책에 제시하는 내용만큼 '실패'라는 큰 맥락을 깔고 종합적으로 실패(?)한 원인과 추이를 꼼꼼한 사례를 들어 분석하는 탐사 보도는 본 적이 없다고 감히 단언할 수 있다(만일 대한민국 기업의 '실패'를 탐사하는 좋은 기사가 있다면 혼자 보지 마시고 다 같이 공유합시다). 이 책은 "대한민국을 먹여살리고 국위를 선양하는 대기업 만만세"(오른쪽)나 "재벌은 사회악이다"(왼쪽)라는 주제가 아닌 기업 경영 전략에 초점을 맞추기 때문에 살아있는 경영과 경제 교과서('교과서'라니까 최근 여기저기 인터넷에서 자료를 짜집기하다 딱 걸린 모 출판사 책이 생각났다... T_T)라 불러도 무방할 듯이 보인다.

결론: 2013년도 경제/경영 분야 #1 도서로 강력하게 추천한다. 꼼꼼하고 디테일한 스토리텔링에 그야말로 화들짝 놀랄 것이다.

뱀다리: 그러고보니 예전에 번역한 초난감 기업의 조건 : IBM에서 마이크로소프트와 구글까지, 초우량 기업을 망친 최악의 마케팅이 불현듯 생각났다. 만일 '사라진 실패'가 재미있다면 IT 분야에서 초특급 삽질을 디테일하며 웃프게(?) 분석하는 '초난감 기업의 조건'도 한번 읽어보시기 바란다.

화요일, 9월 10, 2013

[독서광] 블레이베르크 프로젝트

최근에 블로그에 어려운 이야기와 전문서만 소개하다보니 이를 안타깝게(응?) 여긴 느낌이 있는 책 편집장님께서 소설을 한 권 보내주셨다. 덕분에 머리 아픈 일상에서 잠시 벗어나 출퇴근 시간을 즐길 수 있었기에(책에 빠져 출근길 지하철 역 지나친 이야기는 너무 식상해 다시 소개하지 않겠다. T_T). 감사하다는 말씀을 전해드린다. 오늘 소개드릴 책은 블레이베르크 프로젝트라는 스릴러 소설이다.

이 책은 스파이/첩보 요원이 등장하는 전형적인 헐리우드식 전개 방식을 따르고 있다. 마치 영화 시나리오를 염두에 둔 듯 각 장면은 짧지만 매끄럽게 이어지고, 결론을 향해 조금씩 독자들에게 힌트(아니면 떡밥)을 뿌리며 현재와 과거 회상이 교차되며 다양한 인물들이 정교하게 연결된다. 그리고 그 와중에 치명적인 사고를 저질러 자포자기 상태인 우리의 주인공이 풍전등화와 같은 상태에서 정신을 차리고, 주인공과 함께 사건 해결에 나선 첩보 요원들은 보이지 않은 암흑 세력의 핵심에 한걸음씩 다가선다. 군더더기 없이(이 책에 사족이란 없다) 사건이 초고속(!)으로 전개되는 특성으로 인해 일단 책을 손에 쥐면 뒷 이야기가 궁금해 놓기가 어려울 것이다.

줄거리는 일부러 생략했으며(조금이라도 소개하려 생각했지만... 바로 스포일러로 돌변할 가능성이 너무 높아 지웠다. T_T), 뒷 이야기를 해보자면... 책이 조금 친절해서(응?) B급 프로그래머는 중반 이전까지 나오는 단서를 토대로 미리 뒷 이야기를 어느 정도 추론할 수 있었다. 물론 그렇다고 해도 정말 추론이 맞는지 확인하는 재미가 나름 쏠쏠하니 나쁘지는 않았다. (솔직히 요즘 이리저리 너무 꼬아놓고 어깨 힘주는 책과 영화가 많아서...) 일반 독자층을 배려한 저자의 의도라고 보여진다. 또한 적들을 고민하지 않고 아주 쉽게 죽이므로 너무 손쉽게 일을 풀어가는 것이 아니냐는 생각이 들긴 했지만(우리를 쫓는 하수인들은 아무 정보도 모르니 살려서 족쳐봐야 도움이 안 된다는... 변명이 나오긴 한다.), 복잡한 두뇌 싸움의 대명사인 '형사 콜롬보'의 전개 방식을 따를 생각이 없는 책이므로 용서해주기로 했다. ㅋㅋ

결론: 빠른 전개에 약간의 머리 싸움에 적절한 긴장감을 맛보며 잠시 세상만사 잊어버리고 싶은 독자들에게 가벼운 마음으로 이 책을 추천한다. 단, 인생의 비밀이나 교훈, 엄청난 감동을 얻으려는 심각한 독자에게는 추천하지 않는다.

EOB

토요일, 9월 07, 2013

[독서광] Database Programming with JDBC & Java, 2nd Edition

지난번에 [독서광] 마이바티스 프로그래밍을 소개하면서 엄청난 중복/반복 코딩으로 악명 높은 JDBC를 언급했었다. 요즘 나온 강력한 라이브러리와 프레임워크이 있는 상황에서 구닥다리 JDBC를 알아야 할 필요가 있을까? 정답은 '그렇다'. 1) 메모리 크기와 성능 문제로 인해 직접 JDBC를 사용해야 하는 경우, 2) 저수준 접근(예: 데이터베이스의 카탈로그 정보 입수)이 필요한 경우, 3) 직접 라이브러리와 프레임워크를 제작하는 경우가 대표적인 JDBC 용례로 볼 수 있겠다. 그렇다면 JDBC는 어디서부터 출발하면 좋을까? 오라클에서 제공하는 JDBC 튜토리얼부터 시작해 Getting Started with the JDBC API로 넘어가면 되지만 활자화된 책에 비해 아쉬운 점이 많다. 이럴 때 바로 오늘 소개하는 책인 Database Programming with JDBC & Java, 2nd Edition를 읽으면 된다.

이 책은 크게 세 부분으로 나뉘어진다. 첫째 부분은 JDBC 기초와 프로그래밍 방법, 둘째 부분은 JDBC를 활용한 데이터베이스 아키텍처 수립과 응용 방안, 셋째 부분은 JDBC 레퍼런스다. 대부분 개발자들은 첫째 부분을 읽고 셋째 부분은 책 대신 온라인에서 Java™ JDBC API를 찾아보면 될 것 같다. 역사적으로 어떻게 JDBC를 사용해 아키텍처를 잡고 프로그램을 작성했는지 궁금한 독자라면 둘째 부분을 선택적으로 읽으면 된다.

하지만 이 책이 나온지 조금 오래된 관계로 인해 본문에 나오는 프로그래밍 예제와 아키텍처 전개 방식이 상당히 구식(old-fashioned)으로 느껴질지도 모르겠다. 따라서, 이 책에 나온 스타일과 방식이 현대적인 개발 관례와 잦은 충돌을 일으킨다는 사실을 인지하고 읽어야 한다. 특히 코드 작성 기법(변수 작명, 프로그램 구조, 주석다는 방식, API 설계 방식 등등) 관점에서 이 책을 그대로 따르면 안 된다는 사실을 다시 한번 강조하고 넘어간다. 어떻게 보면 그 만큼 자바 프로그래밍 기법과 기술이 많이 발전했다는 사실을 반증한다는 생각이다. 그리고 옛날 JDK를 사용하므로 최신 JDK 5 이상을 사용할 경우 여러 가지 면에서 이익을 얻을 수 있다는 사실도 기억하자(참고로 이 책은 JDK 1.2를 기준으로 한다). 다행스럽게도 JDBC 자체는 획기적인 변화가 없었으므로 이 책을 읽고 나서 위에 소개한 JDBC API 문서를 읽으면 어렵지 않게 보충이 가능하다.

마지막으로 주의 사항 하나만 더 소개하겠다. 이 책은 데이터베이스로 오라클을 기준으로 설명하고 있으므로, MySQL을 사용할 경우 MySQL Connector/J Developer's Guide를 읽어 MySQL과 관련된 내용을 숙지할 필요가 있다. 특히 MySQL 드라이버 로드, MySQL과 연결 방법, MySQL과 자바 데이터 타입 연관 내용은 제대로 숙지하고 있어야 뒷탈이 없을 것이다.

결론: JDBC에 대한 기초 서적으로 가볍게 읽어보면 좋을 것 같다.

EOB

화요일, 9월 03, 2013

[독서광] 그리스인 조르바

지난번 야후! 블로그 복원 프로젝트(?)를 시작한다고 말씀드렸는데, 게으름으로 인해 차일피일 미루다 오늘 드디어 2번 타자를 소개드리려 한다. 바로 동명의 영화로도 유명한 '그리스인 조르바'다! 워낙 유명한 소설이니 여기서 다시 한번 소개할 필요가 있을까 하고 잠시 고민하다가, 그래도 명작은 함께 읽어야 제맛이라는 생각이 들어 기억을 되살려본다.

그리스인 조르바는 펜 대만 굴리던 젊은 그리스 지식인이 자유로운 영혼(!)인 조르바를 만나 함께 지낸 시절을 그리고 있다. 조르바는 요즘 고귀한 지식인(조르바 표현을 빌면 '펜대 굴리는 운전사') 입장에서 보면 자기 맘대로 기분 내키는대로 행동하며, 우리를 억누르고 있는 관습, 종교, 도덕의 지배를 받지않으며, 하루하루를 자기 마음 내키는 대로 삶을 즐긴다. 하지만 그렇다고 해서 조르바는 막되먹은 망나니가 결코 아니다. 조르바는 (마약을 하지 않고서도) 모든 사물에서 매번 새로운 면을 찾을 수 있고, (개똥철학이지만) 분명히 나름대로 이 세상 돌아가는 이치를 알고 있으며, (겉으로는 막되먹은 듯이 굴지만) 사람에 대한 애정으로 가득찬, 산투리를 연주하며 춤을 추면서 자신의 내면을 거리낌없이 표현하기에 한마디로 _난_ 사람임에 틀림없다.

이 책의 백미는 바로 조르바가 '나'에게 춤을 가르쳐주는 대목이다. 모든 것을 잃은 주인공이 자포자기 상태에서 벗어나 '자유의 여신'을 영접하는 장면은 두고 두고 기억이 남을 것 같다.

조르바의 통쾌한 어록을 몇 가지 정리해보겠다.

결혼 말인가요? 공식적으로는 한 번 했지요. 비공식적으로는 천 번, 아니 3천 번쯤 될 거요. 정확하게는 몇 번인지 내가 어떻게 알아요? 수탉이 장부 가지고 다니는 거 봤어요?
두목, 당신의 그 많은 책 쌓아 놓고 불이나 싸질러 버리시구랴. 그러면 알아요? 혹 인간이 될지?
확대경으로 보면 물속에 벌레가 우굴우굴한대요. 자, 갈증을 참을 거요, 아니면 확대경 확 부숴 버리고 물을 마시겠소?
인생의 신비를 사는 사람들에게는 (책 쓸) 시간이 없고, (책 쓸) 시간이 있는 사람들은 살 줄을 몰라요.

결론: 포도주 한 잔과 정말 잘 어울리는 이 책은 기운이 빠져서 비실거릴 때마다 삶에 대한 용기를 북돋아줄 것이다.

EOB