• Node.js 인 액션
  • 베테랑 개발자가 전하는 노드제이에스 완벽 활용법

  • 마이크 캔텔론, 마크 하터, T.J. 할로웨이척, 나단 라즈리치 지음
  • 정승희, 민창현, 이준 옮김

  • 오픈소스 & 웹 시리즈_064
  • ISBN: 9788998139636
  • 35,000원 | 2014년 08월 29일 발행 | 516쪽



서버에서 자바스크립트를 사용한다!

노드는 확장성 있고 고성능인 웹 애플리케이션을 지원할 수 있는 자바스크립트 서버다. 비동기 I/O를 사용해 동시에 하나 이상의 작업을 실행할 수 있는데, 이 특징은 채팅이나 게임, 실시간 통계와 같은 실시간 애플리케이션에서 필수적인 요건이다. 또한 노드가 자바스크립트이므로 백엔드부터 프론트엔드까지 같은 언어를 사용할 수 있다.

『Node.js 인 액션』은 제품으로 출시할 수 있을 정도의 수준으로 애플리케이션을 만드는 방법을 알려준다. 자바스크립트에 대한 기본적인 지식은 필요하지만 노드에 대한 경험은 없어도 상관없다. 핵심 개념에 대한 명쾌한 소개, 다양한 예제로 설치부터 배포까지 모든 과정을 다룬다. 비동기 프로그래밍, 데이터 저장, 템플릿 출력에 대해 살펴보고, TCP/IP 서버나 명령행 도구처럼 HTTP를 사용하지 않는 애플리케이션을 만들기 위한 파일 시스템과의 상호작용에 대해서도 알아볼 것이다. 레일즈, 장고 또는 PHP를 다루던 개발자에게는 최고의 선택일 것이다.

★ 이 책에서 다루는 내용 ★

  • 노드와 확장 모듈 설치
  • 비동기 프로그래밍과 이벤트루프에 대한 이해
  • 마이크로블로그, 메신저, 게임 등의 예제

 

페이스북 페이지 소개 자료

책 속으로

노드에 관한 책을 쓰는 것은 매우 도전적인 과제다. 노드는 비교적 최신 플랫폼이며 이제서야 막 안정화되기 시작했다. 노드의 핵심부는 나날이 발전하고 있으며 사용자 제작 모듈과 관련된 커뮤니티는 그 누구도 따라잡을 수 없을 만큼의 속도로 폭발적인 증가세를 보이고 있다. 노드 커뮤니티는 여전히 그 정체성을 찾아가고 있다. 이러한 역동적인 대상을 책에 담기 위한 유일한 방법은 노드의 본질은 무엇이며 어떻게 성공의 길을 걸어왔는지 다루는 것이다. 여기 그 일을 해낸 노드의 베테랑들이 있다. 마이크 켄탤론은 노드 커뮤니티에서 노드에 관한 실험과 이야기로 대단히 적극적으로 활동하는 사람이다. 그는 노드를 언제 사용하는 것이 적합하고 (아마도 더 중요할지 모르는) 언제 사용하기에 적합하지 않은지에 대한 탁월한 판단력을 가지고 있다. T.J. 할로웨이척은 엄청난 인기를 누리고 있는 웹 프레임워크인 익스프레스(Express )를 포함해서 가장 많은 노드 모듈을 개발한 개발자 중 한 명이다. TooTallNate로 더 잘 알려진 나단 라즈리치는 지금까지 꽤 오랫동안 노드의 핵심 커미터로 활동했으며 노드가 현재 모습으로 성숙하기까지 플랫폼 개발에 적극적으로 참여하고 있다.

이 책은 그들의 상당한 경험을 토대로 컴퓨터에 노드를 설치하는 초기 작업부터 제품 애플리케이션을 생성, 디버깅, 배포하는 방법까지 모든 단계에 걸친 내용을 담고 있다. 이 책을 통해 노드가 흥미로운 이유를 알게 될 것이며 저자들의 종합적인 지식을 통해 노드 프로젝트가 뻗어 나갈 미래의 방향도 엿볼 수 있을 것이다. 무엇보다 인상적인 것은 각 단계의 선행 학습을 기반으로 책의 내용이 기본에서부터 고급까지 무리없이 잘 진행된다는 것이다.

노드는 상승 중인 로켓과 같으며 저자들은 독자들이 이 로켓에 함께 탑승할 수 있게 멋진 일을 해냈다. 노드 인 액션이 여러분 자신의 지평선을 탐험할 수 있는 발사대가 되길 바란다.

