이 서평은 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.
https://product.kyobobook.co.kr/detail/S000211776141
컴퓨터 과학 분야에 첫발을 들이는 순간부터 개발자들은 자신이 작성한 코드가 컴퓨터 내부에서 어떻게 실행되는지에 대한 궁금증을 가진다. "컴퓨터 시스템 딥 다이브"는 이런 질문들에 답할 수 있는 필독서로 자리 잡을 것이라 확신한다.
이 책에서 배울 내용은 다음과 같다.
- 컴퓨터가 프로그램을 실행하는 방법: 고급 프로그래밍 언어로 표현된 프로그램이 하드웨어 저수준 회로에 의해 어떻게 실행되는지 자세히 알 수 있음
- 프로그램 성능과 관련된 시스템 비용을 평가하는 방법: 메모리 계층 구조가 프로그램 성능에 미치는 영향, 프로그램 성능에 관한 운영체제 비용, 코드 최적화 팁 등을 알 수 있음
- 병렬 프로그래밍으로 병렬 컴퓨터의 성능을 활용하는 방법: 멀티코어 하드웨어, 운영체제 스레드, POSIX 스레드 라이브러리(Pthread)
이러한 내용들은 컴퓨터 과학 전공자라면 반드시 알고 있어야 하는 핵심적인 주제들을 담고 있다. 이 책에서 알려주는 내용들을 잘 알고 있으면 효율적인 프로그래밍뿐만 아니라 발생할 수 있는 다양한 문제를 해결할 수 있다.
Part 1: C프로그래밍 언어
초반부는 컴퓨터 시스템의 기본적인 개념 소개로 시작한다. 1장에서는 C언어의 기초를 다루며 입출력, 조건문, 반복문, 함수, 배열, 문자열, 그리고 구조체에 대한 철저한 설명을 통해 기본적인 구조를 이해하도록 한다.
2장에서는 C 프로그래밍의 심화 주제에 초점을 맞춘다. 여기서는 포인터, 동적 메모리 할당, 배열, 문자열 라이브러리, 구조체, 입출력 등 고급 C 기능들을 중점적으로 다루며 이들 주제의 핵심을 명확히 이해할 수 있도록 돕는다. 특히 동적 메모리 할당 섹션에서는 C언어가 컴퓨터 메모리를 어떻게 할당하는지에 대해 그림을 통해 설명하여 개념을 시각적으로 쉽게 파악할 수 있도록 한다. 또한 힙 메모리와 관련하여 malloc과 free 함수의 작동 방식이 상세히 기술되어 있어 이해하기에 용이하다.
컴파일 과정을 단계별로 상세히 설명한 부분도 인상적이었다. 학부 저학년때는 C언어 프로그램을 실행시키기 위해 IDE에서 단순히 재생 버튼을 클릭하는 것으로 충분했지만 이 책을 통해 각 단계를 하나씩 따라가며 컴퓨터 내부에서 실제로 어떤 일이 일어나는지 상상할 수 있게 되었다. 이러한 과정을 이해함으로써 프로그램이 컴파일되고 실행되기까지의 내부 메커니즘을 파악할 수 있다.
3장에서는 GNU의 디버거인 GDB에 관한 설명을 크게 두 가지로 나누어 제공한다.
- GDB의 기본 사용법과 프로그램 버그를 식별하는 데 사용되는 주요 GDB 명령어에 대한 소개
- 실행 중인 프로세스에 GDB를 연결하는 방법, GDB를 사용한 Makefiles의 구성, GDB를 통한 시그널 제어 등과 같은 몇 가지 고급 GDB 기능에 대한 설명
들을 소개한다.
Part 2: 컴퓨터 시스템 기초
4장에서는 바이너리와 데이터 표현, 컴퓨터 아키텍처, 그리고 어셈블리 프로그래밍을 다루며 프로그램이 실제로 컴퓨터의 회로에서 어떠한 과정을 거쳐 실행되는지 상세히 설명한다. 주된 내용은 비트와 관련된 다양한 개념을 다루며, 진수 변환, 보수 개념, 2진 산술 연산, 오버플로, 비트와이즈 연산, 시프트 연산 및 실수 데이터의 표현(고정 소수점 및 부동 소수점)을 설명한다.
5장은 컴퓨터 아키텍처, 특히 프로세서 설계에 관한 내용을 제공한다. 컴퓨터 구조 과목에서 배운 바와 같이, CISC와 RISC의 비교를 시작으로, 둘 간의 역사적 대결과 폰 노이만 아키텍처의 주요 구성 요소를 소개하고 있다. 도식적인 그림을 통해 시각적인 설명으로 어떤 모습을 갖고 있는지 설명해주고 있다.
클럭 속도의 증가가 물리적 한계와 전력 소모 문제에 부딪히면서 CPU 성능 향상을 위한 대안으로 멀티코어 프로세서 기술이 발전하게 되었다는 이야기를 해주고 있다. 현대 컴퓨터의 프로세서 아키텍처가 어떻게 구성되어 있는지를 설명하며 클럭 속도 향상을 위해 도입된 파이프라이닝 기술에 대해서도 자세히 다룬다. 파이프라이닝은 명령어 처리 과정을 여러 단계로 나누어 동시에 처리함으로써 처리 속도를 향상시키지만, 데이터 해저드와 제어 해저드와 같은 여러 문제에 주의해야 한다는 점 역시 서술되어 있다.
Part 3: 어셈블리 프로그래밍
6장 이후의 내용은 C언어를 바탕으로 한 어셈블리어 프로그래밍에 초점을 맞춘다. 어셈블리어의 기본적인 개념을 시작으로 함수, 배열, 구조체 등의 다양한 프로그래밍 구조가 어셈블리어에서 어떻게 구현되는지 예제 코드를 통해 상세히 설명한다. 특히 main 함수가 어셈블리어에서 어떤 과정을 거쳐 실행되는지에 대한 설명은 도식화된 그림을 통해 더 명확하게 이해할 수 있었다.
또한 버퍼 오버플로를 이용한 보안 취약점 악용에 관한 실제 사례를 간략히 다루면서 어떻게 취약점을 발견했는지 설명한다. 코드 예시를 통해 오버플로를 발생시키는 방법과 이로 인해 생기는 보안상의 위협을 이해할 수 있다. 추가적으로 대응하는 방법이 기술되어 검토를 할 수 있는 시간을 가질 수 있었다.
Part 4: 성능 최적화 및 관리
11장 이후의 부분은 저장소와 메모리 계층, 코드 최적화, 그리고 운영 체제를 통한 프로그램 성능 최적화 방법을 다룬다. 코드 최적화에 앞서 성능 못지 않게 주목해야 할 요소는 메모리 계층이다. 메모리 계층 구조에 대한 깊은 이해는 성능 개선을 위한 적절한 전략을 세울 수 있도록 한다. 추가적으로 다이렉트 맵트 캐시의 개념을 소개하고 캐시에서 데이터를 식별하고 접근하는 과정을 도식화하여 설명한다.
12장은 코드 최적화와 관련된 다양한 기법 및 관련 이론을 소개한다. 코드 프로파일링 방법과 컴파일러에 의해 자동으로 수행되는 최적화 기법들을 다루며, 어떠한 방식으로 최적화가 이루어지는지에 대한 개략적 설명을 제공한다. 이러한 최적화 방법들을 넘어서, 개발자가 직접 코드를 작성할 때 시간 복잡도를 최소화하는 알고리즘을 선택하는 것이 추가적인 최적화의 핵심적인 접근 방법으로 제시된다. 이 장에서는 컴파일러가 제공하는 최적화 외에도 개발자가 알고리즘 설계 단계에서 성능을 고려하여 효율적인 코드를 작성하는 방법에 대해 강조한다.
13장은 운영 체제에 대한 이론을 다룬다. 멀티프로그래밍, 프로세스, 시그널, 컨텍스트 스위칭, 타임 슬라이스, fork, exec, … 등 주어진 60페이지의 범위 내에서 모든 내용을 상세히 다루기 어려워 보이며 결과적으로 간략한 정보로 구성된 것으로 보인다. 특히 이 파트를 읽으면서 예시 그림과 예제 코드들이 OSTEP(Operating Systems: Three Easy Pieces) 책에서 본 것과 유사하다고 느꼈다. 실제로 마지막 페이지에서 이 책을 더 자세한 참고 자료로 추천하는 문구가 포함되어 있다. 원본 자료에 비해 상대적으로 내용이 간소화되어 있음에도 불구하고 이 책에서 제공된 내용은 전체적인 운영 체제의 구조와 원리를 상기시키고 큰 그림을 이해하는 데에는 적절하다고 생각한다.
Part 5: 병렬 프로그래밍
14장부터 15장까지는 병렬 프로그래밍을 집중적으로 다룬다. 현대 CPU는 여러 코어와 연산 장치를 내장하고 있는데 이 책에서는 멀티코어 아키텍처를 이해하고 이를 활용해 프로그램 실행 속도를 향상시키는 방안을 탐구한다. 특히 멀티코어 시대에 있어 공유 메모리의 활용법, 다양한 병렬 시스템, 그리고 병렬 프로그래밍 모델에 대해 설명한다.
결론
"컴퓨터 시스템 딥 다이브"는 프로그래밍을 막 시작한 입문자들에게도 추천되는 도서이지만 책이 후반부로 가면 갈 수록 난이도가 점차 상승하여 현직 주니어 개발자에게도 유익한 내용을 많이 담고 있음을 확신한다. 책 서평을 작성하는 데 이렇게 많은 시간을 할애한 적이 없었는데 이는 컴퓨터 시스템에 대한 내 이해가 여전히 부족함을 반영한다고 느낀다. 앞으로 이 책을 활용해 수업에서 배웠던 내용들을 복습하고 향후 개발 작업에 컴퓨터 시스템 지식을 활용할 수 있는 기초가 탄탄한 개발자로 성장하고자 한다.
'Life > 독서 기록' 카테고리의 다른 글
[서평] 객체지향 입문서 - C++ 완전 정복 (2) | 2024.04.10 |
---|---|
[서평] 개념부터 활용 전략과 미래 전망까지 - 멀티모달 생성 AI 인사이드 (2) | 2024.03.24 |
[서평] 비전공자도 간단하게 - 누구나 쉽게 캔바(canva)로 끝내는 콘텐츠 디자인 (0) | 2024.03.05 |
[서평] 웹 개발자의 필수 보안 서적 - 프런트엔드 개발자를 위한 보안 입문 (2) | 2024.01.11 |
[서평] 스프링 15일 완성: Do it! 점프 투 스프링 부트 3 (0) | 2024.01.06 |
컴퓨터 전공 관련, 프론트엔드 개발 지식들을 공유합니다. React, Javascript를 다룰 줄 알며 요즘에는 Typescript에도 관심이 생겨 공부하고 있습니다. 서로 소통하면서 프로젝트 하는 것을 즐기며 많은 대외활동으로 개발 능력과 소프트 스킬을 다듬어나가고 있습니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!