이미 소장하고 있다면 판매해 보세요.
|
1장 노드 소개
___1.1 노드는 서버사이드 자바스크립트다 ___1.2 CommonJS ___1.3 노드의 역사와 발전 ___1.4 노드의 탄생 배경 ______문화적인 이유 ______인프라적인 이유 ___1.5 노드의 특징 ______이벤트 루프 기반의 비동기 I/O ______싱글 스레드 ______자바스크립트 ______넌블록킹 I/O ___1.6 정리 2장 노드 프로그래밍 시작 ___2.1 설치 ______윈도우에서의 설치 ______맥OS에서의 설치 ______리눅스에서의 설치 ______여러 버전의 노드 동시 사용 ___2.2 REPL ___2.3 Hello World ___2.4 require()와 module.exports ___2.5 파일 읽기 예제 ___2.6 Web Server 예제 ___2.7 노드의 아키텍처 ___2.8 노드 코딩 관례 ___2.9 정리 3장 노드의 기본 모듈 ___3.1 전역 객체 ___3.2 유틸리티 ___3.3 이벤트 ___3.4 버퍼 ___3.5 스트림 ___3.6 파일시스템 ___3.7 경로 ___3.8 네트워크 ___3.9 HTTP와 HTTPS ___3.10 URL과 쿼리 문자열 ___3.11 자식 프로세스 ___3.12 클러스터 ___3.13 TCP를 이용한 채팅 예제 ___3.14 정리 4장 npm을 이용한 의존성 확장 모듈 관리 ___4.1 npm 소개 ___4.2 npm 설치 ___4.3 npm을 이용한 확장 모듈 설치 ______글로벌 설치 ______로컬 설치 ___4.4 확장 모듈 검색 ___4.5 설치된 확장 모듈 관리 ___4.6 package.json을 이용한 프로젝트 관리 ___4.7 정리 5장 트위터 백업 애플리케이션 예제 ___5.1 restler를 이용한 트위터 REST API 사용 ___5.2 파일시스템 기본 모듈을 이용한 파일 저장 ___5.3 백업 스케줄링 ___5.4 서비스를 위한 노드 애플리케이션 실행 ______nohup을 이용한 실행 ______포에버 확장 모듈을 이용한 실행 ___5.5 정리 6장 경량 웹 프레임워크 익스프레스 ___6.1 익스프레스 프로젝트 구성 ___6.2 app.js 소스 살펴보기 ___6.3 Jade 뷰 템플릿 엔진 ___6.4 폼 전송 웹사이트 예제 ___6.5 데이터베이스 연동 ______MySQL 확장 모듈: node-mysql ______몽고디비 확장 모듈: 몽고리안 ___6.6 비동기 패턴의 의존성 문제 ______콜백 함수를 사용한 의존성 제거 ______이벤트를 사용한 의존성 해결 ______반복문에서 비동기 작업 ___6.7 정리 7장 리얼타임 웹사이트를 위한 Socket.IO ___7.1 리얼타임 웹사이트란? ___7.2 예제를 위한 웹 서버 구성 ___7.3 Socket.IO 설정 ___7.4 Socket.IO 서버 연결 ___7.5 서버와 클라이언트의 메시지 통신 ___7.6 커스텀 이벤트 ___7.7 휘발성 메시지와 브로드캐스트 ___7.8 네임스페이스 ___7.9 방 기능 ___7.10 정리 8장 익스프레스와 Socket.IO를 이용한 Simple Chat 예제 ___8.1 simple-chat의 사용자 닉네임 처리 ___8.2 채팅방 생성 ___8.3 Socket.IO를 사용한 채팅방 입장 ___8.4 채팅 기능 구현 ___8.5 채팅 참가자 관리 ___8.6 채팅방 나가기 ___8.7 완성된 simple-chat 코드 ___8.8 정리 9장 디버깅 ___9.1 노드의 스택 트레이스 ___9.2 로그 메시지를 위한 console 사용 ___9.3 노드 인스펙터를 이용한 디버깅 ___9.4 정리 10장 유닛 테스트 ___10.1 TDD 프레임워크 익스프레소 ______노드의 Assert 모듈 ______익스프레소의 assert 함수 ______익스프레소의 테스트 실행 ______웹 애플리케이션 테스트 ______node-jscoverage로 테스트 커버리지 확인 ___10.2 BDD 프레임워크 보우즈 ______보우즈의 테스트 코드 구조 ______토픽과 보우 ______보우즈에서 제공하는 assert문 ______비동기 테스트 작성 ______테스트 스위트의 실행 ___10.3 정리 11장 클라우드 서비스 배포 ___11.1 VMWare의 클라우드 파운드리 ______VMC 설치 ______클라우드 파운드리에 노드 애플리케이션 배포 ______클라우드 파운드리의 데이터베이스 서비스2 ______vmc를 통한 클라우드 파운드리 관리 ___11.2 허로쿠 ______허로쿠 환경 설정 ______허로쿠에 배포1 ______허로쿠 관리2 ___11.3 조이엔트의 no.de ______no.de를 위한 환경 설정 ______no.de에 애플리케이션 배포 ______no.de 클라우드 서비스 관리 ___11.4 정리 부록 A 프로덕션 레벨의 참고 사이트 부록 B 노드 학습을 위한 참고 사이트 |
|
온라인에서 알고 지내던 프론트엔드 개발자들과 2년쯤 전에 FRENDS라는 모임을 만들었다. FRENDS에서 진행된 첫 기술 공유 모임에서 Aj가 노드에 대해 발표하면서 노드를 처음 접하게 되었다. 시기적으로 그 당시 노드는 세상에 나온 지 6개월 정도밖에 되지 않았던 꽤 이른 때였다. 자바스크립트를 좋아했던 터라 서버에서 동작하는 자바스크립트인 노드에 꽤 매력을 느꼈지만, 발표를 들을 때는 노드에 대해 잘 이해를 못했었다. 그 후 관심만 갖고 있다가 몇 달 후부터 본격적으로 노드를 공부하기 시작하면서 노드에 푹 빠져들었다.
국내에서는 기술 환경이 상당히 획일화돼 있기 때문에 해외에서 주목받는 기술이라 하더라도 국내까지 영향을 미치는 경우는 그다지 많지 않다. 내가 관심을 갖는 기술 중 상당수는 업무와 상관없는 개인적인 관심사였고, 노드도 마찬가지였다. 하지만 2011년으로 넘어오면서 국내에서도 노드에 대한 관심을 커지고 있음을 느낄 수 있었다. 노드에 대한 글을 블로그에 여러 번 올렸던 터라 몇 번의 좋은 기회를 얻어 노드에 대한 발표도 하다 보니, 기대 이상으로 많은 사람이 노드라는 기술에 관심을 가졌다는 사실을 알게 됐다. 게다가 개인적인 관심을 넘어 많은 회사에서 실제로 기술을 검토 중이고, 이 책의 초고를 완성할 때쯤에는 노드를 실제 서비스에 적용하는 회사들도 있었다. 기대보다 빠른 보급 속도는 노드를 좋아하는 나로서도 꽤 놀라운 일이었다. 나는 노드를 무척 좋아한다. 업무로 노드를 사용하지 않음에도 노드는 내 삶에 많은 영향을 줬고 즐거움을 줬다. 그래서 노드를 만든 라이언 달과 커미터들을 포함해 수많은 노드 개발자한테 항상 고마움을 느낀다. 노드를 아주 깊게 아는 것도 아니었고 국내에서 노드를 제일 잘하는 것도 아니었다. 그리고 국내에 노드를 전파해야겠다는 특별한 사명감을 가진 것도 아니었다. 하지만 블로그에 오랫동안 글을 올렸고 몇 번의 발표를 준비하면서 노드를 설명하기 위한 시나리오도 준비돼 있는 상태였다. 조금이나마 먼저 노드를 살펴본 사람으로서 아직 노드를 알지 못하는 사람들에게 조금이나마 도움을 주고자 시작했지만, 책을 쓰는 내내 책을 쓸 자격이 있는가에 대해 수없이 고민을 했다. 노드의 인기가 앞으로 얼마나 커질지는 현재 장담할 수 없지만, 그런 분위기도 개발자들이 직접 만들어 가는 것이라 생각한다. 이 책을 통해 노드에 관심 있는 사람들이 좀 더 쉽게 노드를 이해하고 내가 그랬던 것처럼 노드의 매력을 느낄 수 있기를 바랄 뿐이다. - 변정훈 ---저자 서문 중에서 |
|
초보자를 위한 Node.js 프로그래밍 입문서
자바스크립트로 서버 애플리케이션을 작성할 수 있는 Node.js 프로그래밍을 설명하는 이 책에서는 기본 개념부터 실무에 필요한 핵심 내용까지 두루 다룸으로써 노드 프로그래밍에 입문하는 데 좋은 가이드를 제공한다. ★ 이 책에서 다루는 내용 ★ ● Node.js의 특징인 이벤트 루프와 넌블록킹 I/O ● Node.js의 기본 모듈 사용법 ● 필수 도구 중 하나인 확장 모듈을 관리해주는 npm의 사용법 ● 대표적인 경량 웹 프레임워크 익스프레스 ● 리얼타임 웹 애플리케이션을 빠르게 작성할 수 있는 Socket.IO ● 유닛 테스트 프레임워크의 사용 방법과 클라우드 서비스 배포 방법 ★ 이 책의 특징 ★ ● Node.js를 이해하기 위한 단계적인 설명 ● 예제 중심의 이해하기 쉬운 설명 ● Node.js 프로그래밍에서 필요한 필수 사항에 대한 폭넓은 내용 ● 실무에 필요한 핵심 내용 위주의 학습 ★ 소스코드 다운로드 ★ 에이콘출판사의 도서정보 페이지 http://www.acornpub.co.kr/book/nodejs에서도 이 책에 나온 예제 코드를 압축한 파일을 다운로드할 수 있다. 이 책은 노드 0.6.6 최신 버전에 맞춰 작성했고 각 모듈의 버전은 설명과 함께 명시했다. 노드가 아직 1.0 버전은 나오지 않았지만, API도 거의 확정됐고 성능과 안정성도 어느 정도 검증됐으므로 사용하는 데 문제가 없다. 노드의 버전업은 상당히 빠르게 진행되지만, 주요 API가 바뀌는 일은 거의 없을 것이다. 이 책의 예제가 새 버전과 맞지 않는다면 버전을 맞춰 사용해보기를 권한다. ★ 이 책의 구성 ★ 1장, 노드 소개 : 노드는 라이언 달이라는 개발자가 만든 프로젝트다. 노드 프로젝트를 이해하기 위해 라이언이 왜 노드 프로젝트를 시작했는지 살펴보며, 노드의 특성은 어떤 것인지 자세히 살펴본다. 노드가 공개된 이후 많은 개발자가 참여해 활발한 커뮤니티가 만들어지고 하루가 다르게 발전 중이다. 현재 노드의 에코 시스템은 어떻게 이뤄졌으며 노드의 특징은 무엇인지 알아본다. 2장, 노드 프로그래밍 시작 : 노드 프로그래밍을 하기 위해 노드를 설치하는 방법을 알아본다. 그리고 REPL의 사용법과 'Hello World'를 출력하는 예제를 작성하면서 노드 사용법을 배운다. 파일 읽기 예제와 웹 서버 예제를 작성하면서 기본 모듈을 사용하는 방법을 살펴보고, 노드의 아키텍처와 함께 동작 방식을 이해한다. 3장, 노드의 기본 모듈 : 노드는 프로세스, 파일시스템, 유틸리티, HTTP 등의 기본 모듈을 제공한다. 노드의 기본 모듈은 노드 프로그래밍의 기반이 되므로 기본 모듈이 제공하는 기능을 이해해야 한다. 각 기본 모듈의 사용법을 살펴보면서 노드에 대한 이해도를 높이고, 네트워크 모듈로 TCP 채팅 애플리케이션을 작성하면서 기본 모듈을 활용하는 방법을 살펴본다. 4장, npm을 이용한 의존성 확장 모듈 관리 : npm은 확장 모듈을 관리하는 패키지 매니저다. 노드에는 기본 모듈 외에 수많은 확장 모듈이 있는데, npm을 사용하면 확장 모듈을 쉽게 설치하고 관리할 수 있다. npm은 최신 버전의 노드에 포함될 만큼 노드 프로그래밍에 필수적인 도구다. 확장 모듈을 제대로 활용하기 위해 npm으로 모듈을 설치하고 프로젝트를 관리하는 방법을 살펴본다. 5장, 트위터 백업 애플리케이션 예제 : REST 기능과 스케줄링 기능이 필요한 트위터 백업 애플리케이션 예제를 작성한다. 모든 기능을 직접 작성하는 대신 REST와 스케줄링 확장 모듈을 npm으로 설치해 사용하면서 npm으로 확장 모듈을 사용하는 방법을 자세히 살펴본다. 6장, 경량 웹 프레임워크 익스프레스 : 익스프레스(express)는 경량 웹 프레임워크로서 사용법이 간단하면서 강력하므로 노드를 대표하는 모듈 중 하나다. 익스프레스를 사용하면 웹사이트나 웹 애플리케이션을 쉽게 작성할 수 있다. 익스프레스의 소스 구조와 사용 방법과 함께 기본 뷰 템플릿 엔진인 제이드의 사용법을 살펴본다. 7장, 리얼타임 웹사이트를 위한 Socket.IO : Socket.IO는 노드의 대표적인 모듈 중 하나로 코멧이나 웹소켓을 이용한 리얼타임 웹을 구현하기 위한 확장 모듈이다. 복잡한 리얼타임 웹 기술에 대한 지식 없이도 쉽게 사용할 수 있어 많은 개발자가 주목하는 모듈이다. Socket.IO의 다양한 기능을 차례대로 살펴보면서 사용법을 익힌다. 8장, 익스프레스와 Socket.IO를 이용한 Simple Chat 예제 : 6장과 7장에서 배운 익스프레스와 Socket.IO를 이용해 채팅 예제를 작성한다. 예제를 작성하면서 두 모듈을 활용하는 방법을 다시 한 번 살펴보고, 리얼타임 웹 애플리케이션을 얼마나 쉽게 작성할 수 있는지 살펴본다. 9장, 디버깅 : 노드에서 에러가 발생했을 때 수정하기 위한 디버깅 방법을 설명한다. 기본적인 디버깅 방법인 스택 트레이스를 추적하는 방법과 로그를 출력하는 방법을 알아보고, 복잡한 디버깅을 할 때 유용한 노드 인스펙터의 사용법을 알아본다. 노드 인스펙터는 노드의 내부 동작을 살펴보면서 디버깅을 할 수 있어 필수적으로 익혀야 할 도구다. 10장, 유닛 테스트 : 신뢰할 수 있는 코드를 작성하기 위해 유닛 테스트의 작성은 중요하다. 노드의 대표적인 테스트 프레임워크인 익스프레소(expresso)와 보우즈(Vows)의 사용 방법을 설명한다. 익스프레소는 전통적인 형태의 TDD 프레임워크이고, 보우즈는 노드에 특화된 비동기 테스트 프레임워크다. 두 프레임워크로 테스트 코드를 작성하는 방법을 살펴본다. 11장, 클라우드 서비스 배포 : 작성한 노드 애플리케이션을 서비스하기 위해 클라우드 서비스를 통한 배포를 살펴본다. 이벤트 기반의 노드는 확장성 있는 애플리케이션을 작성하기 좋으므로 클라우드의 특성과 잘 어울린다. VMWare의 클라우드 파운드리(Cloud Foundry)와 허로쿠(Heroku), 조이엔트(Joyent)에서 no.de 클라우드 서비스의 배포 방법과 관리 방법을 살펴본다. ★ 이 책의 대상 독자 ★ 이 책은 자바스크립트를 다룰 줄 아는 프론트엔드 개발자나 서버사이드 개발자를 대상으로 한다. 자바스크립트에 대한 책이 아니라 노드를 설명하는 책이기 때문에 자바스크립트 코드는 읽을 수 있다고 가정한다. 자바스크립트를 알지 못하거나 프로그래밍에 대한 지식이 전혀 없다면 먼저 자바스크립트를 공부하길 권한다. 시중에 나와 있는 많은 자바스크립트 책을 통해 자바스크립트를 익힐 수 있다. 이 책의 예제는 자바스크립트에 대한 깊은 지식 없이도 이해할 수 있게 최대한 쉽게 작성했다. 상황에 따라 자바스크립트에 익숙하지 않은 개발자를 위해 간단한 설명을 추가했지만, 노드에서 필요하거나 중요한 부분이 아니라면 다루지 않는다. 그래서 노드 프로그래밍의 디자인 패턴이나 기법 중 클라이언트 자바스크립트와 동일하게 적용되는 대부분은 이 책에서 다루지 않는다. 예제의 자바스크립트 함수나 기능을 잘 모른다면 모질라 개발자 네트워크(MDN)의 자바스크립트 레퍼런스(https://developer.mozilla.org/en/JavaScript/Reference)를 참고하라. 가장 정확한 내용으로 잘 정리돼 있기 때문에 구글에서 검색했을 때 최상단에 나오는 W3CSchool 같은 사이트보다 낫다. 다만 모질라 개발자 네트워크는 한국어로 볼 때 링크가 깨지는 경우가 많으므로 영문으로 설정하고 보는 것이 좋다. ★ 노드란 무엇인가? ★ 자바스크립트는 과거에는 제대로 인정받지 못하는 프로그래밍 언어였다. 자바스크립트의 리더 중 한 명인 더글러스 크록포드가 2001년 '자바스크립트: 세계에서 가장 저평가된 언어'(http://javascript.crockford.com/javascript.html)라는 글을 썼을 정도였다. 하지만 현업 개발자들이 수년 동안 자바스크립트를 발전시킨 덕분에, 2008년 더글러스 크록포드는 '세계에서 가장 저평가된 언어가 세계에서 가장 인기 있는 언어가 됐다.'(http://javascript.crockford.com/popular.html)라는 글을 올리기에 이른다. 최근 HTML5의 인기와 함께 자바스크립트는 역사상 최고의 전성기를 누리고 있으며, 이런 추세는 더욱 가속화될 전망이다. 소위 "자바스크립트로 못하는 것이 없다."라고 할 만큼 성장했지만 웹브라우저 내에서만 동작한다는 한계가 있었다. 하지만 노드는 이 한계를 없애고 자바스크립트의 영역을 서버사이드 프로그래밍까지 넓혀주었다. 노드는 쉽고 강력한 환경으로 자바스크립트 언어를 서버사이드 프로그래밍 언어로 만들었고, 비약적으로 발전 중인 자바스크립트의 영역을 한 차원 높여줬다고 할 수 있다. 현재 노드는 개발자 커뮤니티 사이에서 높은 관심을 받고 있으며, 다음과 같은 특징이 있다. oV8 자바스크립트 엔진 노드는 구글 크롬 웹브라우저의 자바스크립트 엔진인 V8을 기반으로 자바스크립트를 사용한다. 덕분에 개발자는 클라이언트에서 사용하던 자바스크립트의 경험과 지식을 그대로 사용해 서버 프로그래밍을 할 수 있다. 이는 노드에 대한 진입 장벽을 현저히 낮춰 쉽게 접근할 수 있는 이점을 준다. 그리고 현존하는 자바스크립트 엔진 중 가장 빠른 V8의 성능을 그대로 물려받아 어떤 프로그래밍 언어에 못지않은 성능을 보여준다. o이벤트 기반 프로그래밍 노드는 이벤트 기반으로 동작한다. 많은 프로그래밍 언어가 멀티스레드 방식을 취하는데, 이벤트 기반은 이에 비교되는 개념이라고 할 수 있다. 멀티스레드는 동시에 여러 가지 일을 하기 위해 다수의 스레드를 만들어 작업하지만 노드의 이벤트 기반에서는 스레드가 딱 하나만 있다. 그래서 싱글 스레드가 모든 작업을 직접 처리하는 대신 작업을 위임하고 완료됐다는 이벤트가 발생하면 결과를 받아 처리한다. 작업이 처리되는 시간 동안 기다릴 필요가 없으므로 스레드가 효율적으로 동작한다. 이벤트 기반 프로그래밍은 넌블릭킹 I/O와 함께 동작하면서 성능이 극대화된다. o비동기/넌블록킹 I/O 일반적인 I/O는 블록킹 I/O이다. 블록킹 I/O를 사용하면 스레드까지 블록킹돼 I/O를 사용하는 동안 스레드가 대기 상태에 있게 된다. 스레드가 대기 상태에 있는 시간은 사실상 낭비되는 시간이고, 싱글 스레드로 동작하는 노드에서 스레드가 블록킹되는 것은 성능에 큰 문제를 발생시킨다. 그리고 블록킹 I/O와 넌블록킹 I/O를 함께 사용하려면 많은 지식이 필요하다. 그래서 노드의 모든 I/O는 비동기로 동작하는 넌블록킹 I/O이고, I/O에 대한 전문 지식 없이도 쉽게 사용할 수 있다. |