토요일, 2월 21, 2015

[B급 프로그래머] 2월 3주 소식

설 연휴 모두 잘 보내고 계신지? 2월 3주 소식을 정리해보았다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 2월 14, 2015

[일상다반사] (풀 스택 엔지니어로 이끌어주는) MEAN 스택을 사용한 모던 웹 개발 입문

지난번 일래스틱서치 관련 서적 출간 소식을 전한지도 한참 지난 느낌이다. 오늘은 요즘 관심이 집중되고 있는 풀 스택 엔지니어를 위한 멋진 도구인 MEAN(MongoDB, Express, AngularJS, Node.js) 스택 관련 번역서인 'MEAN 스택을 사용한 모던 웹 개발 입문'을 소개드린다. 현재 Yes 24에서 절찬 예약 판매 중이며, 내주 출간 예정이지만 설 연휴가 겹쳐 배송이 조금 지연되고 있다는 점을 양해해주시기 바란다.

이 책은 얇은 책 한 권에 MEAN 스택을 사용한 개발에 필요한 거의 모든 내용이 담겨 있기 때문에 늘 바쁜 업무로 인해 시간에 쫓기는 국내 개발자들이 부담없이 접근할 수 있다는 특징이 있다. 목차를 보면 알겠지만, 익스프레스를 사용한 노드 API 서버 구축(CRUD 중심), 바우어를 사용한 프론트엔드 의존성 관리와 AngularJS 앱 제작, 걸프를 사용한 빌드 자동화, 웹소켓을 사용한 푸시 통지, 종단간 테스트, 노드 서버 테스트, AngularJS 테스트에 이르기까지 풀 스택 엔지니어를 이끌어주는 주제를 망라하고 있다. 게다가 현업 Devops 개발자를 위해 PaaS 서버인 허로쿠와 (국내 개발자들 사이에 뜨고 있는) 디지털 오션에 배포하고 확장성을 높이는 방법까지 소개한다. 일단 이 책 한 권이면 MEAN을 맛보기에 전혀 무리가 없다는 생각이다. 물론 개별 주제에 대한 세부 지식이 필요할 경우 시중에 번역서와 저서가 꾸준하게 나오고 있으므로 부족한 부분을 채워나가면 된다.

저자가 상당히 꼼꼼하므로 깃허브 dickeyxxx/mean-sample에 본문에 나오는 모든 예제를 장별로 브랜치를 따서 제공하고(상당히 신선한 시도였다), 아예 허로쿠에 최종 예제를 배포했기에 책을 읽기 전에 미리 예습(?)하고 책을 읽으면서 복습할 수 있게 도와준다.

출간 기념으로 독자 여러분들께 드릴 선물을 하나 준비했다. 지난번 클린코드 복간 기념 발표 자료에 엄청난 성원을 보내주신 독자 여러분들께 다시 한번 감사하는 의미에서 지난 KELP 세미나 때 'MEAN 스택을 사용한 IoT 개발'이라는 주제로 발표한 자료를 슬라이드 셰어에 올려 공유해드린다. 올 겨울 4회에 걸친 숙명여자대학교/서일대학교 특강에서도 세미나 교재로 사용한 이 자료는 MEAN 설명과 함께 MEAN 스택을 사용해 최소한의 CRUD RESTful API 서버와 AngularJS 관리 프로그램을 만드는 예제(node-collector와 angular-lamp-app 참조)까지 제공하므로 오늘 소개하는 번역서와 더불어 함께 읽어보면 MEAN 입문에 많은 도움이 될 것이다.

그리고 보너스 소식 한 가지 더! 팩트 출판사에서 나온 'MEAN Web Development' 서적도 지금 한창 번역을 진행 중이므로 조만간 독자 여러분을 찾아뵐 예정이다. 'MEAN 스택을 사용한 모던 웹 개발 입문'을 읽고 나서 MEAN에 대해 더 깊은 내용을 알고 싶은 독자에게 적합하므로 기대하셔도 좋다(아마존 별 넷 반!).

아무쪼록 2015년 한 해도 많은 성원 부탁드리겠다. 설 연휴 모두 즐겁게 보내시기를 기원한다.

EOB

[일상다반사] FALinux' Docker 의 원리 해부' 세미나 소개

작년부터 Docker에 대한 관심이 집중되고 있다. 클라우드의 열풍이 불면서 가상화 기술이 상당한 인기를 끌고 난 다음이라 새롭게 등장한 Docker에 대한 차별성이 무엇인지에 대한 궁금증도 더불어 커지고 있다.

Docker를 간단하게 설명하자면 애플리케이션 빌드, 배포, 실행을 위한 개발자와 시스템 관리자를 위한 개방형 플랫폼이다. Docker는 게스트 운영체제와 운영체제 구동을 위한 바이너리/라이브러리를 모두 포함하는 가상 기계와는 달리 단지 실제 필요한 애플리케이션과 라이브러리만 포함한다. 컨테이너 기술을 사용해 호스트 운영체제의 사용자 영역에서 격리된 프로세스 형태로 구동하며, 다른 컨테이너와 커널을 공유한다. 따라서 가상 기계의 자원 격리와 할당이라는 장점을 누리면서도 이동성과 효율성을 보장하므로 두 마리 토끼를 모두 잡는 효과가 있다.

What is Docker?에서 가져옴)

Docker가 개발자와 시스템 관리자 모두에게 인기를 끄는 이유는 완전히 이동한 앱을 어디서나 실행 가능하게 만들어 배포할 수 있기 때문이다. 개발자는 Docker Hub에 올라온 13,000 가지가 넘는 앱 중 하나로 시작할 수 있으며, 시스템 관리자는 개발자가 만든 앱이 동작하는 환경을 쉽게 이해하고 적극적으로 제어할 수 있다. 표준화된 개발/배포 환경을 제공하기 때문에 개발/테스트/운영 환경의 간극을 좁힐 수 있다. 게다가 베어메탈은 물론이고 사설/공개 클라우드 위에서 자유롭게 사용 가능한 Docker의 경량화된 런타임 엔진 덕분에 요구에 대응해 빠른 확장이 가능하다.

그렇다면 Docker의 동작 원리는 어떨까? 일반적인 경우라면 내부 구조까지 속속들이 알고 있을 필요는 없지만 별도의 가상화나 반가상화 기술을 사용하지 않고 커널 위에서 동작하기 때문에 Docker를 제대로 활용하기 위해서는 커널의 어떤 특성을 십분 활용하는지 탐험할 필요가 있다. 이에 개발자와 관리자 여러분을 위해 Docker의 원리를 커널 저장소, 커널 이름공간, 커널 컨트롤그룹, 커널 네트워크라는 네 가지 측면에서 해부하는 FALinux 2015년 첫 공개 세미나 소식을 접했다.

Docker 자체에 대한 관심 많은 개발자, Docker를 한 단계 더 높은 수준으로 활용하고 싶은 개발자, 단순 시스템 관리를 떠나 Devops에 관심이 많은 시스템 관리자라면 이번 세미나를 통해 Docker에 대한 이해 수준을 한 단계 더 높일 수 있으리라 기대한다.

행사 소개 내용은 다음과 같으며, FALinux 세미나 소개 페이지에서에서 등록 가능하다.

Docker가 무엇이며 동작 원리를 파악했다면 직접 실무에 적용할 일만 남았다. 아무쪼록 Docker를 활용해 개발과 서비스 생산성을 높여 기업과 개인의 경쟁력을 한층 더 강화하는 데 많은 도움이 되면 좋겠다.

EOB

토요일, 2월 07, 2015

[B급 프로그래머] 2월 1주 소식

오늘은 흥미로운 읽을거리를 잔뜩 정리해보았다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 1월 31, 2015

[독서광] Node Web Development 한국어판

오늘은 노드 관련 서적 한 권을 소개하려 한다. 2011년 말에 출간되었기에 철이 지났을지도 모르는 책을 굳이 먼지를 털어가며 소개하려는 이유는 이 책 서술 방식이 흥미롭기 때문이다.

'웹 개발 플랫폼 노드 프로그래밍'이라는 부제가 붙은 'Node Web Development 한국어판'은 노드를 사용한 웹 개발 방법을 설명하고 있다. 딱 여기까지 소개 글을 읽고 나서 책 내용을 한번 상상해보면, 노드 역사, NPM 소개, 익스프레스 소개, 템플릿 소개, socket.io 소개, 단위 테스트 소개와 같은 목차가 머리 속에 그려질텐데, 이 책은 아주 흥미로운 접근 방식을 택하고 있으며, "노드로 웹 서버를 한번 만들어보면 어떨까?"라는 질문에 대한 해법을 단계별로 풀어간다.

일단 노드와 NPN 소개까지는 일반적인 방식을 택하고 있는데, 그 다음부터 일반적인 노드 서적의 정도에서 벗어나기 시작한다. 가장 먼저 간단한 애플리케이션을 만들어 본다. 그리고 나서 미들웨어를 위한 기반 구조인 커넥트(Connect)를 사용해 재구현하는 동시에 확장해본다. 그 다음에 커넥트 위에 만들어진 미들웨어인 익스프레스를 사용해 재구현하는 동시에 확장해본다. 그리고 나서 비동기식 프로그래밍 기법과 이벤트 처리 기법을 설명한다. 마지막으로 여기까지 배운 지식을 합쳐 간단한(하지만 필요한 필수 기능은 제공하는) 웹 서버를 노드로 처음부터 구현하면서(NPM 정적 웹 서버 모듈을 설치하고 나서 10줄짜리 웹 서버를 만드는 만행은 저지르지 않는다) 노드의 내부에서 일어나는 동작을 엿볼 수 있게 쏠쏠한 힌트를 제공한다. 아, 물론 웹 서버 프로토콜과 동작 방식 기초가 있어야 이 책을 흥미롭게 읽을 수 있다는 사실을 잊어서는 곤란하겠다.

요렇게 마무리하면 독자들이 멘붕을 일으킬 가능성이 높다는 사실을 알았는지, 6장에서는 sqlite3와 몽고DB를 사용한 영속적인 데이터베이스 저장 기법을 설명하고 사용자 인증 정보를 영속적으로 보관하는(이렇게 해야 노드 서버의 수평 확장이 가능해진다) 방법을 소개하며 마무리를 짓는다. 원서는 2판이 2013년에 나왔는데 아직 번역서는 안 나왔기 때문에 독자 여러분께 힌트를 주자면, 원서 2판에는 socket.io, 다중 사용자 지원과 다중 호스트 배포 방식, 단위 테스트 방법이 추가되었다. 큰 틀은 바뀌지 않았을지 모르지만 어느 정도 독자 요구에 맞춰 내용이 변경되었음을 알 수 있다.

결론: 노드를 사용해 블로그를 만들고, 트위터 타임라인을 만들고, 채팅을 만드는 실질적인 예제를 소개하는 대신 이런 기본을 파고드는 서술 방식에 대해 호불호가 확실하게 갈릴 가능성이 높다. 하지만 종종 이런 독자의 허를 찌르는 다소 변칙적인 책도 한 권 정도는 있어야 하지 않을까?

EOB

