Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

19113
1478
166889


『디버깅을 통해 배우는 리눅스 커널의 구조와 원리』 집필 후기 -----Table of Contents-----

오늘 5.31 일요일이네요. 

보름 전인 5월 12일에 제가 쓴 『디버깅을 통해 배우는 리눅스 커널의 구조와 원리』 책이 무사히 출간됐습니다. 


집필 과정을 되돌아 보니 이런 저런 생각이 많이 드는 것 같네요. 책을 집필 할 때 '이런 점은 진작에 알았으면 좋았을 텐데'란 생각이 들고, 제 스스로 '집필 할 때 이건 정말 잘 했다'라며 자화자찬을 하기도 합니다. 휴식을 취하면서 집필 과정에 대한 스스로의 케이스 스터디를 하고 있는 것 같네요.

이번 시간에는 『디버깅을 통해 배우는 리눅스 커널의 구조와 원리』 책의 집필 과정을 소개합니다. 특히 IT 분야의 책을 출간하려는 개발자분들은 참고하셨으면 좋겠습니다.

출간 제안

위키북스 출판사에 2018년 1월에 출간 제안을 했습니다. 사실 그때 제가 쓰려는 책은 '리눅스 커널 디버깅'이었는데요. 이메일로 목차와 함께 출간 제안을 했는데 위키북스의 대표님께서 제가 근무하는 지역에 직접 방문하실 예정이라고 메일을 주셨습니다. 생각보다 조금 놀랬습니다. 사실 제가 메일을 드리고 출판사에 찾아갈 계획이었거든요. 

대표님께서는 '리눅스 커널 디버깅' 대신 '신입 개발자를 위한 리눅스 커널이란 책을 집필하면 좋겠다'라는 의견을 주셨습니다. 저도 신입 개발자를 위한 마땅한 리눅스 커널 책이 없어 책의 필요성을 절감했으므로 흔쾌히 받아들였습니다.

샘플 원고 전달

출판사에서는 30페이지 분량의 샘플 원고를 전달해 달라고 요청했습니다. 한 달 정도 원고를 작성한 후 출판사에게 전달했습니다. 편집자께서 원고의 부족한 점을 지적한 후 원고를 다시 작성해 보내 달라고 했습니다. 다시 원고를 수정한 후 원고를 보내드렸더니 출판사 대표님께서 출간 계약서를 작성하자고 알려 주셨습니다. 제가 '최소한 글을 쓸 수 있는 능력'이 있다고 판단을 하신 것 같았습니다.

지금 생각해보면 그때 제가 전달한 샘플 원고는 '지금 제 눈'으로는 도저히 볼 수 없는 정도로 형편없는 수준이었다 생각이 드는데요. 이런 원고를 그 당시 출판사 편집자께서 정말 좋게 봐주신 것 같아요.

계약과 집필 과정

계약 과정에 대해 궁금해하시는 분이 많은데요. 다른 책과 비슷한 조건으로 계약이 됐는데 계약 내용에 대해 요약하면 다음과 같습니다.

   * 계약을 할 때 선인세는 지급하지는 않는다.
   * 1쇄 당 2,000 권을 인쇄한다.
   * 그중 1,000 권에 대한 인세는 출간일에 지급한다.
   * 나머지 1,000권은 판매되는 대로 지급한다.
   * 1쇄가 전부 다 팔리면 2쇄, 3쇄로 인쇄한다. 

계약을 할 당시 책의 분량과 가격은 500 페이지와 3만 오천원으로 가상으로 잡았습니다. 

처음에는 리눅스 커널을 쉽게 설명하는 컨셉으로 집필하려 했는데 저의 욕심 때문인지 바이블 형식의 두꺼운 책이 되고 말았습니다. 사실 집필 도중에 '시그널', '시스템 콜', '스케줄링' 챕터가 추가됐는데요. 챕터를 추가하자는 저의 의견에 공감해주시고 동의해주신 출판사 대표님께 감사드립니다.

집필 과정
 
출간 계약서를 작성한 게 아마 6월 5일 정도로 기억합니다. 그래서 집필 진행 과정을 매달 5일에 출판사 대표님께 공유했습니다. 

