Top

Node.js 하이 퍼포먼스 [성능 분석부터 병목 현상 제거 및 성능 저하 회피까지]

  • 원서명Node.js High Performance (ISBN 9781785286148)
  • 지은이디오고 리센데(Diogo Resende)
  • 옮긴이테크 트랜스 그룹 T4
  • ISBN : 9788960779488
  • 15,000원
  • 2016년 12월 23일 펴냄
  • 페이퍼백 | 160쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 웹 프로페셔널

책 소개

소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/nodejs-hp)

요약

Node.js는 서버 쪽에서 자바스크립트를 사용할 수 있게 해주는 도구다. Node.js와 같은 플랫폼에서 성능 최적화를 위해서는 하드웨어의 각 특징을 사용하고, 메모리 관리를 최적으로 해야 한다. 이 책은 성능 분석으로 시작했지만, Node.js 개발자의 성능 병목지점을 제거하는 데 매우 도움이 되며, 성능 저하를 미리 회피할 수 있는 개발 패턴을 알려준다. 가비지 컬렉션(Garbage Collection)과 동작의 중요성을 배울 수 있으며, 어떻게 프로세서를 프로파일링 할 수 있는지 파악할 수 있다.

이 책에서 다루는 내용

■ 제대로 정의되고 테스트된 개발 패턴을 이용한 애플리케이션 개발

■ 성능을 향상시키기 위한 메모리 관리 및 가비지 컬렉션

■ 메모리 변경 모니터링과 힙 스냅샷 분석

■ CPU 프로파일링과 프로세서를 지나치게 사용하는 패턴을 피하는 코딩 방법

■ 데이터의 중요성과 정보 캐싱 시기에 대한 이해

■ 상시 코드 테스트와 필요시 벤치마킹을 위한 자긴 학습

■ 애플리케이션 범위의 확장과 성능 향상 요소 파악

이 책의 대상 독자

애플리케이션의 성능을 향상시키기 위해 플랫폼에 대한 더 많은 지식을 얻으려는 Node.js 개발자를 위한 책이다. Node.js 기본에 대한 배경지식을 갖췄거나, 가비지 컬렉션에 대해 잘 알면서 애플리케이션을 더욱 견고하게 만들고 싶은 전문가 모두에게 이 책의 예제가 많은 도움이 될 것이다.

이 책의 구성