-- 추천사 중에서

 

추천의 글

“책의 내용이 기본에서부터 고급까지 무리 없이 잘 진행된다.”

-- 노드 프로젝트 리더 아이작 Z. 슐레터

 

“노드와 노드 에코시스템에 대한 완벽 가이드”

-- 1KB Software Solutions, 케빈 베이스터

 

“실용적인(심지어 재밌기까지 한) 실전 예제가 가득하다”

-- Polymedia SpA, 알렉스 마드렐

 

“너무 재밌어서 빨리 배워서 실제로 사용할 수 있을 것이다.”

-- Honeywell, 개리 이완 박

 

“코드 뒤편의 사람들이 써낸 훌륭한 책”

  • NodeLingo, GoChime, 브라이언 포크

마이크 캔텔론(Mike Cantelon)

마이크 캔텔론은 맞춤형 및 제품 지향적인 웹 애플리케이션 개발 분야에 10년간 종사한 웹 프로그래머다.

마크 하터(Marc Harter)

마크 하터는 이벤트 스타일 프로그래밍에 깊이 있는 경험이 있는 열정적인 자바스크립트 개발자다. 그는 고가용 실시간 애플리케이션이나 스트리밍 인터페이스, 기타 데이터 집약적인 시스템을 비롯한 대형 프로젝트를 주로 진행하고 있다.

T.J. 할로웨이척(T.J. Holowaychuk)

T.J. 할로웨이 척은 다수의 프로젝트를 진행한 오픈소스 엔지니어로서 노드 초창기부터 노드를 사용해왔다. 그는 인기 있는 익스프레스 웹 프레임워크, 클러스터, 스타일러스, 제이드 등을 비롯해 다수의 견고한 Node.js 모듈을 제작하기도 했다.

나단 라즈리치(Nathan Rajlich)

나단 라즈리치는 초창기부터 노드를 사용해온 노드 개발자다. 그는 NodObjC를 비롯해 인상적인 노드 모듈들을 제작했고 애플의 iOS에서 구동되는 노드 포팅을 유지보수하고 있다.

정승희

다음커뮤니케이션에서 “국민의 편익 증대”를 위해 컨텐츠 검색 서비스 개발을 담당하고 있다. 『Pro HTML5』(위키북스, 2011)를 번역했다.

민창현

경북대학교 컴퓨터공학과를 졸업하고 다음커뮤니케이션에서 컨텐츠 검색 서비스 개발을 담당하고 있다. 데이터 검색 플랫폼과 사용자 쿼리 분석에 관심이 많으며 최근에는 스크립트 언어 사용에 재미를 느끼고 있다.

이준

