사람은 무엇으로 사는가?
톨스토이는 이 질문을 통해 이 시대를 살아가는 우리에게 한 번쯤은 자신을 반추해볼 기회와 답을 주고 있다. 저자는 가난한 구두 제조업자 세묜에게 하나님의 벌을 받아 세상에 내려온 천사 미하일의 눈을 통해 다음의 세 질문에 대한 답을 구하게 한다.
가난에 찌든 사람으로부터 도움을 받은 미하일은 "인간의 내면에는 무엇이 있는가?"에 대한 답으로 사랑이 사람의 내면에 자리 잡고 있음을 깨닫고, 한치 앞도 볼 수 없는 인간의 우둔함에서 "인간에게 허락되지 않은 것은 무엇인가?"에 대한 대답으로서 인간은 앞을 바라보는 지혜가 부족함을 깨닫고, 다른 사람의 자식을 거두는 이웃으로부터 "사람은 무엇으로 사는가?"에 대한 답으로 사랑의 소중함을 깨닫게 된다.
개발자는 무엇으로 사는가?
현란한 코딩의 즐거움 아니면 복잡한 수학적 알고리즘을 사용하는 현학적 우월감 또는 로우 레벨의 시스템 프로그래밍에 대한 즐거움인가? 사실 이 정도의 개발자라면 자신이 원하는 분야의 프로그래밍을 하면서 그래도 많은 것을 누리는 행복한 편에 속한다고 할 수 있다. 하지만 진정으로 개발자의 즐거움은 모름에 대한 지혜를 추구하고 새로운 앎에 대한 식지 않는 열정을 즐길 수 있는 여유에서 온다고 여겨진다.
여러분은 일상에서 항상 원인이 모호한 메모리 손상, 프로세스 행, 힙과 스택 손상, 보안 문제, 프로세스 크래시, 동기화 문제, 자원 누수, 미묘한 타이밍 문제 등과 같은 곤란을 겪고 있을 것이다. 이런 문제에 대하여 최대한 신속하고 효율적인 방식으로 문제의 범위를 줄이고 정확한 원인을 파악하고 해결책을 강구할 수 있어야 한다. 결국 문제를 인식하고 분류할 수 있어야 하며 각 문제에 대하여 가장 효과적인 툴을 선택하고 필요하다면 분석을 위한 툴을 직접 작성할 수 있어야 하며 특정 부류의 문제에 대한 디버깅을 위한 시스템 조율이 가능해야 하며 효과적인 디버깅 환경을 구축할 수 있는가 하는 문제로 귀결된다.
이 책에서는 앞서 언급한 이런 문제에 대한 철저하고도 경험을 바탕으로 한 저자의 노하우가 고스란히 담겨있다. 체계적이며 심도 있는 디버깅 기법을 풍부한 예제를 통해 매우 간결하게 문제를 해결하는 절차를 예시해 줌으로써 실전에서 부담없이 적용 가능하다. 여러분이 응용 프로그램이나 시스템 프로그램, 서버/클라이언트 프로그램, COM 같이 어떤 분야에서 개발을 하든지 간에 이 책에서 예시된 다양한 툴과 포괄적이고도 명료한 기법을 통해 난해한 문제를 진단하고 해결할 수 있을 것이다. 여러분은 역자와 마찬가지로 이 책을 통해 진정한 개발의 즐거움을 누릴 수 있을 것이다. -옮긴이의 말 중에서
언젠가부터 멀티스레드가 없는 애플리케이션 개발을 상상하기 힘들어졌다. 제한된 컴퓨팅 환경에서 주어진 특정 작업을 가장 효율적으로 수행하는 여러 방식 가운데, 멀티스레드는 병행성과 병렬성 측면에서 가장 뛰어난 프로그램 기법 중 하나일 것이다. 이 책은 멀티스레딩과 병행성의 기본 개념을 파악하고 이를 C++에 효율적으로 적용하는 방법을 알려준다.
또한 멀티스레딩의 안전하고도 효율적인 구현을 위해 필수적인 내용을 다룬다. 즉, 운영체제와 프레임워크가 이들에 대한 저수준 함수를 이용하는 방법과 함께 이들 개념이 하드웨어 수준에서 동작하는 방법을 심도 있게 다루며, 스레드 간 동기화와 통신, 병행성 C++ 애플리케이션의 디버깅, C++에서 가장 모범적인 프로그래밍 사례 등을 다룬다.
마지막으로 원자적 동작의 본질을 이해하고 이들을 코드 최적화에 유용하게 사용할 수 있는 방법을 습득하며, 분산 컴퓨팅 환경에서 멀티스레드 애플리케이션을 구현하고 멀티스레딩을 채택한 C++ 기반의 GPGPU 애플리케이션 설계 방법을 익힌다. 특히, 10장에서 다루는 GPGPU 애플리케이션 설계 방법은 최근 비트코인 채굴과 관련해 그래픽 카드의 품귀 현상과도 그 궤를 같이한다는 점에서 주목할 만하다.
이 책은 그 분량에 비해 다루는 내용의 심도와 주제가 상당히 광범위하며 때론 포괄적이고도 때론 매우 정교하다. 개발자 여러분, 이제 준비가 되었다면 안전띠를 단단히 조이고 멋진 질주를 시작해보자!
사람들은 누구나 자신에게 이미 익숙해져 있는 방식으로 문제에 접근하고 해결하려 한다. 프로그램 분야에서도 예외는 아닐 것이다. 이 책의 독자 여러분은 먼저 스스로에게 자문을 해봐야 한다. 나는 어떤 방식으로 문제에 접근하고 그 문제를 해결하기 위해 어떤 기법과 방식을 사용해 왔는지를 말이다.
함수형 프로그래밍 기법으로 작성된 프로그램은 결과를 얻기 위해 수행해야 하는 명령을 지정하기 보다는 결과가 무엇인지를 정의하는 점에서 결과를 계산하기 위해 수행해야 하는 각 단계를 익히 알고 있는 절차적 프로그래밍 기법과는 확연히 다르다. 또한 함수형 프로그래밍 기법은 함수에 대한 추상화를 만든다는 점에서 데이터를 추상화할 수 있는 객체지향 프로그램 기법과 다르다.
이 책은 이미 C++를 숙지한 독자를 대상으로 하며, 함수형 프로그래밍이 무엇인지를 파악하고 이것이 C++에 적용되는 방식을 다룬다. 함수형 프로그래밍은 C++에서 흔히 사용되는 절차적, 객체지향 방식에 비해 소프트웨어 설계와 다른 방식의 프로그래밍에 대한 다른 사고방식을 제공한다.
이 책을 모두 읽었다면 독자 여러분은 C++에서 지원하는 다양한 함수형 프로그래밍 기법을 통해 최신 앱의 요구 사항을 쉽게 해결하고 복잡한 프로그램 논리를 단순하게 표현할 수 있으며, 우아한 오류 처리와 효율적인 병행성을 다룰 수 있을 것이다. 또한 함수형 프로그래밍 기법을 사용해 C++ 프로그램을 고급화하는 방법을 익힐 수 있을 것이다.
프로그램 분야가 많지만 항상 그 기저에는 자원의 효율성이라는 대전제를 바탕으로 하고 있다. 컴퓨팅 분야의 역사에서 언제나 그랬듯이 가장 핫한 관심 대상인 분야는 메모리였고, 지금도 그럴 것이다. 하드웨어적 기술과 소프트웨어 동작 방식 또한 메모리 사용의 효율성에 기반을 두고 기술 향상이 이뤄졌음은 당연하다. 소프트웨어 측면에서 자동 메모리 관리 기법의 가장 핵심에 자리 잡고 있는 분야가 바로 가비지 컬렉션이다.
이 책에서는 전통적으로 가비지 컬렉션이 수행하는 작업과 알고리즘을 먼저 소개한다. 그러고 나서 좀 더 도전적인 사항들을 소개한다. 현대의 고성능 가비지 컬렉션 설계를위해 필요한 멀티코어 프로세서 모듈에 장착된 캐시 아키텍처를 고려한 알고리즘을 소개하며, 이와 더불어 새로운 하드웨어가 제공할 수도 있는 병렬성을 이용할 수 있는 컬렉터 설계에 대한 기본 지식도 제공한다. 그리고 최근 많은 임베디드 시스템에서 사용되는 실시간 시스템에서의 가비지 컬렉션에 필요한 요구 조건과 그 충족 방법을 제시한다.
최신 컴퓨터 시스템 아키텍처 또한 가비지 컬렉션과 연동하며, 근래의 모든 프로그래밍 언어는 가비지 컬렉션을 고려한 설계가 이뤄져 있고, 컴파일러 최적화 기법 또한 가비지 컬렉션과 연동한다. 현재 프로그래머이고 또한 전문적인 프로그래머를 꿈꾸는 누구라도 그 기저에서 동작하는 자동 메모리 자원 관리의 원리를 이해하고 구현 방식을 파악하며, 더 나아가서 도전적인 가비지 컬렉션을 설계하고 프로그래밍 언어 설계를 희망하는 사람이라면 이 책은 그 앞길에 한 줄기 빛이 될 것이라고 확신한다.
모바일 디바이스로의 급속한 컴퓨팅 산업의 재편과 더불어 5G를 기반으로 한 빅데이터 시대가 도래하고, 우리 실생활과 더욱 밀접해진 AI 분야의 무궁무진한 응용과 발전 가능성을 보게 될 때면 앞으로의 펼쳐질 4차 산업 혁명의 시대가 과연 어떤 모습으로 다가올지 무척이나 기대된다. 그런 측면에서 이번 7판을 번역하면서 윈도우 운영체제도 이런 시대 상황을 반영해 통합과 효율성, 그리고 보안에 가장 많은 중점을 두고 개발이 진행됐음을 짐작할 수 있었다.
이 책은 1992년, 헬렌 큐스터가 최초 집필한 Inside Windows NT의 7판에 해당한다. 역자의 책장 한구석에 몇 페이지 되지 않는 1판이 아직도 먼지와 함께 고이 자리하고 있다. 윈도우 운영체제의 역사에서 한 획을 그은 거장들인 데이비드 솔로몬, 마크 러시 노비치, 알렉스 이오네스쿠, 파벨 요시포비치 등의 손을 거쳐 현재의 7판에 이르렀다.
윈도우 비스타와 윈도우 7, 윈도우 서버 2008 R2 운영체제의 핵심 내용을 다뤘던 5판이나 6판에 비해 7판은 모바일 플랫폼을 포괄하는 마이크로소프트 윈도우 10과 윈도우 서버 2016 운영체제의 핵심 구성 요소인 프로세스와 스레드, 메모리 관리, 그리고 더욱 관심이 높아지는 보안 분야를 다루는 시스템 아키텍처의 내부 동작 방법을 이해하고자 하는 고급 컴퓨터 개발자와 보안 연구가, 시스템 관리자를 위한 윈도우 운영체제의 설계 철학을 담았다.