Top

Node Web Development 한국어판 [웹 개발 플랫폼 노드 프로그래밍]

  • 원서명Node Web Development (ISBN 9781849515146)
  • 지은이데이비드 헤론
  • 옮긴이손병대
  • ISBN : 9788960772502
  • 20,000원
  • 2011년 12월 07일 펴냄
  • 페이퍼백 | 228쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 웹 프로페셔널

책 소개

『Node Web Development 한국어판』은 노드 웹 애플리케이션 개발의 핵심을 찌르는 탁월한 시작점이다. 실용적인 예제를 중심으로, HTTP 서버와 클라이언트 객체, Connect와 Express 프레임워크, 비동기 알고리즘, SQL과 MongoDB 데이터베이스 등을 배운다.

[ 소개 ]

이 책은 노드를 시작하기 위한 가장 이상적인 지침서다. 노드를 설치하는 실용적인 조언부터 시작해서 HTTP 서버와 클라이언트 애플리케이션 개발 방법을 배운다. 그리고 이 책은 노드의 다양한 활용법을 보여준다. 예를 들어 데이터베이스 스토리지 엔진을 연동한다든가 Connect/Express 프레임워크로 웹사이트를 만들기도 하고, 이런 프레임워크 없이 개발하는 방법도 소개한다. 또한 노드의 CommonJS 모듈 시스템에 대한 정보도 얻을 수 있다. 또한 CommonJS 모듈 시스템을 통해 객체지향 설계의 중요한 부분을 구현한다.


[ 이 책에서 다루는 내용 ]

■ 웹 애플리케이션 개발에서 서버 측 자바스크립트 역할의 재발견
■ 성능과 처리량을 위해 잘 알고 있는 아키텍처 선택
■ 서버 측 웹 애플리케이션 개발을 위한 노드 설치와 사용
■ Connect와 Express 애플리케이션 프레임워크의 사용
■ SQL과 몽고DB 데이터베이스 시스템 설정
■ 동기와 비동기 알고리즘의 차이점과 이 차이점이 중요한 이유


[ 이 책의 대상 독자 ]

이 책은 자바스크립트로 서버 측 개발을 하고 싶은 개발자, 즉 더 빠르고 성능 좋은 웹 애플리케이션을 만들고 싶은 개발자를 위한 책이다. 적어도 기본적인 자바스크립트를 이해하고 웹 애플리케이션 개발 경험이 있는 사람에게 권장한다.


[ 이 책의 구성 ]

1장, 노드 개요에서는 노드 플랫폼을 소개한다. 1장은 노드 사용법 외에 기술적인 측면과 설계적인 측면에서 노드를 선택한 이유를 설명한다. 그리고 노드와 서버 측 자바스크립트의 역사뿐 아니라 자바스크립트가 브라우저에 갇혀왔던 이유를 설명한다.

2장, 노드 설치에서는 노드 개발 환경을 구축한다. 물론 여러 시나리오에 따라 소스코드를 컴파일하는 과정이 포함돼 있다. 그리고 노드 서버를 맛보기로 만들어본다.

3장, 노드 모듈에서는 모듈을 설명한다. 모듈은 노드 애플리케이션 개발의 기본 단위다. 3장은 모듈을 이해하고 개발할 수 있게 안내한다. 그리고 노드 패키지 매니저(npm)도 자세히 설명한다. 또한 설치된 패키지를 관리하는 여러 시나리오와 npm 패키지를 개발해 배포하는 방법도 알아본다.

4장, 애플리케이션 응용에서는 노드 애플리케이션 개발에 대한 기초적인 내용을 설명한다. 특히 간단한 애플리케이션을 먼저 만들어보고 이것을 Connect와 Express 프레임워크를 이용해 변형해본다. 예제로 만들 애플리케이션이 간단하므로 이벤트 루프를 이해하는 데 좋은 기회가 된다. 그리고 시간이 오래 걸리는 계산과, 동기/비동기 알고리즘을 알아보고, 무거운 계산을 백엔드 서버로 처리하는 방법을 배운다.

