리눅스는 일반 가정과 사무실에서 사용하기에 최적인 운영체제이다. 강력하며, 여느 상용 운영체제 못지 않게 안정적이고, 보안이 뛰어나며, 무엇보다도 오픈 소스이다. 하지만 가정이나 사무실에서 리눅스를 사용할지 말지를 결정하는 가장 큰 요인 중 하나는 서비스와 지원이다. 리눅스는 세계 도처에 있는 자원 봉사자 수천 명이 개발하기 때문에 문제 발생 시 누구에게 도움을 청해야 할지가 분명하지 않다.
진정한 리눅스 정신에 의거하여, 리눅스는 상용 운영체제와는 다소 상이한 지원 방식을 채택하고 있다. 전대 미문의 전문가 커뮤니티가 존재하며, 최첨단 문제 진단 분석과 해결 도구를 제공할 뿐만 아니라, 당연히 제품 자체에도 소스 코드가 들어 있다. 이러한 자원 외에도 IBM과 같은 회사에서 내놓은 전문 리눅스 지원 서비스와 레드햇이나 노벨/수세와 같은 리눅스 판매업체가 여럿 존재한다. 하지만 전문 서비스나 판매업체를 거치지 않고 리눅스에서 제공하는 자원을 최대한 "스스로 활용하는" 방법을 이 책에서 주요 주제로 다룬다.
리눅스를 "스스로 활용한다"라는 의미는 사람마다 다르다. 가정에서 리눅스를 사용하는 사람에게는 리눅스 사용이 한층 즐거워진다는 뜻이다. 사무실에서 리눅스를 사용하는 사람에게는 리눅스 관련 문제를 신속하고 효과적으로 진단함으로써 조직 내 자신의 가치와 시장성을 높일 수 있다는 뜻이다. 기업 전략의 일부로 리눅스를 채택해야 할지를 고민하는 기업에게는 리눅스 채택 전략에 따른 운영 경비 감소와 투자 수익(ROI, Return of Investment) 증가를 뜻한다. 어느 유형에 속하는 사용자이든, 리눅스 사용 경험과 투자로부터 최대한 많은 이익을 얻어내야 한다는 점이 중요하다.
--- 저자 서문
*** 박재호 ***
전문적인 개발자라면 이구동성으로 코드를 쓰는 작업보다 읽는 작업에 더 많은 시간을 투입한다고 이야기한다. 다시 말해서, 코드 작성보다 작성 후 개선/검토/디버깅에 훨씬 많은 노력이 들어가며 이런 과정은 취미 생활이나 학교 과제로 프로그램을 작성하지 않는 이상 상용 제품을 만드는 과정에서 필수라고 보여진다. 하지만 유감스럽게도 대학교나 컴퓨터 학원에서 디버깅을 전문적으로 가르친다는 말은 한번도 들어보지 못했다. 가장 시간을 많이 쏟는 분야에 대한 체계적인 지식 습득 경로가 없다는 사실은 사뭇 충격적이기까지 하다.
과거 유닉스 시절에는 모든 시스템 프로그래머가 바로 시스템 관리자였고 시스템 관리자가 바로 시스템 프로그래머였는데, 요즘 들어와서 명확한 선이 그어지면서 갈수록 시스템 관리자와 프로그래머 업무가 분리되면서, 좀더 전문적으로 자신이 맡은 작업을 진행할 수 있다는 장점이 있는 반면에 학제간 연구를 통한 통합적인 문제 분석이 어렵다는 단점이 나타나고 있다. 시스템 관리자는 과연 스크립트 언어를 벗어난 본격적인 프로그램 분석 실력이 필요 없을까? 프로그래머는 기초적인 명령어 사용법 이외에 시스템 관리자의 전유물이라고 여기던 프로세스나 목적 파일에 대한 정보 확인 명령에 숨겨진 의미를 파악할 필요가 없을까?
이렇게 모순적이고 어려운 현실에 직면한 개발자들에게 도움을 주기 위해 올해 초에 에이콘 출판사를 통해 『리눅스 디버깅과 성능 튜닝』이라는 제목을 붙인 번역서를 출간했었다. 『리눅스 디버깅과 성능 튜닝』은 현장에서 바로 써먹을 수 있도록 리눅스에서 제공하는 다양한 도구 사용법과 활용 방안을 예를 통해 설명하고 있다. 하지만 『리눅스 디버깅과 성능 튜닝』은 방대한 도구를 한정된 지면에 다루고 있기에 아무래도 폭에 비해 깊이가 얕다는 문제점이 있었으며, 이런 단점을 보완할만한 다른 책에 대한 요구가 커지고 있다.
이와 같은 상황에서 마침 프렌티스 홀에서 출간한 『Self-Service Linux』를 접하게 되었고, 책 내용을 검토한 결과 『리눅스 디버깅과 성능 튜닝』과 비교해서 다루는 도구의 폭은 좁지만 아무도 가르쳐주지 않았던 비밀스러운 활용 방안을 충분한 깊이로 다루고 있다는 결론을 내려서 번역 작업을 서두르게 되었다.
이 책은 단순한 옵션 나열이나 피상적인 명령어 사용법을 다루는 책이 아니다. 마치 고급 시스템 관리자를 위한 문제 해결 서적이라고 착각하기 쉽지만, 실제로 리눅스 전문 개발자들이 반드시 알고 넘어가야 하는 핵심적인 지식을 담고 있는 알짜 서적이다.
하나같이 유익한 내용들이지만, 특히 1장, 5장, 6장, 9장을 눈여겨보기 바란다. 다른 책에서 쉽게 접하지 못하는 전반적인 문제 해결 전략을 1장에서 다루고 있으며, 스택에 대한 명쾌한 설명이 5장에서 전개된다. 심지어 원시 코드가 없을 경우에도 문제 원인을 gdb로 추적하는 방법을 6장에서 실제 예를 들고 있으며, 마지막으로 중요한 정보를 담고 있음에도 불구하고 개발자 사이에서 외면 받고 있는 ELF에 대한 설명이 9장에 나온다. 커널 단으로 내려가지 않고서도 리눅스 내부 구조를 이렇게 명쾌하게 그릴 수 있다는 사실이 놀라울 따름이다.
*** 이해영 ***
이 책에서 가장 감동적이고 핵심적인 장을 꼽으라면 1장 "우수 문제 해결 기법과 초반 조사"이다. 리눅스 환경에서 개발하는 사람이라면, 반드시 읽어야 할 장이다. 1장 내용만 충분히 숙지하여 머리와 가슴에 넣어도, 이 책 값어치 중에서 80%는 얻어냈다고 생각한다.
흔히 "실력 있는 사람"과 "사실을 많이 습득한 사람"을 혼동한다. 특히나 개발 분야에서는 더욱 그렇다. API를 좔좔 외우고 명령 옵션을 쫙 꿰고 있는 사람을 실력이 있다고 여긴다. 하지만 습득한 사실만으로 해결할 수 있는 문제에는 한계가 있다. 문제를 해결하는 능력, 즉 실력은 단순한 지식 이상이 필요하다. (참고로, 반드시 자신의 힘으로 문제를 해결해야 한다는 뜻은 아니다. 올바른 사람을 찾아서 원하는 답을 얻어내는 기술도 능력이고 실력이다.)
제목 그대로, 이 책은 리눅스 시스템을 스스로 운영하는 방법, 즉 리눅스 시스템이라는 영역에서 문제를 해결하는 능력을 키우는 방법을 소개한다. strace(2장)에서 GDB(6장)을 짚고, ELF(9장)에 이르기까지, 이 책에서 다루는 지식은 방대하다. 자칫하면, 여기에 묻혀 중요한 줄기를 놓칠 수 있다. 예를 들면, 이 책은 GDB 최적화 옵션도 설명하지만, 동시에 어떤 문제와 어떤 상황에서 GDB를 사용하는지도 설명한다. 리눅스 상에서 문제를 디버깅하려는 개발자라면, 어떤 도구가 어떤 상황에 적합한지 이해해야 한다. 하지만 최적화 옵션을 일부러 하나하나 암기할 필요는 없다고 생각한다. 최적화 옵션이 무엇인지 그리고 어떤 문제를 일으킬 수 있는지만 이해한다면, 각 옵션마다 내재된 있는 정확한 의미는 필요할 때 찾아보면 된다.
도서관에 있는 책 내용을 몽땅 암기하는 능력보다는 원하는 책과 정보를 빠르고 신속하고 정확하게 찾아낼 수 있는 능력이 더 유용하다. 책을 읽으면서 이런 점을 염두에 두었으면 한다. 그리고 가능하다면 서문과 1장에 충분한 시간을 할애하기 바란다. 좀 딱딱하다 싶을 내용이지만, 의외로 재미있고 활기차다. 이왕이면 독자 여러분이 즐겁게 읽었으면 좋겠다.
--- 역자 서평