6월 초부터 본격적으로 집필에 착수했는데요. 1달에 1장을 집필한 다음 출판사에 초고 원고를 보내는 것을 목표로 잡았습니다. 그런데 실제 챕터 하나당 초고 원고를 작성하는 시간은 1달 +10일 정도 걸렸습니다.

'13장 가상 파일 시스템'은 거의 2달이 걸렸고, '10장 스케줄링'은 2달 15일이 걸렸습니다. 출판사에 약속한 각 챕터의 원고 마감일을 제대로 지킨 적은 거의 없었습니다. 5일에 보내려고 계획했다면 8일 혹은 10일에 보낸 적도 많았습니다. 출판사의 대표님은 부처님과 같은 자비와 인내심으로 일정보다 원고를 늦게 송부해도 잘 받아주셨습니다. 아무튼, 제 나름대로 어떡하든 원고를 마무리해 출판사에 전달하도록 노력했습니다.   

출판사에 원고를 보내면 1~2일 후에 출판사의 편집자님께서 원고를 리뷰한 후 의견을 전달해 주셨습니다. 문장의 세세한 표현보다 설명하는 방식과 챕터를 구성하는 방법에 대한 의견을 주셨습니다. 그리고 가끔은 보강하면 좋을 내용을 알려 줬습니다.

출판사의 편집자님의 피드백이 궁금하시다고요? 실제 제가 받았던 편집자님의 의견을 공유하겠습니다.

아래는 2장에 대한 출판사 편집자님의 의견입니다.
====
1. 그림 캡처 시 불필요한 화면은 최대한 줄여주세요. 9쪽 그림을 보면 창 크기가 크고 실제로 화면 중앙의 대화상자는 작게 캡처돼 있습니다. 전체 화면을 보여준 후 10쪽부터 나오는 그림은 대화상자만 캡처해도 설명을 이어나가는 데 충분할 것 같습니다.

2. 그림을 보여줄 때 본문에서 설명한 선택사항이 모두 설정된 화면을 캡처해 주세요. 9쪽 화면을 보면 시간대를 설정하는 내용이 나오는데 그림에는 기본 세팅인 영국 시간대가 설정돼 있는 반면 본문에는 이를 한국 시간대로 바꾸라는 내용이 나옵니다. 독자가 따라하고 내용을 검증하기 쉽게 화면에서는 본문에서 설명하는 설정이 적용된 화면을 캡처해 주시면 좋겠습니다.
...
===

이번에는 14장의 원고를 전달한 후 받은 출판사 편집자님의 의견입니다.
===
1. 각 그림에 대해 그림 번호와 적절한 제목을 넣어주세요. 이번 원고에서 각 그림에 대해 그림 번호와 제목 캡션이 없는데 전체적으로 넣어주시면 좋겠습니다.

2. 내용을 좀 더 보강할 만한 부분이 있습니다. 원고를 전부 살펴보지는 않았는데, 다음과 같은 내용이 눈에 띕니다. 먼저 아래 내용의 경우

네트워크 용어로 Best-Effort를 들어본 적이 있나요?

여기서 문장이 끝나버리는데, 이 용어를 부연 설명하는 내용이 없어서 어떤 의도인지 파악하기가 어렵습니다. Best-Effort란 용어가 무슨 뜻이고, 현재 문맥에서 어떤 의미를 나타내는지 부연해서 설명하면 좋겠습니다. 독자가 읽었을 때 잘 모르는 내용이라면 당연히 의문이 들 텐데 부연 설명이 없어서 내용을 원활하게 이해하기가 어렵습니다.
...
===

편집자님의 피드백을 검토한 후 최종 원고에 반영해달라고 대표님께서 메일을 주셨습니다.

그 당시 초고 원고를 쓸 때는 저 나름대로 최선을 다했습니다. 하지만 지금 그 당시 제가 출판사에 보냈던 초고 원고를 읽으면 제 눈을 뜨고 도저히 읽을 수 없는 수준의 형편없는 원고였습니다. 이런 원고를 읽고 자상하게 원고의 문제점을 지적해 주신 편집자님께 감사하다고 말씀드리고 싶네요.