5장, 간단한 웹 서버, 이벤트 이미터, HTTP 클라이언트에서는 HTTP 클라이언트와 서버 객체를 중심으로 설명한다. 서버와 클라이언트 애플리케이션을 각기 만들어 서로 통신하는 방법을 자세히 알아본다.

6장, 데이터 스토리지와 검색에서는 대부분의 애플리케이션에서 필요로 하고 데이터를 오랜 기간 안전하게 저장할 수 있는 데이터 스토리지를 설명한다. 그리고 SQL과 몽고DB 데이터베이스 엔진을 이용해 애플리케이션을 만드는 방법과 Express 프레임워크를 이용한 사용자 인증을 알아보고, 마지막으로 더 나은 에러 페이지에 대해서도 알아본다.

저자/역자 소개

[ 저자 서문 ]

노드를 이용한 웹 소프트웨어 개발 세계에 온 것을 환영한다. 노드는 새롭게 개발된 소프트웨어 플랫폼으로, 자바스크립트를 웹 브라우저에서 해방시켰다. 그리고 서버 측 애플리케이션에서 사용하는 일반적인 소프트웨어 개발 플랫폼으로, 자바스크립트를 사용한다. 노드에는 크롬 브라우저에서 사용하는 매우 빠른 자바스크립트, V8 엔진과 빠르고 튼튼한 비동기 네트워크 I/O 라이브러리가 탑재됐고, 뛰어난 성능과 확장이 용이한 서버를 만드는 데 초점이 맞춰졌다. 그리고 ‘실시간 웹’을 구현하는 클라이언트 애플리케이션에도 적합하다.

노드 플랫폼은 루비를 비롯한 다른 언어의 웹 서버 컴포넌트로 수년간 개발되다가 2009년 라이언 댈에 의해 형태를 갖췄다. 라이언 댈은 전통적인 스레드 기반의 동시성 모델보다 비동기 이벤트 기반 시스템을 플랫폼의 기반 구조로 선택했다. 당시 스레드 시스템은 개발하기 어렵다는 악명이 높았고, 비동기 이벤트 기반 모델은 이에 비해 훨씬 간단했다. 그리고 커넥션당 하나의 스레드를 유지하는 오버헤드가 적고, 속도도 빨랐다. 노드 목표는 ‘확장 가능한 네트워크 서버를 구축하는 쉬운 방법’을 제공하는 것이다. 노드는 이벤트 머신(루비)과 Twisted 프레임워크(파이썬) 같은 시스템에 영향을 받아 설계도 비슷하다.

이 책은 노드를 사용해 웹 애플리케이션을 만드는 데 초점을 맞췄다. 그리고 노드를 배우는 데 필요한 중요한 개념을 설명하고 안내한다. 먼저 실제 애플리케이션을 작성해보고, 어떻게 동작하는지 면밀히 분석하고 해부해 어떻게 애플리케이션에 이식할지 설명한다. 노드와 노드 패키지 매니저를 설치한다. 물론 어떻게 설치하는지부터 배우고 노드 모듈과 npm 패키지 개발에 대해서도 배운다. 그리고 여러 애플리케이션을 개발한다. 예를 들어 이벤트 루프가 반응이 없을 정도로 오래 걸리는 계산이나, 무거운 부하를 다른 서버로 분배하는 방법, Express 프레임워크를 이용한 애플리케이션 등을 만들어본다.


[ 저자 소개 ]

