Hanbit ebook Realtime 95 URL Shortener 프로젝트로배우는 Vert.x 프레임워크 김요한지음
URL Shortener 프로젝트로배우는 Vert.x 프레임워크 김요한지음
URL Shortener 프로젝트로배우는 Vert.X 프레임워크 초판발행 2015 년 4 월 10 일 지은이김요한 / 펴낸이김태헌펴낸곳한빛미디어 ( 주 ) / 주소서울시마포구양화로 7길 83 한빛미디어 ( 주 ) IT출판부전화 02-325-5544 / 팩스 02-336-7124 등록 1999년 6월 24일제10-1779호 ISBN 978-89-6848-744-6 15000 / 비매품 총괄배용석 / 책임편집김창수 / 기획 편집정지연디자인표지 / 내지여동일마케팅박상용 / 영업김형진, 김진불, 조유미 이책에대한의견이나오탈자및잘못된내용에대한수정정보는한빛미디어 ( 주 ) 의홈페이지나아래이메일로알려주십시오. 한빛미디어홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr Published by HANBIT Media, Inc. Printed in Korea Copyright c 2015 김요한 & HANBIT Media, Inc. 이책의저작권은김요한과한빛미디어 ( 주 ) 에있습니다. 저작권법에의해보호를받는저작물이므로무단복제및무단전재를금합니다. 지금하지않으면할수없는일이있습니다. 책으로펴내고싶은아이디어나원고를메일 (ebookwriter@hanbit.co.kr) 로보내주세요. 한빛미디어 ( 주 ) 는여러분의소중한경험과지식을기다리고있습니다.
대상독자및참고사항 초급초중급중급중고급고급 이책은 Vert.x 기반의개발과정을정리한것으로, Vert.x의특징이나개발방법은좀더자세한설명이필요할수있다. 해당내용은다음도서가출간되어있으니참고하기바란다. 자바개발자를위한 Vert.x 애플리케이션개발 ( 한빛미디어, 2015) 01 자바스크립트로시작하는 Vert.x ( 한빛미디어, 2014) 02 Vert.x 는 JDK 1.7.0 이상에서실행되는데, 이책에서구현할프로젝트는 Java 8 이상에서지원하는람다 Lambda 표현식을사용하므로 JDK 8을설치한다. Vert.x의자세한설치방법은홈페이지 03 를참조하기바란다. 01 http://www.hanbit.co.kr/ebook/look.html?isbn=9788968487286 02 http://www.hanbit.co.kr/ebook/look.html?isbn=9788968486722 03 http://vertx.io/install.html
한빛 ebook 리얼타임 한빛 ebook 리얼타임은 IT 개발자를위한 ebook 입니다. 요즘 IT 업계에는하루가멀다하고수많은기술이나타나고사라져갑니다. 인 터넷을아무리뒤져도조금이나마정리된정보를찾기도쉽지않습니다. 또한, 잘정리되어책으로나오기까지는오랜시간이걸립니다. 어떻게하면조금이라 도더유용한정보를빠르게얻을수있을까요? 어떻게하면남보다조금더빨 리경험하고습득한지식을공유하고발전시켜나갈수있을까요? 세상에는수 많은종이책이있습니다. 그리고그종이책을그대로옮긴전자책도많습니다. 전자책에는전자책에적합한콘텐츠와전자책의특성을살린형식이있다고생 각합니다. 한빛이지금생각하고추구하는, 개발자를위한리얼타임전자책은이렇습니다. 1 ebook First - 빠르게변화하는 IT 기술에대해핵심적인정보를신속하게제공합니다 500페이지가까운분량의잘정리된도서 ( 종이책 ) 가아니라, 핵심적인내용을빠르게전달하기위해조금은거칠지만 100페이지내외의전자책전용으로개발한서비스입니다. 독자에게는새로운정보를빨리얻을기회가되고, 자신이먼저경험한지식과정보를책으로펴내고싶지만너무바빠서엄두를못내는선배, 전문가, 고수분에게는좀더쉽게집필할기회가될수있으리라생각합니다. 또한, 새로운정보와지식을빠르게전달하기위해 O'Reilly의전자책번역서비스도하고있습니다. 2 무료로업데이트되는전자책전용서비스입니다 종이책으로는기술의변화속도를따라잡기가쉽지않습니다. 책이일정분량이상으 로집필되고정리되어나오는동안기술은이미변해있습니다. 전자책으로출간된이 후에도버전업을통해중요한기술적변화가있거나저자 ( 역자 ) 와독자가소통하면서보완하여발전된노하우가정리되면구매하신분께무료로업데이트해드립니다.
3 4 독자의편의를위해 DRM-Free 로제공합니다 구매한전자책을다양한 IT 기기에서자유롭게활용할수있도록 DRM-Free PDF 포맷으로제공합니다. 이는독자여러분과한빛이생각하고추구하는전자책을만들어나가기위해독자여러분이언제어디서어떤기기를사용하더라도편리하게전자책을볼수있도록하기위함입니다. 전자책환경을고려한최적의형태와디자인에담고자노력했습니다종이책을그대로옮겨놓아가독성이떨어지고읽기어려운전자책이아니라, 전자책의환경에가능한한최적화하여쾌적한경험을드리고자합니다. 링크등의기능을적극적으로이용할수있음은물론이고글자크기나행간, 여백등을전자책에가장최적화된형태로새롭게디자인하였습니다. 앞으로도독자여러분의충고에귀기울이며지속해서발전시켜나가도록하겠 습니다. 지금보시는전자책에소유권한을표시한문구가없거나타인의소유권한을표시한문구가있다면위법하게사용하고있을가능성이큽니다. 이경우저작권법에따라불이익을받으실수있습니다. 다양한기기에사용할수있습니다. 또한, 한빛미디어사이트에서구매하신후에는횟수에관계없이내려받으실수있습니다. 한빛미디어전자책은인쇄, 검색, 복사하여붙이기가가능합니다. 전자책은오탈자교정이나내용의수정 보완이이뤄지면업데이트관련공지를이메일로알려드리며, 구매하신전자책의수정본은무료로내려받으실수있습니다. 이런특별한권한은한빛미디어사이트에서구매하신독자에게만제공되며, 다른사람에게양도나이전은허락되지않습니다.
차례 chapter 1 Vert.x 의특징 001 1.1 조금더완전한모듈화 002 1.2. 폴리글랏으로개발하기 002 chapter 2 URL Shortener 서비스개발 005 2.1 프로젝트준비 005 2.1.1 필요한기능 005 2.1.2 서버와 DB 구성 007 2.1.3 개발환경구성 008 2.2 웹서버개발 011 2.2.1 모듈검색 011 2.2.2 스크립트작성 012 2.2.3 서버실행 013 2.2.4 화면구현 014 2.3 MongoDB 데이터모델링 016 2.3.1 MongoDB 데이터의구조 017 2.3.2 일련번호 Collection 019 2.3.3 URL 저장 Collection 020 2.4 Persistor 모듈개발 021 2.4.1 프로젝트생성하기 022 2.4.2 모듈구현하기 025 2.4.3 람다표현식으로리팩토링하기 031 2.4.4 모듈설정파일작성하기 032 2.4.5 모듈패키징하기 033 2.4.6 테스트코드구현하기 035 2.4.7 모듈설치하기 039 2.4.8 모듈개선하기 040
2.5 API 서버모듈개발 045 2.5.1 프로젝트생성하기 045 2.5.2 모듈구현하기 046 2.5.3 모듈설정파일작성하기 051 2.5.4 모듈패키징하기 052 2.5.5 모듈테스트하기 052 2.5.6 모듈설치하기 057 2.6 API 서버실행 058 2.6.1 서버실행스크립트작성하기 058 2.6.2 서버실행하기 059
chapter 1 Vert.x 의특징 Vert.x는 JVM 기반의경량고성능애플리케이션을구축할수있는개발플랫폼으로, 자바스크립트엔진을기반으로실행되는 Node.js와마찬가지로비동기처리방식으로동작한다. 그러나 Node.js는하나의스레드로실행되지만, Vert.x 는 CPU 코어수에따라 Event Looping 스레드가실행되어 CPU 사용률을극대화할수있고, 클러스터환경을쉽게구성할수있으며, 분산되어실행된서버간데이터를상호공유하기쉽다는장점이있다. Vert.x는 Node.js 보다레퍼런스와에코시스템이부족한편이고, 설치와개발에필요한기반기술의복잡도역시상대적으로높은편이지만이미 Java에익숙한개발자라면 Vert.x를기반으로개발하는데큰어려움은없을것이다. Vert.x의특징은홈페이지 01 에서자세히확인할수있고관련서적도다수출판되어있으므로여기서는 Vert.x의특징과상세구조에대해서는설명하지않고, 실무개발자가실제프로젝트를개발하는과정을그대로따라할수있도록하는데중점을둔다. 실제개발을시작하기에앞서 Vert.x가 Node.js와크게구별되는특징 2가지를정리하고시작해보자. 01 http://vertx.io/ 1 Vert.x 시작하기 - 001
1.1 조금더완전한모듈화 Vert.x는모듈단위로개발되고하나이상의모듈이실행되어서버가실행된다. 하나의모듈은 ZIP 파일로패키징 ( 압축 ) 되며, 이파일에는하나의클래스로더 Class Loader 로실행되기위해필요한라이브러리도모두포함된다. Vert.x의각모듈이별도의클래스로더로실행된다는것은모듈자체가하나의완전한독립프로그램이라는것을의미한다. 이는하나의클래스로더에애플리케이션클래스파일과함께로딩되어실행되는 JAR Java Archive 라이브러리와는확연히구별되는점이다. 그림 1-1 JAR 라이브러리와 Vert.x 모듈의로딩비교 JavaMain.class Library1.jar Library2.jar Module1 Verticle1.class Library1.jar Library2.jar Module2 Verticle2.class Library1.jar Library2.jar Module3 Verticle3.class Library1.jar Library2.jar ClassLoader JAR 라이브러리하나의클래스로더에함께로딩된다. ClassLoader ClassLoader Vert.x 모듈 ClassLoader 별도의클래스로더에로딩되어실행된 Vert.x 모듈간의데이터송 / 수신과공유 는 In-Memory Data Grid 인 Hazelcast 을기반으로구현된 Event Bus 를통 해가능하도록설계되었다. 1.2. 폴리글랏으로개발하기 프로그래밍에서폴리글랏 Polyglot 의의미는다양한개발언어의특징을이해한상태에서여러가지개발언어를사용할수있다는것을말한다. 개발팀에서정의한개발표준에따라같은개발환경이라하더라도다양한개발언어로개발할수있다. 002 -
여러가지개발언어를사용할수있다면 multilingual 이라고할수도있겠지만, polyglot 을좀더의미있게적용하기위해서는나름의기준이나규칙을세우고이를기반으로개발할필요가있다. 존아우스터하우트 John Ousterhout 는좀더완전한애플리케이션을구성하는규칙을 Components + Scripts = Applications 라고하였다. 이는리눅스와같이컴파일되어동작하는커널컴포넌트와다양한컴포넌트들을조합해서실행하는셸프로그램으로분리되어있는것과같다. 그림 1-2 Components + Scripts = Applications Application User Scripts Bulit-in Scripts Kernel of Components Vert.x 는 Java, JavaScript, CoffeeScript, Ruby, Python, Groovy 등다양한개발언어를 JVM 기반으로실행할수있도록지원하고있다. 이러한개발언어들은컴파일해서실행하는것과스크립트로실행되는두가지형태로나눌수있고, 적절한상황에따라구별하여사용하는기준이나정책이필요하다. 그리고각각모듈 ( 컴포넌트 ) 단위로컴파일되거나실행도가능해야한다. 예를들면, Vert.x 기반으로애플리케이션을구축하는경우애플리케이션을구성하는모듈들은기능별로각각 Java로개발하고, 이모듈들을사용하여실행하는프로그램은 JavaScript로개발할수있다. 모듈의기능이명확하게정의되어있고내부적으로실행참조관계가복잡하게구성되어자주변화하지않는반면 ( 리눅스의커널컴포넌트 ) 실행스크립트는사용하고자하는모듈의기능들을조합하여최종실행하는것으로변화에보다유연해야할필요가있다 ( 리눅스의쉘스크립트 ). 1 Vert.x 시작하기 - 003
이외에도 Vert.x는 WebSocket 기능을통해실시간서버나 Push 애플리케이션서버구현이가능하고, 기존의 Java 애플리케이션에내장 embedded 하여함께실행되도록개발하는등다양한특징이있으므로 Vert.x 홈페이지에서자세히확인해보기바란다. 004 -