토요일, 1월 24, 2015

[B급 프로그래머] 1월 3주 소식

벌써 2015라는 숫자에 익숙해진 느낌이 든다. 오늘은 1월 3주 소식을 정리해 전해드리겠다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 1월 17, 2015

[B급 프로그래머] IOTivity(OIC) vs AllJoyn(AllSeen Alliance)

2015년 CES에 출품된 제품들을 보면 알겠지만, IoT(Internet of Things)가 대세로 자리잡은 듯이 보인다. 범람하는 IoT 기술이 오히려 시장에 혼란을 주기 때문에 OIC(Open Interconnection Consortium)AllSeen Alliance가 결성되어 IoT 표준화 작업을 진행 중이다.

단순히 표준 문서만 작성하는 데서 벗어나, 올신 얼라이언스가 먼저 AllJoyn을 공개했고, 이어서 OIC도 IOTivity라는 프레임워크를 공개했다.

간략하게 두 프레임워크의 특성을 소개하겠다.

IOTivity는 개발자가 IoT 애플리케이션을 개발하는 과정에서 필요한 여러 가지 API를 제공하며, 다양한 운영체제(현재 리눅스, 아두이노, 타이젠)를 지원한다. API는 RESTful 방식으로 되어 있으며, 다음 네 가지 빌딩 블록을 제공한다.

  1. 발견: 근접해 있거나 원격에 있는 장비와 자원을 탐색하는 여러 메커니즘을 지원
  2. 데이터 전송: 메시지와 스트림 모델 기반으로 정보 교환과 컨트롤 지원
  3. 데이터 관리: 다양한 자원으로부터 얻은 데이터를 수집하고 저장하고 분석하는 기능 지원
  4. 장비 관리: 구성, 권한 설정, 진단 지원

AllJoyn은 근처에 있는 장비를 발견하고, 브랜드/범주/전송/운영체제와 무관하게 각각에 대한 통신이 가능한 애플리케이션을 개발하는 과정을 쉽게 해주는 프레임워크다. 물리적인 전송의 세부 사항을 추상화하며, 사용하기 쉬운 API를 제공한다. 임베디드 RTOS 운영체제부터 상용 운영체제에 이르기까지 다양한 플랫폼 위에서 동작하며, 여러 언어를 제공한다.

AllJoyn은 전송(네트워크)을 담당하는 코어 프레임워크(Core Framework)와 실제 장비의 서비스를 개발하는 기본 서비스(Base Service) 또는 데이터 주도 API(Data-Driven API)로 구성된다. 애플리케이션 개발자 입장에서는 코어 프레임워크 위에 구성된 서비스 프레임워크를 사용하거나 데이터 주도 API를 사용할 수 있다. 서비스 프레임워크가 제공하는 기본 서비스는 다음과 같다.

  • 연결: 새 장비를 와이파이 네트워크에 붙이는 일관성 있는 방식 제공
  • 구성: 애플리케이션/장비의 특정 속성을 구성
  • 통지: AllJoyn 네트워크 상에서 장비가 텍스트 기반 통지를 송수신하게 허용. 또한 URL을 사용한 오디오와 이미지 지원
  • 제어판: 원격에서 제어되는 가상 제어판을 지원
  • 오디오 스트리밍: 동기화된 오디오 재생 기능 지원

IOTivity와 AllJoyn은 IoT의 표준화를 위해 추구하는 방향은 유사하지만 실제 설계 사상(그리고 지원하는 기능)은 많이 다르기 때문에 완전히 중원을 평정할만큼 강력한 위력을 발휘하기는 어려워 보인다. 이와 관련해 IoT 단체 춘추전국시대··· 통일 조짐은 2016년에나를 읽어보면 현재 IoT 표준화 단체의 전투 상황을 머리 속에 그릴 수 있을 것이다.

EOB

토요일, 1월 10, 2015

[B급 프로그래머] 1월 1주 소식

2015년을 맞이하여 첫 소식을 정리해보겠다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리

조금 늦어졌지만, 2015년 새해 복 많이 받으시기 바란다.

화요일, 1월 06, 2015

[독서광] 처음 시작하는 인텔 갈릴레오

오늘은 한빛미디어에서 선물로 보내주신 아두이노 관련 서적을 하나 소개드리려 한다. 그런데 어떻게 된 영문인지 이름에 '아두이노'가 없고 '갈릴레오'만 들어있으니 여기에 대해 먼저 설명하고 넘어갈 필요가 있겠다.

Atmega CPU를 장착한 아두이노와는 달리 갈릴레오는 인텔의 32비트 x86 호환 쿼크 코어를 탑재하고 있다. 특별한 운영체제가 없이 펌웨어 수준에서 동작하는 아두이노와는 달리 갈릴레오는 리눅스 운영체제로 동작한다. 갈릴레오는 리눅스 상에서 아두이노 하드웨어/소프트웨어를 그대로 동작시킬 수 있게(하드웨어와 소프트웨어 핀 호환을 목표로 한다) 특수 하드웨어와 수정된 소프트웨어를 탑재하고 있다고 보면 이해가 쉽겠다. 100% 호환을 목표로 두고 있긴 하지만 갈릴레오에 존재하는 미묘한 문제(예: GPIO 속력과 PWM 관련해 문제가 많았기에 2세대 갈릴레오가 등장했다는 기사 참조)와 상대적으로 큰 보드 크기와 복잡도로 인해 완벽하게 아두이노를 대체하기는 어렵다는 생각이다. 뭐 그럼에도 불구하고 교육과 실험 목적으로는 크게 나쁘지 않다. 잘만 하면 임베디드 부문에서 리눅스와 아두이노 둘 다 다뤄볼 수 있으니까.

이제 갈릴레오와 아두이노의 관계를 알았으므로 책 내용으로 들어가보자. 지난 번에 소개드린 33가지 프로젝트로 배우는 아두이노와는 달리 이 책은 C도 잘 모르는 초보자가 보기에 적합한 내용을 담고 있다. 목차를 보면 알겠지만 일단 갈릴레오 소개와 보드 기초 사항을 설명한 다음 출력(디지털/아날로그)과 입력(디지털/아날로그)을 설명하고 반복문과 시리얼을 사용한 고급(?) 기법을 소개한다. 그리고 이더넷이 내장된 갈릴레오의 특성을 살려(아두이노 같으면 별도 확장 실드를 구매해야 하므로 여러 가지 면에서 번거롭다) 네트워크에 접속하고 웹 서버를 구동하는 방법을 설명한다. 이 과정에서 갈릴레오에 셀로 접속하는 트릭도 알려주므로 아두이노와는 또 다른 갈릴레오만의 접근 방식을 엿볼 수 있다.

단순히 갈릴레오를 아두이노처럼 사용하는 에물레이터를 벗어나 중간에 리눅스와 아두이노가 어떤 식으로 상호 작용하는지 알려주기 위해 /proc 파일 시스템을 사용해 센서를 읽고 액추에이터에 명령을 내리는 방법을 소개하며, 파이썬을 사용해 만든 프로그램과 연동하는 방법(아두이노 프로그램에서 popen 확장 명령으로 외부 명령을 수행한 다음 결과를 얻는 방식)도 설명하고 있다. 아두이노의 기본 명령이 아니라 갈릴레오에서 사용할 수 있는 확장 명령인 경우 명시적으로 이런 사실을 알려주므로 혼동의 여지를 없앴다. 책의 마지막 부분에는 부록 형태로 아두이노(+갈릴레오 전용) 프로그래밍 참조 문서를 제공하므로 많이 사용하는 명령을 한 눈에 확인할 수 있다.

이 책을 읽으면서 아주 복잡한 프로젝트를 수행하기는 어렵겠지만, 기초적인 개념 설명과 함께 어렵지 않은 실험거리를 제공하므로 '처음 시작하는'이라는 제목과 잘 어울린다는 생각이다.

결론: 갈릴레오/아두이노를 처음 접해 아두이노/갈릴레오로 뭔가를 하고는 싶은데 C 프로그래밍 언어나 전자 회로 기초가 부족해 곤란을 겪고 있는 초보자분들께 추천한다.

EOB

토요일, 1월 03, 2015

[번역은 즐거워] 고양이가 당신을 거대하고 예측불가능한 유인원으로 생각하는 이유

독자 여러분을 위한 2015년 인사를 글로 대신 드리려 한다. Why Your Cat Thinks You’re a Huge, Unpredictable Ape라는 재미있는 글이 wired에 올라와서 독자 여러분을 위해 전문을 번역해봤다.

싱글즈(Shingles)는 내 질병 이름(대상포진)이 아니라 내 고양이 이름이다. 나는 이 녀석을 죽도록 사랑하지만, 이 녀석은 나를 짜증나게 만든다.

나만이 갈등을 겪는 애묘가가 아니다. 토니 버핑턴은 오하이오 주립 대학의 수의사이며, 최근에 내게 많은 고양이 집사들이 끊임없이 자신들의 고양이 동료에 좌절감을 느낀다고 말해줬다. 먹이고, 뒤를 깨끗하게 청소하고, 쓰다듬고, 안아주고, 붙들고 있지만, 버핑턴은 우리 중에 극소수만 고양이 말을 어떻게 듣는지 안다고 말한다. 이는 우리보다 고양이를 더욱 좌절스럽게 만든다. 우리가 고양이를 아무리 사랑할지라도 고양이는 사로잡히고 길들여진 이방인에 불과하기 때문이다. 자신들의 풍습을 설명할 방법도 사람을 이해할 방법도 존재하지 않는다.

버핑턴 박사(어찌되었거나 다음 고양이로 좋은 이름이다)는 내게 고양이 말을 듣는 방법을 참을성 있게 설명했다. 더 많이 안을 수 있는 트릭이 아니라 고양이의 건강을 개선할 수 있는 더욱 조화로운 집안 분위기를 만드는 방법이다. 여러 해 동안, 버핑턴은 고양이과 동물의 방광 조직에 고통스럽고 만성적인 염증이 생기는 병인 간질성 방광염의 근본 원인을 연구해왔다. 버핑턴의 연구는 스트레스가 가득한 집안 환경이 질병을 일으키며, 아마도 다른 만성 고양이 질환 역시 일으킬지도 모른다는 가능성을 보여준다. 버핑턴은 최선의 치료가 고양이의 말을 듣는 방법을 배우고 고양이에게 선택의 기회를 주며, 고양이의 스트레스성 반응을 일으키는 환경 요인을 줄이는 데 있다고 믿는다.

당신은 거대하고 예측불가능한 유인원이다

당신은 누가 봐도 분명한 소파를 발톱으로 긁은 소리를 듣는다. 화난 목소리로 톡 쏘며, 고함지르며, 물을 쏘며, 심지어 배게를 던진다. 헛수고다. 고양이는 다시 원래대로 돌아가기 때문이다. 버핑턴에 따르면 고양이는 당신을 무시하지 않는다. 고양이는 자신의 행동과 부정적인 강화를 연결하는 방법을 모를 뿐이다. 고양이는 사회적인 신호를 읽을 필요성이 거의 없는 외로운 사냥군으로 진화했기 때문이다. 특히 행동 변화를 요구하는 사회적인 신호를 읽지 못한다.