1장, ‘소개 및 컴포지션’에서는 이 책의 주제를 간략히 소개하고, 성능 분석과 벤치마킹의 중요성을 강조한다. 애플리케이션은 여러 개의 더 작은 컴포넌트들로 쪼개질 수 있으며, 애플리케이션 내 각 컴포넌트의 복잡도는 개발자가 관리할 수 있는 수준으로 작게 유지돼야 한다. 여기서는 개발 방법론의 중요성을 이해해야 한다. 그리고 분석은 더 쉽게 이뤄질 수 있어야 한다. 애플리케이션의 수명주기상에서 성능이 더 뛰어나거나 새로운 것이 나오면 쉽게 교체할 수 있도록 복잡도를 더 작게 만들어야 한다.
2장, ‘개발 패턴’에서는 성능이 떨어지는 것을 피하거나 발견할 수 있도록 도와주는 프로그래밍 패턴을 포함한다. 앞으로 발생 가능한 문제점을 피하고, 간단한 패턴이나 기법들을 선택하는 것이 무엇보다도 중요하다. 이를 명심해, 프로그래밍 언어가 동작하는 방법과 이벤트 루프의 중요성, 비동기 프로그래밍이 최적으로 동작하는 방법을 이해해야 한다. 프로그래밍 언어에서의 가장 중요한 요소인 스트림과 버퍼도 이해해야 할 것이다.
3장, ‘가비지 컬렉션’에서는 GC의 중요성과 동작을 알려준다. V8 메모리 관리 방법, 불필요 메모리, 메모리 누수를 이해할 수 있다. 또한 애플리케이션을 프로파일링하는 방법과 개발자가 객체를 제대로 사용하지 않아 발생하는 잘못된 프로그래밍에 의한 메모리 누수를 찾는 방법을 알 수 있다.
4장, ‘CPU 프로파일링’에서는 애플리케이션이 호스트에 독차지해 사용할 때가 언제인지와 왜 그런지 이유를 알 수 있으며, 프로세서 프로파일링도 가능하다. 여기서는 프로그래밍 언어의 한계점을 이해하고, 성능 향상과 확장을 위해 애플리케이션을 여러 개의 모듈로 쪼갠 후 각기 다른 호스트에서 동작시키도록 하는 방법도 살펴본다.
5장, ‘데이터와 캐시’에서는 외부적으로 저장된 애플리케이션 데이터를 설명하고, 그것이 애플리케이션의 성능에 어떠한 영향을 미치는지 살펴본다. 애플리케이션 내부, 디스크, 로컬 서비스, 로컬 네트워크 서비스, 클라이언트 호스트에 저장하는 방법도 살펴본다. 여기서는 각기 다른 타입의 데이터 저장 방법을 알아보고, 어떠한 단점을 가지고 있는지, 가장 최적의 방법을 선택할 때 고려해야 하는 사항은 무엇인지 살펴본다. 데이터가 로컬 또는 외부 저장되는 방법과 데이터의 중요도에 따라 캐싱되는 데이터에 액세스하는 방법을 알 수 있다.
6장, ‘테스트, 벤치마크, 분석’에서는 애플리케이션을 테스트하고 벤치마킹하는 방법을 살펴본다. 살펴보지 않은 애플리케이션 테스트 구역이 생기지 않도록 하기 위해 코드 커버리지를 강화해야 한다. 그리고 벤치마킹과 벤치마크 분석을 해야 한다. 성능을 향상시키기 위해 애플리케이션의 특정 부분을 분석하고, 벤치마크를 수행해 어떻게 테스트해야 하는지 이해할 수 있다.
7장, ‘병목 현상’에서는 애플리케이션 외부에서의 제약 사항을 살펴본다. 여기서는 성능 제약이 애플리케이션 프로그래밍에 있는 것이 아니라 외부 요소, 즉 호스트 하드웨어, 네트워크, 클라이언트에 있다는 것을 보여준다. 외적 요소들로 인해 애플리케이션의 내부 또는 외부 동작이 제약받을 수 있다는 것을 알게 된다. 또한 그 외에 클라이언트 단의 한계도 알 수 있으며, 현재 성능을 향상시키기 위해 아무것도 할 수 없을 때도 있음을 깨닫게 될 것이다.

본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.

저자/역자 소개

지은이의 말

Node.js와 같은 플랫폼에서 고성능은 사용자 하드웨어의 각 특색을 잘 이용하고, 메모리 관리를 극대화하며, 복잡한 애플리케이션을 잘 설계한 결과다. 행여 애플리케이션이 많은 메모리를 소모하더라도 놀라지 않아야 한다. 대신 메모리 누수가 생기면, 그것은 빨리 해결해야 한다. 항상 메모리를 모니터링하고 이슈가 되기 전에 먼저 누수를 막아야 한다.

지은이 소개

디오고 리센데(Diogo Resende)

작업하고 있는 모든 것에 완벽을 기하려는 열정적인 개발자다.
각 사물들이 서로 연결될 뿐 아니라 외부 세상과도 연결되는 모든 사물인터넷에도 관심이 많다.
컴퓨터공학을 전공했으며, 컴퓨터 네트워킹, 보안, 소프트웨어 개발 및 클라우드 컴퓨팅에 대한 지식을 습득했다.
지난 10년 동안 세상의 많은 임베디드 시스템과 개발자를 연결하는 애플리케이션과 서비스를 개발하기 위해 여러 가지 다른 도전을 해왔으며, 과거의 인터넷과 특이한 프로토콜을 지금의 인터넷과 연결할 수 있는 방법을 만들어왔다.
씽크디지털(ThinkDigital)에서 근무했으며, 지난 몇 년 동안이 자신의 인생에서 매우 중요한 시기였다고 생각한다. 씽크디지털은 컴퓨터 네트워킹과 보안, 자동화, 스마트 미러링, 운송 수단 관리 및 인텔리전스 등의 분야에서 서비스를 제공한다.
많은 오픈소스 프로젝트를 수행했고, 이와 관련된 모든 프로젝트를 ‘dresende’라는 사용자명을 가지는 깃허브(GitHub) 페이지에서 찾을 수 있으며, MIT 라이선스를 갖고 있다.

