토요일, 2월 28, 2015

[일상다반사] (Quora) 뭔가를 배우는 가장 좋은 방법은?

Quora를 읽다보니 What's the best way to learn something?라는 흥미로운 글이 올라와서 독자 여러분들께 소개해드리겠다.

제 기억 속에서 떠나지 않는 제 은사가 들려준 이야기가 하나 있습니다.

도자기 선생님이 반을 둘로 나눴습니다.

한쪽 그룹에 선생님이 말했습니다. "이번 학기 동안 도자기 이론을 배우고, 완벽한 도자기를 계획하고, 설계하고, 만들 것입니다. 학기 말에 누가 만든 도자기가 가장 훌륭한지 품평회를 열 것입니다."

다른 그룹에 선생님이 말했습니다. "이번 학기 동안 엄청나게 많은 도자기를 만들 것입니다. 학점은 학기가 끝날 때까지 완성한 도자기 수로 매깁니다. 학기 말에, 가장 잘 만든 작품을 품평회에 낼 기회가 주어집니다."

도자기 하나만 만드는 그룹은 연구와 계획과 설계에 매진했습니다. 그리고 경쟁을 위해 완벽한 도자기 하나를 만들었습니다.

도자기를 여러 개 만드는 그룹은 즉시 찰흙을 빚어 도자기를 대량으로 만들기 시작했습니다. 큰 도자기, 작은 도자기, 간단한 도자기, 복잡한 도자기를 만들었습니다. 엄청나게 많은 도자기를 만들기 위해 체력을 소비했고 여러 주 동안 근육통으로 고생했습니다.

학기가 끝날 무렵, 양쪽 그룹은 경쟁을 위해 가장 잘 만든 도자기를 제출했습니다. 투표를 시작하자, 거의 모든 최고 작품상은 도자기를 여러 개 만든 학생들이 차지했습니다. 쌓은 경험을 바탕으로 완벽한 도자기 하나를 만드는 계획가들에 비해 실천가들은 엄청나게 좋은 도자기를 만들었습니다.

인생에서, 기술을 익히려면 도자기를 여러 개 만드는 방법이 가장 좋습니다.

EOB

토요일, 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