"쇼파를 긁지않게 멈추고 싶어하기 때문에 사람이 고함을 지른다는 사실을 고양이가 어떻게 알겠습니까?"라고 버핑턴은 말한다. 발톱으로 긁는 행위를 주인의 분노와 연결하는 능력이 없는 상황에서, 고양이는 사람의 미친 공격성만 볼 뿐이다. "고양이에게 당신은 이유없이 자신을 공격하는 미친 영장류일뿐입니다."라고 버핑턴은 말한다.

행동을 포기하게 만드는 대신, 당신은 공포의 대상이 된다. 한술 더 떠, 고양이는 당황하게 되며 결국 스트레스를 받는다. 발톱을 긁거나 높이 뛰는 등의 고양잇과의 자연스러운 활동을 끊임없이 방해하기 때문이다. "고양이는 자신의 자연스러운 행동을 표현하기를 원할 때 그렇게 하지 못하면 병이 듭니다."라고 버핑턴은 말한다. 당신이 주변에 없을 때 고양이는 계속해서 자연스러운 행동을 할 것이다.

"고양이를 훈련하는 방법은 주변 환경 개선입니다."라고 버핑턴은 말한다. 예를 들어, 소파 모서리에 양면 테이프를 붙이거나, 부엌 조리대에 은박지를 붙여놓는다. 그리고 근처에 개박하로 덮은 고양이 기둥이나 버려진 표류목으로 만든 기가 막힌 캣타워와 같이 관심을 끌 대안을 놓아둔다. 대안을 대상으로 고양이가 원하는 행동을 할 때, 선물을 주거나 애정으로 보답한다. "집은 부정적인 강화를 제공하게 만드는 반면, 고양이게게는 긍정적인 강화를 제공해야 합니다."

고양잇과 풍수

고양이가 자지 않는 매일 몇 시간 동안, 고양이는 최대한 균형잡히게 집에서 움직이기를 원하는 작은 에너지 덩어리다. 하지만 냉장고 근처에 음식 접시를 놓아두거나 드라이어기 옆에 작은 상자를 놓아두거나, 정원으로 나가는 여닫이 유리문 주변에 고양이가 좋아하는 카드 보드 상자를 놓아둠으로써 고양이의 몰입을 방해해왔다.

냉장고 소리나 탈수기 소리에 귀가 멀지도 모르겠다. 하지만 버핑턴에 따르면, 고양이가 먹거나 배변하는 동안 냉장고나 탈수 소리는 괴물이 으르렁거리는 소리로 들린다. 접시와 고양이 배변통은 조용한 곳에 놓아둬서, 고양이가 위협을 느낄 때 안전한 탈출 경로가 되는 (벽장이 아닌) 고요한 장소를 만든다.

풍경 역시 스트레스를 줄 수 있다. 고양이는 다른 동물에 대해 호기심이 많다. 하지만 멍멍이, 강아지, 염소, 말 등 사이에 시각적인 경계가 없으면 고양이는 위협을 느낄 것이다. "고양이는 유리를 이해하지 못합니다. 하지만 높이는 이해합니다."라고 버핑턴은 말한다. 고양이에게 캣 트리나 책장과 같은 높은 장소에 올라갈 수 있게 만들어주자. 평온한 상태에서 주변을 관찰할 수 있는 장소 말이다.

솜털로 뒤덮인 새끼 고양이의 배는 건드리지 마세요

풍경과 소리만 고양이의 감각을 공격하는 집안의 유일한 방해물은 아니다. 사람은 고양이보다 더 노골적으로 애정을 표시하며, 종종 귀여운 털뭉치만 보면 못견뎌한다. 하지만 우리와 같이 고양이도 정중하게 다뤄달라고 말하기를 원한다. "누군가 항상 당신을 들여올려 안아주고 비비면 이를 환영하겠습니까?"라고 버핑턴은 말한다.

솜털로 뒤덮인 새끼 고양이가 상호 작용을 이끌게 놓아두는 편이 좋다. 당신에게 와서 몸의 일부를 비비면, 고양이를 쓰다듬어도 좋다는 허락을 내린 것이다.

고양잇과 동물의 다른 행위에 주의해야 한다. 쓰다듬기를 원하는 초청장으로 보이기 때문이다. 솜털로 뒤덮인 새끼 고양이가 발라당 뒤집어서 배를 드러내는 행동이 전통적이다. 스다듬으러 가면, 고양이는 물고 뜯는다. "배를 드러내는 행동은 만들어놓은 함정이 아닙니다."라고 버핑턴은 말한다. "고양이가 무는 이유는 사생활을 침해 받았기에 두렵기 때문입니다." 고양이의 배는 가장 취약한 부분이며, 이를 드러냄으로써 고양이는 자신이 당신을 신뢰하고 있다는 사실을 알려준다. 배를 쓰다듬어 주기를 원하는 행동은 아니다.

배가 유일한 출입 금지 구역이 아니다. 고양이를 쓰다듬다 보면, 갑자기 고양이가 슬그머니 도망쳐 방 반대편에 가서 뭔가 뒤에 웅크린 다음 당신을 빤히 쳐다보는 경험을 한 적이 없는가?

고양이가 뭔가 이상하게 행동하면, 이런 고양이의 행동을 불러일으킨 원인이 있습니다."라고 버핑턴은 말한다. 아마 꼬리 시작 부분을 만져 엉덩이를 들게 만들었을지도 모른다. 이 영역은 신경으로 가득 차 있으므로, 너무 많이 만지면 간지럼을 탄다. 또한 두 팔로 안아 올리는 행위는 고양이에게 일반적이지 않다. 고양이가 무릎 위로 올라가더라도 반드시 들어 올려달라는 초청장을 의미하지는 않는다.

무슨 뜻이냐고? 당신의 고양이를 번쩍 들어 올려, 바짝 붙어, 천사와 같은 배를 문질러도 문제 없지 않느냐구? 문제 없다. 어느 누구도 시샘하지 않는다. 여기에 대해 이야기만 하지 마라.

고양이들끼리 친구 만들기

싱글즈와 나는 최근 다른 두 마리 고양이가 살고 있는 집으로 이사했다. 그리고 내 방돌이와 나는 여러 달 동안 고양이들이 함께 놀게 만들려고 시도했다. 잘 되지 않았다. 몇 번이고 되풀이해서, 거실에 함께 놓아뒀지만 가벼운 호기심이 공황과 싸움으로 바뀌는 모습만 볼 뿐이다.

버핑턴은 우리가 완전히 잘못하고 있다고 말했다. 버핑턴에 따르면, 동일한 수건을 사용해 차례로 고양이를 문지른 다음 서로의 체취를 알게 만드는 방법으로 천천히 시작해야 한다. 서로를 소개하기 전에, 고양이들이 존경하는 주인으로부터 먹이, 배변, 사랑을 잘 받았는지 확인하자. 다시 말해 고양이들이 편안함을 느껴야 한다. 일단 고양이들이 함께 있게 되면, 애정을 듬뿍 줌으로써 주인이 고양이들 뒤를 보살펴 준다는 사실을 고양이가 알게 만들자. 고양이들이 어울리게 압력을 가하지 말고, 각자 방해받지 않는 안전한 탈출구가 있는지 확인하자.

만일 고양이가 어울리지 못하고 떠나기로 결정하며, 그렇게 하게 둬라. 버핑턴은 고양이에 대한 우리의 가장 큰 오해 중 하나가 고양이들이 다른 고양이들과 어울릴 필요가 있다는 우려다. 야생에서 고양이들은 홀로 사냥하고 공유하지 않는다. 다른 고양이는 친구가 아니라 경쟁자다.

고양이가 당신을 챙기기

고양이는 보이는 것만큼 무관심하지 않다. 고양이는 유대감을 원하며, 이를 위한 가장 좋은 수단은 쓰다듬고 먹이를 주고 놀아주는 것이다. 고양이가 놀고 싶지 않아하면, 뭔가 잘못하고 있는 셈이다. 레이저 포인터를 사용한다면, 미친 듯이 흔들어대지 말자. 자연스러운 속력으로 움직여 고양이가 종종 잡을 수 있게 만들자. 끈에 묶은 쥐돌이도 동일한 규칙을 적용하자.

싱글즈는 내가 하루 종일 자리를 비울 때 끊임없이 울곤 했으며, 싱글즈를 혼자 두면 신경증에 걸리지 않을지 걱정했다. 버핑턴은 오갈 때마다 작은 의식을 만들어라고 조언한다. "떠나기 전에 고양이를 불러, 사랑을 표현하고 안녕이라고 말한다는 사실을 알게 할 수 있습니다."라고 버핑턴은 말한다. 그리고 집에 올 때도 비슷한 의식이 있어야 한다고 조언한다. "몇몇 결혼한 사람들은 하루에 한 시간도 접촉하지 않고서도 잘 살아갑니다. 고양이와 관계도 하루 10분이면 충분합니다. 물론 정말로 질이 높아야 하겠지만 말입니다."라고 버핑턴은 말한다.

EOB

토요일, 12월 27, 2014

[독서광] 제로 투 원

요즘 한창 뜨고 있는 '제로 투 원'을 읽은지 제법 되었는데, 연말이라 정신이 없어 이제야 독후감을 올려드린다.

이 책은 페이팔 마피아의 1인인 피터 틸이 스탠퍼드 대학교 'CS183: Startup'에서 강의한 내용을 정리한 내용을 담고 있다. 이 책의 내용을 딱 한 줄로 요약하라면 '경쟁하지 말고 독점하라'라고 볼 수 있는데, 5장까지(책의 약 1/3 지점) 신나게 '독점'에 대한 이야기가 이어진다. 자 그 다음부터가 중요하다. '독점'이 스타트업에 좋다는 사실을 알았는데, 그러면 독점을 달성하는 방법을 알아야 독점이 가능하기 때문이다. 8장 '발견하지 못한 비밀'을 시작으로 독점을 추구하기 위한 여러 가지 조언들이 나온다. 그리고 13장부터는 (이런 부류의 책에 절대 빠지지 않는) 사례 연구가 등장해서 테슬라의 일론 머스크를 집중 분석한 다음에, 버진 그룹의 리처드 브랜슨, 냅스터의 숀 파커, 등등 창업자의 역설을 소개하면서 끝난다.

상당히 도발적인 내용이 많고(비IT 부문을 마구 디스한다) 스타트업과 관련해 생각해볼 내용도 많지만, 여전히 제로에서 원으로 가는 획기적인 비법을 제시하지는 못한다(예전에 '블루오션' 열풍이 불었던 시절을 기억하는가? 은총알은 어디에도 없다.)는 점에서 약간 아쉽기는 하다.

요즘 뜸했는데, 간만에 본문 중에서 재미있는 내용을 골라봤다.