옮긴이의 말

최근의 주된 관심사는 단연 자바스크립트(JavaScript)를 기반으로 한 여러 가지 새로운 기술이다. 그중 Node.js는 생산성 향상에 기여하며 가장 많은 관심을 받고 있다. 사실 Node.js를 사용하면 간단한 서버는 수 분 내에 만들어낼 수 있다. 하지만 많은 장점을 내세우고 있는 Node.js에도 엄연히 단점이 존재하기 마련이고, 애플리케이션의 규모가 커지면 커질수록 이러한 단점은 쉽게 드러난다.
자바스크립트는 웹 브라우저 내에서 주로 사용하며, 다른 응용프로그램의 내장 객체에도 접근할 수 있는 기능을 가지고 있다. 자바스크립트는 본래 넷스케이프 커뮤니케이션즈 코퍼레이션의 브렌던 에이크(Brendan Eich)가 처음에는 모카(Mocha)라는 이름으로, 나중에는 라이브스크립트(LiveScript)라는 이름으로 개발했으며, 최종적으로 자바스크립트라는 이름을 갖게 됐다. 웹 페이지 안에서 객체를 자유롭게 조정하고 브라우저의 각종 기능을 이용하기 위해 필수적인 자바스크립트는 웹사이트 개발에서 필수적인 언어로 자리매김했고, 웹사이트에서 많은 기능을 제공하려는 다양한 고객들의 요구를 분석해볼 때 앞으로 자바스크립트의 활용은 가파르게 늘어날 것이다.
이 책에서 기반이 되는 Node.js는 이전보다 우리에게 더 많이 친숙해진 플랫폼이다. 물론 여전히 많은 부분에서 업데이트가 이뤄지고 있지만, 기본적인 구조와 동작 원리에는 큰 변화가 일어나고 있지 않다. 이제는 Node.js를 기반으로 애플리케이션을 작성할 때 모든 애플리케이션이 안고 있는 이슈인 ‘성능 문제’를 고려해야 한다고 생각한다. 물론 모든 개발자들이 성능 문제를 고려하지 않고 애플리케이션을 작성한다고 생각하지는 않지만, Node.js에 대한 장단점을 파악해 효율적인 애플리케이션을 작성하는 것 또한 쉽지 않을 것으로 생각한다.
이 책은 Node.js에 적용되는 다양한 구현 방식과 프로파일링 및 최적화 기법을 기술하면서 최고의 성능을 이끌어낼 수 있는 방법을 제시한다. 우리는 이 책을 통해 많은 개발자들이 효과적으로 Node.js 기반의 애플리케이션을 만들어낼 수 있길 기대한다. 최적화와 관련해 처음 시작하는 독자뿐 아니라 빠른 시간 안에 고성능 앱을 만들어보고자 하는 개발자에게 이 책을 추천하고 싶다.

옮긴이 소개

테크 트랜스 그룹 T4

최신 IT 테크놀로지에 대한 리서치를 목적으로 하는 컨설팅 그룹(http://www.funnycomputinglabs.com/)이다. 엔터프라이즈 환경에서 오픈소스를 활용해 프레임워크를 구축하는 데 관심이 많으며, 최근에는 하이브리드 환경에서의 HTML5, MariaDB, 스프링(Spring), Node.js, React.js, Underscore.js 등 웹 전반에 걸친 기술과 빅데이터 흐름에 주목하고 있다. 또한 오픈소스 기반 모바일 데이터베이스와 관련해 컨설팅을 수행하며, 자바스크립트를 기반으로 하는 서버 구축에서 많은 경험을 쌓고 있다.

목차

목차
  • 1장. 소개 및 컴포지션
  • 2장. 개발 패턴
  • 3장. 가비지 컬렉션
  • 4장. CPU 프로파일링
  • 5장. 데이터와 캐시
  • 6장. 테스트, 벤치마크, 분석
  • 7장. 병목 현상

도서 오류 신고

도서 오류 신고

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

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

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

정오표

정오표

[p35. : 소스코드의 주석 5행]
// 원래 작업
->
// 개선된 작업

[p35. : 소스코드의 주석 10행]
// 개선된 작업
->
// 기존 작업