• 프로페셔널 Node.js
  • 한 권으로 끝내는 Node.js 프로그래밍

  • 페드로 테세이라 지음
  • 유윤선 옮김

  • 오픈소스 & 웹 시리즈 _ 048
  • ISBN: 9788998139155
  • 30,000원 | 2013년 03월 27일 발행 | 492쪽



Node.js를 사용해 자바스크립트로 확장 가능한 소프트웨어를 개발하자!

Node.js는 자바스크립트로 빠르고 확장 가능한 네트워크 프로그램을 개발할 수 있는 인기 있는 프레임워크다. 하지만 Node.js를 배우기란 쉽지 않다. 이 책에서는 Node.js 플랫폼의 설치부터 모듈을 개발하고 로드하는 기본적인 방법, 버퍼를 활용해 바이너리 데이터를 조작 ∙ 인코딩 ∙ 디코딩하는 법, 이벤트 이미터 패턴을 활용해 이벤트 바인딩을 단순화하는 법 등을 차례로 소개한다. 타이머를 활용해 함수 실행을 예약하는 것부터 외부 프로세스를 생성하고 제어하는 법에 이르기까지 이 책에서는 독자들이 자신만의 모듈을 개발 ∙ 테스트 ∙ 구동하는 데 필요한 모든 내용을 알려준다.

★ 이 책에서 다루는 내용 ★

  • 파일의 조회, 읽기, 쓰기
  • 스트림, 파일 시스템, 네트워킹, 자동화된 단위 테스트
  • 데이터 스트림을 읽고 쓰는 법
  • TCP와 HTTP 서버 및 클라이언트 개발
  • 데이터그램 활용, 모듈 테스트 및 디버깅, 콜백 흐름의 제어
  • 커넥트, 익스프레스, Socket.IO를 활용한 실시간 웹 애플리케이션 개발
  • MySQL, 카우치디비, 몽고디비 연결

페드로 테세이라(Pedro Teixeira)

페드로 테세이라는 오픈소스 프로그래머이자 여러 node.js 모듈의 제작자다. 14년 전에 소프트웨어 공학으로 학위를 받은 후 컨설턴트, 프로그래머, 국제적으로 유명한 node.js 커뮤니티 회원으로 활동하고 있다.

페드로는 The Node Firm의 창립 파트너이며, Node.js 플랫폼을 서비스하는 선두 기업인 Nodejitsu Inc의 선임 프로그래머다. 또 인기 있는 노드 터츠(Node Tuts) 스크린캐스트를 만든 장본인이기도 하다.

페드로가 10살 때 그의 아버지는 ZX 스펙트럼을 프로그래밍하는 법을 페드로에게 가르쳤다. 이후 페드로는 프로그래밍을 한 번도 쉰 적이 없다. 페드로는 독학으로 아버지가 갖고 있던 애플 IIc 프로그래밍을 익혔고 이후 PC 프로그래밍에 입문했다. 대학에서는 유닉스와 오픈소스 세계를 처음 접하고 크게 매료된다. 직장에서는 비주얼 베이직, C/C++, 자바, PHP, 루비, 자바스크립트를 사용해 대규모 통신회사, 은행, 호텔 체인 등을 위한 시스템과 제품을 개발했다.

페드로는 노드가 처음 개발됐을 때부터 Node.js의 열렬한 지지자였으며, 많은 애플리케이션과 Fugue, Alfred.js, Carrier, Nock 등과 같은 유명한 모듈을 개발했다.

유윤선

