Redis와 Node.js를 사용한 웹 애플리케이션 개발 [클라우드 시대 웹 서비스의 확장성을 높이는]
- 원서명Building Scalable Apps with Redis and Node.js (ISBN 9781783984480)
- 지은이조슈아 조하난(Joshua Johanan)
- 옮긴이김기성
- ISBN : 9788960777293
- 33,000원
- 2015년 06월 30일 펴냄
- 페이퍼백 | 360쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 웹 프로페셔널
책 소개
요약
이 책에서는 최근 많은 주목을 받고 있는 Node.js와 레디스(Redis)를 사용해 실제 웹 애플리케이션을 개발하기 위한 노하우를 전수하고 있다. 성공적인 웹 서비스를 개발하고 운영하기 위해 필수적인 운영 시스템의 확장성을 보장하기 위한 방법을 최신의 프레임워크인 Node.js를 사용해 웹 애플리케이션을 밑바닥에서부터 개발하는 실제 예를 통해 이슈와 해결 방법을 설명하고 있다. 또한 최근에 주목 받고 있는 메모리 기반 키-값 스토리지인 레디스에 대해서도 설명하고 있으며 이 외에도 웹 애플리케이션 개발에 필요한 여러 모듈과 툴을 소개하고 있다.
이 책에서 다루는 내용
■ 직접 익스프레스(Express) 모듈의 미들웨어 구축과 실행
■ Socket.IO와 익스프레스 모듈을 통합하고 동일한 인증 방식 사용
■ 비밀번호를 안전하게 로컬 스토어에 저장하는 방법
■ 메시지 큐를 사용해 애플리케이션을 여러 부분으로 나눠 관리
■ 레디스(Redis)로 서버들 간의 공유된 상태 만들기
■ 백본(Backbone)과 Socket.IO, 리액트(React)로 빠르고 동적인 실시간의 프론트엔드 구축
■ Grunt.js 태스크러너를 사용한 빌드 과정 자동화
■ 클라우드 서버로 애플리케이션을 실행하는 배치 스크립트 작성
이 책의 대상 독자
'확장성(scalability)'이라는 단어가 낯설게 들린다면, 이 책을 꼭 읽어보기 바란다. 프레임워크에 대한 설명은 사전지식을 요구하지 않기 때문에 Node.js를 사용해 본 적이 많지 않아도 상관 없다. 확장성 있는 Node.js 애플리케이션을 곧 만들게 될 것이다! 자바스크립트는 알고 있어야 한다.
이 책의 구성
1장, ‘익스프레스를 사용한 백엔드 개발’에서는 익스프레스를 사용해서 페이지를 보여 주는 것을 배운다. 익스프레스는 완전한 기능을 갖춘 웹 애플리케이션 프레임워크로 소량의 코드를 작성해도 여러 가지 기능을 쓸 수 있게 해준다. 또, 이를 확장해 만든 탄탄한 미들웨어 시스템도 갖추고 있다. 미들웨어는 템플릿과 세션뿐 아니라 폼 데이터도 작업할 수 있게 해준다. 1장에서 애플리케이션의 토대를 만들고, 2장부터는 활용할 것이다.
2장, ‘Socket.IO를 사용한 확장’에서는 웹소켓을 사용해 실시간 애플리케이션을 만드는 방법을 보여준다. 웹소켓은 사용자가 실시간으로 교신할 수 있게 해주는 동적 웹페이지 발전의 다음 단계다. 2장은 익스프레스 모듈로 만든 세션에 Socket.IO 모듈을 적용하는 예제를 보여준다.
3장, ‘사용자 인증’에서는 제대로 동작하는 로그인 페이지를 만드는 법을 보여 준다. 여기서 패스포트 프레임워크를 사용해 인증 함수를 만든다. 패스포트는 여러 프로바이더들과 연결할 커넥터를 만드는 데 주로 쓰인다. 커넥터들은 OAuth나 OAuth 2.0을 구현한다. 여러 OAuth 프로바이더들을 대상으로 커넥터를 직접 구현할 필요 없이 각 라이브러리가 처리한다. 로컬 패스워드를 안전하게 저장하는 방법도 알게 된다.
4장, ‘RabbitMQ로 메시지 큐잉하는 법’에서는 메시지 큐(Queue)를 다룬다. 메시지 큐는 확장성 있는 애플리케이션의 필수 사항으로, 애플리케이션을 분해해서 복잡성이나 스코프를 처리할 수 있게 해준다. 4장에서 이에 대한 예제를 다루게 된다. 또한 사용자 각자의 메시지 큐를 만들어서 함수에 연결하는 방법도 알려 준다.
5장, ‘애플리케이션 데이터 저장소로 레디스 사용하기’에서는 레디스에 정보를 저장하고 회수하는 방법을 배운다. 레디스 데이터 스토리지 엔진은 관계형 데이터베이스와 다르기 때문에 꼭 배워야 한다. 관계형 데이터베이스처럼 생각하면 문제가 발생할 수 있다. 애플리케이션을 만들 때 주로 쓰는 커맨드뿐만 아니라 레디스가 메시지 큐를 수행하는 방법에 대해 배운다.
6장, ‘바우어를 사용한 프론트엔트 의존성 관리’에서는 애플리케이션의 프론트엔드 개발을 시작하는 방법을 배운다. 프론트엔드가 없는 애플리케이션은 없다. 여기서 쓸 프레임워크에 대해 알아보고 왜 그 프레임워크를 사용했는지 알게 될 것이다.
7장, ‘DOM 이벤트를 위한 백본과 리액트 사용’에서는 프론트엔드의 중추 역할을 하는 백본을 다룬다. 브라우저에서 자바스크립트를 수행할 때 중요한 것 두 가지는 DOM 조작과 이벤트 응답이다. 실시간 이벤트의 리스너를 만드는 방법과 페이지와 상호 작용하는 방법을 배운다. 백본과 리액트로 지속 가능한 코드를 만들어 이를 수행한다.
8장, ‘애플리케이션 개발을 위한 자바스크립트 사용 사례’에서는 더 나은 자바스크립트 코드를 작성하는 법을 배운다. 스크립트 언어인 자바스크립트는 실수를 많이 해도 실행이 되는데, 이는 장점이기도 하고 단점이기도 하다. 하지만 세미콜론을 빼먹거나 런타임 오류가 발생하는 것은 알아야 한다. 이는 반복되는 빌드 시스템을 만들어 해결한다. 여러 모듈들을 보고 어떤 모듈은 코드에 적용하지 않을지 배운다.
9장, ‘배치와 확장성’에서는 로컬호스트 주소를 삭제하는 방법을 배운다. 배치할 때 실수로 어떤 단계를 빠트리는 경우가 많기 때문에 배치 스크립트를 제대로 만드는 것이 중요하다. 한 개 이상의 서버에 배치하는 법과 배치할 수 있는 여러 환경을 만드는 법을 배운다. 서버가 여러 개 있으면 수평 확장이 가능하므로 서버를 추가하기 쉬운 장점이 있다.
10장, ‘디버깅과 문제 해결’에서는 함수 호출 상태를 알아보는 방법에 대해 설명한다. console.log() 함수를 여러 군데 사용해 디버깅하기는 어렵기 때문이다. 또한 프론트엔드와 백엔드에서 메모리 누수를 탐지하는 법을 배운다. 크롬에서 자바스크립트 디버깅을 해 봤다면 10장에서 도움을 많이 받을 것이다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
목차
목차
- 1장 익스프레스를 사용한 백엔드 개발
- Node.js와 노드 패키지 관리자
- 노드에서 익스프레스 사용하기
- 익스프레스에서 미들웨어 사용하기
- 미들웨어 작성
- 믹스에 템플릿 추가
- 레이아웃
- 익스프레스에서 세션 사용하기
- 익스프레스에서 쿠키 사용하기
- 세션 추가하기
- 레디스를 세션 스토어로 사용하기
- 폼 처리
- CSRF
- 매우 간단한 인증
- 앱의 설정 파일 설정
- 라우트 매핑
- 설정을 사용하도록 앱 수정하기
- 애플리케이션을 확장하는 방법
- 요약
- 2장 Socket.IO를 사용한 확장
- 노드 패키지 버전
- 간단한 Socket.IO 앱 만들기
- 패키지 설치
- 클라이언트 만들기
- 파이썬을 사용해 사이트 서버 구축하기
- 핑퐁
- 상호 작용 만들기
- 브라우저 부분 추가
- 액크놀리지먼트
- 메시지 브로드캐스팅
- 디스컨넥트 이벤트 사용하기
- 네임스페이스 만들기
- 네임스페이스 클라이언트 만들기
- 룸 추가
- 네임스페이스 또는 룸 사용하기
- 네임스페이스
- 네임스페이스 찾기
- 룸은 언제 사용하는가
- 룸 찾기
- 네임스페이스
- 네임스페이스와 룸을 함께 사용하기
- Socket.IO와 익스프레스를 함께 사용하기
- 설정에 Socket.IO 추가하기
- 당신은 누구인가
- Socket.IO의 인증
- 애플리케이션 이벤트 추가
- Socket.IO의 저장소로 레디스 사용하기
- Socket.IO 내부 동작
- WebSocket
- 2장에서 중요한 아이디어
- 요약
- 3장 사용자 인증하기
- 노드 패키지 버전
- 인증시스템 만드는 방법
- 페이스북 애플리케이션 등록하는 방법
- 페이스북을 인증하기 위해 Passport 모듈을 쓰는 방법
- 구글로 인증하는 방법
- 애플리케이션에 구글 인증 추가하기
- 더 많은 OAuth 프로바이더 추가
- 안전한 로컬 인증 추가
- 등록 추가
- 데이터베이스 추가하기
- 패스워드 스토어 이론
- OAuth 프로세스
- 요약
- 4장 RabbitMQ로 메시지 큐잉하는 법
- 노드 패키지 버전
- RabbitMQ 설치
- Mac OS X에 인스톨하는 방법
- RabbitMQ 관리 플러그인
- 리눅스에 인스톨하는 방법
- 윈도우에 인스톨하는 방법
- Mac OS X에 인스톨하는 방법
- 처음으로 만든 메시지 큐
- 매니지먼트 인터페이스
- 메시지 보내기
- 메시지를 큐에 저장하기
- 다른 워커 추가
- 응답 메시지 보내기
- StartServer 만들기
- 워커 만들기
- 실시간으로 카드 요금 청구 청구하기
- PacktChat에 메시지 큐 추가
- 토픽 익스체인지
- 워커 만들기
- RabbitMQ에서 큐에 메시지 저장
- 요약
- 5장 애플리케이션 데이터 저장소로 레디스 사용하기
- 노드 패키지 버전
- 레디스 설치하는 방법
- Mac OS X에 설치하는 방법
- 리눅스에 설치하는 방법
- 윈도우에 설치하는 방법
- 레디스에서 데이터 구조 사용하기
- 간단한 레디스 애플리케이션 만드는 방법
- 레디스 스키마
- 해시 사용하기
- 레디스에서의 키
- 레디스의 지속성
- 레디스 키 삭제하기
- 메시지 큐로 레디스 사용하기
- 레디스를 PacktChat에 추가하기
- 레디스 구조 정하기
- 레디스 함수 만들기
- 레디스는 애플리케이션 상태를 위한 용도로 쓰인다
- 요약
- 6장 바우어를 사용한 프론트엔트 의존성 관리
- 노드 패키지 버전
- 바우어 설치와 사용
- 리액트 소개
- 백본 소개
- 백본 모델 사용
- 백본 컬렉션 사용
- 요약
- 7장 DOM 이벤트를 위한 백본과 리액트 사용
- 바우어 패키지 버전들
- Socket.IO 마무리
- 리액트 컴포넌트 만들기
- 리액트 요약
- 백본 모델
- 모델과 Socket.IO 동기화
- 모델 생성
- 컬렉션 생성
- 백본 라우터
- 컬렉션과 뷰 합치기
- CSS와 레이아웃 수정
- 새 워커 등록
- 애플리케이션 사용 시도
- 요약
- 8장 애플리케이션 개발을 위한 자바스크립트 사용 사례
- 노드 패키지 버전
- 테스트 환경 설정
- 코드 커버리지에 이스탄불 응용
- 다양한 환경 설정
- 투웰브 팩터 앱
- config 파일 수정하기
- 환경 파일 생성
- 추가 환경 설정
- 그런트 소개
- 기본 그런트 파일 빌드
- 테스트 자동화
- 파일 전처리
- 그런트를 사용한 폴더 비우기
- 소스파일 JSHinting
- 코드 통합
- 코드 축소
- 그런트 요약
- 정적 파일과 CDN
- S3 버킷 생성
- 파이썬과 가상환경 설치
- 새로운 툴 스크립트 생성
- 요약
- 9장 배치와 확장성
- EC2 서버 생성
- AWS EC2 요약
- 앤서블은 무엇인가
- 앤서블 설치
- 앤서블 롤 사용
- RabbitMQ 설치
- 애플리케이션 설치
- 코드 배포
- 다중 애플리케이션 서버 로드 밸런싱
- 롤 자동화
- 앤서블 요약
- 새로운 환경 생성
- 확장성
- 확장성의 여러 가지 타입
- 수평 확장
- 수직 확장
- 확장성의 여러 가지 타입
- 요약
- EC2 서버 생성
- 10장 디버깅과 문제 해결
- 노드 패키지
- 크롬 개발자 도구 사용
- 요소
- 네트워크
- 소스
- 타임라인
- 프로파일
- 리소스
- 감사
- 콘솔
- 요청 분석
- 디버깅
- 프론트엔드 디버깅
- 백엔드 디버깅
- 디버깅 요약
- 애플리케이션 CPU 프로파일링
- 힙 스냅샷 생성
- 프론트엔드 메모리 누수
- 메모리 누수 요약
- 요약
도서 오류 신고
정오표
정오표
2021-06-14
p.28. 아래서 9행
시스템에서 출동이 발생하는 것 → 시스템에서 충돌이 발생하는 것
2015-09-30
'