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