고비

2019년 4월 중순으로 기억합니다. 3월 초에 초고 원고를 출판사에 전부 보낸 후 편집자님의 의견과 '실습'과 같은 내용을 보강해 제 손을 떠나는 1차 최종 원고를 마무리할 시점이었습니다.

그런데 큰 문제가 생겼습니다. 2019년 4월 중순에 라즈베리 파이의 리눅스 배포판인 라즈비안의 리눅스 커널 버전이 4.14에서 4.19로 업그레이드된 것이였습니다. 어떤 분은 '리눅스 커널 버전이 4.14에서 4.19로 업그레이드된 게 뭔 문제인가'라고 생각할 수 있는데요.

    * 책의 컨셉 상, 책에서 다루는 리눅스 커널의 버전을 최신 리눅스 커널 버전으로 구성하고 싶었습니다.

사실 기존에 출간된 리눅스 커널 도서의 리눅스 커널 버전은 상당히 낮은 버전(2.6 버전: 10년 전)이거든요.
그래서 많은 개발자들은 기존 도서에서 설명하는 리눅스 커널 소스 코드를 분석하기 어렵다는 불만이 많았습니다.

책은 라즈비안 리눅스 커널의 소스 코드를 세세하게 분석하는 내용으로 구성이 돼 있었어요. 그런데 커널 버전이 4.14에서 4.19로 변경되면 소스 코드도 같이 바뀌므로 이거 원고의 내용을 대폭 수정해야 될 상황이었습니다.

커널 4.14 버전으로 진행해 출간을 할까 조금 고민을 했습니다. 만약에 4.14 버전으로 책을 출간하면 어떻게 될까 머리 속으로 그려 봤는데요. 생각을 정리하니 다음과 같은 결론에 이르게 됐습니다. 

    * 4월 말에 최종 버전 원고를 출판사에 전달하면 일러도 8~9월 달에 책이 출간될 것이다.
    * 그 시점에 라즈비안 커널은 4.19 버전일 것이다.
    * 차라리 최종 원고 송부 일정을 조금 미루고 4.19 버전으로 원고를 뜯어고치자. 

제 고민을 출판사 대표님께 말씀드렸더니 '최신 커널 버전으로 진행하는 게 좋겠다'라고 공감해 주셨고,
'최종 원고 일정은 너무 신경 쓰지 말고 책의 내용이 튼실하도록 집필이 됐으면 좋겠다'라는 의견을 주셨습니다.

4.14 커널 버전의 소스 코드로 구성된 원고를 4.19 커널 버전으로 원고를 수정하기 시작했습니다. 원고를 수정하는데 2~3 달 정도 걸렸습니다. 1600 페이지의 원고를 수정하는 건 쉽지 않은 작업이었습니다. 

     * 지금 생각해 보면 정말 그때 결정을 잘했다 생각이 듭니다. 

출간될 책의 커널 버전이 4.14이라면 최신 리눅스 커널 버전이란 말을 꺼내기 어려웠을 것입니다.
원고를 계속 다듬고 수정하다가 8월 19일에 최종 버전의 원고(1~14장, 부록)를 다 모아서 출판사에 전달했습니다.

출판사 편집자님의 원고 교정 & 베타 리더의 의견 듣기

8월 19일에 최종본 원고를 전달한 후 10월 22일 경에 출판사에서 교정한 원고를 저에게 보냈습니다.

엄청나게 많은 수정 내용이 담긴 메모를 확인하면서 '참 출판사 에디터님이 고생하셨겠구나' 생각이 들었습니다. 그러면서 '참 나의 글쓰기 실력이 부족하구나'라며 자책감이 들기도 했습니다.  1차 교정과 수정은 출판사에서 전달된 워드 파일을 수정하는 방식으로 진행됐습니다. 

동시에 여러 리눅스 커널 & BSP 개발자분들에게 원고를 전달해 베타 리딩을 진행했습니다. 많은 분들이 좋은 의견을 주셨는데, 그중에 가장 큰 도움을 주신 분은 (책의 감사의 글에도 명시돼 있듯) 박병철 님이었습니다. 