역사가 흐른다고 새로운 기술이 저절로 나타난 적은 없었다.
스마트폰은 우리 주변만 잊게 만든 것이 아니라, 우리 주변이 이상하게도 구식이라는 사실까지 잊어버리게 만들었다.
변비에 걸린 것처럼 제 기능을 못하고 있는 조직에서는 실제로 일을 하기보다는 일이 진척되고 있다는 신호만 내보내는 편이 승진에는 오히려 더 유리하다(지금 다니는 회사가 이렇다면 당장 그만두는 편이 낫다).
외톨이형 천재는 예술이나 문학의 고전을 남길지는 몰라도 산업 하나를 통째로 일굴 수는 없다.
신생기업이 가진 장점 중에서 가장 중요한 것은 '새로운 생각'이다. 새로운 생각은 '민첩함'보다도 더 중요하다. 그리고 규모가 작아야 생각할 공간이 생긴다.
'지속적인 가치를 창출하고 또 보유하고 싶다면, 차별화되지 않는 제품으로 회사를 차리지 마라.'
독점기업들은 스스로를 보호하기 위해서 거짓말을 한다. 거대한 독점 사실을 자랑했다가는 감사를 당하고, 조사를 받고, 공격받는다는 사실을 잘 알고 있다.
독점기업이 아닌 회사들은 정반대의 거짓말을 한다. "우리는 이쪽을 꽉 잡고 있어요."
독점기업이 아닌 회사들은 자신의 시장을 여러 작은 시장의 교집합으로 정의함으로써 더 특별한 시장이라고 과장한다.
행복한 기업들은 다들 서로 다르다. 다들 독특한 문제를 해결해 독점을 구축했기 때문이다. 반면에 실패한 기업들은 한결같다. 경쟁을 벗어나지 못한 것이다.
교육 시스템은 경쟁에 대한 우리의 집착을 반영하는 동시에 부추기고 있다.
엘리트 학생들은 자신 있게 계단을 올라가다가 결국은 자신의 원래 꿈을 포기해야 할 만큼 치열한 경쟁 단계에 이르게 된다.
경쟁 구도는 해묵은 기회를 지나치게 강조하게 만들고, 과거에 효과가 있었던 것을 그대로 베끼게 만든다.
간단히 말해서 오늘의 기업 가치는 그 회사가 미래에 벌어들일 모든 돈의 총합이다.
가까운 시일 내에 성장하는 데 목숨을 건다면, 스스로 자문해봐야 할 가장 중요한 질문을 놓치게 된다. "앞으로 10년 후에도 이 회사가 존속할 것인가?" 숫자만으로는 결코 그 답을 알 수 없다.
성공하려면 "다른 무엇보다 먼저 마지막 수를 연구하라."
"성공은 결코 우연이 아니다."
사람이 너무 많은 분야에서는 변화를 만들어내기가 극도로 어렵다.
거듭제곱법칙은 시간이 지난 후에야 명백하게 드러나는 특성이 있는데, 정작 우리는 기술 기업에 투자하는 전문가들조차 현재를 살고 있는 경우가 너무 많기 때문이다.
인생은 포트폴리오가 아니다. 이런 사실은 신생기업의 창립자에게도, 그 어느 일반인에게도 마찬가지다.
모범적인 대학생들은 미래의 위험을 회피하는 데 집착한 나머지 별로 중요하지 않은, 듣도 보도 못한 각종 능력들을 수집하듯이 익히고 있다.
우리는 한눈 팔지 않고 오로지 '잘하는 것'에 집중해야 한다. 다만 그전에 반드시 그 일이 미래에 가치 있는 일이 될 것인지를 먼저 치열하게 고민해봐야 한다.
성공한 기업가들은 거의가 인사이더인 동시에 아웃사이더다. 그런 사람들이 실제로 성공하면 명성과 오명을 동시에 떨친다.

결론: 스타트업을 하거나 하려고 마음먹은 사람들에게 추천!

EOB

토요일, 12월 20, 2014

[B급 프로그래머] 12월 3주 소식

2014년 한 해 동안 격주로 소식을 전달해드렸는데, 독자 여러분들께서는 만족도가 어떠실지 궁금하다(댓글로 부족한 점이나 바라는 점을 달아주시면 내년에 최대한 반영을 해드리겠다고 약속한다). 올해 마지막 소식을 정리하겠다.

  1. 웹/앱 소식
  2. 개발/관리 도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리

연말 연시 보람차게 보내시기 바라며.

EOB

토요일, 12월 13, 2014

[독서광] 빅 픽처 2015

오늘은 뉴스 페퍼민트 대표인 '이효석' 씨와 개인적인 친분 때문에 선물 받은 '빅 픽처 2015'라는 책을 소개하려 한다.

12월이 되면 한 해를 정리하고 다음 해를 예상하는 기사와 책들이 많이 나온다. 현실에 묻혀 늘 바쁘게 살고 있는 우리들에게 종종 앞뒤를 돌아보고 방향을 다시 설정한다는 측면에서 시간을 내어 잠시 세상이 어떻게 돌아가는지 확인하는 계기를 마련해주기에 정리형/예상형 기사와 책을 읽고 나름대로 자신의 입장과 관점에서 한 해를 정리하고 다음 해를 기획할 수 있다. '빅 픽처 2015'도 바로 이런 가치를 제공하는 책으로 생각하면 틀림없겠다.

주로 경제 분야에 집중하던 기존 책들과 달리 이 책은 정치/경제/사회/문화/기술에 걸쳐 다양한 분야를 다루기에 조금 색다른 시도로 보여진다. 분야가 다양하다고 해서 결코 책 내옹이나 구성이 산만하지는 않다. 새로 등장하는 의제와 전통적인 의제를 균형 감각을 유지하면서 소개하고 실천에 방점을 찍으며 구체적인 대안을 제시하고 있으므로 책 제목처럼 '큰 그림'을 그릴 수 있게 생각거리를 던져준다.

책에서 제시하는 여러 가지 흥미로운 주제 중에서도 특히 좋았던 주제를 하나만 꼽으라면 개인적으로는 "‘만들어진 행복’을 걷어차라 -‘인간 탐구’에 관한 과학적 사실들"을 택하겠다. "피할 수 없으면 즐겨라"와 '아프니까 청춘이다'로 대표되는 행복을 강요하는 사회적인 분위기는 사회의 문제를 개인의 문제로 환원시키는 점에서 문제의 여지가 상당히 많지만 이런 주장을 강화하는 '자기 계발서'가 범람하는 상황을 보면 쉽게 분위기가 바뀔 것 같지는 않다. "'만들어진 행복'을 걷어차라"에서는 인간의 의지에 모든 것을 맡기는 방법으로는 현실의 개선이 어렵다는 한계를 명확하게 제시한다. 행복을 스스로 부트스트래핑해서 만들어낸다는 주장은 매력적으로는 들릴지 모르겠지만, 과연 인간의 이성만으로 모든 것을 돌파할 수 있는지에 대해서는 충분히 고민해야 한다. 하지만 이런 고민 자체를 사치로 여기는 사회적 분위기가 더 큰 문제일지도 모르겠다.

결론: 책을 다 읽고 나니 커피숍에서 여러 분야의 전문가들과 함께 이야기를 나눈 듯한 느낌을 받았는데, 시공간이라는 물리적인 제약을 훌륭하게 극복하는 '책'이라는 사상의 전달 매체에 대해 감탄하지 않을 수 없다. 여러분들도 함께 이런 경험을 느끼면 어떨지?

EOB

토요일, 12월 06, 2014

[B급 프로그래머] 12월 1주 소식

금주에도 푸짐한 소식이 들어와 있다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

토요일, 11월 29, 2014

[독서광] 노드로 하는 웹 앱 테스트 자동화

간만에 기술서적 하나 소개드리겠다. 오늘은 에이콘 출판사에서 노드 관련 서적으로 선물해주신 '노드로 하는 웹 앱 테스트 자동화'다. '헤드리스 브라우저와 모카를 활용한'이라는 부제를 보면 알겠지만, 단순한 API 단위 테스트를 넘어서 실제 브라우저를 흉내내어 테스트하는 방법을 설명한다.

테스트를 하려면 테스트 대상 프로그램이 필요한데, 이 책에서는 아주 간단한 애플리케이션(할 일 목록)을 Node.js, CouchDB, Flatiron.js 조합으로 뚝딱 만들어낸다. 그런 다음 좀비와 모카를 사용해 테스트를 수행한다. 헤드리스 브라우저인 좀비를 사용해 사용자가 직접 크롬과 같은 브라우저 없이 자동으로 서버에 요청을 할 수 있으며, BDD를 기반으로 만들어진 테스트 프레임워크인 모카를 사용해 사용자 시나리오에 맞춰 좀비로 요청을 보내고 받은 결과를 비교하는 방법을 사용한다. 단순한 HTTP 요청을 넘어서 동적인 AJAX(드래그 & 드롭)와 라디오 버튼 선택과 같은 동적인 HTML 화면 제어 방법을 설명하고 있으므로(눈치챘겠지만, 브라우저를 시물레이션 할 수 있다!), 기존 REST API 단위 테스트에 익숙한 개발자라면 조금 놀랄지도 모르겠다. 모카는 비동기식과 promise를 지원하므로 AngularJS와 친한 자스민에 비해 기능이 풍부하다는 장점이 있으므로, 유심히 살펴볼 필요가 있다.

이 모든 것이 Node.js를 중심으로 동작하는 자바스크립트로 구축되어 있으므로, 자바스크립트를 사용해 프론트엔드와 백엔드를 모두 개발하는 분들이라면 아주 자연스럽게 다가올 것이다. 책을 구입하기 전에 예제를 한번 봐야하는 독자를 위해 출판사에서 예제 다운로드 링크를 제공하므로 미리 살펴보면 도움이 되겠다.

결론: Node.js 세상에서 테스트와 테스트 자동화가 필요한 분이라면 빠른 시간 내에 읽을 수 있는 책으로 볼 수 있다.

EOB

토요일, 11월 22, 2014

[B급 프로그래머] 11월 3주 소식

금주에는 특히 좋은 소식이 많아서 시간을 들여 정리해보았다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

수요일, 11월 19, 2014

[독서광] 인터스텔라 머피 방의 책장에 꽂혀있던 이스터에그 9권

