윈도우 시스템 프로그래밍의 바이블, 윈도우 응용프로그램 개발자들 중에서 한 번쯤은 스쳐 지나가듯 보거나 혹은 독파한 사람들도 꽤 많은 그 두꺼운 책을, 그 것도 원서로!!! 최근 3주간 회사에서 업부 공부를 하게 되면서 보고 있습니다. 주말엔 쉬었지만 블로깅 할 생각이 안났네요. (요즘 블로깅 넘 루즈하게 하는 것 같습니다. ㅠㅠ) 이제서야 글을 씁니다.

upload image

책의 중요한 부분들은 거의 빠짐없이 다 독해해서(?) 보았다는 생각이 듭니다. 사실 책의 주요한 내용들은 이미 다른 윈도우 프로그래밍 전문가분들이 거의 다 빠짐없이 블로그에 저 마다 기록을 해 두셨더라구요. 같은 내용을 두고 서로 자신만의 노하우나 생각들을 첨언해서 기록을 해 주셔서 사실 공부할 때 번역서가 아니어서 그렇게 막막하거나 하지는 않았습니다.

책을 읽으면서 든 생각은, Windows 도 참 잘 만들어진 운영체제구나... 하는 그런 생각입니다. 뭐, 당연하다면 당연 하겠죠. 지금 개인 컴퓨터 운영체제의 절대 다수가 Windows 를 쓰고 있고 또 수 많은 보안 위협에도 불구하고 계속해서 안정성 개선을 거듭하고 있으니, 또 그러면서도 응용프로그램 숫자도 굉장히 많구요. 

이러한 응용프로그램들을 지원하기 위한 각종 API 들과 알고리즘들, 그리고 그 바탕이 되는 핵심적인 전산학적 이론들이 이 책에 담겨져 있었습니다. 읽으면서 정말 많은 공부가 되었고 (물론 영여 공부도 적잖게 되었습니다. ^^;;;) 윈도우 프로그래밍을 하고자 하시는 분들은 뭐 당연히 보시겠지만, 설령 윈도우 프로그래밍을 하지 않더라도 한 번쯤은 읽어 볼 만한 책이라는 생각이 듭니다. 윈도우 프로그래머분들도 반대로 리눅스 커널 분석 책들을 읽어 보시면 도움이 될 것 같기도 하구요... ^^;

책을 읽고 공부를 하면서 시스템적으로 어떻게 돌아가는지에 대한 이야기들을 많이 접했습니다. 그리고 그 동안 제가 얼마나 무지했었는지 알게 되었네요. 가상 메모리에서 페이지 부재를 이용하는 방식으로 관리되는 메모리라던지, 프로세스와 쓰레드의 동작이라던지 동기화를 위한 방법들이라던지 정말 계속 말한다 하더라도 끝이 없을 것 같습니다.

upload image

사실대로 말씀드리면, 저는 여지껏 윈도우 환경을 '제외한' 나머지 환경들, 특히 열린 공간이라 할 수 있는 WEB 에서 주로 프로그램을 만들고 시험했습니다. 제가 유용히 활용했던 유일한 윈도우 플랫폼이라 함은 바로 Internet Explorer 입니다. IE 에서 제 코드들이 원할하게 동작하는지 시험하기 위해서죠.

그랬던 제가, 입사 후 업무와 관련해서 공부를 위해 Windows System Programming 을 공부하고 있습니다. 내년이 되면 아마도 초급 윈도우 프로그래머가 되어 있을지도 모르겠네요. 처음엔 사실 윈도우 프로그램이야 뭐 (잘 모르니) "Visual Studio 만 있으면 금방 만들 수 있는 거 아닌가?" 하는 그런 근거 없는 자신감 내지는 오만 섞인 안일함으로 대했었는데요, 이 책을 보고 나니 아, 그게 아니었구나... 난 여지껏 한 번도 제대로 윈도우라는 운영체제를 이해해 본 적이 없었구나 하는 걸 깨닫게 되었습니다. 정말 업무와 관련한 공부 이전에 먼저 공부해 볼 껄 하는 후회감이 밀려 올 정도입니다.

혹시나 책을 아직 못 보신 분들은 번역서가 출간되어 있다고 하니 번역서도 한 번 참고해 보시길 바랍니다. 원서와 번역서는 기술 문서의 경우 특히 별로 차이점이 없지 않나 하는 생각이 들거든요. 어감의 차이나 미묘한 늬앙스의 차이 보다는 아무래도 사실의 전달이 더 중요하다고 생각 되어서... 하지만 원서라도 괜찮다 하시는 분들은 원서를 보셔도 좋을 것 같습니다.

이 책에서 제가 생각할 때 꼭 봐야 할 부분 3가지 챕터만 선별하자면 아래와 같을 겁니다.

Chapter 3: Kernel Object
Chapter 9: Thread Synchronization with Kernel Objects
Chapter 13: Windows Memory Architecture

물론 다른 챕터들도 하나 같이 중요하다고 할 수 있습니다만 (... 그래도 Chapter 12: Fibers 는 사실 그렇게 중요하진 않습니다 ...) 위의 3가지 챕터 만큼은 꼭 한 번 이상 보시는 걸 추천하고 싶습니다. 윈도우 개발에 본격적으로 뛰어드는 걸로 치면 사실상 왕초보입니다만, 그런 왕초보의 눈으로 읽었을 때 정말 제대로 이해해야 겠다는 생각이 들게 만든 챕터들이 바로 저 3가지 챕터들이니까요~.

제프리 리처는 윈도우즈를 잘 이해하고 싶다면 레지스트리와 친해져야 한다고 말했답니다. 하지만 제 생각에 윈도우즈를 정말 잘 이해하고 싶다면 반드시 제프리 리처의 책과 먼저 친해져야 한다고 생각 합니다. 저 처럼 기본 없이 윈도우 개발에 뛰어들려다 식겁 한 분들이라면 특히 꼭 보세요~!