리눅스 커널의 스케줄러와 lockdep를 개발하는 분인데, 솔직히 베타 리더를 부탁할 때 '이렇게 원고를 꼼꼼히 읽고 세세한 의견을 주실 지'는 몰랐습니다. 사실 실전 개발자분이라 원고를 읽을 시간이 부족할 것이라 예상했기 때문입니다. 다시 한번 감사의 말씀을 드리고 싶네요.

이에 못지않게 훌륭한 피드백을 주신 분은 미국 칼텍 교수로 활동하고 계신 Reddy 교수님이었습니다. Reddy 형님은 선배를 통해서 알게 된 분인데 최고의 인도 개발자로 명성이 자자한 분이었습니다. 한글로 된 원고를 영어로 번역해 읽고는 의견을 주셨습니다. 어떻게 하면 쉽게 표현을 할 수 있을지 의견을 주셨고 실습 코드에 대해 상세한 의견을 주셨습니다.

이런 최고의 베타 리더의 의견을 듣게 된 것은 참 행운이였다란 생각이 드는데요.

베타리딩을 진행하면서 교정본 원고를 수정하고 최종 편집 과정에 들어가게 됐습니다. 이때가 12월 초 경이었는데요.

워드 파일을 바로 변환한 PDF 파일이 아니라 실제 책의 페이지 디자인이 반영된 PDF 파일로 최종 편집을 진행했습니다. 잘못된 부분이 있는지 확인하면서 원고를 읽었습니다. 한 원고를 20번 정도 읽은 것 같은데요. 

마지막이라고 생각하고 원고를 보니 병적일 정도로 꼼꼼해져 오타가 제 눈에 많이 보이기 시작했습니다.
최종 원고를 받아 계속 수정을 해도 오타와 오류가 보였고 4개월 정도 원고를 수정하는데 매진했습니다.

4월 15일에 최종 원고를 마무리했고, 출판사에서 선인세를 지급받고 책의 출간을 기다렸습니다.

출간 이후

4월 22~23일 경으로 기억합니다. Yes24, 교보, 인터파크, 알라딘 등의 인터넷 서점에 예약판매가 등록된 것이었습니다.
실제 서점에 책이 출간되는 일정은 5월 12일인데, 하루에 한 번씩은 인터넷 서점의 순위를 확인했습니다.

사실 책의 주제가 대중성과 약간 거리가 있어 출간되기 전에도 판매가 잘 될지 의문을 품고 있었습니다. 
그런데 놀랍게도 예약 판매 기간인데 인터넷 서점에서 책의 판매 지수가 하루가 다르게 증가되는 것이었습니다.
제 블로그를 통해 '책이 언제 출간될지 궁금해하셨던' 리눅스 개발자 분과 졸업반 학생들이 구매해 주신 것이었습니다.

예상했던 것보다 판매 지수가 높게 나왔다고 생각합니다. 앞으로 몇 달은 지켜봐야겠지만 최소한 선방은 했다고 생각이 듭니다.
 
책이 출간된 후에 베타리더 분과 리눅스 강사 분께 인사를 드리고 책을 전달드렸습니다.

특히 리눅스 강사나 교육 업체 대표 분들을 만나니 '좋은 책을 써줘서 고맙다', '리눅스 커널을 바이블로 집필하는 게 참 힘들텐데'라고 말씀하시면서 많은 칭찬을 해주셨습니다.

