노드 플랫폼의 주요 프로그래머로서 Hands-on Node.js와 『Professional Node.js』를 출간한 페드로 테이세이라가 이번에는 노드에서 동작하는 웹 애플리케이션 UI의 테스트를 할 때 기존의 테스트 프레임워크인 PhantomJS와 SlimerJS 등과는 차원이 다른 좀비(ZombieJS)를 이용한 지침서를 내놓았다. 좀비는 경량화된 헤드리스 타입의 웹브라우저 역할을 수행하며 모카(Mocha), 노드와 연결되어 빠르고 자동화된 UI 테스트의 실행을 가능하게 한다.
이 책은 웹 애플리케이션 개발에 서툰 초보자부터 백엔드와 프론트엔드 기술을 섭렵한 개발자에 이르기까지 자신이 개발하거나 참여한 프로젝트의 전체 기능을 자동화된 형태로 테스트를 할 때 유용한 도움을 줄 수 있다. 1장, 2장, 3장을 통해 좀비, 노드, 모카의 기본 지식과 설치 방법이 상세하게 나와있어 숙련된 개발자에게는 지루할 수 있으나 초보 개발자는 이를 발판 삼아 좋은 개발 경험이 될 수 있을 것이다. 또한 테스트를 위한 예제 코드와 결과 내용을 자세히 서술하고 있어, 코드를 실습하는 과정에서 방향을 잃지 않고 끝까지 완성할 수 있도록 가이드를 제시하고 있다.
이 책의 5장과 7장은 웹 애플리케이션의 UI 테스트를 실행하기 위해 웹 앱을 작성하고 기능의 이슈가 있을 때 디버깅할 수 있는 방법과 엘리먼트의 유효성 검사 등 필드에서 일어날 만한 상황을 이해하기 쉬운 형태로 설명하고 있어 개발 경험에 도움이 될 것이다. 또한 이벤트 기반의 웹 앱에서 핵심 기능인 AJAX 요청 테스트의 설명은 짧지만, 마우스 이벤트(mousedown, mouseup 등)를 처리하는 핸들러 함수의 사용을 코드 레벨에서 손쉽게 접근할 수 있도록 8장에서 서술한다.
전반적으로 설명 내용이 쉽게 나와 있지만 초보자만을 위한 것은 아니다. 웹 개발자로서 테스트는 개발 경험과는 별도로 반드시 거쳐야 하는 과정이며, 테스트에 많은 시간이 소요된다는 점은 개발자라면 누구나 인정하는 사실이다. 따라서 이 책은 기존 테스트 프레임워크의 사용보다 빠르고 효과적이며 자동화된 테스트를 바라는 개발자에게 반드시 유용할 것이다.
아파치 스파크는 IBM, 알리바바, 텐센트, 데이터브릭스 등 유수 해외 기업들이 데이터 분석을 위해 끊임없이 확장해서 사용하고 있는 빅데이터 분석 프레임워크다. 이 아파치 스파크의 상승세는 실로 놀랍다. 특히 IBM은 향후 1년간 스파크를 이용해서 100만 데이터 사이언티스트 육성 계획까지 발표했다.
이 책은 스파크 1.X버전에서 업그레이드된 2.0버전을 다루고 있는데, 기존 버전에서 좀 더 확장된 기능을 설명하며 개별 기능을 설명할 때마다 스파크 셸을 이용해서 독자가 스스로 할 수 있도록 가이드를 제시한다. 또한 책의 마지막 부분에는 케이스 스터디를 통해 단편적인 기능 테스트를 넘어 트윗과 같은 상용 데이터를 이용해서 데이터를 분석하는 방법을 자세히 설명한다. 따라서 독자에게는 스파크 애플리케이션 개발을 직접 체험해볼 수 있는 기회를 제공한다. 한편으로는 2판과 큰 차이를 못 느낄 수 있다고 생각하겠지만,스파크의 기초 지식을 습득한 개발자의 경우 1.X버전 대비 스파크 2.0의 확장 기능을 학습하고, 그 기능을 토대로 실전 예제 프로그램을 경험할 수 있는 좋은 기회가 될 것이며, 스파크 초보자에게는 스파크 기초 지식과 더불어 알파고의 분석 방법을 엿볼 수 있는 의미 있는 기회가 될 것이다.
안드로이드는 오픈소스 형태로 제공되며 수많은 소스 공헌자와 커뮤니티가 왕성한 활동을 하고 있다. 따라서 다양한 앱과 라이브러리 그리고 앱 개발에 필요한 도구들이 많이 개발되었다. 이 같은 다양한 기술을 이용해서 많은 개발자들은 사용자들이 원하는 다양한 앱들을 개발하고 앱 스토어에 공개한다. 이 같은 앱 중에서 특히나 주목할 만한 것 중 하나는 사용자와 대화할 수 있는 음성 처리 앱이 될 수 있다. 과거에 많은 개발자들이 음성 처리 앱을 개발했으나, 사용자의 음성 인식 정확도를 신뢰할 정도의 수준으로 제공하지 못했고 개발을 진행한다고 하더라도 많은 비용을 들여야 했다.
이 책은 사용자와 대화할 수 있는 앱을 개발하기 위해 오픈소스 형태로 제공되는 안드로이드에 음성 처리에 필요한 기술들을 접목하는 앱 개발 방법을 설명한다. 물론 음성 처리 기술 또한 오픈소스로 제공되는 라이브러리와 음성 문법 구현 기술을 사용하고 있어 비용적인 면에서 커다란 장점이 될 수 있다. 또한 이 책은 사용자의 음성인식 정확도를 높이고, 다양한 언어를 사용하며, 음성에서 사용자가 말하려는 의도 파악, 지속적으로 대화를 이끌어 나갈 수 있는 다이얼로그 사용까지 설명하고 있어 진보된 음성 처리 앱을 개발할 때 상당히 유용하다.
각 장을 읽어가면서 독자는 자신이 필요한 기능을 발췌해서 개발 프로젝트에 통합할 수 있고, 새로운 앱 개발의 아이디어를 얻을 수 있다. 무엇보다 음성 인식에 필요한 음성 문법의 기본 지식을 공부할 수 있는 좋은 기회가 될 수 있다. 책 중간 중간에 음성 처리 문법과 이와 관련된 가이드 문서 위치를 안내해주므로, 음성 처리의 고급 기술에 관심이 많은 개발자들에게는 첫 발을 내딛을 수 있는 시작 지점이 될 수 있다.
이 책은 영어를 주 언어로 선택해서 앱의 개발 과정을 설명하나 다른 언어를 이용해서도 앱을 개발할 수 있다. 따라서 이 책을 지침서로 다양한 음성 인식 앱, 대화형 앱 등의 개발을 권장한다.
익스프레스(Express)는 노드 앱을 개발할 때 높은 성능을 제공할 수 있는 웹 프레임워크다. 익스프레스의 주요 특징으로는 강력하고 구조화된 라우팅, 템플릿 언어 지원, 명확한 에러 처리를 들 수 있다. 이와 같은 특징들을 위해 많은 개발자가 심혈을 기울였는데, 이중 TJ Holowaychuk, Ciaran Jessup, Aaron Heckmann, Guillermo Rauch가 핵심적인 역할을 했다. 익스프레스 프레임워크와 함께 사용해 노드 앱을 확장하는 데 기여할 수 있는 서드파티 모듈도 있는데, 이는 express-resource, express-messages, express-configure, express-namespace, express-expose, express-params, express-mongoose가 있다. 서드파티 모듈의 내용을 자세히 알고 싶다면 http://firejune.io/express/를 살펴보기 바란다.
총 8장으로 구성된 이 책은 각 장마다 익스프레스를 사용하는 데 필요한 기본 지식과 관련 예제 코드가 담겨 있다.
우선, 1장에서는 익스프레스의 탄생 배경과 설치 방법을 익힐 수 있다. 또한 이 책을 학습하는 과정에서 알아두어야 할 익스프레스 API 설명과 실제 사용 방법을 배울 수 있다.
1장 내용을 기반으로 2장에서는 기본 기능을 갖춘 익스프레스 앱을 구현하는 내용을 설명한다. 이때 제이드라는 템플릿 언어가 소개된다. 제이드(Jade)를 통해 복잡한 프로젝트에서 좀 더 간편하게 HTML 코드의 생성 방법을 알게 된다. 또한 앱 개발의 목적에 따라 노드 모듈 혹은 미들웨어 사용 방법도 2장에서 알려준다.
2장의 마지막 부분에서는 하나의 앱을 다양한 실행 환경에서 동작시킬 수 있는 방법에 대해서도 간략하게 설명하고 있어, 각 실행 환경에 따라 앱 테스트를 해야 하는 부담을 덜어준다.
3장은 라우트 정의와 사용 방법을 설명하는데, 예를 들면 라우트 식별자와 우선순위 설정, 처리 방법 설정과 구조화를 통한 라우팅 최적화 방법 등을 제시한다.
4장에서는 서버가 전송하는 응답에 대해 HTTP 상태 코드 설정과 서버가 전송하는 데이터 타입, 그리고 다양한 파일 전송 방법을 설명한다. 익스프레스로 사용자 정의 미디어 타입과 HTTP 응답 헤더를 설정하는 방법도 여기에서 자세히 기술한다.
5장과 6장에서는 익스프레스에서 사용할 수 있는 템플릿 언어인 제이드(Jade)와 CSS 코드를 생성하는 스타일러스(Stylus)에 대해 설명한다. 5장은 제이드의 장점과 사용시 주의할 점을 개발자 관점에서 설명하며, 6장에서 설명하는 스타일러스는 개발자들에게 좀 더 편리한 CSS 코드 생성 기법을 제공한다. 제이드는 기존의 HTML 코드에 배반하는 언어가 아닌 HTML 코드를 포용하면서 시간을 절약하면서 HTML 코드의 계층화를 적극 도울 수 있는 템플릿 언어로서, 기존에 배포된 템플릿 언어를 이해하는 데에도 도움이 될 것이다.
7장에서는 익스프레스를 이용해 폼 전송 방법과 쿠키 생성 방법을 학습할 수 있는데, 필요에 따라 서명이 필요한 쿠키를 생성할 때 개발자의 요구에 따라 편의를 제공하는 장점이 있다.
마지막으로 8장은 개발한 앱을 프로덕션 모드에서 동작시키고 벤치 마킹하는 방법을 설명한다. 여기서는 앱 개발의 최종 목적을 상기하고 앱의 성능을 높일 수 있는 방법도 자세히 설명한다. 따라서 상용 목적을 고려한 앱 개발자라면 꼭 챙겨 읽을 것을 권장한다.
이 책은 웹 앱을 처음 접하는 초보자부터 대규모 프로젝트를 구조적이고 효율적으로 구현하려는 개발자까지 어렵지 않게 익스프레스를 접근할 수 있도록 가이드한다. 웹 초보자인 경우, 자바스크립트 객체와 이벤트 처리의 기본 개념을 학습한 후에 이 책을 학습하면 익스프레스에 대한 깊은 지식을 얻을 수 있을 것으로 기대한다. 숙련된 개발자의 경우, 웹 앱을 구조적으로 개발하고, 적은 시간과 노력으로 유연한 유지보수를 할 것이다.
AngularJS는 이미 많은 출판사에서 다양한 서적이 출간되었다. 그럼에도 이 책이 출간된 이유는 분명 존재한다. 바로 빠른 앱 개발과 고도화된 성능 최적화 방법을 잘 설명하는 책이기 때문이다.
하나의 웹 앱은 출시되기까지 많은 절차를 거친다. 기획, 디자인, 동작 환경에 따른 기능 적합성과 디자인 검수, 개발, 테스트 등의 절차가 필요하다. 만약 시장의 요구사항을 적용해서 빠른 시간 안에 기본적인 애플리케이션을 개발하려면 시간이 오래 걸릴 수도 있으므로, 자칫 시장의 흐름을 놓칠 수 있다. AngularJS는 개발자와 비즈니스 팀에게 개발 시간을 줄여줄 수 있는 다양한 프로젝트와 템플릿, UI 프레임워크 등을 제공한다. 기존 DOM 요소나 재사용 가능한 DOM 컴포넌트를 매개변수로 사용하는 지시어(directive), 이중 중괄호 안에 작성하는 AngularJS 마크업 코드, 데이터를 표시할 때 사용하는 필터, 사용자 입력의 유효성을 검증하는 폼 컨트롤을 이용해서 개발자가 애플리케이션 템플릿을 작성할 수 있다. 따라서 개발자는 다양한 웹 페이지에 중복해서 개발해야 하는 기능이나 마크업 코드를 위 4가지 항목으로 시간을 단축시킬 수 있다.
데스크톱 환경은 풍부한 CPU와 메모리를 사용하기 때문에 성능을 크게 고민하지 않았지만 모바일 환경은 그렇지 않다. 특히 웹 페이지나 모바일 앱의 시작 페이지는 사용자에게 첫인상과 같으므로 로딩이 빨라야 한다. AngularJS는 웹 애플리케이션을 구성하는 요소인 HTML, CSS, 자바스크립트 파일의 크기를 현저히 줄일 수 있는 기술을 제공한다. 이 기술을 습득하려면, 이 책의 후반부를 살펴보고 꼭 직접 개발해보길 바란다. 놀라운 경험을 하게 될 것이다.
이 책은 빠른 웹 개발과 성능 최적화 방법 외에도 AngularJS의 기본 철학인 MVC 패턴을 이해하기 좋은 학습서다. 따라서 웹 초급 개발자도 이 책을 통해 웹 기술의 기초와 자바스크립트 디자인 패턴을 경험할 수 있을 것이다.
스파크는 대규모 데이터 처리에 효과적인 범용 고속 엔진이다. 스파크는 하둡(Hadoop), 메소스(Mesos)와 연동하거나 독립적으로 클라우드 환경에서 동작할 수 있으며 HDFS, 카산드라(Cassandra), HBase, S3를 포함한 다양한 데이터 소스에 접근할 수 있다. 스파크는 자바, 스칼라, 파이썬 API를 지원하며 개발자는 EC2 환경에서 제품용으로 1,000개 노드까지 확장할 수 있고, 연구 목적은 최대 2,000개의 노드까지 확장할 수 있다. 자세한 자료는 https://en.wikipedia.org/wiki/Apache_Spark를 참고하자.
스파크는 오픈 소스 형태로 누구나 다운로드할 수 있으며 아파치 라이선스 2.0으로 공개되어 있으므로 라이센스 규정을 준수해야 한다. GPL 3.0 버전과 호환성을 이루지만 GPL 1.0과 GPL 2.0과는 호환성을 제공하지 않는다. 아파치 인큐베이터에 통합되기 전 버전인 0.7 이전 버전은 BSD 라이센스로 배포되었다.
기존의 빅데이터 처리 엔진과는 달리 스파크는 두 단계로 구성된 맵리듀스 패러다임을 과감히 버렸으며, 일부 애플리케이션에게 하둡 맵리듀스의 데이터 처리 속도보다 100배까지 빠른 성능을 보장하고 있다. 또한 야후, 인텔 등을 포함해서 30여 곳이 넘는 기업들이 코드 공헌(code contribution)을 지속적으로 유지하고 있어 안정성도 가히 우수하다.
빅데이터를 이용해서 의미 있는 사업을 모색하는 기업이나 개인에게 스파크는 분명 좋은 기회를 제공할 것이다.
빅데이터라는 화두는 예전부터 개발자들 사이에서 많은 관심을 끌어 왔다. 빅데이터를 처리할 때 개발자들은 하둡을 많이 떠올렸으나 RDD 데이터 처리, 인메모리 처리, 일괄 처리와 더불어 포괄적 분석을 처리할 때 이제는 스파크를 떠올릴 것이다. 하둡과 비교해서 대략 100배 이상 속도가 빠르다는 점도 스파크의 확산에 도움이 되고 있다.
이 책의 장점은 무엇보다 스파크가 제공하는 라이브러리인 MLlib를 이용해서 적용할 수 있는 모델을 이론적으로 자세히 설명하면서도, 구현에 필요한 내용을 직접 코드로 설명한다는 점이다. 또한 로컬 모드와 클러스터 모드에서 스파크가 목표 애플리케이션에서 어떻게 동작하는지 상세히 서술하고 있다. 따라서 스파크를 처음 다루는 초보 개발자는 코드를 보고 따라 하면서 자신만의 빅데이터 분석 애플리케이션의 첫발을 내딛을 수 있는 반면, 중급 이상의 개발자는 상용 프로젝트를 진행할 때 하나의 레퍼런스로 삼을 수 있을 것이다.
아파치 스톰은 분산 환경에서 사용할 수 있는 실시간 컴퓨팅 시스템이다. 아파치 라이선스 정책 2.0하에 오픈 소스로 공개하고 있으므로 누구나 사용할 수 있으면서 다양한 분야에서 사용할 수 있다. 예를 들어, 실시간 데이터 분석, 온라인 머신 러닝, 지속적 연산, 분산 RPC, ETL(Extract, Transform, Load 동작으로서 데이터 웨어 하우스 구축시 데이터를 운영 시스템에서 추출하여 가공한 후 데이터 데이터 웨어하우스에 적재하는 모든 과정을 말함-위키 참조) 등을 꼽을 수 있다.
스택오버플로우(Stackoverflow)에서는 많은 개발자들이 활발하게 스톰을 이용한 개발을 진행하면서 의견 교환이 이루어지고 있다(스택오버플로우에서 storm tag로 검색할 수 있음). 예를 들어 스톰을 이용한 클러스터 구성과 성능 그리고 실제 개발에서 겪게 되는 이슈들에 대한 설명과 의견 교환이 이루어 지고 있다. 또한 깃허브(https://github.com/)에서 검색해 보면, 나단 마르즈(nathan marz)가 오픈한 소스의 기록(즉 fork와 star 개수)이 star는 8,000건이 넘어가며, fork는 1,500건을 훌쩍 넘어 있는 상태다. 또한 storm의 하위 프로젝트도 1,000건에 육박한다(2014년 6월 8일 기준). 이 수치는 이미 많은 개발자들이 스톰을 이용해서 빅데이터 분석에 합류한다는 점을 여실히 드러내고 있다.
아파치 스톰의 가장 큰 장점 중 하나는 데이터 베이스 통합이다. 예를 들어 MongoDB, RDBMS, 카산드라 등 다양한 데이터 베이스와 연동해서 스톰 볼트(즉 데이터 분석과 결과 출력에 알고리즘을 적용할 수 있는 노드) 헬퍼를 작성할 수 있다. 이는 빅데이터 분석을 위한 환경 구축과 호환성 면에서 강력한 기능이라고 할 수 있다. 또한 이 책에서 설명하는 기본적인 프로젝트 외에 좀 더 많은 프로젝트를 경험하고 싶다면 이에 대한 관련 문서도 많이 있어서 독자에게 좀 더 폭 넓은 프로젝트 경험을 선사할 수 있다(https://storm.incubator.apache.org/documentation/Home.html 참조).
빅데이터는 시대적으로 요구되는 기술 분야이면서 좀 더 나은 의사 결정을 위해 필수적인 요소로 자리 잡아가고 있다. 현재 다양한 빅데이터 분석 플랫폼이 있으나, 실시간 분산 환경에서 높은 성능과 다양한 데이터베이스와의 연동을 가질 수 있는 플랫폼은 흔치 않다. 또한 스톰을 이용하면 실시간 분석 프로세스와 배치 프로세스를 융합할 수 있으므로, 데이터 저장소의 크기 문제를 요구사항에 맞춰 적절하게 조율할 수 있다. 스톰은 이제 한국 빅데이터 개발자들에게 서서히 알려져 가고 있는 추세여서 스톰에 대한 기본서를 가지고 있는 것은 앞으로 필수적이 될 것이다.
끝으로 이 서적을 번역할 수 있는 기회를 제공해 준 에이콘 출판사 김희정 부사장님과 담당 편집자분께 감사의 말씀을 드리고 싶다. 그리고 항상 나를 응원하고 격려하며, 끝까지 지원해준 가족에게 사랑한다는 말을 전하고 싶다. 그리고 이 모든 과정을 주관하고 항상 모든 것의 중심이 되신 주님께 이 모든 영광을 드리고 싶다.