티스토리 뷰

Hobby/Book

[Book] 리눅스 시스템 프로그래밍 (개정 2판)

생각많은 소심남 2015. 3. 7. 01:12

아주 오랜만에 한빛리더스 활동을 하게 되었다. 예전에 활동할 때가 5, 6, 7기였었는데 이제 어느덧 10기에 이르렀다. 그동안 나도 졸업 준비와 취업 준비를 하면서 정신이 없었고, 이제 조금 여유가 생긴 듯 해서 다시 하게 되었다. 물론 활동의 특성상 여러 분야의 책을 선택할 수도 있었지만 이번 첫 책은 내가 하던 분야랑 약간 연관이 있는 책을 선택해서 읽어보았다. 

(참고로 이 책은 한빛 미디어의 지원을 받아서 읽게 된 책임을 알려드립니다.)



 최근 몇년 사이에 리눅스라는 이름 자체는 컴퓨터를 한다는 사람들 입사이에서 꽤 많이 오르락내리락 했던 것 같다. 물론 그보다 더 역사가 오래되었지만, 그래도 예전보다는 윈도우와 비견될 정도를 관심을 받고 있는 듯 하다. 사실 개인용 PC나 일반 사무용 PC에서 돌아가는 운영체제는 아직까지는 윈도우가 많긴 하지만, 서버군이나 학술적인 측면에서 리눅스가 차지하는 비중도 무시할 수 없어졌다. 내가 있던 연구실의 경우에도 리눅스의 내부 커널을 수정하기도 하고, 혹은 해당 장치를 인식시키기 위해 만들어진 드라이버 모듈을 수정하면서 이론을 구현하고 실험을 했다. 이게 가능했던 이유는 리눅스를 구성하는 모든 요소 자체가 오픈소스이기 때문이다. 그만큼 많은 사람들이 코드를 살펴보고 더 나은 방향으로 수정된다. 그렇게 20여년이 지났고, 앞으로도 계속 되리라 생각한다. 

 지금 이 글에 리눅스라는 토픽을 들고 온 것은 어차피 컴퓨터로 먹고 살아야 되는 이상 내부 구조나 동작원리에 대해서는 조금이나마 알고 있어야 하기 때문이다. 나도 석사를 들어오면서 리눅스를 처음 접했고, 막상 리눅스를 다루고 이걸 이용해서 프로그램을 만드는 것에 대해서 조금 막막했었다. 그런 와중에 찾게된 기본 서적이 3권이었는데, 위 책도 그 책 중 하나다. 참고로 내가 맨처음 공부할때 봤던 책은 다음과 같다.



  여기서 앞의 두 책은 리눅스 내부의 커널에 대해서 다룬 책이고, 이번 글에서 소개하는 책인 "리눅스 시스템 프로그래밍" 책은 커널에서 제공하는 시스템콜을 가지고 실제 프로그램을 짜는 것에 대해서 알려준다. 사실 리눅스는 무척 크기 때문에 뭔가 이론만 듣고 이해하기에는 조금 벅찬 감이 있다. "리눅스 커널의 이해" 책은 그런 관점에서 보면 커널의 내부 원리를 잘 설명한 책이긴 하지만, 너무 원리와 글 위주로 나와있어서 실제로 독자가 읽으면서 '내가 이걸 진짜 다룰 수 있을까' 하는 의구심을 생기게 한다. (그렇다고 이 책이 나쁘다는 건 아니다. 진짜 내부 원리에 대해서 잘 설명하교 요약한 책이다.) 개인적으로 뭔가를 실제로 쳐보면서 실습을 하길 원하는 사람에게는 뒤의 두 책이 도움이 많이 될 것 같다. "리눅스 시스템 프로그래밍"도 보면 곳곳에 실습 예제와 동작 원리에 대해서 적절히 잘 조합되어 설명되고 있다.



물론 온라인으로 찾아보면 수많은 예제들이 공개되어 있지만, 뭔가 체계적인 주제에 맞게 리눅스 프로그래밍을 공부하고 싶은 사람에게는 이 책에 있는 예제를 직접 해보는 게 도움이 많이 될 거라고 생각한다. 개인적으로도 실제로 가상머신에 리눅스 설치하고 직접 해보면서 많이 배웠던 것 같다. 물론 아직도 더 배워야 할 부분이 많긴 하지만....

 참 이번에 나온 책은 개정판이다.2009년에 첫번째 책이 나왔었는데, 개정판은 새로운 커널에서 실습하면서 조금 많이 수정이 되었다. 책에 포함되어 있는 코드 내용 자체가 크게 바뀐건 아니지만, 리눅스 커널 2.6 대로 설명되었던 초판과는 다르게 개정판은 커널 3.9를 기준으로 설명되었다. 4.0으로 Release된게 얼마 안됬으니까, 아마 최근에 배포되는 거의 대부분의 리눅스들은 이 책에 나와있는 시스템 콜들을 그대로 활용할 수 있을 것이다. 



 특히 크게 바뀐건 책 컨텐츠 부분이다. 책 두께 자체는 크게 바뀌지 않았는데, 이번 개정판이 나오면서 Threading과 부록 파트가 추가되었다. 아무래도 초판이 나왔을 때보다 지금은 Multi-Threading에 대해 많이 다뤄지기 때문에 이 부분에 대한 내용을 추가로 더 넣은 거 같다. 분량 자체는 많지 않지만 pthread를 이용하는 방법이나 인출 예제를 들어서 동기화와 데드락을 설명한 부분이 포함되어 있어서 필요로 하는 사람들에게는 좋은 내용이 될 듯 하다. 약간 아쉬운 점은 위의 이미지에서도 소개하고 있는 것처럼 Threading이라는 분야 자체가 이렇게 작은 책으로 담기에는 너무 큰 내용이기 때문에 맛보기 정도로만 내용이 들어있다는 점정도다. 그래서 뭔가 Threading을 활용해서 중요한 프로젝트를 해야 하는 사람에게는 조금 맞지 않을 수 있다. 



 초판에 비해서 달라진 점은 위처럼 TIP 파트가 들어가 있다는 점이다. 사실 내가 초판도 가지고 있어서 조금 비교하면서 본 것도 있기는 한데 위처럼 놓치기 쉬운 내용같은 건 위처럼 TIP 형식으로 들어가 있어서 좋았다. 이밖에도 조금더 말 자체가 조금더 읽기 쉽게 순화된 점 정도가 최근에 나온 개정판이 초판이 비해서 나아진 점이다.



 이 책도 나온지도 나온지가 곧 있으면 8년째가 되어간다. 그동안 많은 사람들에게 리눅스란 무엇이고, 리눅스를 이용해서 시스템 프로그래밍을 한다는 게 어떤 것인가에 대해서 실제로 접해볼 수 있는 좋은 기회를 이 책이 제공한 건 아닌가 생각된다. 마침 원 책의 사이트에 나와 비슷한 의견을 가진 사람이 있어서 잠깐 가져와본다.



그만큼 접하기 어려운 내용을 간단하고 쉽게, 설명한 책이라고 생각한다. 뭔가 심도있는 내용을 찾는 사람에게는 조금 부족할 수도 있는 내용이지만, 처음 접하는 사람에게는 이 책만큼 내용과 예제를 잘 버무린 책이 있을까 싶기도 하다.


* 참고로 이 책의 저자인 Robert Love는 구글 엔지니어이고, 앞에서 소개한 두 책(Linux Kernel Development, Linux System Programming) 이외에도 Linux in a Nutshell 이란 책의 저자이기도 하다. 한번 기회가 되면 읽어보는 것도 권해본다.

댓글