제가 겪은 또 다른 변화는 제 블로그(http://rousalome.egloos.com/)의 접속자 수입니다. 

위 그림은 제 블로그에 접속한 방문자 수를 나타낸 것인데, 예약 판매가 시작된 4월 이후 크게 늘어난 것이 보입니다.
3월에는 4100명 에 머물던 방문자 수가 5월에는 7500명을 넘게 됐습니다.

이번에는 블로그의 페이지 뷰의 통계 지표를 보겠습니다.


위 그림을 다시 보면 3월에는 페이지 뷰 수가 16676건에 머물렀는데, 5월에는 28255건으로 늘어났습니다.

정리하면, 책의 출간 이후 크게 방문자 수가 크게 늘어난 것을 확인할 수 있습니다. 이 기록과 책의 판매량을 종합하면 의미있는 통계 자료를 만들 수 있지 않을 까 생각됩니다.

출간이 되고 독자분들이 2~3장을 읽고 의문점이나 오타에 대해 블로그에 댓글을 주시기 시작했습니다. 또한 출판사를 통해서도 독자의 의견이 전달됐습니다. 이번 주에는 4장의 내용에 대해 질문을 주셨는데, 지금 5장을 읽고 있을 독자 분이 있을 것이라 예상합니다.

책의 오타나 오류를 알려주시면 확인하고 늦어도 다음 날 오전까지 피드백을 전달했습니다. 앞으로도 책의 피드백에 대해서는 발 빠르게 대응할 예정입니다.

향후 계획

예약 기간에 책을 구매해 주신 독자 분들을 위해 조만간 유튜브 동영상 강의를 제작해 업로드할 예정입니다.
전체 유튜브 동영상은 9월까지 전부 올릴 계획입니다. 

또한 독자 분들을 위해 원 포인트 세미나나 스터디 모임도 진행할 예정입니다.

지금까지 '디버깅을 통해 배우는 리눅스 커널의 구조와 동작 원리'이란 책의 후기를 정리했습니다. 
혹시 기술 서적을 집필하려는 분은 집필 과정에 대해 궁금한 점이 있으면 댓글로 질문을 주시면 아는 한 상세히 설명을 드리겠습니다. 
 
짧지만 긴 글을 읽어주셔서 감사합니다.

---
"이 포스팅이 유익하다고 생각되시면 공감 혹은 댓글로 응원해주시면 감사하겠습니다. 
"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!"

​Thanks,
Guillermo Austin Kim(austindh.kim@gmail.com)
---

덧글

  • dd 2020/06/02 16:48 # 삭제 답글

    사물인터넷이 더 발전되면서 LG WebOS처럼 자바스크립트같은 하이레벨 언어로 임베디드 분야가 대체 될 가능성이 있을까요? 사회초년생이고 리눅스 열심히 배워서 임베디드분야에서 대가가 되겠다! 하고 공부했는데 싹 환경이 바껴서 죽은지식이 되거나 하진 않겠죠? iot환경에서 스크립트 기반 언어 프레임워크가 종종 출시된다고 해서 걱정이네요 ㅠㅠㅠ
  • AustinKim 2020/06/02 19:55 #

    디바이스 드라이버를 C 언어 대신 파이썬으로 시스템 프로그래밍으로 제어한다는 이야기는 들어 봤는데요.
    '자바스크립트같은 하이레벨 언어로 임베디드 분야가 대체'되려면 다음과 같은 조건을 만족하면 되요.

    ▣ IoT 제품으로 구성할 수 있는 모든 하드웨어 부품(SoC, 메모리, 센서, 등등)을 규격화하고,
    하이레벨 언어로 디바이스를 제어할 수 있는 프레임워크를 지원한다.

    ▣ 하이레벨 언어로 디바이스를 제어하려면 이를 실행할 수 있는 CPU 코어의 성능이 좋아야 한다.

    그런데 IoT 디바이스의 핵심은 소형화와 값싼 부품인데요.
    위에서 언급한 내용을 지원하는 IT 업체의 이름을 아직 들어본 적이 없어요.

    여기까지 제가 알고 있는 내용인데, 제가 틀릴 수도 있어요.
    혹시 신문 기사나 관련 자료가 담긴 링크가 있으면 공유해 주셔도 좋을 것 같아요.
  • 2020/06/02 19:55 # 답글 비공개

    비공개 덧글입니다.
  • 소여물 2020/06/03 11:12 # 삭제 답글

    그저 감사드립니다^^^
    개인적으로 대한민국 역사상 가장 훌륭한 리눅스 커널 안내서라고 생각해요~
    지나가는 농사꾼 독자 드림^^^
  • AustinKim 2020/06/03 14:58 #

    이렇게 격려해주시니 정말 감사드립니다.
    앞으로 꾸준히 블로그를 통해 좋은 리눅스 컨텐츠를 공유하겠습니다.
  • 2020/06/03 14:58 # 답글 비공개

    비공개 덧글입니다.
  • 태상노군 2020/06/03 17:37 # 삭제 답글

    드디어 출판이 되었군요. 오랫동안 기다렸습니다 ^^
  • AustinKim 2020/06/03 19:43 #

    오랫동안 기다리셨군요.
    지금 인터넷 서점에서 돌풍을 일으키며 판매되고 있습니다. (:

    감사합니다.
  • 2020/06/03 19:43 # 답글 비공개

    비공개 덧글입니다.
  • KIMHY 2020/06/05 15:27 # 삭제 답글

    대단하십니다. 준비하느라 고생 많으셨을 텐데 분명히 좋은 결과가 있을겁니다.
  • AustinKim 2020/06/05 19:26 #

    응원해주셔서 감사합니다.
    즐거운 주말 보내세요.
  • 하동훈 2020/06/08 09:38 # 삭제 답글

    -건의-
    그런데 의외로 그림이 많이 없는 것 같아요. 중간중간 그냥 프로그램 설치해서 열었을 때의 창 모습이나, 아니면 그냥 아무것도 아닌 코드나 로그도 스크린샷해서 있으면 읽기가 더 편하겠어요. 그래도 좋습니다!

    -질문-
    라즈베리파이 4로 사도 되나요?
  • AustinKim 2020/06/08 12:35 #

    라즈베리 파이4로 실습하셔도 무방합니다.
    감사합니다.
  • 2020/06/08 12:35 # 답글 비공개

    비공개 덧글입니다.
  • tortuga 2020/06/16 08:28 # 삭제 답글

    해외에서 목이 빠지게 ebook이 출시되길 기다리는 예비 독자입니다.
    두가지 질문이 있는데요.
    첫째, 혹시 ebook 출시 예정일이 언제일지 대략적인 일정이라도 알 수 있을까요?
    둘째, 앞으로 활동계획에 출판 전 예약으로 미리 구매하신 분들께 유투브로 강의가 제공된다고 말씀하셨는데 다른 독자들은 강의를 볼 수 없는건지 궁금합니다. (동영상 제공 여부와 상관없이 물론 ebook이 출시되면 바로 구매하고 싶은데 동영상 강의와 함께 볼 수 있으면 더 좋을 것 같아서요.)

    이미 계획 중이신지는 모르겠지만 스터디를 조직하고 싶다고 하신 것을 보고 건의를 드리고 싶은 게 있습니다. 앞으로 예정하고 계신 활동계획에 네이버 카페나 카카오톡 그룹채팅 같은 곳에서 독자들 끼리도 책에서 모르는 내용을 물어보고 답변해주는 소통의 장을 마련해 주시는 건 어떨까 싶습니다.
  • AustinKim 2020/06/16 09:05 #

    출간될 책에 관심을 갖고 질문 주셔서 감사합니다. 질문에 답을 드리면;

    ● ebook 출시
    ebook 출시는 '반드시' 진행할 예정인데, 올해 10~11월 정도로 계획(아직 확정은 아님) 중입니다.

    ● 유튜브로 강의
    지금 PPT 자료를 작성 중에 있고 조만간에 유튜브 동영상은 업로드될 예정입니다.
    참고로 유튜브 동영상은 누구나 볼 수 있게 공개할 예정입니다.

    ● 스터디 조직 & 네이버 카페
    제가 생각하는 스터디 모임은 원포인트로 2시간 정도 질문을 듣고 책에 대한 가이드를 드리는 방향인데요.
    네이버 카페도 좋은 아이디어인 것 같습니다. 조만간에 오픈해보도록 하겠습니다.

    좋은 아이디어와 함께 건의해주셔서 정말 감사합니다.
    즐거운 하루 되세요.
  • 2020/06/16 09:05 # 답글 비공개

    비공개 덧글입니다.
댓글 입력 영역