다음커뮤니케이션에서 프론트엔드와 모바일 앱개발을 담당하고 있다. 『제프리 젤드만의 웹표준 가이드』(위키북스, 2007)와 『CSS완벽가이드』(위키북스, 2009), 『Pro HTML5』(위키북스, 2011)를 번역했다.

  • [1부] 노드의 기반 기술
    • ▣ 01장: 노드에 오신 것을 환영합니다
      • 1.1 자바스크립트 기반
      • 1.2 비동기와 이벤트: 브라우저
      • 1.3 비동기와 이벤트: 서버
      • 1.4 DIRTy 애플리케이션
      • 1.5 DIRTy의 기본 요소
        • 1.5.1 간단한 비동기 예제
        • 1.5.2 Hello World HTTP 서버
        • 1.5.3 스트리밍 데이터
      • 1.6 요약
    •  
    • ▣ 02장: 다중 채팅방 애플리케이션 만들기
      • 2.1 애플리케이션 개요
      • 2.2 애플리케이션 요구사항과 초기 설정
        • 2.2.1 HTTP와 웹소켓 서비스
        • 2.2.2 애플리케이션의 파일 구조 생성
        • 2.2.3 의존성 모듈 명시
        • 2.2.4 의존성 모듈 설치
      • 2.3 HTML, CSS, 클라이언트 측 자바스크립트 서비스
        • 2.3.1 기본적인 정적 파일 서버 생성
        • 2.3.2 HTML과 CSS 파일 추가
      • 2.4 SocketIO를 이용한 채팅 관련 메시지 처리
        • 2.4.1 SocketIO 서버 구성
        • 2.4.2 애플리케이션 시나리오와 이벤트 처리
      • 2.5 애플리케이션의 사용자 인터페이스를 위한 클라이언트 측 자바스크립트
        • 2.5.1 메시지와 닉네임/채팅방 변경 요청을 서버로 전달
        • 2.5.2 메시지 및 입장할 수 있는 채팅방 목록을 사용자 인터페이스에 보여주기
      • 2.6 요약
    •  
    • ▣ 03장: 노드프로그래밍의 기본
      • 3.1 노드의 기능 관리와 재사용
        • 3.1.1 모듈 생성
        • 3.1.2 moduleexports를 이용해 잘 정비된 모듈 생성하기
        • 3.1.3 node_modules 디렉터리로 모듈 재사용하기
        • 3.1.4 알아둘 점
      • 3.2 비동기 프로그래밍 기법
        • 3.2.1 일회성 이벤트를 콜백으로 처리하기
        • 3.2.2 반복적인 이벤트를 이벤트 발생자로 처리하기
        • 3.2.3 비동기 개발의 어려운 점
      • 3.3 비동기 로직의 순서 배열하기
        • 3.3.1 직렬 흐름 제어를 사용하는 경우
        • 3.3.2 직렬 흐름 제어 구현하기
        • 3.3.3 병렬 흐름 제어 구현
        • 3.3.4 커뮤니티 도구 활용하기
      • 3.4 요약
    •  
  • [2부] 노드를 이용한 웹 애플리케이션 개발
    • ▣ 04장: 노드 웹 애플리케이션 만들기
      • 4.1 HTTP 서버의 기본
        • 4.1.1 노드가 HTTP 요청을 개발자에게 전달하는 방법
        • 4.1.2 “Hello World”로 응답하는 기본적인 HTTP 서버
        • 4.1.3 요청 헤더 읽기와 응답 헤더 설정하기
        • 4.1.4 HTTP 응답 상태 코드 설정하기
      • 4.2 RESTful 웹 서비스 만들기
        • 4.2.1 POST 요청으로 자원 생성하기
        • 4.2.2 GET 요청으로 자원 가져오기
        • 4.2.3 DELETE 요청으로 자원 삭제하기
      • 4.3. 정적 파일 서비스하기
        • 4.3.1 정적 파일 서버 만들기
        • 4.3.2 서버 오류 처리하기
        • 4.3.3 fsstat을 이용한 선제 오류 처리
      • 4.4 폼에서 사용자 입력받기
        • 4.4.1 제출된 폼 항목 처리하기
        • 4.4.2 formidable을 이용한 파일 업로드 처리하기
        • 4.4.3 업로드 진행 상황 계산하기
      • 4.5 HTTPS를 이용한 애플리케이션 보안
      • 4.6 요약
    •  
    • ▣ 05장: 노드 애플리케이션 데이터 저장하기
      • 5.1 서버가 없는 데이터 저장소
        • 5.1.1 인메모리 저장소
        • 5.1.2 파일 기반 저장소
      • 5.2 관계형 데이터베이스 관리 시스템
        • 5.2.1 MySQL
        • 5.2.2 PostgreSQL
      • 5.3 NoSQL 데이터베이스
        • 5.3.1 레디스
        • 5.3.2 몽고디비
        • 5.3.3 몽구스
      • 5.4 요약
    •  
    • ▣ 06장: 커넥트
      • 6.1 커넥트 애플리케이션 준비
      • 6.2 커넥트 미들웨어의 동작방식
        • 6.2.1 로그를 남기는 커넥트 미들웨어
        • 6.2.2. “hello world”로 응답하는 미들웨어
      • 6.3 미들웨어 순서의 중요성
        • 6.3.1 미들웨어가 next ( )를 호출하지 않을 때
        • 6.3.2 미들웨어 순서를 사용해 인증하기
      • 6.4 미들웨어와 서버 마운팅
        • 6.4.1 인증 미들웨어
        • 6.4.2 관리영역을 보여주는 미들웨어 컴포넌트
      • 6.5 설정 가능한 미들웨어 만들기
        • 6.5.1 설정 가능한 logger 미들웨어 컴포넌트 만들기
        • 6.5.2 router 미들웨어 컴포넌트 만들기
        • 6.5.3 URL을 다시 만드는 미들웨어 컴포넌트
      • 6.6 에러 핸들링 미들웨어 사용
        • 6.6.1 커넥트의 기본 에러 핸들러
        • 6.6.2 애플리케이션 에러 직접 다루기
        • 6.6.3 다수의 에러 핸들링 미들웨어 컴포넌트 사용
      • 6.7 요약
    •  
    • ▣ 07장: 커넥트의 내장 미들웨어
      • 7.1 쿠키와 요청 본문, 쿼리 스트링을 해석하는 미들웨어
        • 7.1.1 cookieParser ( ): HTTP 쿠키 해석
        • 7.1.2 bodyParser ( ): 요청 본문 해석
        • 7.1.3 limit ( ): 요청 본문의 크기 제한
        • 7.1.4 query ( ): 쿼리 스트링 파서
      • 7.2 핵심 웹 애플리케이션 기능을 실행하는 미들웨어
        • 7.2.1 logger ( ): 요청 로그 남기기
        • 7.2.2 favicon ( ): 파비콘 서비스
        • 7.2.3 methodOverride ( ): 위조 HTTP 메서드
        • 7.2.4 vhost(): 가상 호스트
        • 7.2.5 session ( ): 세션 관리
      • 7.3 웹 애플리케이션의 보안을 다루는 미들웨어
        • 7.3.1 basicAuth ( ): HTTP 기본 인증
        • 7.3.2 csrf ( ): 사이트 간 요청 위조 방어
        • 7.3.3 errorHandler ( ): 개발 에러 핸들링
      • 7.4 정적 파일 서비스 미들웨어
        • 7.4.1 static ( ): 정적 파일 서비스
        • 7.4.2 compress ( ): 정적 파일 압축
        • 7.4.3 directory ( ): 디렉터리 목록
      • 7.5 요약
    •  
    • ▣ 08장: 익스프레스
      • 8.1 애플리케이션의 뼈대 만들기
        • 8.1.1 익스프레스가 실행되게 설치하기
        • 8.1.2 애플리케이션 생성하기
        • 8.1.3 애플리케이션 둘러보기
      • 8.2 익스프레스 및 애플리케이션 설정하기
        • 8.2.1 환경 기반 설정
      • 8.3 뷰 렌더링
        • 8.3.1 뷰 시스템 설정
        • 8.3.2 뷰 찾기
        • 8.3.3 뷰에 데이터 노출하기
      • 8.4 폼과 파일 업로드를 다루는 방법
        • 8.4.1 사진의 데이터 모델 구현하기
        • 8.4.2 사진 업로드 폼 생성하기
        • 8.4.3 업로드한 사진 목록 보여주기
      • 8.5 자원 내려받기 다루기
        • 8.5.1 사진 내려받을 경로 생성하기
        • 8.5.2 사진 내려받을 경로 구현하기
      • 8.6 요약
    •  
    • ▣ 09장: 고급 익스프레스
      • 9.1 사용자 인증하기
        • 9.1.1 사용자를 저장하고 불러오기
        • 9.1.2 새로운 사용자 등록하기
        • 9.1.3 등록된 사용자 로그인
        • 9.1.4 사용자 정보를 불러오는 미들웨어
      • 9.2 고급 라우팅 기술
        • 9.2.1 사용자가 제출한 데이터 검증
        • 9.2.2 경로에 특화된 미들웨어
        • 9.2.3 페이징 구현
      • 9.3 공개 REST API 생성하기
        • 9.3.1 API 설계하기
        • 9.3.2 기본 인증 추가하기
        • 9.3.3 라우팅 구현하기
        • 9.3.4 내용 협상 기능
      • 9.4 에러 다루기
        • 9.4.1 404 에러 다루기
        • 9.4.2 에러 다루기
      • 9.5 요약
    •  
    • ▣ 10장: 노드 애플리케이션 테스트
      • 10.1 단위 테스트
        • 10.1.1 assert 모듈
        • 10.1.2 노드 유닛
        • 10.1.3 모카
        • 10.1.4 보우즈
        • 10.1.5 shouldjs
      • 10.2 인수 테스트
        • 10.2.1 토비
        • 10.2.2 소다
      • 10.3 요약
    •  
    • ▣ 11장: 웹 애플리케이션 템플릿
      • 11.1 템플릿으로 코드 깔끔하게 유지하기
        • 11.1.1 템플릿 사용하기
      • 11.2 임베디드 자바스크립트 템플릿
        • 11.2.1 템플릿 생성하기
        • 11.2.2 EJS 필터로 템플릿 데이터 변경하기
        • 11.2.3 애플리케이션에 EJS 통합하기
        • 11.2.4 클라이언트 측 애플리케이션에서 EJS 사용하기
      • 11.3 호간으로 머스태쉬 템플릿 언어 사용하기
        • 11.3.1 템플릿 생성하기
        • 11.3.2 머스태쉬 태그
        • 11.3.3 호간 세부 조정하기
      • 11.4 제이드 템플릿
        • 11.4.1 제이드 기초
        • 11.4.2 제이드 템플릿의 로직
        • 11.4.3 제이드 템플릿 구성하기
      • 11.5 요약
    •  
  • [3부] 노드로 할 수 있는 더 많은 것들
    • ▣ 12장: 노드 애플리케이션의 배포와 가동시간 관리
      • 12.1 노드 애플리케이션 호스팅
        • 12.1.1 전용 서버와 가상 사설 서버
        • 12.1.2 클라우드 호스팅
      • 12.2 간단한 배포
        • 12.2.1 깃 저장소에서 배포
        • 12.2.2 노드 실행 유지
      • 12.3 서버 가동 시간과 성능의 최대화
        • 12.3.1 Upstart로 가동 시간 관리
        • 12.3.2 클러스터 API: 다중 코어의 장점 활용
        • 12.3.3 정적 파일 서비스와 프록시
      • 12.4 요약
    •  
    • ▣ 13장: 웹 서버 이외의 것들
      • 13.1 SocketIO
        • 13.1.1 간단한 SocketIO 애플리케이션 만들기
        • 13.1.2 SocketIO를 사용한 페이지 동작과 CSS 리로드
        • 13.1.3 SocketIO의 또 다른 사용법
      • 13.2 TCP/IP 네트워크
        • 13.2.1 버퍼와 바이너리 데이터 사용
        • 13.2.2 TCP 서버 생성
        • 13.2.3 TCP 클라이언트 생성
      • 13.3 운영체제와 상호작용하는 데 필요한 도구
        • 13.3.1 process 전역 싱글톤
        • 13.3.2 파일 시스템 모듈 사용
        • 13.3.3 외부 프로세스 생성
      • 13.4 개발 명령행 도구
        • 13.4.1 명령행 인자 해석
        • 13.4.2 표준 입력과 표준 출력 처리
        • 13.4.3 색상이 들어간 결과 추가
      • 13.5 요약
    •  
    • ▣ 14장: 노드 생태계
      • 14.1 노드 개발자를 위한 온라인 자원
        • 14.1.1 노드와 모듈 레퍼런스
        • 14.1.2 구글 그룹스
      • 14.1.3 IRC
        • 14.1.4 깃허브 이슈
      • 14.2 깃허브
        • 14.2.1 깃허브 시작하기
        • 14.2.2 깃허브에 프로젝트 추가하기
        • 14.2.3 깃허브에서 함께 개발하기
      • 14.3 npm 저장소에 기여하기
        • 14.3.1 패키지 준비
        • 14.3.2 패키지 명세 작성하기
        • 14.3.3 패키지 테스트 및 배포
      • 14.4 요약
    •  
    • ▣ 부록A: 노드 및 커뮤니티 부가 프로그램 설치하기
      • A.1 맥 OS X에서 설치하기
      • A.1.1 Homebrew로 설치하기
      • A.2 윈도우에서 설치하기
      • A.3 리눅스에서 설치하기
        • A.3.1 우분투에 설치할 때 필요한 패키지
        • A.3.2 CentOS에 설치 시 필요한 패키지
      • A.4 노드 컴파일하기
      • A.5 노드 패키지 매니저 사용하기
        • A.5.1 패키지 검색하기
        • A.5.2 패키지 설치하기
        • A.5.3 문서와 패키지 코드 찾아보기
    •  
    • ▣ 부록B: 노드 디버깅
      • B.1 JSHint로 코드 분석하기
      • B.2 디버깅 정보 출력하기
        • B.2.1 console 모듈로 디버깅하기
        • B.2.2 디버깅 출력을 관리하는 디버그 모듈 사용하기
      • B.3 노드의 내장 디버거
        • B.3.1 디버거 네비게이션
        • B.3.2 디버거로 상태 확인 및 조작하기
      • B.4 노드 인스펙터
        • B.4.1 노드 인스펙터 시작하기
        • B.4.2 노드 인스펙터 네비게이션
        • B.4.3 노드 인스펙터에서 상태 둘러보기
    •  
    • ▣ 부록C: 익스프레스 확장 및 설정하기
      • C.1 익스프레스 확장하기
        • C.1.1 템플릿 엔진 등록하기
        • C.1.2 consolidatejs로 템플릿 작성하기
        • C.1.3 익스프레스 확장 및 프레임워크
      • C.2 고급 설정
        • C.2.1 JSON 응답 조작하기
        • C.2.2 JSON 응답 포맷 만들기
      • C.2.3 역방향 프록시 헤더 필드 신뢰하기

예제코드 관련 GitHub 페이지

도서 소개 자료

관련 글