제가 처음 신입 웹 개발자로 모 회사에 들어갔을 때는 정말 아는게 전혀 없다시피 했습니다. 국비지원 교육과정에서 보낸 6 개월의 시간을 제대로 활용하지 못했기 때문에(일부는 교육과정 탓을 하고 싶지만 본질적으론 저의 문제였지요) 루비 온 레일즈(이하 레일즈)로 웹 개발을 하기 위해 무엇을 알아야 할지 전혀 감이 잡히지 않았습니다. 루비는 책으로 기본적인 문법을 꾸역꾸역 익혔지만, 이후에 무언가 본격적으로 만들어보려고 문서를 들여다보면 온갖 어려운 용어들이 튀어나왔습니다. 당장은 HTTP 부터 막혔고 RESTful 은 무엇이며, 라우트를 어떻게 구성하는지, XSRF 등등 모르는게 너무 많았습니다. 아마 레일즈가 아닌 다른 웹 프레임워크 기반의 개발을 한다고 해도 똑같이 막혔을겁니다. 개발 뿐 아니라 Git 으로 버전 관리는 어떻게 해야할지도 모르겠고 터미널의 명령어들은 어렵기만 했습니다. 국내에 출간된 레일즈 관련 도서는 너무 오래되어 별로 도움이 되지 않았기 때문에 저는 직접 학습할 자료를 찾을 수 밖에 없었습니다. 그 때 발견한 것이 M.Hartl 의 Rails Tutorial(이하 레일즈 튜토리얼) 이었습니다. 지금도 ‘레일즈를 배울 때 가장 좋은 책/튜토리얼이 무엇이냐’ 라는 질문이 올라오면 가장 많은 추천을 받는 책 중에 하나입니다. 레일즈 뿐 아니라 웹 개발 자체를 처음 접하는 사람들을 대상으로 삼은 것으로 보이며 트위터 클론 앱을 만들면서 루비 개발 환경 설정 및 루비의 기초를 익힌 뒤 레일즈로 웹 개발을 할 때 필요한 요소를 차근차근 익혀나갈 수 있는 아주 좋은 책입니다. 왜 노드 책 리뷰를 하는데 전혀 엉뚱한 책을 소개하는지 궁금하실겁니다. 이번에 감상평을 남길 조현영님의 ‘Node.js 교과서’가 이와 견줄만큼 충분히 좋은 내용을 담고 있기 때문입니다.
제가 리액트 기반 프론트엔드 개발에 역량을 집중해보기로 하고 백엔드 개발과 담을 쌓고 지낸지 1 년이 넘는 시간이 흘렀고, 제 자신도 자바스크립트에는 어느정도 익숙해졌지만 Node.js 를 활용하여 백엔드 개발을 할 일은 거의 없었습니다. 지난번에 Express 를 잠깐 만질 때 기본적인 부분도 파악하지 못한 상태로 코드에 손을 댔다가 문제 해결을 위해 꽤나 고생했었던 기억이 납니다. Zerocho 라는 닉네임으로 자바스크립트 & 개발 전반에 걸쳐 유용한 글을 공유하고 계신 조현영님의 Node.js 책이 나온다고 했을 때 제가 아쉽게 느꼈던 노드 사용법에 대한 많은 부분을 익힐 수 있으리라 기대했습니다. 그리고 그 기대는 잘 들어맞았습니다.
이 책은 제목답게 Node.js 의 기본적인 설명부터 시작하여 개발환경 설정 부터 Express 와 Pug 를 활용한 웹 서비스를 구축하는 과정을 거쳐 마지막에는 배포 및 서버리스에 대한 개념까지 다루고 있는 하나의 ‘교과서’ 입니다. 특히 마음에 들었던 부분은 기초 내용을 다루고 있는 책의 앞부분이었습니다. Node.js 란 무엇인지, 그리고 어떠한 특성을 가지고 있는지 초보 개발자들에게 이벤트 루프와 싱글 스레드 기반 비동기 I/O 를 몇 페이지만에 명쾌하게 설명하는 내용을 보고 감탄했습니다. 시작부터 감탄했지만 이렇게 짧으면서 핵심을 잘 짚은 설명들이 책 전반에 걸쳐 나옵니다. 그래서 핵심을 파악하기에 아주 좋습니다. 초보 개발자들이 어렵사리 여러 책과 웹페이지를 뒤져서 간신히 익혀 정리할 수 있는 내용을 미리니름(스포일러) 하는 느낌이 들 정도입니다. Express 를 본격적으로 다루기 이전까지의 내용이 전반적으로 괜찮았습니다. Node.js API 에 대해서 보통 자세히 살펴보지 않은 채 Express 다루는 것만 찾아보게 되는데 그러다 보면 반드시 막히는 구간이 생기게 됩니다. 하지만 책의 앞부분에서 설명한 API 를 숙지해두면 문제의 지엽적인 부분보다 핵심에 다가가기 훨씬 쉬워지고, 각종 오픈소스 코드도 훨씬 이해하기 수월해집니다. 다만 자바스크립트의 기초를 습득하고 있어야 이 책의 내용을 수월하게 따라갈 수 있습니다. 저는 러닝 자바스크립트 라는 책을 먼저 보시길 추천합니다.
초반을 넘어가면 모든 백엔드 개발은 Express 를 활용하는데, Express 가 Node.js 진영에서 압도적으로 높은 점유율을 차지하고 있는 프레임워크이기 때문에 별 문제는 없습니다. SQL, NoSQL 을 각각 다루면서 템플릿 엔진으로 Pug 까지 활용하고 있다보니 일반적인 웹 애플리케이션을 다루는데 필요한 내용은 다 다루고 있습니다. 챕터마다 구현에 필요하거나 반드시 알고 있어야 하는 개념들을 간단하고 핵심적인 내용만 잘 추려 설명하고 있기 때문에, 초보 Node.js 개발자라면 이 책에서 익힌 내용을 기반으로 삼아 지식을 점진적으로 확장한다면 별로 무리없이 개발을 할 수 있으리라 생각합니다. 대부분의 예제 코드를 직접 따라 쳐보면서 별로 지루한 내용은 없었습니다. 프론트엔드쪽 코드는 일부러 호환성을 고려해서 조금 옛날 방식으로 작성하긴 했지만 오히려 초심자들에게 기본적인 개념을 잘 심어주기 위한 저자의 고민이 엿보였습니다.
보통 Node.js 를 다루면서 빠지기 힘든 기술이 웹소켓입니다. 저도 직접 웹소켓으로 뭘 구현해본적은 없었기 때문에 특히 재밌게 해당 챕터의 내용을 따라갈 수 있었습니다. 마냥 다른 서비스를 보면서 신기해하던 채팅 기능은 이런식으로 이루어질 수 있다는데 감탄했고, 의외로 구현하기 어렵지도 않아서 한번 더 놀랐습니다. 프론트엔드 부분에서 최적화 할 요소들은 더 많겠지만 어디까지나 백엔드 위주로 다루는 책이기 때문에 별로 신경쓰이진 않았습니다. 만약에 어딘가 아쉬워서 더 개량을 하는 방식으로 자율학습을 하고 싶으시다면 대부분의 챕터 마지막에 있는 ‘스스로 해보기’ 단락을 살펴보고 도전해보시면 더 큰 학습 효과를 얻으실 수 있습니다.
약간 아쉬웠던 점은 트위터 클론을 만드는 챕터에서 카카오톡 OAuth 를 적용하였는데, OAuth 를 설명한 부분을 찾지 못했습니다. OAuth 가 무엇이고 왜 이걸 쓰는지 다른 챕터에서 개념을 설명했던 것처럼 충분히 설명할 수 있었으리라 생각합니다. 그리고 노드 버전 관리자(nvm, n)와 Git 설정을 책의 맨 뒷부분에 배포 설정을 하는 챕터에서 다루고 있는 것도 아쉬웠습니다. 앞서 말씀드린 레일즈 튜토리얼과 비교하면서 특히 아쉬웠던 점인데요. 레일즈 튜토리얼은 루비 개발환경 설정을 하면서 자연스럽게 터미널 명령어와 Git 명령어를 익히고, 각 챕터마다 커밋과 푸시를 하는 방법까지 잘 설명이 되어있습니다. 이 책을 보는사람 입장에서 로컬에서 예제 코드만 따라서 쳐 보는 정도를 넘어 실무에 근접한 경험을 습득하고 싶을 수 있는데 이에 대한 고려가 조금 부족했다고 생각합니다. 또한 책에는 Node.js 10 입문서 라고 써있음에도 딱히 이전버전과 비교하여 버전 10 의 어느 부분이 다른지 그 차이를 실감할 수 없었습니다. 아예 새로 접근하는 사람이었다면 별로 신경쓰지 않을 내용이지만, 이미 노드 개발환경을 접한 사람이 개념 다지기를 위해 이 책을 봤을때 혼란스러울 수 있습니다.
결과적으로 이 책은 웹 개발자로 입문하고자 하는데 막 JS 기초에 익숙해진 사람들에게 한 번쯤은 반드시 읽어볼만한 책이라고 권하고 싶으며, 프론트엔드 개발에만 신경쓰다가 API 서버쪽에서는 무슨 일이 일어나고 있고, 앞으로 자신이 개발을 할 때 어떤 부분을 더 신경써야할지 알고 싶은 주니어 프론트엔드 개발자들에게도 추천합니다. 이외에 Node.js 웹 개발이 익숙한 개발자들이 개념 복습을 하거나, 다른 언어를 오래 했는데 Node.js 를 해야한다고 하면 이 책을 집어서 빠르게 핵심만 살펴보면 바로 감을 잡을 수 있으리라 생각합니다. 오랜만에 정말 즐겁게 본 교과서였습니다.