태초에 HTML로만 만들어진 홈페이지는 정적인(static)내용만 표현할 수 있는 한계가 있었다. 자바스크립트가 브라우저에서 지원되기 시작하면서 최근의 거의 모든 인터넷 페이지에서 보이는 것과 같은 화려하고 다이나믹한 컨텐츠를 볼 수 있게 되었다.
하지만 이 자바스크립트도 처음엔 한계가 있었는데, 브라우저 내에서만 작동할 수 있었던 것이다. 다행히 기술의 발전으로 Chrome V8 JavaScript 엔진이 세상에 나오면서 이 한계가 드디어 극복되고, 브라우저를 벗어나 자바스크립트가 작동할 수 있는 엄청난 역사적 사건이 발생하게 된다. 소위 말하는 프론트엔드(기존의 브라우저 범주)부터 백엔드(새로운 지평)까지 자바스크립트라는 하나의 언어로 구현이 될 수 있게 된 것이다.
이 책은 바로 자바스크립트의 새로운 지평을 열어주고 있는 Node.js를 다루고 있다.
‘Node.js 프로젝트 투입 일주일 전’이라는 책 제목 이면에는, 국내외 여러 기업에서 저자가 경험한 많은 실무 경험을 토대로, Node.js를 신속히 활용할 수 있는 방법이 매우 구체적인 설명과 실제 sample code가 많은 경험에서 나오는 세심한 조언과 함께 포함되어 있어 인상적이다.
‘1. Node.js’에서는 우선 Node.js는 무엇이고 어떤 특징이 있는지에 대한 설명으로 부터 시작한다. 가볍고, 빠르고, 성능이 좋은 Node.js가 어떻게 한 번에 하나의 작업을 처리하는 싱글 스레드(single thread) 자바스크립트 언어의 특성을 non-blocking I/O와 이벤트 루프를 통해 동시작업을 할 수 있는 형태로 만들 수 있는지, 우리에게 친숙한 ‘라면 전문점’ 사례와 함께 쉽게 설명해주고 있다. Node.js에 사용할 수 있는 수많은 라이브러리를 쉽게 관리할 수 있게 해주는 NPM(Node Package Manager)에 대해서도 다룬다.
‘2. 개발환경 구성’에서는 Visual Studio Code와 Node.js의 설치에 대해서 자세히 설명을 해주고 있다. 이 책이 다른 책들과 차이를 보이는 점은, 단순히 설치 방법을 설명하는 것에서 끝나는 것이 아니라, 자바스크립트 개발을 편리하게 해주는 JavaScript(ES6) code snipptets, ESLint, Prettier, Live Server와 같은 VSC의 extension도 함께 소개해주고 설명하는 세심한 배려가 돋보인다는 것이다.
‘3. 서버프로그램을 위한 자바스크립트’에서는 백엔드 프로그램에 필요한 필수 자바스크립트에 대해서 다루고 있으며, 정규식(regular expression)까지 다루고 있어, 좀 더 편리한 로직 구현을 할 수 있도록 해주고 있다. 자바스크립트 자체에 대한 더 많은 내용에 대해서는 저자의 ‘바닐라 자바스크립트’를 보면 좋을 것 같다.
‘4. Node.js 시작하기’에서는 Node.js를 통해 ‘Hello World’를 실행해보고, 모듈에 대한 실습도 해보면서 Node.js를 처음으로 사용해보는 기회를 갖는다.
‘5. Node.js내장 모듈과 객체'에서는 Node.js에서 기본적으로 제공되는 기능들을 설명한다. Console, Timers, Process, OS, Path, URL, Crypto, File Sytem 등이 다루어지며, 각 기능별로 구현해볼 수 있는 sample code도 함께 제공된다. 이 중 특히 Crypto의 경우 디지털 전환시 매우 중요한 보안 강화를 위해 아주 유용한 기능이 될 것이다.
‘6. json-server 이용하기'에서는 웹서버 구축이 이뤄지기 전 프런트엔드와 백엔드 사이의 상호의존성으로 인해 개발 및 테스트가 지연될 수 있는 상황을 보완할 수 있는 json-server를 소개한다. 이를 통해 프런트엔드 개발자는 실제 웹서버와 동일한 환경에서 신속히 개발을 할 수 있어 개발 업무의 효과를 극대화 할 수 있다.
‘7. Express로 웹 서버 구축하기'에서는 웹에플리케이션과 API서버를 구축하는데 가장 많이 사용되는 대표적 프레임워크인 Express를 다뤄, 자바스크립트 만으로 웹서버까지 구축할 수 있도록 해준다. 특히 Route 클래스의 경우, 하나의 파일로 개발/관리한다면 발생할 수 있는 충돌을, 여러개의 파일로 분리해 처리할 수 있도록 해 방지할 수 있는 방법을 소개하고 있어 원활한 개발에 많은 도움이 될 것이다.
흥미로운 점은, 미들웨어 모듈의 compression의 경우 일반적으로 모든 경우에 있어 압축하는 것이 도움이 될 것이라 생각되지만, 실제로 작은 크기의 json텍스트 같은 경우 압축 소요시간으로 인해, 압축하지 않는 경우보다 응답시간이 오히려 더 길어질 수 있다는 것이다. 그래서 저자의 경우 큰 데이터를 응답해야할 라우터에만 compression을 사용하는 것을 추천해주고 있다. 이러한 깨알팁도 책 곳곳에 숨어 있어, 찾는 재미가 쏠쏠하다.
프런트엔드 개발 없이도 라우트를 테스트 할 수 있게 해주는 Postman도 소개가 되어, 서버 개발자들이 프런트엔드가 구현될 때까지 기다릴 필요 없이 빠르게 서버프로그램을 개발할 수 있게 해준다.
‘8. 데이터베이스 사용하기'에서는 요즘 인기있는 관계형 데이터베이스인 MySQL의 설치부터, 데이터베이스 및 테이블 생성, MySql 모듈 사용을 통해 Node.js를 데이터베이스와 연동해 사용하는 방법을 자세히 설명한다. 아울러 대표적 NoSql 데이터베이스인 MongoDB도 함께 다루고 있어, 시장에서 범용되는 형태의 데이터베이스들을 바로 사용할 수 있도록 해준다.
‘9. 애플리케이션 운영과 고성능 웹을 위한 Node.js’에서는 로그관리(winston), 메일링(Nodemailer), 작업 스케줄러(node-cron), 엑셀 파일 처리(xlsx), iCalendar 이벤트 생성(ics), 웹소켓(socket.io), 크롤링(axios 및 cheerio), 자동 재실행(forever) 등에 활용될 수 있는 다양한 모듈을 소개하여 Node.js의 활용 및 편의성을 극대화 할 수 있도록 해준다. 또한 PM2 모듈을 통해 멀티코어의 클러스터 구성법은 시스템 자원을 최대로 사용할 수 있도록 해준다.
‘10. Node.js 미니 프로젝트: 제품 판매 웹앱 구현'에서는 지금까지의 모든 것을 총망라하여 Node.js가 무엇을 할 수 있는지를 볼 수 있는 실제 프로젝트 사례를 보여줌으로써 이 책의 피날레를 장식해주고 있다.
“Unfortunately, no one can be told what the Matrix is. You have to see it for yourself.(안타깝게도 매트릭스가 뭔지는 말로 설명할 수 없어. 직접 봐야만 해.)” - Morpheus -
영화 매트릭스에서, 주인공 네오는 모피어스의 위 대사를 듣고 빨간약과 파란약 중 빨간 약을 선택해 삼키게 되고, 결국엔 엄청난 매트릭스의 실체를 직접 자신의 눈을 통해 보게 된다.
이 책은, 어쩌면 영화속의 네오의 경험처럼, Node.js에 대한 실체를 독자들에게 직접 볼 수 있게 해주는 유용한 책이 아닐까 생각된다.