데이비드 헤론 (David Herron)
실리콘밸리에서 20년간 개발자이자 품질 엔지니어로서 소프트웨어 업계에 종사 중이다. 가장 최근에는 야후에서 품질 엔지니어링 팀의 아키텍트로, 노드 기반의 새로운 웹 애플리케이션 플랫폼을 연구했다.
썬 마이크로시스템즈(Sun Microsystems)에서 엔지니어로 근무하는 동안에는 자바 SE 품질 엔지니어링 팀의 아키텍터로, 테스트 자동화 도구와 AWT 로봇 클래스를 연구했다. 현재 AWT 로봇 클래스는 GUI 테스트 자동화 소프트웨어에 널리 쓰인다. 그리고 오픈 JDK 프로젝트와 JDK-Distors 프로젝트에도 참여했으며, 자바 1.6 버전의 버그를 찾기 위해 자바 개발자 커뮤니티와 함께 월드 와이드 무스탕 리그레션 컨테스트(Mustang Regressions Contest)를 개최했다.
썬 마이크로시스템즈 이전에는 VXtreme 사에서 비디오 스트리밍 관련 연구를 했는데, 이 회사를 마이크로소프트 사가 인수하면서 결과적으로 이 연구는 윈도우 미디어 플레이어로 상용화됐다. 울렁공 그룹(Wollongong Group)에서는 이메일 클라이언트와 서버 소프트웨어를 만들었고, 이메일 관련 프로토콜을 개선하는 IETF 워킹 그룹의 멤버다.
전기 자동차와 세계 에너지 공급, 기후 변화, 환경 문제에 관심이 많으며 Transition Silicon Valley의 공동 창업자다. 또한 examiner.com의 온라인 저널리스트로서 ‘Green Transportation Examiner’라는 제목으로 기고했고, 지속적으로 관련 이슈를 블로그(
7gen.com)에 쓰고 있으며, 전기 자동차에 관한 토론 웹사이트(visforvoltage.org)를 운영 중이다. Node.JS와 드루팔(Drupal), 닥터 후(Doctor Who) 등의 여러 주제로 자신의 블로그(davidherron.com)에 글을 쓰고 있다.


[ 옮긴이의 말 ]

노드(Node.js)라는 단어를 처음 접했을 때가 아마 작년 이맘때였을 것이다. 당시 노드는 내게 매력적인 단어는 아니었다. 특히 UI 개발자라는 직업 특성상 서버 측 이야기는 내게 큰 흥미를 주지 못했다. 그리고 정확히 1년이 지났다. 그동안 노드는 또 한 번 급성장을 했고, 내게도 많은 생각의 변화가 있었다. 노드는 더 이상 먼 나라 이야기가 아니라 내 이야기가 됐다. 이제는 이름만 들어도 알 수 있는 내로라하는 기업들이 너도 나도 노드를 활용한 신기술 연마에 여념이 없다. 물론 이것은 나라 밖 이야기다.


항상 신기술의 바람은 우리나라에 한 발짝 느리게 다가온다. 그리고 여전히 물음표를 던지는 사람이 많다. 노드의 성장세는 인정하지만 그럴듯한 성과를 보여주지 못한다고 비판한다. 그 중 가장 뼈아픈 질문은 노드로 성공한 케이스가 있느냐는 것이다. 사실 이 질문의 답은 나도 궁금하다. 물론 성공 사례를 들어가며 설명하는 것이 가장 쉬운 설득 방법임엔 틀림없다. 하지만 가장 확실한 방법은 직접 부딪혀보는 것이다. 직접 경험해본 것만큼 가장 확실한 설득도 없을 것이다.

노드를 직접 경험해보고 싶은 개발자에게 이 책은 그야말로 탁월한 선택이 아닐까 싶다. 이 책 Node Web Development 한국어판은 먼 나라 이야기 같은 노드를 우리 동네 이야기처럼 친절하고 자세하게 설명한다. 노드 설치에서부터 DB 연결까지 전반적인 웹 개발 스펙트럼을 모두 아우렀다. 뿐만 아니라 커맨드라인 도구 사용법과 CommonJS 모듈에 이르기까지 무심코 넘어갈 수 있는 것들도 꼼꼼하게 설명한다. 그리고 노드를 둘러싼 각종 의혹과 궁금증들도 소개한다. 저자는 특히, ‘왜 노드를 사용해야 하는가?’라는 질문에 대해 다양한 관점에서 실마리를 풀어낸다.