와이어드를 읽다보니 9 EASTER EGGS FROM THE BOOKSHELF IN INTERSTELLAR라는 아주 흥미로운 글이 올라왔다. 머피 방의 책장에 꽂혀있던 책이 무엇인지 궁금하지 않은가? 독자 여러분을 위해 본문에 나오는 원서를 대상으로 직접 한국어판을 찾아 정리해보았다(아쉽게도 몇몇 책은 번역서가 없었다).

  1. 말벌공장(원서 제목: The Wasp Factory): "한번 읽고나면 결코 잊어버리지 않은 강렬한 감동. 거의 고립되다시피 살아가는 아이와 아버지의 끔찍한 이야기"
  2. Selected Poems by T.S ELIOT: "가장 복잡한 시공간의 개념은 종종 과학보다 예술로 가장 잘 표현된다"
  3. 스탠드(원서 제목: Stand): "중요한 사건에 대한 우리의 인식이 항상 개인적이라는 사실을 깨닫게 만드는 암울한 시나리오"
  4. 중력의 무지개(원서 제목: Gravity's Rainbow): "가장 우아한 제목"
  5. 에마(원서 제목: EMMA): "아름다운 책을 위한 아름다운 이름"
  6. 시간의 주름(주의: 그래픽 노블임)(원서 제목: A Wrinkle in Time): "더 높은 차원에 대한 개론서. 4차원 정육면체의 개념을 소개한다"
  7. Labyrinths by Jorge Luis Borges: "제목이 모든 것을 말한다"
  8. The Go Between by L.P. Hartley: "어른 세상에서 메아리치는 어린 시절의 경험. 가슴 뭉클하게 만드는 가장 위대한 도입부를 보여주는 책"
  9. 플랫랜드(Flatland: A Romance of Many Dimensions): "여러분을 둘러싼 세상을 바라보는 실질적인 시각을 바꾸려는 주목할만한 시도"

오늘은 이렇게 엉뚱하게 뽐뿌질을 하고 말았다. 놀란 감독의 취향이 여러분에게 와 닿는지?

EOB

화요일, 11월 18, 2014

[일상다반사] IoT 클라우드 플랫폼 회사 달리웍스와 Thing+ IoT 플랫폼

지난 11월 5일부터 7일까지 열린 2014년 사물 인터넷 전시회에 다녀왔는데, 오늘은 그 중에서 특히 눈에 띄는 회사 하나를 소개해드리려 한다. 주인공은 바로 IoT 관련해 서버 기술부터 단말 기술까지 모두 갖추고 있는 회사인 달리웍스다. 대표님과 친분(대학교 선배님이시다)이 있다고 해서 자랑하려는 것이 아니라, IoT 관련해 전체 스택(full stack)을 갖추고 있는 몇 안 되는 회사이므로 소개해드리려 한다. 이번 전시회에서도 연합군을 결성해 나왔는데, 하드웨어 부문은 뉴로메카(참고로 여기 대표님도 대학교 선배님이시다)도 함께 참여해서 개발하므로 완성도가 아주 높다(참고로 뉴로메카는 CAN과 로봇 자동화 관련해 기술력이 뛰어나다).

일단 Thing+ 클라우드를 설명하는 동영상부터 소개하겠다. 실제로 디바이스를 등록하고, 규칙을 만들고, 이벤트를 발생시키고, SMS를 사용해 통지 받는 시나리오를 돌려봤는데, 어렵지 않게 진행할 수 있었다. 물론 완전 초보자가 하기에는 어려운 점이 있지만, IoT 관련 지식이 있는 사람이라면 어렵지 않게 수행할 수 있는 정도의 완성도를 자랑한다.

IoT 관련 디바이스에서 수집한 자료를 저장하고 분석하는 서비스는 Thing+ 클라우드에서 제공하며, 구성, 제어, 시각화를 위한 사용자 인터페이스는 Thing+ 포털에서 제공한다. 플랫폼 구성 요소는 다음 그림을 보면 이해가 쉬울 것이다.

구현을 위해 사용한 기반 기술이 대단한데, 퍼블릭 클라우드(AWS)와 프라이빗 클라우드는 물론이고 도커를 사용해 개발되었고, 서버는 비동기식 이벤트 처리에 적합한 Node.js를, 포털 인터페이스는 웹소켓과 AngularJS를 사용해 HTML5 기반의 반응형으로 만들어졌다(웹, 태블릿, 스마트폰 모두 지원). 한 마디로 현재 뜨고 있는 여러 기술을 잘 활용해 다양한 이벤트 처리가 필요한 애플리케이션을 제대로 만들었다. 최근 아마존이 람다라는 자바스크립트/Node.js 상에서 이벤트 중심의 개발 편의 서비스를 AWS에 추가한 사실을 볼 때, 달리웍스는 IoT에 대한 개발 기반 기술을 제대로 선택한 듯이 보인다.

결론: IoT 분야에 관심이 있는 분들께서는 기술력으로 승부를 거는 달리웍스에 주목하기 바란다.

EOB

토요일, 11월 15, 2014

[B급 프로그래머] (Quora) 10분만에 알고리즘 사고를 기르는 방법

Quora에 재미있는 질문이 하나 올라와서 독자 여러분을 위해 정리해보았다.

What can I learn right now in just 10 minutes that could improve my algorithmic thinking?

한국어로 번역하자면 '10분만에 알고리즘 사고를 기를 수 있는 방법은 무엇인가요?'이며, 가장 멋진 대답을 정리하면 다음과 같다.

이미 알고 있는 지식이 어느 수준인지 모르는 상태에서 대답하기는 어렵습니다. 한 가지만 힌트를 드리자면, 루프 불변입니다. 루프를 작성할 때, 암시적이거나 명시적으로 루프 불변을 사용한다는 사실을 이해해야 합니다.

루브 불변은 술부(predicate, 참 또는 거짓인 서술)이며, 다음과 같은 속성이 있습니다.

  1. 처음 루프에 진입할 때 참이다.
  2. 루프 반복을 시작할 때 참이면, 다음 반복을 시작할 때도 참이다.
  3. 루프가 종료되면, 루프 불변은 루프가 원하는 속성을 제공하는 근거를 제시한다.

간단한 예를 들어봅시다. 배열 a의 첫 n개(양수)를 더하기 위해 다음 루프를 만들어봅시다.

Read Quote of Thomas Cormen's answer to What can I learn right now in just 10 minutes that could improve my algorithmic thinking? on Quora

바로 루프 불변 예제입니다. 루프 반복에 들어갈 때, sum = a[0] + a[1] + a[2] + ... + a[i - 1]을 계산합니다. 위에서 설명한 세 가지 속성이 충족하는지 살펴봅시다.

  1. 처음 반복할 때 i = 0입니다. i - 1 = -1이므로, a[0] + a[1] + a[2] + a[i - 1]은 비어 있습니다. 아무 항도 더하지 않았으므로 0이 됩니다.
  2. i의 값에 대해 반복에 들어갈 때, 루브 불변이 참이라고 가정하면 sum = a[0] + a[1] + a[2] + ... + a[i - 1]이 됩니다. 반복 과정에서 a[i]을 sum에 더하고, i를 하나 증가시킵니다. 따라서 루프 불변은 다음 반복에 들어갈 때도 계속해서 유지됩니다.
  3. i=n이 되면 루프가 종료됩니다. 루프 불변에 따르면 sum = a[0] + a[1] + a[2] + ... + a[i - 1]입니다. 따라서 sum은 배열의 첫 n개의 합입니다.

예제가 정말로 사소할지 모르겠습니다. 이런 루프를 작성했다면, 정형적인 방식으로 사유했다고 보기는 어려울지도 모릅니다. 하지만 인지하든 인지하지 못하든 마음 속에서는 정확하게 위에서 설명한 방식에 맞춰 사고가 일어납니다. 루프 불변은 훨씬 복잡한 루프를 이해하고 올바르게 증명하는 과정에 도움을 줍니다.

루프 불변이 수학적인 귀납법을 떠올리게 했다면, 당연합니다. 첫째 속성은 귀납의 기초를, 둘째 속성은 귀납적인 추측과 유사합니다. 셋째 속성이 조금 다른 이유는 대다수 귀납적인 증명에는 종결 조건이 없기 때문입니다.

어찌되었거나, 10분만에 배울 수 있는 뭔가를 질문했습니다. 루프 불변은 10분만에 배울 수 있는 최선의 개념입니다. 재귀를 말하고 싶었으나, 초급 과정에서 재귀를 가르친 23년 동안의 경험에 따르면, 설명에 10분 넘게 걸립니다.

EOB

토요일, 11월 08, 2014

[B급 프로그래머] 11월 1주 소식

슬슬 늦가을로 접어드는 11월 1주 소식을 전해드리겠다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리
EOB

목요일, 11월 06, 2014

[독서광] 33가지 프로젝트로 배우는 아두이노

집에 아두이노 호환 보드를 사놓고 이런 저런 실험을 하며 재미있게 갖고 놀고 있는데, 아무래도 스타터 킷SIK 지침서만으로는 성이 안 차서 한빛미디어에서 나온 '33가지 프로젝트로 배우는 아두이노'를 구매해(여러 후보를 놓고 비교한 결과 이 책이 낙점되었다) 읽어보았는데, 많은 즐거움을 선사했다.

원서 제목이 30 Arduino Projects for the Evil Genius라는 점을 고려할 때 사악한 천재를 위해 만들어진 예제가 즐겁고 흥미롭지 않으면 그게 더 이상할 것 같다. 하지만 초보자용이 아니라는 사실에 주의해야 한다. 이 책은 어느 정도 C 프로그래밍 언어를 이해하고 있고 최소한 트랜지스터가 뭔지 아는 사람이 봐야한다. 물론 쉽게 설명하려 노력했고 난이도 별로 쉬운 예제와 어려운 예제를 균형있게 제시함으로써 다양한 독자층을 아우르긴 하지만 그래도 아두이노를 생애 첫 보드로 구입한 친구들이 무작정 덤비기에는 다소 곤란한 책으로 보인다. 브레드보드만 사용해 실험을 이끌어나가는 대신 (많은 분량은 아니지만) 중간 중간 납땜을 요구하기 때문에 혹시나 비싼(?) 부품 등을 망가뜨릴까봐 조금 두렵다는 생각이 들지도 모르겠다.

본문 구성을 살펴보면 아니나 다를까 LED부터 시작한다. 아주 간단한 점멸을 활용한 모스 부호 번역기를 시작으로 모형 신호등과 LED 주사위까지 난이도를 높여나간다. 출력이 있으면 입력이 있는 법인지라 그 다음으로 센서 장착에 들어간다. 키패드 비밀번호 입력에 이어 모형 신호등에 로터리 엔코더를 붙인 다음 심장 박동 모니터와 USB 온도 기록계를 제작한다. 여기까지 오면 일단 입출력에 대한 기본적인 프로젝트가 끝나므로 뒤에 이어지는 내용은 빛, 소리, 전력이라는 주제를 놓고 심화 프로젝트를 소개한다. 빛의 경우 세븐 세그먼트로 주사위를 다시 만들고 LED 배열을 사용해 색상 패턴을 표시하고, USB 메시지 보드를 만든다. 소리의 경우 오실로스코프를 만든 다음 음악 플레이어, 빛 하프, VU 미터를 제작한다. 전력 프로젝트에서는 실제 외부 장치(또는 액추에이터)를 제어하는 방법을 소개하면서 LCD 온도 조절기, 컴퓨터 조종 선풍기, 최면 장치, 서보 모터를 사용한 레이저 글자 쓰기 장비를 제작한다. 그리고 나서 잡다한 프로젝트라는 이름으로 거짓말 탐지기, 자석 도어록, 적외선 리모콘, 릴리패드 시계, 카운트다운 타이머와 같은 누구나 한번쯤 만들어보고 싶은 장난감을 제작해본다. 마지막으로 레오나르도를 사용해 가상 키보드와 마우스를 만들며 대단원의 막을 내린다. 물론 책의 가장 뒤에는 독자적인 프로젝트를 수행하기 위한 기초 지식을 정리하는 내용이 나오긴 하지만 아무래도 짧은 지면에 많은 내용을 설명하려다 보니 큰 도움이 되지는 못하는 느낌이다(설마 전자공학이 챕터 하나로 뚝딱 끝낼 수 있으리라 믿는 분은 안 계시리라...).

이 책의 가장 큰 장점은 컬러다. 책 두께와 정가가 올라가긴 했지만 컬러이기 때문에 배선도를 보다 햇갈릴 가능성을 상당히 줄여준다. 당연한 이야기지만 회로도, 배선도, 실제 배치도가 모두 총천연색으로 나오므로 디버깅(?)을 하는 과정에서도 많은 도움을 받을 수 있다. 또한 대응하는 코드가 완결된 형태이며 깃허브에 가지런히 올라와 있기에 일단 무작정 따라하기 모드로 가는 경우에도 큰 어려움 없이 진행이 가능하다. 코드가 이해가 안 가면 본문 중에 번호를 붙여가며 정리해놓은 설명을 읽어보면 도움이 될 것이다.

결론: 아두이노를 구입하려거나 구입한 독자 중에 C 프로그래밍 언어를 어느 정도 이해하고 기초적인 전자공학 지식도 있는 분이라면 이 책은 결코 여러분을 실망시키지 않을 것이다. 강력 추천!

EOB

토요일, 11월 01, 2014

[영화광] 크리스토퍼 놀란은 이메일 주소가 없다

THE VERGE에 올라온 Christopher Nolan doesn't have an email address이라는 글을 읽다보니 이번 인터스텔라로 다시 한번 극장가를 휩쓸지도 모르는 크리스토퍼 놀란의 몇 가지 흥미로운 비밀(?)을 소개하고 있었다. 독자 여러분을 위해 간단하게 번역해보았다.

  1. 놀란은 "이메일 주소를 보유하지 않기로 선언"했다. 따라서 비서가 중요한 이메일을 인쇄해서 갖다준다.
  2. 항상 정시에 나타난다.
  3. 주말에 일하지 않는다.
  4. 스티브 잡스와 마찬가지로 매일 똑같은 옷을 입고 등장한다. 물론 날씨가 차가워지면 옷이 바뀌긴 한다.
  5. 뜨거운 차에 중독되었다. 따라서 주머니에 항상 보온병을 넣고 다니고 이빨은 밤갈색으로 얼룩졌다.
  6. 영화를 만들기 전에 아버지의 낡은 타이프라이터를 사용해 영화에 대한 기본적인 아이디어를 2주일에 걸쳐 타이핑한다.
  7. 특수 효과를 (후처리가 아니라) 카메라 촬영 과정에서 최대한 많이 사용하려 노력한다.
  8. 낡은 비행기 격납고에 거대한 모델 세트를 만들어 촬영한다.
  9. 디지털보다 35밀리 필름을 선호한다. 인터스텔라가 아날로그 영사기로 올바르게 상영되는지 확인하기 위해 뉴욕 시의 극장을 방문하기도 했다.

이번 인터스텔라도 최적의 상영 환경은 (아날로그) 70mm IMAX 영화관인데, CGV 멀티플렉스에는 디지털 IMAX 영화관 밖에 없다는... T_T

EOB

화요일, 10월 28, 2014

[독서광] 주키퍼: 고가용성 서버를 위한 분산 프로세스 코디네이션

오늘은 간만에 기술서적을 하나 소개하려 한다. 오늘의 주제는 아마 고가용성 서버 구축을 해보신 분이라면 한번쯤은 들어보셨을 주키퍼다. 주키퍼가 무엇인지 모르시는 분을 위해 Apache ZooKeeper™ 홈페이지에서 가져온 정의를 살펴보자.

주키퍼는 구성 정보와 이름을 유지하며, 분산된 동기화를 제공하며, 그룹 서비스를 제공하기 위한 중앙 집중적인 서비스다."

오라일리 주키퍼 책은 바로 이런 아파치 주키퍼의 특성을 이론적으로 나열하는 대신 실제 업무에 적용 가능한 코드 형태로 제시한다는 점에서 개발자에게 직접적인 도움을 준다. 분산 환경에서 코디네이션이 가장 위력을 발휘하는 마스터-워커 사례(실제 HBase 아키텍처를 단순화한 모델을 사용한다)를 예로 들어 일단 배포판에 들어있는 기본 주키퍼 클라이언트를 사용해 프로그래밍 언어를 사용한 코드 작성 없이 실험을 해본다. 다음으로 가장 기본적인 자바 API를 사용해 실제 코드 형태로 구현하는 방법을 제시한다. 그리고 나서 C API와 고수준 프레임워크인 큐레이터를 사용해 동일한 코드를 작성하는 방법을 제시한다. 따라서 책을 순서대로 읽다보면 자연스럽게 분산 환경에서 가용성이 높은 애플리케이션 작성에 필요한 기초 지식을 쌓을 수 있게 된다.

하지만 주키퍼 API를 사용해서 애플리케이션을 작성했다고 하더라도 저절로 가용성이 보장되지는 않는다(많은 사람들이 주키퍼를 설치하고 애플리케이션만 만들어 운영하면 모든 문제가 사라질 것으로 희망하는데, 공짜 점심은 없다!). 주키퍼 서비스 자체가 이를 담보해야 하므로, 책에서는 주키퍼 자체의 가용성을 높이기 위해 앙상블을 구성하는 방법부터 장애가 생겼을 때 고려해야하는 주키퍼 내부의 동작 방식과 이와 관련된 애플리케이션의 설계 방법, 그리고 주키퍼 운영에 필요한 각종 설정 방법도 빠짐없이 설명한다.

책을 구매하기 앞서 내용 파악이 필요하거나 책을 읽는 도중 완전한 코드를 참조할 필요성이 있을 경우 zookeeper-book-example을 방문해 코드를 살펴보면 좋겠다.

전반적인 책 내용이 프로그래머를 충분히 배려했다고 소개했는데, 번역 상태를 점검하겠다. 무척 아쉽게도, 오탈자가 아주 많고(이 부분에 대해서는 출판사에 이야기를 해놓은 상황이며 조만간 정오표에 신고 내용이 올라갈 것이다), 중간 중간 무슨 이야기인지 몰라 제대로 이해하기 위해 신경써야 하는 부분이 존재한다. T_T

결론: 번역 품질만 감수할 수 있다면, 분산 환경에서 오늘도 열심히 개발에 전념하는 개발자들에게 추천한다. 주키퍼 튜토리얼만 읽었다면 이 책을 읽으면서 숨겨진 여러 가지 비밀을 찾아낼 수 있을 것이다.

EOB

월요일, 10월 27, 2014

[일상다반사] FALinux 16차 공개 세미나 소식

오는 11월 4일에 코엑스에서 열리는 FALinux 16차 공개 세미나 소식이 들어와 있어 독자 여러분들께 소개 드리려 한다. 이번 세미나의 주제는 '산업 자동화 분야의 하이브리드 클라우드'로서 현장에서 클라우드와 IoT를 접목한 전문가 발표와 전통 산업 부문에 계신 청중들의 네트워킹이 어우러져 상당히 알찬 시간이 되지 않을까 생각한다. 이번 세미나를 가장 잘 드러내는 목차를 정리하면 다음과 같다.

------------------------------------------------------------------
12:00 - 13:00 :  세미나 접수 및 등록
13:00 - 13:20 :  환영사 - 이혁재(정보통신산업진흥원 SW진흥단장)
13:20 - 13:30 :  Break Time
13:30 - 14:00 :  키노트 : Hybrid cloud for industrial - 이승현(에프에이리눅스 이사)
14:00 - 14:40 :  전통 산업과 IoT 융합 - 정원진(두산인프라코어 차장)
14:40 - 15:20 :  Open Web 기술 기반의 IoT 플랫폼 기술 - 이순호(달리웍스 대표)
15:20 - 16:00 :  Coffee Break Time
16:00 - 16:40 :  Change the World in IoT - 이태영(Internet of Everything[Facebook group] 운영자)
16:40 - 17:20 :  산업분야 사물인터넷 서비스 현황 및 정부 정책 - 이창훈(정보통신산업진흥원 IoT 사업부 팀장)
17:20 - 17:30 :  경품 추첨
------------------------------------------------------------------

세미나 내용을 미리 살짝 정리해보면 다음과 같다.

  • 키노트: IoT, 빅데이터, 클라우드 에 대한 용어 해설과 FALinux가 현장에 적용했던 하이브리드 클라우드, 저전력 서버, 자바를 기반으로 하는 임베디드 솔루션인 임자등에 대한 내용을 소개.
  • 전통산업과 IoT 융합: 두산인프라코어 인천 공장의 사례를 토대로 과거 두산이 구축한 소방방재 분야의 IT 솔루션이 어떤 효과를 가져왔고 향후 어떻게 발전시켜 나갈 지에 대한 내용을 소개.
  • 오픈웹 기술 기반의 IoT 플랫폼 기술: 오픈 하드웨어 및 오픈 소스와 관련한 IoT 플랫폼 기술에 대한 내용과 이를 활용한 남미 시장 진출에 대한 내용을 소개.
  • 체인지 더 월드 인 IoT: 현재 출시된 IoT 제품군을 통해 바라본 세상의 변화와 IoT 트렌드 분석 내용을 발표.
  • 산업 분야 사물인터넷 서비스 현황 및 정부 정책: 정부에서 추진 중인 IoT 분야에 대한 계획과 정책 등을 발표.

결론: 현장에서 실제 일어나고 있는 IoT 기술 전파 상황을 파악하고 실제 현업에 적용하고 싶은 분들께서 신청하시면 딱 맞을 듯이 보인다.

EOB

토요일, 10월 25, 2014

[끝없는 뽐뿌질] 서피스 프로 3 (2편)

지난 번에 올려드린 [끝없는 뽐뿌질] 서피스 프로 3 (1편)에 많은 관심을 보여주셔서 감사드린다. 오늘은 2편을 계속해서 올려드리기로 한다.

윈도우 7을 주로 사용하다 윈도우 8.1을 사용하는 순간 몇 가지 이유로 인해 멘붕이 찾아왔다. '시작' 버튼이 없어서 난리가 났다는 소식이야 하도 많이 들어서 크게 놀라지 않았는데, 내가 원래 하던 아주 쉽게 처리하던 일을 어떻게 해야할지 몰라서 우왕좌왕하는 상황이 생겼기에 사례별로 정리해보았다.

윈도우 8에서 가장 큰 차이는 앱과 데스크탑 애플리케이션의 분리다. 데스크탑 애플리케이션이야 늘 사용하던 녀석이라 혼란이 없는데, 일단 윈도우 8 전용 애플리케이션인 앱을 띄우고 나면 도대체 어떻게 여기서 나가야할지 눈앞이 캄캄해지기 마련이다. 다음과 같은 몇 가지 힌트를 기억하자.

  • 앱 메뉴바를 띄우러면 마우스를 화면 위로 올리거나 터치로 상단 가장자리 스와이프를 사용하면 된다. 숨겨진 앱 메뉴바가 나오면 축소, 종료가 가능하다.
  • 아니면 마우스를 화면 아래로 내리거나 Windows+T 키를 누르거나 하단 가장자리 스와이프로 작업 표시줄을 꺼내면 된다. 여기서 기존 데스크탑을 다루듯 앱을 다루면 된다.
  • 아주 익숙한 ALT+TAB 키나 Windows+TAB 키를 눌러 프로그램 전환이 가능하다. WINDOWS+TAB은 마우스를 사용해 왼쪽 상단으로 가거나 터치에서 왼쪽 가장자리 스와이프로 대신할 수 있다.

다음으로 참 바(Charm Bar)라는 요상한 기능에 대해 이해해야 한다. 원래 마이크로소프트는 '시작 메뉴'를 완전히 없애버리고 싶었기에 윈도우 8에서는 진짜 그렇게 했다(물론 3rd party 프로그램을 사용하면 다시 살릴 수 있긴 하지만...). 그리고 대체품으로 바로 참 바를 넣었다. 참 바는 Windows+C키나 터치로 오른쪽 가장자리 스와이프로 꺼낼 수 있다. 참 바에는 검색, 공유, 시작, 장치, 설정이라는 다섯 가지 메뉴가 나오며, 시작 메뉴를 추상화해 제공한다는 의도는 좋았지만 정말 이걸로 뭔가를 하려면 상당한 시행착오가 필요하다. 마이크로소프트가 참 바에 얼마나 공을 들였느냐 하면 각 메뉴에 대한 단축 키를 제공한다는 사실로 미뤄 짐작이 가능하다. 검색(Windows+F은 파일, Windows+S는 전체, Windows+Q는 앱, Windows+W는 설정), 공유(WIndows+H), 프로젝트(Windows+P), 설정(Windows+I), 장치(Windows+K) 등이 여기 해당한다. 하지만 막상 참 바는 태블릿이 아닌 이상 일반 데스크탑/노트북에서는 불편해 사용자들은 Pokki와 같은 시작 메뉴를 설치해 사용하는 경우가 많다. 하지만, 참 바도 싫고 예전 방식과 유사한 시작 메뉴도 싫을 경우 다른 트릭은 없을까? 앱 모드와 데스크 탑 모드와 무관하게 Windows 아이콘을 오른쪽 버튼으로 누르거나 Windows+X키를 누르면 신나는 일이 벌어진다. 윈도우 도구라는 메뉴가 나타나면서, 실행을 위한 앱/애플리케이션 목록 확인을 제외하고 여러분이 하고 싶어하는 대부분 작업이 가능해진다.

앱이나 데스크탑용 애플리케이션 목록을 어디서 볼 수 있는지가 다음 고민이다. 물론 참 바에서 검색 기능을 사용해 원하는 프로그램을 선택할 수도 있지만, 뭐가 설치되어있는지 그리고 이름이 뭔지 알게 뭐람? 이런 경우에는 시작 화면으로 가서(시작 화면으로 가는 방법은 시작 버튼을 콕 누르면 된다. 참 쉽죠?) 선택을 해야 하는데, 내가 원하는 모든 프로그램을 보려면 아래쪽 화살표를 누르면 전체 앱/데스크탑 애플리케이션 목록이 등장하므로 필요한 녀석을 선택할 수 있다. 만일 정말 자주 사용하는 프로그램이 있다면, 전체 앱 보기 화면에서 오른쪽 버튼을 눌러 아예 시작 화면에 고정하거나 데스크탑 작업 표시줄에 고정하는 방법도 있다. 시작 화면에 고정한 다음 위치를 변경해 잘 보이는 곳에 두면 될 것이다.

윈도우 8.1의 경우 데스크탑의 작업 표시줄에 마우스를 가져간 다음 오른쪽 버튼을 눌러 속성을 선택한 다음 탐색 탭을 누르면 몇 가지 중요한 옵션이 있다. 우선 "시작 화면으로 이동하면 자동으로 앱 보기 표시"를 선택할 경우 시작 화면으로 갈 경우 타일 화면 대신 전체 앱 보기가 나온다. 게다가 "범주별로 정렬된 경우 앱 보기에 데스크톱 앱을 먼저 표시"를 선택하면 데스크탑 애플리케이션부터 먼저 보여주므로 Windows+X 키와 함께 사용하면 적어도 시작 화면과 유사한(응?) 효과를 얻을 수 있다.

이제 고급 기능을 하나 더 소개하겠다. Windows+. 키를 누른 다음 화살표 키를 누르면 화면을 분할해 앱 두 개나 앱과 데스크탑 애플리케이션을 한 화면에 동시에 배치할 수 있다. 폭도 조정할 수 있으므로 작업 과정에서 필요한 만큼 공간을 확보하기 바란다. 전체 단축기 목록이 궁금하면 List of Windows 8 Shortcuts을 참고하면 된다. 심심풀이로 한번씩 읽어보면 의외로 도움이 되는 기능을 찾을지도 모르겠다.

마지막으로 서피스 프로 3과 관련된 필살기를 몇 가지 소개할 차례다. 먼저 참 바를 꺼내기 위해 아예 타이핑 커버 F5~F8에 검색, 공유, 장치, 설정이 할당되어 있다. 키보드 백라이트 밝기를 높이려면 F2를, 낮추려면 F1을 누른다. 원래 기능 키로 사용하려면 Fn을 누르면서 기능 키를 누르거나 Fn+Caps 키를 눌러 원래 Fn과 타이핑 커버 기능 상태를 토글하면 된다. Fn을 사용하면 몇 가지 불가능(?)하게 보이는 작업도 가능하다. 예를 들어 화면 밝기를 높이려면 Fn+Del, 줄이려면 Fn+Backspace를 누르면 된다. 페이지 업은 Fn+위 화살표, 페이지 다운은 Fn+아래 화살표, Home은 Fn+왼쪽 화살표, End는 Fn+오른쪽 화살표를 누르면 된다. 태블릿처럼 사용할 경우 '화면' 항목에서 자물쇠 아이콘이 있는데, 이 곳에서 화면 자동 기능을 끄고 켤 수 있으므로 누워서(!) 뭔가를 읽고 볼 때 유용하게 사용하기 바란다.

마지막으로 스크린 캡쳐 관련 기능을 소개한다. Fn+스페이스 바는 전체 화면 스크린 캡쳐(클립보드), Alt+Fn+스페이스 바는 현재 창 스크린 캡쳐, Fn+Windows+스페이스 바는 전체 화면 스크린 캡쳐(사진 폴더에 저장)라는 사실을 기억하자. 태블릿 본체에 있는 윈도우 버튼+볼륨 다운을 눌러도 스크린 캡처가 가능하다는 사실을 알면 타이핑 커버가 없을 경우에도 캡쳐가 가능하다.

Surface Pro 3 User Guide(영어)서피스 프로3 단축키 + 윈도우 8.1 공통 단축키 모음(한국어)를 참조하면 서피스 프로 3와 조금 더 친숙해지지 않을까 싶다.

EOB

토요일, 10월 18, 2014

[B급 프로그래머] 10월 3주 소식

금주는 무척 바빠서 오늘 조금 늦게 소식을 올려드린다.

  1. 웹/앱 소식
  2. 개발/관리도구 소식
  3. 고성능 서버/데이터베이스 소식
  4. 기타 읽을거리

월요일, 10월 13, 2014

[번역은 즐거워] 클릭의 황제: IBM 모델 M 키보드

The Verge를 읽다 King of click: the story of the greatest keyboard ever made라는 기사가 눈에 띄여 독자 여러분을 위해 전문을 번역해봤다.

클릭의 황제: 지금까지 만들어진 가장 훌륭한 키보드의 역사

30년 동안 흉내, 복제, 개선되어 온 IBM의 모델 M은 현대적인 키보드 디자인의 조상이다.

결국 원하는 물건을 수중에 넣게 되었을 때 IBM 키보드에 대해 처음 받는 인상은 크기다. 치클릿 키와 2~3 파운드짜리 유리 화면을 여러 해 동안 두들 긴 다음에 크고 무거운 5파운드 짜리 플라스틱과 금속(두꺼운 철판을 포함하는) 덩어리 앞에서 서면 주눅이 든다. 다음은 소리이며, 업계 표준인 베이지색 주변 기기를 컴퓨터 역사상 가장 소중하고 유용한 고전으로 바꾼 딸깍거리는 클릭음이 주인공이다.

내년이면 모델 M이 서른을 맞이한다. 하지만 너무나도 많은 사람에게 모델 M은 여전히 사용할 가치가 있는 유일한 키보드다. 모델 M은 최근에 마인크래프트를 만든 마르쿠스 알렉세이 "노치" 페르손의 책상 위에 등장했다. 수천 불에 이르는 그래픽 카드가 장착된 게임 전용 PC에 붙어서 말이다. "모델 M은 지금껏 만들어진 최고의 키보드입니다."라고 페르손은 PC 게이머에 말했다. 유튜브를 검색해보면 엄청난 모델 M 타이핑 시연 비디오, 박스 개봉 비디오, 모델 M과 다른 키보드 사이의 소리 비교 비디오가 나온다. 처음 등장한 이후에 모델 M은 키보드 경험을 충족하는 표준으로 자리잡아 왔다.

"저는 아이패드 사용을 즐겨합니다. 훌륭한 디바이스니까요. 킨들 이-리더는 아름다운 물건입니다."라고 프린스턴 대학교 IT 관리자인 브랜든 에르미타가 말한다. "하지만 저는 터치스크린으로는 결코 이야기나 논문을 쓸 수 없었습니다. 일을 할 수도 없었습니다." 에르미타는 모델 M을 살리기 위해 노력했다. 재활용 센터와 부품 창고에서 모델 M을 구해 자신의 사이트인 ClickyKeyboards에서 판매한다. 또한 제대로 된 모델 M을 다루는 개인 박물관을 운영한다. 에르미타는 지난 10년 동안 4000에서 5000대 키보드를 애호가들의 손가락 아래에 놓아줬다고 추정한다.

많은 사람과 마찬가지로, 내게는 어린 시절 모델 M을 사용한 어렴풋한 기억이 존재한다. 지난 달, 뉴 저지 교외로 에르미타를 만나러 떠났고 모든 시절에 걸쳐 가장 사랑받는 키보드의 마법을 재발견했다.

에르미타의 널찍한 사무실을 방문한 날, 스무 개 남짓한 키보드가 좋은 와인처럼 랙에 편안하게 자리 잡고 있었다. 그 위에 유리 케이스로 보호되고 있는 검정 키보드가 하나 놓여있었다. 에르미타의 수집품 중 가장 오래된 키보드 중 하나인 프로토타입 모델 M이었다. 바구니 하나에는 분리되어 과자 부스러기를 치울 필요가 있는 수집품과, 바늘, 전의 소유주에서 얻은 다양한 폐기물이 담겨 있다. 최근 몇 년이라는 세월 속에 처음으로 모델 M을 보니 가장 주목할만한 사항은 가장 평범하게 보이는 외형이었다. 모델 M은 과거의 유물이었지만, 오늘날 사용하는 거의 모든 키보드에 DNA가 남아 있다.

쿼티 키보드 배열은 19세기 후반에 타이프라이터를 위해 설계되었으며, 아주 빠르게 퍼져나갔다. 하지만 IBM이 1981년 첫 PC를 출시할 시점에는 배열은 더 이상 스페이스와 대문자로 구성된 단순한 형태가 아니게 되었다. 사용자는 워드 프로세서, 터미널, 마이크포컴퓨터와 통신하기 위해 특수 키를 요구했다. 지나고 나서 보니까, 70년대와 80년대에 나온 키보드는 친숙함에서 벗어나 반직관적이고 완전히 낯선 이상한 물건이었다. IBM PC의 원본 83키가 장착된 (PC/XT라 알려진) 키보드는 가장 중요한 시프트와 리턴 키의 크기를 줄인데다 돌출부를 중앙으로 몰았고, 인쇄된 라벨은 수수께끼같은 화살표로 바뀌었다. 전반적인 모습은 작은 버튼과 불가해한 빈틈이 엉망으로 자리잡은 듯한 느낌을 줬다. 1984년 8월에 IBM은 훨씬 더 구미에 당기는 PC/AT 키보드를 발표했다. 직전 모델과 비교해 "AT 키보드는 난공불락이다."라고 PC 매거진이 말했다. AT는 오늘날 유행하는 키보드로 자리잡지는 못했다. 기능 키는 상단 대신 왼쪽 구석에 두 줄로 배열되었다. 이스케이프 키는 키패드 영역에 자리잡았다. 그리고 컨트롤과 캡스 락 키는 위치가 바뀌었다. 그럼에도 불구하고 AT 키보드는 현대적인 관점에서 직전 키보드와 비교해 훨씬 깔끔하고 이해하기 쉬웠다.

하지만 IBM은 단순히 받아들일만한 키보드 이상을 원했다. 80년대 초기, 전문가와 사용자로부터 정보를 얻어 더 나은 키보드를 만들기 위해 10명으로 구성된 기동 부대를 조직했다. 초기 디자인은 "여러 포커스 그룹에서 수행하던 방식을 따르는 대신 빠르고 신속하게 진행되었습니다"라고 지금 널리 쓰이는 Ctrl+Alt+Delete 기능의 창시자로 알려졌고 기동 부대의 일원이던 데이비드 브래들리가 말한다. 새로운 그룹은 초보 컴퓨터 사용자를 불러와 더욱 친숙한 형태가 되게 키보드를 테스트했으며, 중요한 제어 키를 더 크게 만들고 Ctrl과 Alt와 같은 자주 사용되는 키를 중복시킴으로써 양쪽 어느 손가락에도 닿게 만들었다. 키캡은 본체에서 분리 가능해졌으며, 사용자는 필요에 따라 교체할 수 있게 되었다. 그리고 모델 M이 탄생했다.

IBM3161 터미널의 일부로 소개된 모델 M은 초기에 "IBM 개선 키보드"라 불리었다. PC 호환 버전은 다음 봄에 등장했고, 1987년 IBM PS/2에 표준으로 장착되었다. 에르미타가 검증한 아주 초기 터미널용 모델 M은 1985년 6월 10일에 생산되었다. 아주 구체적인 날짜이며, 이렇게 특정할 수 있는 이유는 모든 모델 M 키보드에는 뒷면에 ID와 제조일이 찍혀있기 때문이다. 에르미타는 모델 M의 생일에 만들어진 키보드를 찾기 위해 20대부터 꾸준히 사업을 진행하고 있다. 에르미타는 또한 모델 M 어카이브 프로젝트를 주도하고 있는데, 자신의 사업에서 얻는 정보 뿐만 아니라 다른 사람이 제출한 (ID, 제조일, 공장 번호) 정보를 사용해 키보드를 추적하는 엄청나게 긴 스프레드 시트 목록을 유지한다.

에르미타의 수집품은 여행사 직원을 위해 내장된 키보드를 장착한 모델, 계산원을 위해 3열로 묶인 키가 장착된 작은 모델 등과 같이 특화된 업계에 맞춤식으로 제작된 키보드를 포함한다. "컴퓨터가 처음 소개되었을 때, 사업용 기계로 불렸습니다."라고 전 IBM 관리자였던 네일 무스켄스가 말한다. 구형 키보드에는 여전히 특정 프로그램을 위한 명령어가 담긴 스티커가 붙어있으며, 비평가들은 워드스타나 로터스 1-2-3와 같은 소프트웨어를 얼마나 쉽게 사용할 수 있는지를 판단하는 방법으로 키보드를 평가했었다.

어떤 비평가는 모델 M이 제안한 뒤섞인 키보드 배열에 다시 한번 당황했으나, 이런 디자인이 받아들여질지 계속해서 의구심을 품었다. "저는 IBM이 저에게 다음과 같이 말하는 태도가 불편했었습니다. '당신은 이 키보드를 배우는 편이 바람직하다. 왜냐하면 이 키보드가 바로 미래의 키보드이기 때문이다.'"라고 PC 매거진에 올라온 기사는 컴퓨터 역사상 엄청나게 특정 기술을 과소평가한 내용으로 밝혀졌다.

모델 M의 배열은 너무 오랫동안 사용되어 원래 그렇다고 여겨진다. 하지만 이 키보드의 후손들은 모델 M에서 가장 특징적인 기능 중 하나이며 PC/XT에서 도입된 키 시스템인 '조임 스프링'이 빠져버렸다. 플런저와 같이 직접 눌리는 기계적인 스위치 대신, 모델 M에는 "버클"이라는 찰각거리는 받침에 접촉한 다음 키에서 손을 땔 경우 원 위치로 튕겨 돌아오는 스프링이 개별 키 아래에 달려 있다. 대다수 현대적인 키보드에서 볼 수 있는 부드럽고 조용한 고무 덮개가 줄 수 없는 방식으로 사람들의 주의를 끌었다. 이는 항상 좋은 특성만은 아니었다. 모델 M 소유주들은 종종 끊임없는 딸깍거림을 견디지 못하는 배우자와 동료 작업자들의 이야기를 슬픈 듯이 올리곤 했다. 하지만 팬들은 스프링의 저항과 청각적인 '딸깍거림'이 키 압력이 가해졌음을 명확하게 느끼게 만들어 오류를 줄인다고 말한다. 더욱 중요하게, 모델 M에서 타이핑 경험은 특별한 느낌을 전해줬다. 타이프라이터와 마찬가지로 날카로운 클릭음은 글자마다 물리적인 존재감을 부여한다.

모델 M이 등장한 직후, 시장에 복제품이 쏟아져 나왔다. 이에 대응해 IBM은 최소한으로 다시 설계한 키보드 신형 버전을 제공할 뿐이었다. 이와 같은 결과로 모델 M에 대한 향수가 세대 사이에 퍼졌다. "사람들은 종종 이메일로 제게 연락합니다. 1980년대 20대 공학도로 돌아갔을 때를 상기하게 만들어줘서 감사하다는 내용입니다."라고 에르미타가 말한다. 더 젊은 구매자들은 중학교 시절 장난으로 급우가 사용하던 키보드 배열을 바꿨던 사실을 기억한다. "저는 이런 이야기를 여러 번 들었습니다."

1990년 IBM은 미국 타이프라이터, 키보드, 프린터 사업을 렉스마크라는 새로운 회사로 분리했다. 6년 후, 렉스마크는 키보드 부문을 포기했다. 무스켄스의 회상에 따르면 업계 전반에 걸쳐 더 저렴한 제품으로 이동하던 시기었다. IBM은 맥시 스위치라는 회사의 스코틀랜드에 위치한 공장에서 나오는 제품에 대해 로열티를 받아왔다. 하지만 우리가 아는 범위 내에서 마지막 모델 M은 1999년에 양산 라인을 탔다.

여전히 80불 정도에 공식 모델 M을 구입할 수 있지만 IBM 상표가 달려있지 않다. 렉스마크가 사업을 접으면서, 무스켄스와 다른 직원들은 유니캠프라는 회사에서 일하며 천천히 키보드의 지적 재산권과 제조 설비를 구입하기 시작했다. "우리는 전자 장치를 바꿔야만 했습니다."라고 무스켄스는 말한다. "키캡 커버 재료도 1999년으로 되돌렸습니다. 하지만 나머지는 거의 그대로 남아 있습니다."

몇몇 사람들에게는 이 정도로 충분한 진품 느낌을 주지 못했다. "우리는 항상 'IBM 로고가 붙은 제품을 구입할 수 있는지'라는 질문을 받습니다. 그러면, '아니오, IBM이 로고를 소유합니다'로 대답합니다."라고 무스켄스가 말한다. 무스켄스는 IBM이 여전히 현존하는 상용 고객을 위해 몇몇 키보드를 주문하고 있지만, 예전 시절의 로고가 붙은 제품을 원한다면 이베이나 에르미타와 같은 사람을 찾아야 한다고 말한다. 몇몇 사람들에게는 내재적인 우월성과 융통성이 진품이라는 향수를 앞도한다. 몇몇 사용자들은 블루투스로 무선이 가능하게 개조한다. 한 레딧 사용자는 레이저나 에얼리언웨어와 같은 상판 설계를 떠올리게 백라이트 키로 수정하는 고유의 방법을 올렸다. 하지만 제한된 공급 내에서 모든 모델 M 팬은 예상보다 오랜 기간 동안 타이핑을 하고 있다.

"모델 M은 기름과 같습니다. 어느날 기름이 말라버리겠지요. 엄청난 충격이 될 것입니다."라고 에르미타가 말한다. 물론 지금 현 상태로는 이런 충격은 아주 먼 미래의 일로 보인다. 가장 오래된 모델 M은 이미 30년 동안이나 버텼다. 그리고 에르미타는 아마도 앞으로 10년이나 20년을 더 버티리라 희망한다. 적어도 컴퓨터 역사의 일부를 한 세대 이상이 목격하기에 충분한 시간이다.

모델 M은 최고 성능의 컴퓨터가 여전히 업계에 통용되고 있던 시점에 나온 인공물이다. 이 키보드를 표준으로 탑재한 컴퓨터인 PS/2는 최소 가격이 2,295불(오늘날 거의 5,000불)이었고, 그럼에도 불구하고 최신 스마트 폰과 비교하면 성능이나 융통성이 떨어진다. 몇 십년이 지나고 나서, 컴퓨터는 기하급수적으로 능력이 올라갔고 극적으로 가격이 내려갔다. 하지만 이런 움직임 속에서, 제조사들은 내구성과 오랜 수명이라는 개념을 팽개쳐왔다. 셀 수 없는 수 많은 외부 회사가 도매가에 특별한 마우스와 키보드를 팔 준비가 된 환경에서 도매가보다 더 많이 투자하는 행위를 정당화하기란 어렵다.

범람하는 일회성 제품은 우리가 잃어버린 무엇에 대해 날카롭게 자각하게 만들어왔으며, 스트레스와 충격을 버틸 수 있는 하드웨어에 대한 열정을 불러일으켰다. 한 레딧 사용자는 최근 다음과 같은 글을 남겼다. "이 놈들은 _진짜_ 게임용 키보드입니다. 아무리 굴려도, 키보드보다 당신이 먼저 죽을 겁니다."

EOB