인디 개발자이자 프리랜서 번역가로 활동 중이다. 이따금 http://joshy21.com/weblog에 번역과 상관없는 글을 올리고 있다. 역서로는 《NoSQL 프로그래밍 (위키북스)》《프로 스프링 3》《라이프해커》《시작하세요! 아이폰 5 프로그래밍》《안드로이드 레시피》《시작하세요! Unity 3D 게임 프로그래밍》《시작하세요! 안드로이드 게임 프로그래밍》《시작하세요! 아이폰 4 프로그래밍》《플래시 빌더 4 & 플렉스 4 바이블》《쉽고 빠르게 익히는 CSS3》《스프링 시큐리티 3》《시작하세요! 아이패드 프로그래밍》, 《오브젝티브 C 개발 레시피 (길벗)》《프로 제이쿼리 완벽 마스터》《5일 만에 아이폰 앱 개발하기》《WebGL 개발 입문》, 《플래시 게임 마스터(에이콘출판사)》, 《Adobe AIR 인 액션(위키북스, 공역)》, 《스프링 3 레시피(위키북스, 공역)》, 《액션스크립트 3.0 완벽가이드(인사이트, 공역)》 등이 있다.

  • 1부 소개 및 설정
    • 01장_ 노드 설치
      • 윈도우에서의 노드 설치
      • 맥 OS X에서의 설치
      • 소스코드를 활용한 노드 설치
        • 노드 버전의 선택
        • 노드 소스코드 내려받기
        • 노드 빌드
        • 노드 설치
        • 노드 실행
      • 노드 패키지 매니저의 설정 및 활용
        • NPM을 활용한 패키지 설치, 업데이트, 제거
      • 정리
      •  
    • 02장_ 노드 소개
      • 이벤트 주도 프로그래밍 방식의 이해
      • 노드와 자바스크립트에서 비동기적 애플리케이션 개발이 쉬운 이유
        • 클로저란?
        • 클로저가 비동기적 프로그래밍에 도움되는 이유
      • 정리
      •  
  • 2부 노드 핵심 API
    • 03장_ 모듈 로딩
      • 노드가 모듈을 로드하는 방식
      • 모듈 내보내기
        • 모듈의 로딩
      • 정리
      •  
    • 04장_ 바이너리 데이터의 조작, 인코딩, 디코딩을 위한 버퍼 활용
      • 버퍼의 생성
      • 버퍼의 바이트 가져오기 및 설정
      • 버퍼 잘라내기
      • 버퍼 복사
      • 버퍼 디코딩
      • 정리
      •  
    • 05장_ 이벤트 이미터 패턴을 활용한 이벤트 바인딩 단순화
      • 표준 콜백 패턴의 이해
      • 이벤트 이미터 패턴의 이해
      • 이벤트 타입의 이해
      • 이벤트 이미터 API의 활용
        • .addListener() 또는 .on()을 활용한 콜백 바인딩
        • 여러 이벤트 리스너의 바인딩
        • .removeListener()를 활용한 이벤트 이미터의 이벤트 리스너 제거
        • .once()를 통한 일회용 콜백 등록
        • .removeAllListeners()를 활용한 모든 이벤트 리스너 제거
      • 커스텀 이벤트 이미터의 개발
        • Node 이벤트 이미터의 상속
        • 이벤트 내보내기
      • 정리
      •  
    • 06장_ 타이머를 활용한 함수 호출 예약
      • SETTIMEOUT을 활용한 함수의 실행 지연
      • CLEARTIMEOUT을 활용한 함수의 실행 취소
      • 함수의 반복 실행 예약 및 취소
      • PROCESS.NEXTTICK을 활용해 다음 이벤트 루프 반복까지 함수 실행 연기하기
      • 이벤트 루프 블로킹
      • 이벤트 루프 빠져나가기
      • SETINTERVAL 대신 SETTIMEOUT을 활용한 직렬화 강제 적용
      • 정리
      •  
  • 3부 파일, 프로세스, 스트림, 네트워크 통신
    • 07장_ 파일 조회, 읽기, 쓰기
      • 파일 경로의 조작
        • 경로 정규화
        • 경로 결합
        • 경로 해석
        • 두 절대 경로 사이에서 상대 경로 찾기
        • 경로 구성 요소의 추출
        • 경로의 존재 여부 판단
      • FS 모듈의 소개
        • 파일 통계 정보 조회
      • 파일 열기
      • 파일 읽기
        • 파일에 쓰기
        • 파일 닫기
      • 정리
      •  
    • 08장_ 외부 프로세스의 생성 및 제어
      • 외부 명령의 실행
      • 자식 프로세스의 실행
        • 자식 프로세스의 생성
        • 자식 프로세스의 데이터 수신
        • 자식 프로세스로의 데이터 전송
        • 자식 프로세스 종료 시 알림 수신
      • 신호 전달 및 프로세스 죽이기
      • 정리
      •  
    • 09장_ 데이터 스트림 읽기와 쓰기
      • 읽기 가능 스트림의 활용
        • 데이터 기다리기
        • 스트림의 일시 정지 및 재개
        • 스트림이 끝나는 시점의 판단
      • 쓰기 가능 스트림의 활용
        • 스트림에 데이터 쓰기
        • 스트림의 드레인 시점 기다리기
      • 복잡한 스트림 예제에 대한 고려
        • 파일 시스템 스트림의 생성
        • 네트워크 스트림의 이해
      • 느린 클라이언트 문제를 피하고 서버 구하기
        • 느린 클라이언트 문제의 이해
        • 느린 클라이언트 문제의 해결
        • stream.pipe()를 활용한 느린 클라이언트 문제 예방 및 읽기 가능 스트림과 쓰기 가능 스트림의 파이핑
      • 정리
      •  
    • 10장_ TCP 서버의 개발
      • TCP 서버의 생성
        • Socket- 객체의 활용
        • 유휴 소켓의 이해
        • Keep-Alive 설정
        • 지연 시간의 활용 또는 미사용
        • 클라이언트 커넥션 리스닝
        • 서버 닫기
        • 에러 처리
      • 간단한 TCP 채팅 서버의 개발
        • 커넥션 수신
        • 커넥션으로부터 데이터 읽기
        • 모든 클라이언트 수집
        • 데이터 전달
        • 닫힌 커넥션의 제거
        • TCP 채팅 서버 활용법
      • 정리
      •  
    • 11장_ HTTP 서버의 개발
      • HTTP.SERVERREQUEST 객체의 이해
      • HTTP.SERVERRESPONSE- 객체의 이해
        • 헤더 쓰기
        • 헤더의 변경 또는 설정
        • 헤더의 제거
        • 응답 바디 쓰기
      • HTTP 청크 응답 스트리밍
        • 파일 파이핑
        • 다른 프로세스의 출력 파이핑
      • 서버 닫기
      • 예제- 1:정적 파일을 제공하는 서버 개발
      • 예제 2: HTTP 청크 응답과 타이머의 활용
      • 정리
      •  
    • 12장_ TCP 클라이언트의 개발
      • 서버 연결
      • 데이터의 전송 및 수신
      • 커넥션 종료
      • 에러 처리
      • 명령행 TCP 클라이언트 예제의 개발
        • 서버 연결
        • 서버로의 명령행 데이터 전송
        • 서버 메시지의 출력
        • 커넥션이 끊길 때의 재연결
        • 커넥션 닫기
        • 클라이언트 한데 정리하기
      • 정리
      •  
    • 13장_ HTTP 요청의 수행
      • GET 요청하기
      • 다른 HTTP 동사의 활용
        • 응답 객체의 검사
        • 응답 본문 가져오기
        • 응답 본문 스트리밍
      • HTTP.AGENT를 활용한 소켓 풀링
      • 서드파티 요청 모듈을 활용한 HTTP 요청 단순화
        • request 모듈의 설치 및 사용
        • 테스트 서버의 생성
        • 리다이렉트 따르기
        • 요청 옵션의 설정
        • 요청 본문 인코딩
        • 스트리밍
        • 쿠키 보관함의 활용
      • 정리
      •  
    • 14장_ 데이터그램의 활용
      • UDP의 이해
      • UDP의 활용법 이해
      • 데이터그램 서버의 개발
        • 메시지 리스닝
        • 서버 테스트
        • 추가 메시지 정보의 검사
      • 간단한 데이터그램 에코 서버의 개발
        • 메시지 기다리기
        • 전송자에게 메시지 재전송
        • 에코 서버 정리
      • 데이터그램 클라이언트의 개발
        • 클라이언트의 개발
        • 메시지 전송
        • 소켓 닫기
      • 간단한 데이터그램 명령행 클라이언트의 개발
        • 명령행에서 읽기
        • 서버로 데이터 보내기
        • 서버로부터 데이터 받기
        • 명령행 UDP 클라이언트 정리
      • 데이터그램 멀티캐스트의 이해와 활용
        • 멀티캐스트 메시지의 수신
        • 멀티캐스트 메시지의 전송
        • 데이터그램의 최대 크기
      • 정리
      •  
    • 15장_ TLS/SSL을 통한 TCP 서버 보호
      • 개인 키와 공개 키의 이해
        • 개인 키의 생성
        • 공개 키의 생성
      • TLS 서버의 개발
        • 서버 초기화
        • 커넥션 리스닝
        • 클라이언트로부터 데이터 읽기
        • 클라이언트로 데이터 보내기
        • 접속 종료
      • TLS 클라이언트의 개발
        • 클라이언트 초기화
        • 서버 접속
        • 서버 인증서의 확인
        • 서버로 데이터 보내기
        • 서버로부터 데이터 읽기
        • 접속 종료
      • 예제 개발
        • TLS 채팅 서버의 개발
        • TLS 명령행 채팅 클라이언트의 개발
        • 클라이언트 인증서의 확인
      • 정리
      •  
    • 16장_ HTTPS를 통한 HTTP 서버 보호
      • 보안 HTTP 서버의 개발
        • 서버 옵션의 설정
        • 커넥션 리스닝
        • HTTPS 클라이언트 인증서의 유효성 검증
      • HTTPS 클라이언트의 개발
        • 클라이언트 초기화
        • 요청 보내기
        • HTTPS 서버 인증서의 검증
      • 정리
      •  
  • 4부 모듈 및 애플리케이션 개발과 디버깅
    • 17장_ 모듈 및 애플리케이션 테스트
      • 테스트 러너의 활용
        • 테스트 작성
        • 테스트 실행
      • ASSERTION 테스트 모듈의 활용
        • assert 모듈의 활용
        • 노드탭의 내장 Assertion 함수 활용
      • 비동기적 모듈의 테스트
      • 정리
      •  
    • 18장_ 모듈 및 애플리케이션 디버깅
      • CONSOLE.LOG의 활용
      • 노드의 내장 디버거 활용
      • 노드 인스펙터의 활용
      • 정리
      •  
    • 19장_ 콜백 흐름의 제어
      • 부메랑 효과의 이해
      • 함수 선언을 통한 부메랑 효과 방지
      • 비동기 흐름 제어 라이브러리의 활용
        • 연속 실행
        • 병렬 실행
        • 캐스케이딩
        • 순회
        • 매핑
        • 리듀싱
        • 필터링
        • 감지
      • 정리
      •  
  • 5부 웹 애플리케이션 개발
    • 20장_ HTTP 미들웨어의 개발 및 활용
      • 커넥트 HTTP 미들웨어 프레임워크의 이해
      • 커스텀 HTTP 미들웨어의 개발
        • 비동기적 미들웨어의 개발
        • 미들웨어 내에서의 콜백 등록
        • 미들웨어 내에서의 에러 처리
      • 커넥트의 내장 HTTP 미들웨어 활용
        • 요청 로깅
        • 에러 처리
        • 정적 파일 서비스
        • 쿼리 문자열 파싱
        • 요청 본문의 파싱
        • 쿠키 파싱
        • 세션의 활용
        • 다른 미들웨어
      • 정리
      •  
    • 21장_ Express.js를 활용한 웹 애플리케이션 개발
      • EXPRESS.JS 애플리케이션의 초기화
      • 애플리케이션의 미들웨어 설정
      • 요청 라우팅
        • 요청 처리
        • 세션 활용
        • 라우트 미들웨어의 활용
      • 정리
      •  
    • 22장_ Socket.IO를 활용한 실시간 애플리케이션 개발
      • 웹소켓의 동작 원리 이해
      • SOCKET.IO를 활용한 웹소켓 애플리케이션 개발
        • 서버에서의 Socket.IO 설치 및 실행
        • Socket.IO를 활용한 실시간 웹 채팅 개발
        • 채팅 애플리케이션의 확장
        • 접속 중단 감지
        • 사용자 채팅방 분리
        • 네임스페이스의 활용
        • 레디스를 활용한 서버사이드 애플리케이션 배포
      • 정리
      •  
  • 6부 데이터베이스 연결
    • 23장_ node-mysql을 활용한 MySQL 연결
      • 라이브러리를 활용한 MySQL 데이터베이스 연결 및 통신
      • 보안을 염두에 둔 데이터 추가
      • 효과적인 데이터 조회
      • 정리
      •  
    • 24장_ 나노를 활용한 카우치디비 연결
      • 나노 모듈의 설치
      • 데이터베이스 연결 및 생성
      • 도큐먼트 저장
      • 카우치디비 뷰의 생성 및 활용
      • 카우치디비 도큐먼트의 파일 첨부
      • 정리
      •  
    • 25장_ 몽구스를 활용한 몽고디비 연결
      • 몽구스의 설치
      • 몽구스가 모델을 활용해 데이터베이스 접근을 캡슐화하는 원리의 이해
      • 몽고디비 연결
      • 스키마 정의
      • 모델 정의
        • 밸리데이터 활용
        • 수정자의 활용
        • 게터의 활용
        • 가상 어트리뷰트의 활용
        • 기본값의 활용
        • 인덱스의 정의
        • DB Ref를 활용한 다른 도큐먼트 참조
        • 인스턴스 메서드의 정의
        • 스태틱 메서드의 정의
      • 정리

예제코드 관련 GitHub 페이지

관련 글