이 책을 번역하는 동안에도 노드는 계속 발전 중이다. 원서의 노드 버전은 0.4.8이었지만 내가 처음 번역을 시작했을 때는 0.5.8 버전이었다. 그리고 현재는 0.6.X 버전이 출시된 상태다. 어쩌면 이 책을 보게 될 여러분은 또 한 번 업그레이드된 노드를 보게 될지도 모르겠다. 그만큼 노드는 빠른 성장을 거듭하는 중이다.
그리고 노드는 단순히 새로운 웹 개발 플랫폼 이상의 의미가 있다. 그동안 브라우저 안에만 머물러 있어야만 했던, 혹은 머무를 수밖에 없었던 자바스크립트, 그리고 각종 오해와 멸시를 당했던 자바스크립트가 이제는 현대적이고 발전된 언어로 재조명되고 있다는 점이다. 나는 이것을 자바스크립트의 대반격이라고 말하고 싶다. 그리고 실제 자바스크립트의 대약진을 기대해본다.


[ 옮긴이 소개 ]

손병대
숭실대학교 미디어학부와 영어영문학부를 복수 전공했다. 졸업과 동시에 NHN AjaxUI 팀에서 UI 개발자로 일하고 있다. 참여했던 대표적인 프로젝트로는 2008년 네이버 메인 개편, 2009년 네이버 지도 개편, 2010년 거리 뷰 프로젝트가 있으며, 2011년 초엔 일본으로 건너가 네이버 재팬 서비스를 지원하기도 했다. 현재는 자바스크립트로 할 수 있는 모든 것에 관심이 많으며, CommonJS, Node.JS, 하이브리드 앱개발(Titanium)등에 열정을 쏟는 중이다. 공동 저작한 저서로 『자바스크립트 UI 개발과 Jindo 프레임워크』(2011)가 있다.

목차

