지난번에 책 출간 소식을 전해 드렸습니다. (제목: NestJS로 배우는 백엔드 프로그래밍)
https://www.clien.net/service/board/cm_app/17759247CLIEN
출간 과정을 공유해 달라는 요청이 있어서 후기를 올려봅니다. 재미로 읽어주세요.
1. 계기
저는 LG전자에서 13년을 넘게 휴대폰에 기본 탑재되는 애플리케이션을 만들었습니다. 피처폰 시절에는 네트워크와는 상관없이 휴대폰 내에 있는 데이터만 처리하면 되었고, 안드로이드 환경으로 넘어와서는 소위 프런트 앱 개발자가 되었습니다. 이후 스타트업계에 몸담게 되면서 백엔드 직군으로 바꾸었습니다.
모두싸인에 입사하면서 NestJS를 처음 접했습니다. 정확하게는 입사 과제를 해야 해서 공부가 필요했죠. Node.js는 이전에 가지고 놀던 정도였습니다. 그 전 직장에서는 파이썬 장고 기반의 서버를 운용했는데 입사를 위해 새로운 언어(타입스크립트)와 웹 프레임워크를 공부해야 했습니다. 다행히 과제에 시간을 충분히 주셔서 2주 정도 학습하고 1~2일 걸쳐 과제를 푼 다음 제출했던 것으로 기억합니다. 입사 후 코드를 들여다보니 공식 문서에서 가이드하는 방법을 많이 발전시켜 사용하고 있습니다. 공식 문서를 다시 정독하며 NestJS가 기본으로 제공하는 기능만 쓰면 어떻게 구현이 가능할지, 그 방식에 어떤 단점이 있는지 궁금해졌습니다. 모두싸인에서 제공하는 서비스의 기본이 되는 유저 서비스의 기본 기능을 짧은 코드 스니핏이 아닌 실제 동작하는 코드들로 만들면서 조금씩 깃허브에 정리했습니다.
입사 후에도 NestJS 문서를 자주 보게 됩니다. 당시에는 커뮤니티에서 공식 문서를 한국어로 번역한 사이트가 있었습니다. 하지만 NestJS 문서는 설명이 잘 되어 있는 것 같다가도 예제를 통해서 학습할 수 있는 자료가 별로 없습니다. 문서를 죽 읽고 예제를 따라서 구현하다 보면 길을 잃기가 일쑤입니다. 구글이 만든 풍부한 안드로이드 문서와 동영상 강의에 익숙해져서 더욱 그런 것 같았습니다.
당시 '왜 아직 국내에 책이 한 권도 없지? 나 같은 사람이 분명 많이 있을텐데? 아직 NestJS가 인기가 없나?' 이런 생각을 하긴 했죠. 그러다 책을 써야겠다고 결심한 계기가 생깁니다. 제게는 가끔 온라인에서 만나 이런저런 이야기도 하고 짝코딩도 하는 처조카가 있습니다. 소프트웨어 관련 학과 1학년인 이 녀석이 방랑기를 지나서 백엔드로 진로를 정했다고 합니다. 군대에 복무하면서요. 그래서 공식 문서를 기반으로 내가 만든 예제와 함께 책을 써보기로 합니다. 잘 하면 버킷 리스트였던 책 쓰기가 가능할 것도 같습니다.
위키독스(https://wikidocs.net/book/7059)에 매일 조금씩 내용을 정리했습니다. 명확한 독자와 콘텐츠(공식 문서와 그동안 만들어둔 코드)가 있기 때문에 나름 수월했습니다. 다만 문서를 그대로 옮기는 백과사전식 책은 쓰고 싶지 않았습니다. 이제 막 경력을 시작하는 개발자나 학생들이 쉽게 이해하고 기본 기능을 구현해 가는 방법을 알려주고 싶었습니다. 더불어 제가 백엔드 개발자로 전향한 후에 배워야 했던 기본 지식을 깊이는 얕지만 가볍게 길 안내를 해 주고 싶었습니다.
2. 출간 과정
퇴근후 거의 매일 2~3시간, 주말에는 5~6시간 정도 투자하니 2달 정도가 지나 초고를 완성했습니다. 책을 쓰면서 오랜만에 몰입을 경험했습니다. 잘 몰랐던 주제가 있으면 리서치해 가면서 내용을 가다듬고, 코드를 다시 재작성했습니다. 기왕이면 돈도 벌면 좋으니까 구글 애드센스 광고도 달았습니다. 생각보다 반응이 괜찮습니다. 많은 분이 위키독스 또는 메일로 피드백을 주셨습니다. 그래서 초고를 들고 인사이트에 투고합니다. 이때가 작년 11월 말이었습니다.
사실 인사이트가 워낙 유명하고 수준 있는 책들을 많이 출판한 곳이어서 그냥 한 번 시도해 본다는 느낌으로 보냈습니다. 그런데 의외로 미팅이 잡혀서 대표님과 편집자님을 만나 뵈었습니다. 이때 여러 가지 이야기를 나누었는데 무언가 책이 100% 마음에 들지는 않아 하십니다. 명확히 수정 방향을 알려 주시면 좋았을 텐데 목차와 방향을 가다듬어 보자고만 하셨습니다. 이미 초고를 쓰느라 에너지를 쏟아버린 저는 약 1주일 후 초고에서 별로 발전하지 못한 내용을 드렸더니 역시나 퇴짜를 맞았습니다.
띵! 정신이 번쩍 들고 나서 제 책을 독자의 입장에서 다시 바라보았습니다. 부족한 부분이 눈에 보이더군요. 아무리 예제 위주의 프로그래밍 서적이고 프레임워크 설명이 주가 된다고 해도 기본이 되는 이론이 부족했습니다. 그래서 앞부분에 내용을 보강하고 중간중간 NestJS와는 별개로 주니어 백엔드 엔지니어에게 하고 싶은 말을 추가했습니다. 이 과정이 다시 2달 정도 소요됩니다. 초고 만들때 처럼 에너지를 투입하지는 않았지만요.
그리고 올해 2월 제이펍과 계약하게 됩니다. 얼떨떨하면서도 기뻤습니다. 마치 벌써 저자가 된 것 같습니다. 계약은 모두싸인으로 진행했습니다. 평소 잘 먹지 못하는 개밥을 먹으며 기분이 너무 좋았습니다.
이후 과정은 편집자분의 일이 많았습니다. 내용도 많이 바뀌지 않았습니다. 하나 힘든 점이 있었다면 위키독스의 내용을 구글 독스로 옮기고 출판사에서 사용하는 서식에 맞게 바꾸는 노가다 작업이 있었네요. 일부 문단의 순서를 바꾸고, 책에는 담을 수 없는 내용을 덜어 내고, 내용이 쉽게 이해되도록 다시 쓰는 일을 몇 번 반복했습니다. 책의 수명을 최대한 길게 가져가고 싶었는데 중간에 NestJS의 메이저 버전이 올라가고, typeorm이 breaking change가 포함된 버전이 업데이트됩니다. 할 수 없이 관련 예제를 다시 쓰고 하나씩 실행해 보면서 확인했습니다. 그리고 오타.. 오타는 잡아도 잡아도 끝이 없습니다.
이후 리뷰어 검토를 마치고 12월에 출간을 하게 됩니다! 한 가지 아쉬운 점이 있다면 출판사 사정에 의해 원래 출판일보다 5개월이 미뤄졌다는 것이죠. 저도 그사이에 큰 프로젝트로 정신이 없었던 터라 크게 개의치 않았습니다.
처음 이야기했듯이 이 책은 초보자를 위한 책입니다. 저희 회사와 NestJS 커뮤니티에는 뛰어난 고수들이 많이 있습니다. 내가 이런 책을 내도 될까? 부끄럽지는 않을까 하는 생각이 안 들었다면 거짓말이지요. 그래도 다시 책을 쓸 기회가 된다면 마다하지 않을 것 같아요. 글을 쓰는 과정은 평소의 생각과 내가 아는 바를 정리하기에 좋습니다. 또 무언가에 몰입할 때의 쾌감을 느낍니다. 코드를 작성할 때와는 또 다른 느낌이더라구요.
책을 쓰고 응원해 주시는 분들이 많습니다. 여러분도 충분히 할 수 있다고 말씀드리고 싶어요! 평소에 자료를 잘 정리해 두는 습관과, 매일 조금씩 써 가는 부지런함. 이것이면 충분합니다. 우리는 기술 서적을 만드는 것이지 문학 작품을 만드는 게 아니니까요. ![]()
축하드려요.
앞으로도 사용할 예정입니다. 기회가 된다면 책 보겠습니다 :)