목차
  • 1장 노드 개요
    • 노드의 능력
      • 서버 측 자바스크립트
    • 노드를 사용해야 하는 이유
      • 스레드 기반 아키텍처와 비동기 이벤트 기반 아키텍처
      • 성능과 활용
      • 더 적은 서버 활용과 그린 웹 호스팅
    • ‘노드’ 용어
    • 정리
  • 2장 노드 설치
    • 시스템 요구 사항
    • POSIX 시스템(리눅스, 솔라리스, 맥 등)에 설치
      • 미리 설치해야 할 것
    • 맥 OS X 환경에 맞는 개발자 도구 설치
      • 홈(HOME) 폴더에 설치
        • 홈 폴더에 설치해야만 하는 이유
      • 시스템 전체 폴더에 설치
      • MacPort로 맥 OS X에 설치
      • homebrew로 맥 OS X에 설치
      • 패키지 관리 시스템으로 리눅스에 설치
      • 여러 개의 노드 동시 설치
    • 설치 확인 명령
      • 노드 커맨드라인 툴
      • 간단한 스크립트 작성과 실행
      • 노드 서버 실행
    • 노드 패키지 매니저 설치
    • 시스템 시작과 동시에 노드 서버 시작
      • 멀티 코어 시스템에서 모든 CPU 사용
    • 정리
  • 3장 노드 모듈
    • 모듈이란?
      • 노드 모듈
      • 노드가 require('module')을 해석하는 방법
        • 모듈 식별자와 패스명
        • 애플리케이션의 로컬 모듈
        • 애플리케이션 안에 여러 버전의 모듈 넣기
        • require.paths를 이용한 시스템 전체 모듈
        • 복합 모듈
    • npm 노드 패키지 매니저
      • npm 패키지 포맷
      • npm 패키지 찾기
      • npm 명령 사용
        • npm 명령 도움말 얻기
        • 패키지 정보 보기
        • 패키지 설치
        • 설치된 패키지 사용
        • 현재 설치된 패키지 보기
        • 패키지 스크립트
        • 설치된 패키지 내용 탐색과 수정
        • 설치된 패키지 중 오래된 패키지 업데이트
        • 설치된 패키지 제거
        • 패키지 개발과 퍼블리싱
        • npm 환경 설정
      • 패키지 버전 문자열과 범위
      • CommonJS 모듈
        • 모듈 캡슐화 예제
    • 정리
  • 4장 웹 애플리케이션 응용
    • 수학 마법사 제작
      • 웹 프레임워크를 사용하거나 사용하지 않기
    • 프레임워크 없이 수학 마법사 구현
      • 노드의 라우팅 요청
      • URL 쿼리 파라미터 핸들링
      • 곱셈 만들기
      • 다른 수학 기능 만들기
      • 수학 마법사 확장
      • 오래 걸리는 계산(피보나치 수)
      • 완벽한 웹 서버에서 빠진 기능
      • Connect로 수학 마법사 구현
      • Connect 설치와 설정
      • Connect 프레임워크로 접속
    • Express 프레임워크로 수학 마법사 구현
      • Express 수학 마법사 구현
      • 에러 처리
      • URL 파라미터화와 데이터 서비스
        • Express에서 URL을 파라미터로 만들기
        • 수학 계산 서버(와 클라이언트)
        • 수학 서버로 수학 마법사 다시 작성
    • 정리
  • 5장 간단한 웹 서버, 이벤트 이미터, HTTP 클라이언트
    • 이벤트 이미터를 이용해 이벤트 주고받기
      • EventEmitter 이론
    • HTTP 스니퍼: HTTP 대화 엿듣기
    • 기본 웹 서버 구현
      • 기본 서버 구현
        • 기본 서버 코어(basicserver.js)
        • 파비콘 핸들러(faviconHandler.js)
        • 스태틱 파일 핸들러(staticHandler.js)
        • 기본 서버의 설정(server.js)
        • Basic Server에 가상 호스트 설정
        • 기본 서버의 짧은 URL 모듈
    • MIME 타입과 mime npm 패키지
    • 쿠키 다루기
    • 가상 호스트와 요청 라우팅
    • HTTP 클라이언트 요청 만들기
    • 정리
  • 6장 데이터 스토리지와 검색
    • 노드를 위한 데이터 스토리지 엔진
    • SQLITE3: 가벼운 인프로세스 SQL 엔진
      • 설치
      • sqlite3로 노트 애플리케이션 구현
        • 데이터베이스 추상 모듈: notesdb-sqlite3.js
        • 데이터베이스 설치: setup.js
        • 콘솔에 노트 출력: show.js
        • 노트 웹 애플리케이션: app.js
        • 노트 애플리케이션 템플릿
        • sqlite3 노트 애플리케이션 실행
        • 에러 디버깅과 핸들링
      • 다른 SQL 데이터베이스 사용
    • 몽구스: 몽고DB와 연결되는 노드 인터페이스
      • 몽구스 설치
      • 몽구스로 노드 애플리케이션 구현
        • 데이터베이스 추상 모듈: notesdb-mongoose.js
        • 데이터베이스 초기화: setup.js
        • 콘솔에 노트 출력: show.js
        • 애플리케이션에 노트 넣기: app.js
      • 몽고DB를 지원하는 다른 데이터베이스 모듈
    • 사용자 인증 처리 훑어보기

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[ p109 '다른 수학 기능 만들기' 절 4행 ]
여기서 Math.floor 함수를 이용해 req.a 값을 내림한다는 점에 유념하자. → 팩토리얼 함수의 경우 n보다 작은 정수를 모두 곱한 값이므로, Math.floor 함수를 이용해 req.a 값을 내림한다는 점에 유의하자.

[ p112 코드 중 ]
13행부터 마지막 행까지 삭제

2015.2.4 수정사항

[p171 : 3행]
간단하다 --> 간단하다.

[p173 : 4행]
Connent --> Connect