이 책은 독학으로 컴퓨터 구조와 운영체제를 배우는 입문자가 ‘꼭 필요한 내용을 제대로 학습’할 수 있도록 구성했다. 뭘 모르는지조차 모르는 입문자의 막연한 마음에 십분 공감하여 과외 선생님이 알려주듯 친절하게, 핵심 내용만 콕콕 집어 준다. <컴푸터 구조>편에서는 컴퓨터를 이루고 있는 부품들과 각 부품의 역할을 알아본다. 또한 컴퓨터 내부의 구조와 작동법을 이해하고, 컴퓨터가 어떻게 명령어를 처리하는지 학습한다. <운영체제>편에서는 운영체제의 필요성을 배운 뒤 앞서 배운 컴퓨터의 부품들을 운영체제가 어떻게 사용하는지 전체 과정을 살펴본다. ‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접을 제대로 준비해야 할 때’ 다른 입문서에서는 알려주지 않았던 진짜 컴퓨터 공학 지식을 <혼자 공부하는 컴퓨터 구조+운영체제>에서 만나 보자!
42명의 베타리더 검증으로, ‘함께 만든’ 입문자 맞춤형 도서
42명의 베타리더와 함께 입문자에게 꼭 맞는 난이도, 분량, 학습 요소 등을 적극 반영했다. 어려운 용어와 개념은 한 번 더 풀어 쓰고, 적절한 예시와 이해하기 쉬운 그림으로 누구나 이해할 수 있도록 구성했다. 또한 일상 소재를 활용한 비유를 활용하여 어렵게 느껴질 수 있는 컴퓨터 구조와 운영체제를 머릿속에 직접 그리듯이 설명해 준다. ‘혼자 공부해 본’ 여러 입문자의 초심과 눈높이가 책 곳곳에 반영된 것이 이 책의 가장 큰 장점이다.
누구를 위한 책인가요?
개발자가 되고 싶어 컴퓨터 구조와 운영체제를 배우려고 하는 비전공자, 일반인
컴퓨터 구조와 운영체제의 기본 용어조차 헷갈리는 학부생
취업을 위해 기술 면접을 봐야 하지만 기초가 부족한 졸업반
컴퓨터의 작동 구조를 제대로 알고 싶은 주니어 개발자
매일 코딩을 하지만 막상 프로그램을 움직이는 하부 기술에 대한 이해가 부족한 개발자
저자소개
저자
강민철
강의와 책으로 지식을 나누고, 코드와 논문으로 지식을 발굴하는 개발자이자 연구자이다. 문제 해결과 집필을 즐기고, 조용한 산과 바다를 좋아한다.
이 책은 컴퓨터 구조와 운영체제의 핵심 내용을 7단계에 걸쳐 반복 학습하면서 자연스럽게 머릿속에 기억되도록 구성했다. [핵심 키워드]와 [시작하기 전에]를 통해 각 절의 주제에 대한 대표 개념을 워밍업한 후, 본격적으로 컴퓨터 구조와 운영체제를 알려준다. 마무리에서는 [핵심 포인트]와 [확인 문제]로 주요 개념을 한 번 더 복습한다. ‘혼자 공부할 수 있는’ 커리큘럼을 그대로 믿고 끝까지 따라가다 보면 프로그래밍 공부가 난생 처음인 컴퓨터 구조+운영체제 입문자도 무리 없이 책을 끝까지 완독할 수 있을 것이다!
둘, ‘혼공’에 힘을 실어 줄 동영상 강의와 혼공 학습 사이트!
책으로만 학습하기엔 여전히 어려운 입문자를 위해 저자 직강 동영상도 지원한다. 또한 학습을 하며 궁금한 사항은 언제든지 저자에게 질문할 수 있도록 학습 사이트를 제공한다. 저자가 질문 하나하나 직접 답변을 달아주고 있으며, 관련 최신 기술과 정보도 얻을 수 있다. 게다가 혼자 공부하고 싶지만 정작 혼자서는 자신 없는 사람들을 위해 [혼공 학습단]을 제공한다. 혼공 학습단과 함께하면 마지막까지 포기하지 않고 완주할 수 있다.
꼭 기억해야 할 컴퓨터 구조와 운영체제의 핵심 개념과 용어만 따로 정리한 [용어 노트]를 제공한다. 처음 공부하는 사람들이 컴퓨터 공학 지식을 어려워하는 이유는 낯선 용어 때문이다. 혼공은 언제 어디서든 꺼내 볼 수 있는 [용어 노트]로 낯선 용어를 반복적으로 학습하도록 도와준다. 제시된 용어 외에도 새로운 용어를 추가하면서 나만의 용어 노트를 완성해 가는 과정도 또 다른 재미가 될 것이다.
먼저 읽은 베타리더들의 한 마디
처음 접했을 때 생소한 개념들을 쉽고 자세하게 설명하고 있어 입문자여도 막힘없이 술술 읽을 수 있습니다. _베타리더 양선아 님
컴퓨터 구조, 운영체제라고 하면 왠지 딱딱하고 어렵고 재미없을 것 같다는 편견을 깨게 해 준 좋은 책입니다. _베타리더 윤이찬미 님
전공자에게는 다소 지루한, 비전공자에게는 다소 어려운 주제인데, 쉽고 정확하게 설명하려는 노력에 감탄했습니다. _베타리더 박수빈 님
전공 서적을 공부할 때처럼 지루하고 재미없어 읽다가 포기하는 책이 아니라, 혼자서도 차근차근 끝까지 읽게 되는 책입니다. _베타리더 이준원 님
컴퓨터 구조와 운영체제가 중요한 건 알지만 배울 엄두가 나질 않았는데, 상황을 설명하는 친근한 그림이 많아 쉽게 이해할 수 있습니다. _베타리더 이건우 님
아무리 전공 서적을 읽어도 이해가 안 되고 용어만 둥둥 떠다녔었는데, 이 책을 읽고 머릿속에 흩어져 있던 용어들이 싹 정리되었습니다. _베타리더 박보람 님
추천사
그저 그런 개발자에게는 운영체제와 컴퓨터 구조가 중요하지 않겠지만, 실력 있는 개발자에게는 컴퓨터 구조와 운영체제를 아는 것이 필수라고 생각합니다. 이 책은 컴퓨터 구조와 운영체제에 대해 가장 쉽게 설명하고 있습니다. 책에 녹아 있는 저자의 지식과 경험이 입문자부터 전공생, 주니어 개발자들에게 많은 도움이 될 것입니다. _강민성 님(배달의 민족 개발자)
이 책은 다른 서적들과는 달리, 이해하기 쉬운 그림과 함께 CPU, 메모리, 보조기억장치, 입출력장치 그리고 스케줄러, 가상 메모리, 파일 시스템 등 운영체제의 각 기능이 작동하는 원리를 매우 친절하게 설명하고 있습니다. 소프트웨어 개발자로 성장하려는 사람이라면 일독할 것을 강력하게 추천하는 바입니다. _이민석(현 국민대학교 소프트웨어학부 교수, 전 이노베이션 아카데미 학장)
이 책은 컴퓨터 구조에 대해 아주 기본적인 내용부터 CPU와 하드웨어 작동 원리의 깊숙한 곳까지 비교적 쉽게 설명하고 있습니다. IT 엔지니어링을 목표로 하고 있는 엔지니어라면 꼭 한 번쯤 읽어 보고 기본기를 쌓는 데 도움이 되었으면 좋겠습니다. _조대협(구글 클라우드 엔지니어)
이 책은 처음 공부하는 학습자에게는 좋은 길라잡이가, 이미 공부해 본 학습자에게는 좋은 개념 정리서가 되어줄 거라 생각합니다. 학부 시절로 돌아간다면 전공 수업보다 이 책으로 컴퓨터 구조 공부를 시작하고 싶네요. _ 안수빈(서울대학교 대학원)
그 동안 경험으로 혼공단 휴가 때가 아니라, 본인의 휴가에 맞춰서 미리 미리 준비했으니 말이다.
그리고, 6주 동안 전혀 밀리지 않았다.
점심 먹고 30분씩 꾸준히 읽으니, 밀릴 일이 없다. 거의 2번 읽었는데도 말이다.
책 읽는 습관은 덤이다. :D
책의 구성은 크게 2개의 파트로 되어 있는데, 컴퓨터 구조편(1장~8장)에서는 컴퓨터 내부의 구조와 작동 방법에 대해서 설명하고, 운영체제편(9장 ~ 15장)에서는 운영체제의 필요성과 어떻게 효과적으로 프로세스를 실행하는지 설명한다.
컴퓨터 구조 파트의
Chapter 1은 컴퓨터 구조를 알아야 하는 이유와 컴퓨터의 4가지 핵심부품에 대해서 설명한다.
Chapter 2는 0과 1만 아는 컴퓨터가 데이터를 표현하는 방법에 대해서 배우고
Chapter 3은 프로그래밍 언어와 명령어 구조에 관해서 설명한다.
Chapter 4는 CPU의 구성 요소 및 작동 원리에 관해서 설명하고.
Chapter 5는 멀티 코어와 멀티 스레드와 같이 CPU 성능 향상 기법에 관해서 설명한다.
Chapter 6은 메모리 종류와 캐시 메모리의 원리에 관해서 설명하고,
Chapter 7은 보조기억장치(하드디스크)와 RAID에 관해 설명한다.
마지막, Chapter 8에서는 장치 컨트롤러와 장치 드라이버에 관한 설명이다.
운영체제 파트의
Chapter 9는 운영체제를 알아야 하는 이유와 커널에 관해서 설명하고,
Chapter 10은 프로세스와 스레드, 멀티 스레드에 관해서 배울 수 있다.
Chapter 11은 CPU 스케줄링의 원리와 알고리즘에 관해 설명하고,
Chapter 12는 프로세스 동기화 기법에 관해 설명한다.
Chapter 13은 프로세스의 교착상태가 발생하는 이유와 예방에 관해서 설명하고
Chapter 14는 가상 메모리를 관리하는 원리에 대해서 설명한다.
마지막, Chapter 15는 운영체제가 파일과 디렉터리를 관리하는 방법과 파일 시스템 원리에 관한 설명으로 마무리한다.
각 장은 소주제 2~3개로 구성되며, 분량은 많지 않다.
먼저 '핵심 키워드'를 제시하고 '시작하기 전에'에서는 배울 주제를 설명한다. '말풍선'으로는 기억해야 할 내용이나 질문을 던져 한번 더 정리할 수 있도록 도와준다. '좀 더 알아보기'에서는 추가 설명이 필요한 내용을 담고 있다. 설명이 끝나면 마지막에 '마무리'로 내용을 리마인드하고 확인 문제 풀면 끝.
하루 한시간이면 일주일에 3개장은 충분히 읽을 수 있다.
난이도는 쉽다. 그렇다고 필요성이 낮다는 말은 아니다. 꼭 필요한데, 쉽다는 뜻이다.
시험칠 것이 아니라면, 외울 필요가 없다. 그냥 고개를 끄덕이면서 읽으면 된다. 반드시
특히, 개발자이거나 개발자가 목표이면 무조건 읽어야 한다.
프로그래밍에 도움이 되는 것은 두말하면 잔소리지만, 이 것도 모르고 컴퓨터 프로그래머라고 하면 부끄럽기때문이다. 이제 저는 부끄럽지가 않습니다.
이 책을 읽고나서는 대충 알고 있었던 컴퓨터와 운영체제의 정보들이 확실히 자리를 잡아 지식이 된 느낌이다. 잘못 알고 있는 지식을 수정할 수 있는 것도 빠질 수 없는 장점이다.
혼공학습단에서 혼공컴운이 좋은 점은 혼공단 종료와 함께 완독을 할 수 있는 것이다.
예전의 경우는 마지막 장이 커리큐럼에서 빠진적이 종종 있었다. 충분히 이해한다. 혼공 주제에 따라서 그럴 수 있다. 혼공컴운의 장점을 얘기하는 것이니, 족장님 너무 뭐라하기 없깁니다. ㅎㅎ
혼공컴운은 이해가 쉽도록 그림이 아주 많다. 덕분에 쉽게 이해가 되었다.
책 디자인은 아시겠지만, 들고 다니면서 볼 사이즈는 아니다. ^^
개인적으로 책사이즈는 시원시원해서 정말 마음에 든다.
폰트와 말풍선 그림도 귀엽고 센스 만점이다.
혼공족장님의 노력이면 120% 완주해야 정상인데, 30%대로 머물러서 많이 아쉽지만,
족장님이 아니었으면, 10%도 안됐다는 거 아시죠? 고생 많으셨습니다.
마지막은 저자의 의견에 매우 공감하는 내용으로 마무리하겠습니다.
좋은 개발자는 컴퓨터를 분석의 대상으로 바라볼 뿐, 두려움의 대상으로 바라보지 않습니다. 그래서 컴퓨터에 대한 막연한 두려움은 "근간에 대한 이해 부족"이라고 생각합니다.
2022년 한 해 동안 한빛미디어를 통해 IT와 관련된 많은 책들을 읽을 수 있었다. 사실 비전공자 입장에서 읽을 수 있는 책의 범위가 한정되었기 때문에, 주로 입문이나, 평소에 관심이 있던 분야의 책을 읽다가 12월에는 평소라면 선택하지 않을 책을 선택했다. 제목은 <혼자 공부하는 컴퓨터 구조+운영체제>다.
(아마도) 전공자에게 컴퓨터 구조나 운영체제의 중요성은 굳이 말할 필요가 없다. 하지만 비전공자가 컴퓨터 구조나 운영체제에 대해 알 필요가 있을까? 어릴적 부모님의 명령으로 컴퓨터 관련 자격증을 따기 위해 공부했을 때 비스무리한 분야를 공부한 적이 있었는데 나름의 배경지식으로 잘 써먹는 것을 보면 ‘알아둬서 나쁠 건 없나?’ 싶지만, 정보 홍수 시대에, 그리고 코드를 몰라도 게임이나 앱을 개발할 수 있는 시대에 비전공자가, 기획자가 컴퓨터 구조나 운영체제를 배울 필요가 있을까란 생각과 반대로 어떤 내용들을 다루고 있는지 궁금함과 초급용이라는 출판사의 말이 선택에 용기를 불어넣어주었다.
다행히 책 <혼자 공부하는 컴퓨터 구조+운영체제>는 누군가가 알려주는 것처럼 세세하지만 필요한 내용만, 그리고 어렵지 않게 풀어 설명하고 있다.
책은 크게 나누면 15개의 챕터로 나뉘어져 있다. 물론 이 책을 완벽히 이해했다고 할 순 없겠지만, 단순히 텍스트로만 나열된 것이 아니라, 최대한 이해를 돕기 위해 그림과 도표, 비유와 함게 설명하고 있어 좋았다.
책 <혼자 공부하는 컴퓨터 구조+운영체제>의 제목처럼 책은 컴퓨터 구조, 그리고 운영체제에 대해 다룬다. 큰 그림에서부터 작은그림에 이르는 순서로 다루기 때문에, 컴퓨터 구조를 예로 들자면 이해하는 정보와 4가지 핵심 부품에 대해 이야기를 시작하고, 각각에 대해서, 그리고 그 각각에 대해서도 상세히 풀어나가는 방식이다.
단순히 정보만 나열하고 끝나는 것이 아니라, 그것이 왜 그렇게 만들어졌고 왜 알아야 하는지에 대해서도 이야기를 해주기 때문에 한층 이해하기도 쉽고, 배움에 동기부여도 된다. 잘은 모르지만 상대적으로 깊이 있는 내용을 다루는 것에는 한계가 있는 책이라고 생각한다. 하지만 나같은 비전공자나 컴퓨터 구조나 운영체제에 대해 잘 모르는 전공자라 하더라도, 무엇을 알아야 하고, 모르는 상태인지 알 수 있는 데는 충분할만큼 다른 두꺼운 컴퓨터 구조, 운영에 대해 다루는 책과 구성은 거의 동일하니 말이다.
컴퓨터 구조나 운영체제에 대해 모르는 개발자들도 많다고 한다. 회사에서 요구하는 스펙이긴 하지만, 실제 작업할 때는 상용 엔진들이나 툴이 워낙 잘 되어 있어 특정 분야나 업무가 아니면 몰라도 일을 하는데 문제가 없기 때문이리라. 하지만 이런 상용 엔진이나 툴에서 문제가 생기거나, 원하는 것이 이들이 지원해주는 것이 아닐때 컴퓨터 구조와 운영체제를 알아야 하는데, 평소엔 잘 몰라도 문제가 없는 블랙박스 같은 존재다. 좋은 일로든, 나쁜 일로든 전공자고, 그것을 업으로 삼는다면 언젠간 그것을 열어봐야 하는 시점이 오지 않을까. 거시적으로 보지 않더라도 실력 있는 개발자들이 컴퓨터 구조나 운영체제의 중요성에 대해 이야기하는 것을 비전공자인 나도 알 정도이니 말이다.
그렇다면 <혼자 공부하는 컴퓨터 구조+운영체제> 이 책이나 지식은 전공자나 관련 업무를 진행하는 사람에게만 필요할까? 나 같은 비전공자의 경우에도 컴퓨터 구조나 운영체제에 대해 알아두면 도움이 된다. 알아두면 쓸모있는 지식이랄까, 어쨌든 컴퓨터와 운영체제는 그리 신경쓰진 않지만 우리 생활에 밀접하게 연결되어 있고, 이들이 어떤 성격과 구조로 되어있는지 알아둔다면 컴퓨터와 가까운 사람일수록 더 큰 도움이 될 수 있으리란 생각이 들었다. 이 필요성을 어떻게 설명해야 할까 고민을 많이 했는데, 비전공자에겐 ‘교양’이고, 이 교양 수업은 컴퓨터를 중심으로 돌아가는 세상에서 사고를 확장시킬 수 있는 기회를 제공할 수 있으리라 믿는다.
컴퓨터공학수업에서 중요한 과목들을 꼽으라고 한다면 보통 컴퓨터구조와 운영체제는 반드시 들어가는 과목일 것이다. 하지만 이 두 과목은 학교에 따라 어느정도 차이는 있지만 상당히 어려운 편이고, 처음 배우는 입장에선 실무에서 어떻게 쓰이는지도 잘 와닿지 않는 부분이 있어 다소 진입장벽이 있는 편이다.
이 책은 제목에 걸맞게 이런 컴퓨터구조와 운영체제를 쉽게 풀어서 설명하고 있다.
책의 앞쪽은 컴퓨터구조에 관한 것이고, 뒷부분은 운영체제에 관한 내용이다. 둘 다 첫 챕터에서는 해당 과목을 배워야하는 이유를 말하고 두번째 챕터에서는 전체적인 그림을 소개한다. 그 후에 세부적인 설명으로 들어가는데 배워야하는 이유와 큰 그림을 우선적으로 소개함으로써 목적의식과 방향성을 뚜렷하게 해준다.
각 챕터의 내용이 끝나면 마무리로 해당 파트에서 배웠던 부분을 가볍게 상기할 수 있는 질문들이 있다. 만약 스터디를 한다면 해당 질문들을 한명씩 돌아가면서 답변하는 시간을 가지는 식으로 활용해도 좋을 것 같다. 또한 책의 맨 뒷부분엔 혼공노트가 들어가 있는데 이 노트 역시 스터디를 진행할 경우엔 돌발퀴즈로 쓰기 좋아보였다.
좀 더 심화적으로 공부하고 싶은 사람에겐 약간 아쉬울 수도 있겠단 생각이 들었으나 전체적으로 처음 해당 과목을 접하는 사람들이나 면접등을 앞두고 가볍게 정리하는 사람들에게 도움되는 책이라고 느꼈다.
+ 개인적으로 가장 마음에 들었던 절은 컴퓨터구조에선 5장 CPU 성능 향상 기법과 운영체제에서 14장 가상 메모리였다. 해당 파트들은 전공으로 공부할때 다소 소홀하게 보고 넘겼던 부분이었는데도 이해하기 쉬웠다.
컴퓨터 구조와 운영체제 등 소위 "기본 개념"이 없이 컴퓨터 H/W, S/W를 다루는 것을 직업으로 가지면 성장에 한계가 있다고들 합니다. 이 때문에 컴퓨터(전산) 관련 전공자만 고집하는 회사도 있습니다. 전공자 학생이 이 책을 선택했다면 쉽지 않은 개념과 교수님의 불편한 강의를 보완하고 싶은 마음일 것이고, 비전공자 학생이 선택했다면 자신의 프로그래밍 스킬 블록 아래에 "기본 개념" 블록을 끼워 넣고 싶어서일 것 같습니다. 대견하고 응원합니다!
보통 이공학 분야는 수학과 관련되어 "이해" 중심의 학습이 필요하다고 생각하기 쉽지만, 실상은 모두 외울 것들입니다. 컴퓨터 구조와 특히, 운영체제의 교과서에 나오는 단어, 개념은 은퇴하는 그날까지 알고 있어야 합니다. 해당 개념은 트렌드에 휘둘리는 정보가 아니라 첨단 정보기술을 떠받치고 있는 주춧돌이자 대들보이고, 암기된 개념은 내 IT 경력의 주춧돌이자 대들보가 됩니다.
이 도서는 컴퓨터 구조와 운영체제의 기본기를 익히고 싶은 학생을 대상으로 합니다. 학부 과정에서 배우는 해당 내용의 참고서 정도입니다. 저자도 언급하고 있지만 보다 깊이 있거나 하지 않고 철저히 기본 개념을 쉽게 설명하기 위해 최선을 다한 도서 압니다. 개발자가 되고 싶은 비전공자, 기본 용어조차 어려워하는 학부생, 개발자가 되고 싶거나 컴퓨터의 작동 원리를 알고 싶은 중고대학생에게 적합합니다. 이 도서의 장점을 꼽자면 아래와 같습니다.
1.
영어 단어를 쉽게 외우는 사람도 있지만, 그렇지 않은 상황에서는 어원을 보거나 예문을 함께 곁들이면 조금 쉽게 외워지는 느낌을 받습니다. 이 도서의 각 그림이 그렇습니다. 어려운 개념을 쉽게 설명하기 위해 저자의 이해를 바탕으로 직접 그린 그림과 친절할 설명이 암기에 도움이 됩니다.
2.
단방향 식의 설명이 아닌 아래 링크를 통해 질문을 할 수 있습니다. 궁금한 점, 건의사항, 각종 오타 및 부족한 설명 부탁 등 적극적인 피드백을 받을 수 있습니다.
본 도서는 입문자의 이해를 돕기 위한 많은 그림이 포함되어 있습니다. 이 그림을 주로 활용하여 별도의 TP를 구성해 주입식으로 학습할 수 있도록 동영상 강의를 제공합니다.
https://hongong.hanbit.co.kr/컴퓨터-구조-운영체제/
대상 독자가 입문자로 한정적이고 목적이 철저한 쉬운 설명이기 때문에 책의 깊이를 언급하는 것은 반칙입니다만, 적어도 독자들은 이 책을 덮을 시점에는 이를 알고 있어야 합니다. 또한 이 책의 학습으로 알게 된 내용이 절대적이진 않습니다. 책에 오류가 있지는 않지만 이론과 실제는 조금 다를 수도 있기 때문입니다.
이 책의 내용을 기본으로 하지만, 실제 운영체제 세상을 양분하고 있는 윈도와 리눅스는 나름 철학이 있고 이에 구현체는 조금은 다를 수 있습니다. 예를 들어 프로세스, 스레드와 관련되어 main 함수가 실행된 메인스레드와 서브스레드가 실행 중인 상태에서 메인스레드만 종료되었을 때 양 운영체제의 다른 결과와 이 책의 설명이 매칭이 정확하지 않을 수도 있습니다. 뮤텍스와 바이너리 세마포 비교와 같은 것도 그렇습니다.
보편적이고 추상적인 개념이 그런 것이지 구체적인 사례는 훨씬 복잡하고 다양할 수 있다는 점을 당부하고 싶습니다. 오히려, 이 도서를 선택한 입문자가 앞으로 지속적으로 궁금한 것을 능동적으로 알아가는 과정과 경험이 쌓이며 알게 되는 다양한 구현체의 실제 컴퓨터 구조와 운영체제 내용은 정말 재밌습니다. 기대해도 좋습니다.
컴퓨터는 상당히 오랜 기간 많은 사람의 아이디어가 구현된 집합체 입니다. 그 가운데 핵심이며, 기초라 할것이 컴퓨터 하드웨어와 운영체제 아닌가 싶습니다. 그래서, 이를 이해해 나가는건, 그리 녹녹한 과정은 아닙니다. 전공하는 학생들이 한 학기동안 복잡한 설명을 들으면서 공부하게 되거든요.
오래전, 학교에서 운영체제를 배웠던 기억을 더듬어 보면, 너무 지루하고, 너무 어려웠던 과정이었습니다. 어려운 책에 대한 교수님의 해석 과정 역시 어렵고, 지루하고 따분했으니까요. 하지만, 시간이 지나고, 보니 그때 그 수업이 개발자로서 일하는데 꽤 도움이 되는 과정이었다고 생각하게 되네요.
이 책에서도 언급되어있지만, DMA와 같은 개념은 임베디드 관련 분야에서 일할때, 칩셋의 메뉴얼에서도 다시 보게 되었고, 프로세스, 쓰레드 같은 것도 잊을만 하면 한번씩 사용했었거든요.
책을 읽으면서, 느낀건, 이렇게 쉽게 설명이 가능한 걸, 그때 교수님은 왜 그렇게 어렵게 설명하셨을까 .... 입니다. 아마도, "지식의 저주"와 같은 개념상의 괴리가 있었던게 아닐까 짐작은 해봅니다. 교수님은 너무 잘알고 계신걸 우리는 너무 모르고 있으니, 너무 모르는 사람을 대상으로 아는 사람의 설명이 아는 사람 입장에서 아무리 쉽다 해도 쉬울리가 없겠죠. 그리고 지금 제 입장도 좀 아는 사람의 쪽에 속하니까 설명이 쉽게 느껴지는 것일 수도 있고요. 그런 생각을 하며 책을 보니, 몇몇 개념은 전혀 모르는 사람에게 설명이 더 필요하겠다 싶은 것들이 있었습니다.
그 순간 동영상 강의가 존재한다는 책 표지 모습이 생각 났습니다. "혼공" 시리즈 책은 처음 보는 거라서, 유튜브로 해당 컨텐츠를 찾아보았는데요. 강의가 꽤 많이 진행되어 있었습니다. 이 책을 통해 컴퓨터 구조나 운영체제를 처음 접한 사람이라면, 강의도 함께 보며 이해하는데 수월할 수 있겠다 싶었습니다.
제 경우, '코딩은 "생각의 방법"'이라는 지론을 가지고 있습니다. 어떤 프로그래밍언어를 배운다고 해도, 그 프로그래밍 언어가 추구하는 패러다임과 언어를 설계한 사람의 철학이 그 프로그래밍언어의 근간을 이루고 있고, 패러다임과 철학은 결국, "생각의 방법"이거든요. 게다가 패러다임과 철학의 근거는 운영체제라는 또다른 틀안에서 구현되도록 되어 있습니다. 그래서 운영체제를 이해한다는 건, 좋은 코딩을 하기 위한 근본적인 아이디어 창구를 가지게 되는 것입니다. 코딩 일을 하다보면, 해결해야 할 문제들이 많은데요. 가끔 복잡한 문제를 해결해야 할때, 누군가의 아이디어가 간절하게 되거든요. 그런데 운영체제에 대한 이해가 있으면, 일종의 "힌트"를 얻게 되요.
꽤 오래전에 배웠던 운영체제라는 개념에 대해 그리고, 당시에는 없었던 추가된 개념에 대해, 이런 저런 추억을 떠올리며 재미있게 읽을 수 있었던 책이었던 것 같습니다.
책의 특징에 대해 시작하기 전에 잠시 포인트를 벗어난 고백을 해보자면 사실 본인은 한빛미디어의 혼공 시리즈에 대해 좋은 인식이 있었기 때문에(혼자 공부하는 파이썬이 큰 지분을 가지고 있다), 해당 책을 처음 받았을 때 매우 기대감에 차있었다.
그럼과 동시에 컴퓨터 구조와 운영체제를 정말 한번에 다룬다고? 라는 의심도 있었다.
전공자로써 해당 내용이 대학교 교재로 접했을때 얼마나 두껍고 어렵고 지루한 내용인지 잘 알고 있기 때문에 이 두께와 비전공자까지 커버하는 설명 방식으로 책에 담기에는 매우 어려울 것이라는 생각이 들었기 때문이다.
그래서 기대감과 의심으로 과연 혼공 시리즈가 이번에도 기대감을 만족시킬 수 있을지 한번 보자며 읽기 시작하였다.
[ 역시 실망시키지 않는 쉬운 설명 ]
위에서 본인이 혼공 시리즈에 대해 좋은 인식이 있다고 한 이유 중 제일 큰 부분은 설명이 쉽기 때문이다. 그리고 역시나 이 책도 그러하다.
개발 서적에서 어렵고 이해하기 힘든 내용들이 존재하는건 어쩔 수 없는 일이다. 그럼에도 독자들이 쉽게 느끼게 만들기 위해서 개념서들에서는 여러 방법들을 쓰는데 본인은 그 중 그림과 예시/비유들이 제일 효과적이라고 생각하는 편이다.
해당 책이 그 대표적인 예시라고 들 수 있을 정도로 이를 조화롭게 사용하고 있다고 느꼈다.
예를들어 아래에서는 뮤텍스락과 세마포어를 옷가게의 탈의실로 설명하고 있다. 그림까지 귀엽게, 이 얼마나 귀엽고 와닿는 설명인가?!
그리고, 아래의 CPU 메모리의 입장에서 말하는 것 처럼 주저리 귀엽게 적어둔 설명들도 소소한 재미였다.
(이런게 재미라고? 라는 의문을 가질 수 있겠지만... 개발 서적의 이론 사막에서 이런 소소한 요소들에서 재미를 찾는 본인의 취향이기에 너그러이 여겨주시길...)
[ 쉬운 설명과 달리 꽉찬 내용 ]
비전공자들까지 커버하기 위해 설명을 쉽게 쓰느라 내용이 상대적으로 빈약하지는 않을까? 하는 고민을 한다면 해당 책의 목차만 봐도 아니라는 것을 간단히 알 수 있을 것이다. 사실 책을 읽는 내내 계속 들었던 생각이 "이 책이 내 대학교때도 있었다면 좋았을텐데..." 였다.
대학교 교재 기준으로, 웬만한 중요 내용들은 다 커버하고 있는 기본서이기 때문이다.
만일 내가 되돌아가서 책을 빨리 접했었다면, 대학교에서 컴퓨터 구조/운영체제 강의를 듣기 전에 읽어두어 게임의 치트키를 쓴 것 처럼 교수님 설명이 3배는 쉽게 이해했을 것이다.
그리고, 기술 면접을 준비하고 있다면 해당 책으로 기억이 가물한 부분들을 되새기는데 사용했을 것 같다.
물론, 지금도 늦지 않았으므로 기본서로 두고두고 활용할 것이다 :)
[ 이래도 기억 안해? ]
책이 아무래도 중요한 부분들을 핵심적으로 담고 있기 때문에 중요 포인트들은 기억하고 것이 좋을 것이다.
그것을 알기 때문에 책에서는 반복하고 확인하고 요약하고 기억에 오래남을 팁까지 전수하고 있다.
예를들어 우선은 매 단원마다 마무리로 문제를 제공하여 이해한 내용을 확인하게한다. 그리고, 심지어는 직접 눈으로 보는게 좋으니 유튜브에서 영상도 찾아보라는 조언까지 한다.
혹 들고다니면서 볼 열혈 독자들을 위해 중요 단어들에 대해 한손에 들어오는 노트까지 제공한다.
이쯤되면 "이래도 기억 안할거야?" 이다.
추천 대상
개인적인 아쉬움으로 더 강력 추천하고 싶은 대상이 있다.
바로 관련 수업을 듣는 대학생이다. 교수님이 직접 낸 전공 교재를 사용했던 입장으로써 이렇게 쉽게 이해할 수 있었는데 끙끙댔던 시간이 조금 아까울 정도이다.
그리고, 기본서가 필요하고 부족한 부분을 채우거나 한번 더 확인하고 싶은 전공자들, 그 외에도 비전공자들까지도 추천하고 싶다.
한빛미디어의 혼자 공부하는 시리즈는 이름에 맞게 독학하는 이들에게 안성맞춤인 책이다. 책 한 권을 독학하기 위한 프로그램을 따로 제공하기 때문이다. (학습 사이트 제공, 강의 제공)
이 책은 읽기 쉽고 이해하기 쉬운 말로 설명하고 있다. 그래서 책을 읽으면서 머릿속에서 컴퓨터 구조에 대한 그림을 그릴 수 있었다. 실제로 매 챕터마다 그림도 제공하고 있어서 설명을 쉽게 이해할 수 있었다.
첫번째 챕터 내용에도 나오지만, 개발자는 코드만 잘 짜면 되는 거 아닌가? 라고 생각할 수 있다. 하지만 개발은 결국 컴퓨터와 운영체제 기반에서 코드를 짜는 일이기 때문에 컴퓨터 구조와 운영체제 지식를 우선적으로 익혀야할 필요가 있다. 잘 배운 컴퓨터 구조와 운영체제 지식은 개발자에게 문제 해결 능력을 더욱 향상시켜줄 수 있을 것이다.
이 책은 컴퓨터구조와 운영체제를 공부하고 싶지만 전공 서적이 부담스러운 이들에게 추천한다. 책 한 권으로 여러 부차적인 프로그램까지 얻을 수 있어서 안성맞춤이다!
달마다 그렇듯 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받았습니다.
컴퓨터 공학도 이제 공부해야 할 때가 되서 서평 책으로 저거를 골랐다.
신간은 아닌데 비교적 최근에 출간됐고, 독학용으로 나온거라 괜찮아 보였다.
일단 책 내용은 다른 컴퓨터 구조와 운영체제 내용을 다룬 책은 많이 읽어보지 않아서 내가 비교할 순 없지만, 왠만한 중요한 내용은 정보시간에 배웠던 것을 포함해 다 있는 것 같다.
그래서 이번 서평은 인터넷에서 주문하려는데 책 구성이 좀 궁금한 사람들을 위한 안내서 형식으로 적어보려고 한다.
특별히 찾는 내용이 있다면 책의 목차를 참고하시길.
그리고 책 뒤에 부록처럼 용어가 따로 정리된 작은 책이 붙어있다.
가운데 사진처럼 본책의 용어색인과는 별개로 저 용어노트에 정리된 단어 목차가 존재하고, 마지막 사진처럼 본책의 각 챕터마다 등장한 용어가 정리되어있다.
그리고 본 책의 각 챕터는 한빛미디어에서 자주 보던 오라일리 도서의 짧은 정리 몇줄보다 자세하게 마무리 페이지가 있고, 문제를 내주는데 본책 뒷쪽에 답과 간략한 풀이가 있다.
예전에 한빛아카데미에서 출간한 파이썬 책으로 수업한 적이 있는데 그 책은 수업을 목적으로 나온거라, 답은 강사나 교수에게 맡기는 형식으로 정답지가 따로 존재하지 않았다. 그 외에도 예전에 베타리딩 했던 수학책에서는 부피 감소 및 두께에서 오는 위압감을 줄이기 위해 답지를 QR코드로 찍어 온라인으로 확인해야 했는데, 이 책은 뒤에 붙어있어서 매우 편하다!
아직 정보처리 자격증 같은거는 준비를 안해봐서 그런 자격증이나 면허 대비 및 보충용으로는 관련 문제집에 비해 어떨지는 모르겠지만, 혼자서 공부할 수 있는 수준의 지식은 대부분 다루고 있는 것 같다.
본인이 정가 28000원 혹은 여기서 10% 할인된 가격을 지불하고 이 책의 대부분을 혼자 효율적으로 단기간에 공부할 의지가 있다면 읽어볼만 할 것이다.
안될것같으면 그룹 스터디 용으로도 적절할 것 같고.
실제로 한빛미디어에서도 이 책 시리즈로 온라인 학습단같은거 진행하던데.
하지만, 이번에는 한번 IT 관련 도서를 읽어봐야겠다는 생각이 들었다. 그 이유는 사실 해당 책 목차 부분에 너무나 평소에 궁금했던 내용들이 적혀있기 때문이었다.
먼저 목차부터 살펴 보면 다음과 같다.
Chapter 01 컴퓨터 구조 시작하기
01-1 구조를 알아야 하는 이유
01-2 컴퓨터 구조의 큰 그림
Chapter 02 데이터
02-1 0과 1로 숫자를 표현하는 방법
02-2 0과 1로 문자를 표현하는 방법
Chapter 03 명령어
03-1 소스 코드와 명령어
03-2 명령어의 구조
Chapter 04 CPU와 작동 원리
04-1 ALU와 제어장치
04-2 레지스터
04-3 명령어 사이클과 인터럽트
Chapter 05 CPU 성능 향상 기법
05-1 빠른 CPU를 위한 설계 기법
05-2 명령어 병렬 처리 기법
05-3 CISC와 RISC
Chapter 06 메모리와 캐시 메모리
06-1 RAM의 특징과 종류
06-2 메모리의 주소 공간
06-3 캐시 메모리
Chapter 07 보조기억장치
07-1 다양한 보조기억장치
07-2 RAID의 정의와 종류
Chapter 08 입출력장치
08-1 장치 컨트롤러와 장치 드라이버
08-2 다양한 입출력 방법
Chapter 09 운영체제 시작하기
09-1 운영체제를 알아야 하는 이유
09-2 운영체제의 큰 그림
Chapter 10 프로세스와 스레드
10-1 프로세스 개요
10-2 프로세스 상태와 계층 구조
10-3 스레드
Chapter 11 CPU 스케줄링
11-1 CPU 스케줄링 개요
11-2 CPU 스케줄링 알고리즘
Chapter 12 프로세스 동기화
12-1 동기화란
12-2 공유 자원과 임계 구역
Chapter 13 교착 상태
13-1 교착 상태란
13-2 교착 상태 해결 방법
Chapter 14 가상 메모리
14-1 연속 메모리 할당
14-2 페이징을 통한 가상 메모리 관리
14-3 페이지 교체와 프레임 할당
Chapter 15 파일 시스템
15-1 파일과 디렉터리
15-2 파일 시스템
내가 최근에 읽은 도서 중 가장 목차가 길었던 도서가 아닌가 싶다.
그만큼 많은 정보를 담고 있는 책이라고 생각이 든다. 사실 이 책을 고른 이유도 해당 목차에 내가 궁금했던 내용들이 생각보다 많이 담겨있기 때문이었다.
사실 데이터 분석 업무를 진행하면서 코딩을 할때도 있고 DB 셋팅을 할 때도, 서버 조작을 할 때 등 다양한 IT 업무 환경에 놓일 때가 많다. 하지만, 정작 컴퓨터에 대한 지식이 깊지 않은 나로써 해당 도서는 한 줄기의 빛과 같다고 느껴졌다.
'혼자 공부하는' 시리즈는 서점이나 다른 매체를 통해서 익히 들은 시리즈 도서이지만, 해당 도서를 처음으로 접하게 되었다.
확실히 나처럼 혼자 공부하는 사람들을 위해 특화된 책이라고 생각된게, 중간 중간 해당 내용은 뒤에 나오니 너무 암기하려고 하지 말아라 라는 조언들은 볼 수 있었다. 이러한 부분들이 혼자 공부하는 입장에서는 외로움도 달래 주지만, 좋은 방향으로 독서 or 공부를 할 수 있는 이정표가 되어서 좋았다.
책을 읽어내려가다 가장 감명깊었던 첫 부분은 바로 인코딩 부분이었다.
데이터 분석을 진행하는 초심자 및 비IT전공자들은 처음 인코딩에 대한 개념은 단순하게 컴퓨터가 인지하게 바꿔주는 것으로만 이해하고 넘어가는 사람들이 대부분이다.
하지만, 해당 부분을 읽고 인코딩의 개념을 명확히 이해할 수 있었다. 항상 csv 파일을 load 할 때 컴퓨터가 이해할 수 있도록 encoding을 지정해주고 파일을 불러와서 작업을 했다.
이후, 전처리 완료 후 데이터 셋을 저장할 때도 encoding 옵션을 설정하여 저장하려고 했던 때가 있다.
디코드에 대한 개념이 없는 상태에서 둘 다 같은 개념으로 이해해서 발생했던 실수 중 하나이다. 이처럼 컴퓨터의 근본을 이해하니 기존에 시행착오를 겪었던 오류들이 현저하게 줄겠다 라는 생각이 들게되는 부분이었다.
하여, 지속적으로 해당 도서를 읽어나갈 수 있는 힘이 생기게 되었다.
추가로, 명령어에 대한 부분과 DB 스캔에 대해서 언급을 하고자한다. 둘 다 비슷한 맥락으로 이해했는데, 컴퓨터가 받아들이는 순차에 따라 속도가 개선될 수 있다.
명령어의 순서에 따라 데이터 처리속도가 달라지는 것은 DB 스캔과도 같다. DB에서 데이터를 조회할 때 어떠한 조건을 주느냐에 따라 똑같은 결과여도 속도가 다르다.
index, PK 등 다양한 변수를 고려하여 쿼리를 작성해야 컴퓨터가 보다 쉽고 빠르게 일처리를 진행할 수 있고 그 결과 빠른 속도를 얻을 수 있는 것이다.
나는 해당 도서를 IT 업계에 종사하시는 모든 분들께 강력하게 추천하는 책이 될 것 같다.
* 이 책을 선택한 이유 나는 경영학과 출신으로 국비학원에서 6개월간 교육을 받고 웹 개발자로 취직하여 3년 차에 접어든다. 전공자들은 대체로 1, 2학년 때 컴퓨터 구조나 운영체제에 대해 필수로 학습한다고 들었다. 남들이 하도 필수 과목이다, 개발자라면 반드시 알아야하는 개념이다라는 말을 많이 해서 학점은행제로 컴퓨터 구조와 운영체제 과목을 이수했지만, 학점 은행제 특성상 재밌는 수업과는 거리가 멀어 흥미를 느끼지 못했다. 그 결과, 내 머릿 속에 남은 개념은 zero에 가까운 상태였다. 하지만 가슴 한켠엔 언젠간 공부해봐야지..라는 생각만 갖고 있던 차에 이 책을 만났다.
* 이 책의 구성 핵심 키워드나 말풍선, 좀 더 알아보기, 핵심포인트, 확인문제 등으로 독자의 수준에 맞추어 다양한 깊이로 공부할 수 있게 도와준다. '혼자 공부하는' 이라는 시리즈의 이름과 걸맞게 혼자서도 공부할 수 있게끔 github로 추가 자료를 제공하거나 동영상 강의도 제공한다. 그뿐만 아니라 혼자 공부하다 보면 의지가 나약해지기 마련. 혼공 학습단과 함께 학습할 수 있는 기회도 제공한다.
* 학습 로드맵 컴퓨터 구조 컴퓨터가 이해하는 정보 알아보기 컴퓨터의 4가지 핵심 부품 학습하기 운영체제 시작하기 프로세스와 스레드 이해하기 CPU 스케줄링 기법 학습하기 프로세스와 스레드 관리 기법 학습하기 가상 메모리와 파일 시스템 학습하기
* 책 소개 첫 장에서는 컴퓨터 구조를 알아야 하는 이유에 대해 설명한다. 개발자에게는 문제 해결 능력이 중요하다는 말을 한번 쯤 들어봤을 것이다. 컴퓨터 구조를 안다면 실무에서 문제가 생겼을 때 코드만 아는 사람과는 차이를 보인다고 한다. 당장 주니어 개발자가 크게 신경 쓸 부분은 아닐수도 있지만 주니어 개발자에서 한 걸음 더 성장하기 위해선 서비스의 성능, 용량, 비용도 고려할 줄 알아야 한다고 생각하는데 컴퓨터 구조를 안다면 이런 부분을 스스로 알고 개선시켜 나아갈 수 있다.
컴퓨터나 개발을 공부하면서 조금이라도 관심이 있다면 CPU 나 메모리, 보조기억장치, 입출력 장치 등의 용어를 이미 알고 있으리라 생각한다. 내가 전에 썼던 컴퓨터는 CPU는 I7-7700에 메모리는 16G였다 정도.. 구체적으로 어떤 일을 하는지에 대해 알아보려 한적이 없을 뿐 머리로는 '뭐가 더 좋은지' 정도만 알고 있던 수준이다.
CPU나 RAM의 실물 사진을 보여줘도 흠 그렇군정도겠지만 이 책에서는 누가 봐도 이해하기 쉬운 그림으로 각 역할들을 구분 지어주며 설명을 해주는 부분이 좋았다.
2장에서는 컴퓨터의 표현 방법에 대해서. 정보의 단위부터 비트 바이트 등에 대한 설명도 있고 이진법, 16진법에 대한 설명도 있다. 2진법까지는 흔하게 접할 수 있어 친숙하지만 16진법은 말만 들어도 복잡한 느낌... 61페이지의 이미지에서 친절하게 이해하는 방법을 설명해 준다
문자 집합과 인코딩에 대해서도 학습한다. 국비학원에서 아스키코드의 개념에 대해서 아주 살짝 훑었던것 같은데 이런 게 다 컴퓨터 구조에서 나오는 개념이었구나!
3장은 명령어에 대해서 기계어 어셈블리어 저급언어, 고급언어에 대한 개념을 설명해준다. 기계어 어셈블리어는 학은제로 살짝 맛만 본 정도였는데 현재 내가 쓰는 언어들(자바, 씨샵)과는 너무 달라 난해하게만 느껴졌었다.
소프트웨어 개발자는 자세히 알 필요는 없지만 하드웨어와 밀접한 프로그램 개발자는 어셈블리어를 많이 이용하기도 한다고.
4장은 CPU에 대해서 I3, I5, I7... 정도의 개념만 알고 있었는데 책에는 그런 내용이 없다.. CPU의 구성요소 중 ALU와 제어장치에 대해서나 레지스터 등에 대해 학습한다. 레지스터가 컴퓨터 정리할 때 하는 레지스트리와 유사한 개념인 걸까..?ㅎ (모름)
5장에서는 CPU의 향상 기법에 대해서 4장에선 생소한 용어와 개념들만 줄줄이 쓰여있었다면, 5장은 클럭이라던지 코어, 멀티코어 (드디어 아는 거 나왔다), 스레드와 멀티 스레드 등에 대한 설명이 있다.
책 중간중간에 구조나 모양새가 그림으로 그려져 있어 이해하는데 도움이 됐다.
6장은 메모리와 캐시메모리에 대해서 이건 많이들 들어봤을 RAM에 대한 내용이다. 크면 좋다 정도만 알고 있어서 RAM이란 무엇인지 뭘 하는 건지 알 수 있었다. 전원을 끄면 저장된 내용이 사라지는 저장장치를 휘발성 저장 장치라고 하는데 이게 메모리, 하드디스크나 SSD와 같이 전원이 꺼지더라도 저장한 내용이 유지되는 건 비휘발성 저장 장치! 램에도 종류가 있는지 몰랐는데 고속도로 이미지로 표현하고 있어서 이해가 쉬웠다.
7장은 보조기억장치에 대해서 하드디스크와 플래시메모리(USB를 말하는 거겠지?)에 대한 내용이다. 제일 친숙해서 꼼꼼히 읽은 파트.
RAID에 대해서도 나오는데 이건... 정보처리기사 필기인지 네트워크관리사 2급인지 둘 중 하나를 준비하다가 본 적 있다. 그땐 0부터 6까지 그저 암기하기 위해 노력했지만 각 각이 뭘 의미하는지 알 수 있었다.
8장은 입출력장치에 대해.. 책 초반에 3장 정도까지는 익숙하지 않은 개념들에 대한 내용이라 꼼꼼히 읽진 않았지만 4장부터 아는 개념이 나오기 시작하니 책이 더 재밌게 느껴진다.
그 외에도 14장까지 운영체제, 프로세스와 스레드, CPU 스케줄링, 프로세스 동기화, 교착상태, 가상 메모리, 파일 시스템 등 개발자가 알아두면 반드시 도움이 될 내용들을 담고 있다.
마지막으로.. 경영학과 출신 개발자지만 내가 이러한 컴퓨터 구조와 운영체제에 대한 이해가 있는 상태에서 개발 공부를 했더라면 이해도 더 빨랐을 테고 성장에도 도움이 됐었을 텐데!라는 아쉬움이 조금 남는다. 이것들을 미리 알았다고 해도 내가 모든 지식을 활용하는 개발자였을까?라고 생각해보면 아니라고 확신하기에 ㅋㅋㅋ 그나마 상대적으로 덜 바쁜 주니어 시기?라서 이렇게 따로 책 읽고 공부할 시간이 주어지는 것 같다. 지금 이 순간에 집중하며 배워 나아가기.
그리고... 정보처리기사에도 나오는 내용들이 여럿 있어서 정보처리기사를 준비하는 사람들에게도 도움이 될 것 같다. 실기 시험만 남겨두고 있는 상태라서 정보처리기사 공부 전에 이 책을 2, 3차례 더 읽어볼 예정이다.
정보처리기사 책만 볼 땐 자세한 개념이나 설명들이 없고 한줄한줄 암기해야 했어서 이해도 제대로 못하고 꾸역꾸역 입에 넣은 것 같다. 다방면으로 이론과 개념을 공부해서 고득점으로 합격하기 목표!
책의 사이즈가 커서 들고 다니기엔 힘들지만 책상에 자리 잡고 앉아 읽는다면 큰 이미지와 충분한 여백들이 있어서 문제없을 것 같다.
개인적으로 혼공 시리즈를 좋아한다. 혼자 공부하는 자바, SQL ,자바스크립트 등 다양하게 읽어봤는데 이번에는 컴퓨터 구조와 운영체제라고 해서 기대를 가지고 읽었다.
개발자는 코드만 잘 짜면 되는 거 아닌가?
라는 생각을 나도 했었다. 그러나 시간이 지나면서 생각이 바뀌었다. 코드를 짜면서도 컴퓨터 구조와 운영체제를 제대로 이해하지 못하고 코드를 짠다면 쓰레기 코드가 나올수 밖에 없었다.
그림을 통한 쉽고 빠른 이해
컴퓨터 구조와 운영체제에 있어서 글로만 모든 내용을 설명하는 것은 굉장히 어려운 일이다. 그렇기 때문에 어떤 그림으로 설명을 하느냐에 따라 잘 이해되는 책이 될 수도, 이해하기 어려운 책이 될 수도 있다. 혼자 공부하는 컴퓨터 구조 + 운영체제 책은 그림이 엄청 친근하다. 친절하다. 그래서 컴퓨터 구조를 이해하는데 많은 도움이 된다.
입문자에게는 컴퓨터 구조와 운영체제를 이해하기 위해,
이미 지식이 있는 사람에게는 알고 있는 지식이 맞는지 혹은 이해도를 조금 더 높이기 위해 이 책을 읽어보길 권한다. 쉽게 설명되어 있는 책인만큼 어렵지 않게 읽을 수 있을 것 이다.
나는 컴공 비전공자다. 덕분에 오랜 기간 동안 개발자로 일하고 있음에도, 아직도 생소하고 잘 모르겠다고 생각되는 이슈들이나 용어들에 계속해서 부딪히고 있다.
개발자로서 은퇴하는 그 순간까지도 아마 이 경험은 변하지 않겠지만, 어릴 적에 이런 도서들이 많았으면 좀 좋았을까...
컴퓨터 구조에 대한 큰 그림, 컴퓨터의 주요 부품들(CPU, RAM, Cache, RAID 등)에 대한 자세한 설명들은 '아.. 어릴 적에 조립식 컴퓨터 만들 때 이거 아무것도 모르고 만들었네...' 하는 뜬금없는 추억의 어퍼컷을 날려주었고, 운영체제 파트들은 컴퓨터 구조보다는 좀 더 익숙한 주제들이 다뤄지지만 프론트엔드 개발자로서 직접적으로 운영체제를 크게 다룰 일을 없었기에 잘 모르는 부분들도 꽤 보였다.
해가 갈수록 팍팍해지는 면접과 테스트. CS 관련 문제들을 어렵지 않게 만나볼 수 있는 요즘.
작년에 번역 출간된 '한 권으로 읽는 컴퓨터 구조와 프로그래밍'과 함께 읽고 달달 외우면, CS 지식 인터뷰는 별 이슈 없이 통과할 수 있지 않을까 싶다. 'ㅅ')
이번에 리뷰할 도서는 <혼자 공부하는 컴퓨터구조+운영체제>입니다. 컴퓨터 공학을 전공하지는 않았지만, 예전에 간혹 프로그래밍 관련 책을 보면 컴퓨터 구조나 운영체제에 대해 심도 깊게 다루는 것을 본 적이 있었습니다. 하지만 최근 프로그래밍 분야의 책이나 강의, 블로그 등을 찾아보면 이런 내용들을 간단히 언급하거나 아얘 다루지 않고 "Hello world"만으로 시작하는 경우가 대부분입니다.
물론 최근 소프트웨어 분야에서 컴퓨터구조나 운영체제에 대해 소홀한 부분은 대부분의 디테일은 사용자가 직접 관여하지않아도 잘 작동할 수 있도록 숨겨져 있습니다. 하지만 아는 만큼 보인다고, 개발 실력을 높이기 위해선 하드웨어까지 신경 쓸 수 있어야 합니다.
가령 2차원 행렬에 대한 연산을 프로그래밍 언어로 직접 구현해 본다고 생각해 보겠습니다. 그 중 두 행렬의 덧셈에 대해 구현한다고 생각하면 다음과 같이 구현해볼 수 있다.
#include<vector>usingnamespacestd;vector<vector<double>> add_1(vector<vector<double>> lhs, vector<vector<double>> rhs) { vector<vector<double>> result(lhs.size(), vector<double>(lhs[0].size()); for (size_t r = 0; r < lhs.size(); ++r) { for (size_t c = 0; c < lhs[0].size(); ++c) { result[r][c] = lhs[r][c] + rhs[r][c]; } } return result;}vector<vector<double>> add_2(vector<vector<double>> lhs, vector<vector<double>> rhs) { vector<vector<double>> result(lhs.size(), vector<double>(lhs[0].size()); for (size_t c = 0; c < lhs[0].size(); ++c) { for (size_t r = 0; r < lhs.size(); ++r) { result[r][c] = lhs[r][c] + rhs[r][c]; } } return result;}
두 행렬의 크기가 같아야 한다는 것과 같은 세부사항은 제외하고 보면 두 행렬의 덧셈을 공식대로 구현하였습니다. 위 코드에서는 add_1과 add_2라는 두 개의 함수가 있습니다. 두 함수는 거의 내용이 동일하지만, 반복문의 순서가 약간 차이가 있습니다. add_1의 경우 행에 대한 반복문 (r) 안에 열에 대한 반복문 (c)가 있고, add_2의 경우에는 반대로 열에 대한 반복문 안에 행에 대한 반복문이 있습니다. 이러한 순서의 차이를 시각적으로 표현하면 아래 그림처럼 나타낼 수 있습니다.
두 함수의 차이는 아주 작아 보입니다. 하지만 컴퓨터 구조에 대해 알고 있다면 add_2와 같은 방법은 특별한 이유가 없다면 사용하지 않을 것입니다. 이에 대해 간략히 설명하면, 메모리 상에 있는 데이터를 CPU가 접근해야 할 때 효율적이기 위해 다음 연산에 필요할 것으로 예상되는 변수를 CPU 내부에 위치한 캐시 메모리에 저장하게 됩니다. 이때, add_1의 경우 인접한 메모리를 순차적으로 연산하기 때문에 캐시 메모리에 저장한 데이터가 유효한 정보가 되고, add_2의 경우 멀리 떨어진 메모리를 반복해서 연산하게 되어 캐시에 올라간 정보는 무용지물이 됩니다. 따라서 간단한 내용이지만 일부 연산에 대해 연산량을 줄일 수 있게 됩니다.
과거에는 한정된 자원에서 얼마나 효율적으로 구현할 수 있는지가 개발에 있어서 중요한 항목이었다면, 지금은 넘처나는 자원을 통해 등한시되고 있습니다. 하지만 컴퓨터구조에 대해 학습하고 운영체제의 동작 원리를 이해하는 것은 불필요하게 낭비되는 자원을 줄일 수 있고, 개발 과정에서 필연적으로 마주치게 되는 운영처제나 컴퓨터구조에 대한 용어들을 잘 이해할 수 있도록 도와줍니다.
국내에서 컴퓨터 구조, 운영체제 과목을 대학 강의가 아닌 책으로 접하기 위해서는 여러 대학 교재를 보거나 흔히 공룡책으로 불리는 Operating System Concepts 를 보는 수 밖에 없었다. 후자를 혼자서 독파한 경험으로 효과는 좋았으나 노력 대비 시간이 너무 많이 들었다. 그렇다고 문턱이 낮은 책들은 내용이 빈약하거나 내용의 깊이가 전공을 커버하기엔 부족함이 있다.
사실 이 책을 처음 받았을 때는 컴퓨터 구조와 운영체제 과목을 한데 묶은데 비해 책이 생각보다 얇아서 적잖이 당황했었다. 그러나 내용을 보니 있어야 할 내용은 다 있다. 그래서 이 책은 시간 대비 노력의 중간 지점을 찾는 사람들이 보면 좋을 것 같다. 내용을 이해하는데 너무 많은 노력을 하지 않으면서도 있어야 될 내용은 전부 있다. 책은 절반 분량이 컴퓨터 구조, 나머지 절반이 운영체제 내용으로 구성되어있다.
굳이 아쉬운 부분을 짚어보자면 책이라는 매체 특성상 두 파트 중 하나는 반드시 먼저 배치가 되어야만 한다는 점이다. 모든 내용을 A부터 Z까지 알게 된다는 것은 상당히 의미있는 일이다. 그러나 이 책을 고른다는 것은 정도 보다는 빠른 지름길을 택했다고 본다. 그래서 개발자로써 이 책을 본다면 먼저 운영체제를 모두 보고 컴퓨터 구조에서 필요한 부분은 인덱스로 찾아가면서 보는것이 좋다고 나는 생각한다. 컴퓨터 구조 역시 모두 알면 좋지만, 운영체제 쪽을 더 힘줘서 보면 좋겠다.
최근 자바와 스프링으로 구현하는 동시성 프로그래밍에 대해 집중적으로 학습중이다. 스프링 WebFlux에서 자바 Concurrency로, 자바에서 스레딩으로, 스레드에서 동기와 비동기로, 최종적으로 세마포어까지 다시 파고 들어가고 있다. 이 책으로 운영체제를 다시 한번 빠르게 보는데 많은 도움이 됐다. 내용을 쉽게 풀어주는 삽화 뿐만 아니라 도식이 매우 풍부하면서도 중요한 내용들은 빠짐없이 있다.
짧게 정리해보면 다음과 같다.
-너무 얕은 수준이 아니면서 원서 수준의 독해력을 요구하지 않는다.
-그러면서도 많은 양의 도식과 쉬운 문장으로 풀어나간다.
-꼭 알아야 할 내용은 모두 갖추고 있다.
언젠가 반드시 넘어서야 할 두 과목에 대해 고민하고 있거나, 잘 정리된 내용을 빨리 봐야한다면 이 책을 선택해도 큰 후회는 없을것 같다.
이 세상에는 IT를 업으로 하는 사람들이 존재한다. 그들 중 어떤 사람은 소프트웨어 엔지니어(개발자)일테며, 어떤 이는 인프라 엔지니어 또는 네트워크 엔지니어, DB 엔지니어 등일 것이다. 앞서 언급한 직업군의 공통점은 바로 엔지니어라는 것이다. 이들은 자신이 몸을 담고 있는 분야에서 마주한 '문제'를 해결하기 하는 사람들이다. 즉 엔지니어링이라는 것은 주어진 문제를 해결하는 과정인 것이다.
그런데 소프트웨어 엔지니어가 코딩만 잘한다고 능사일까? 네트워크 엔지니어가 네트워크 이론과 장비 설정에 관련된 커맨드 라인만 잘 다룬다고 과연 좋은 엔지니어라고 할 수 있을까? DB 엔지니어가 데이터베이스에 대한 개념과 이론, 지식만 잘 안다고 과연 DB와 관련된 문제를 잘 해결할 수 있을까? 인프라 엔지니어가 구축한 인프라가 과연 비용 효율적인 결과물일까? 굳이 엔지니어가 아니어도 좋다. 궁극적으로 성능과 용량, 비용을 고려한 최적의 결과물을 만들어 내기 위한 범위에 포함되는 모든 이들에게 기본적으로 필요한 것은 컴퓨터 구조와 운영체제에 대한 지식이다.
컴퓨터 구조와 운영체제에 대한 지식이 없어도 결과물은 충분히 만들어 낼 수 있다. 문제를 해결할 수 도 있다. 하지만 이 지식이 없이는 문제의 근원에 도달할 수 없으며, 근본적인 해결의 실마리를 찾아 낼 수조차 없다. 컴퓨터라는 개체 위에 존재하는 모든 것들-그것이 소드 코드이든, 인프라 설정 파일이든, 네트워크 설정 파일이든, DB이든 중요하지 않다-은 결론적으로 컴퓨터 구조와 운영체제의 이론에 직접 또는 간접적으로 영향을 받을 수 밖에 없기 때문이다. 결국 엔지니어링을 업으로 하는 IT 종사자들은 좋든, 싫든 컴퓨터 구조와 운영체제의 이론을 벗어날 수가 없다. 그것은 운명이고 필연이리라.
그런데, 컴퓨터 구조와 운영체제 이론과 지식은 결코 쉽지 않다. 난해한 용어와 개념들로 가득차 있기 때문이다. 그렇다고 시중에 이들에 대해 쉽게 다루는 책이 마땅치 않다. 그래서 어떻게 공부하라는 말인가? 하지만 다행히도 한빛미디어에서 컴퓨터 구조와 운영체제에 대한 서적을 발간하고야 말았다. 오늘은 그 책에 대해 이야기를 풀어 나가려고 한다.
이 책 자체는 개발자를 위해 절대적으로 필요한 도구로서 컴퓨터 구조와 운영체제를 강조하지만 서두에서 언급했듯이 해당 지식은 결코 개발자(소프트웨어 엔지니어)에게만 필요한 지식이 아니다. 개발자를 위시해서 인프라 엔지니어, 네트워크 엔지니어, DB 엔지니어, 스토리지 엔지니어, 백업 엔지니어 등등. 엔지니어가 아닌 업무를 하는 사람, 예컨대 소프트웨어 아키텍트, 인프라 아키텍트 등에게도 반드시 필요한 지식이 바로 컴퓨터 구조와 운영체제이다.
시중에 유통되고 있는 컴퓨터 구조 또는 운영체제와 관련된 책들이 결코 적은 것은 아니다. 하지만 이 두 가지 주제 자체가 굉장히 딱딱하고 어려운 와중에 결코 쉽게 풀이하고 있는 책들은 없다고 해도 무방하다. 결론적으로 독자의 입장에서 독자의 수준을 충분히 배려하고 이해하지 않은 관점에서 쓰인 책들이 많다는 것이다. 독자의 수준을 어느 정도로 상정했는지 모르겠지만, 아직까지 컴퓨터 구조와 운영체제에 대해 쉽게 접근하기 위한 노력은 결코 만만하지 않다는 것은 누구나 다 공감하리라 생각한다.
각설하고 본 서적은 컴퓨터 구조와 운영체제에 입문하려는 대상을 독자로 상정했고, 이에 따라 쉬운 설명과 다양한 삽화 및 도해로 어려운 개념을 이해되기 쉽도록 풀이해 나가고 있다. 군더더기 없는 설명과 재치 있는 은유를 통해, 각 챕터마다 등장하는 개념을 하나씩 마주하며 어느새 그것을 이해하고 있는 자신을 보고 놀랄지도 모르겠다.
이 서적을 완독했다고 해서 컴퓨터 구조와 운영체제에 대한 모든 개념과 지식을 온전히 흡수할 수 있는 것은 아니다. 하지만 적어도 이 책을 통해 컴퓨터 구조와 운영체제에 대한 두려움과 공포를 극복하고 한걸음 더 나아갈 수 있다면, 그것만으로 소기의 목적을 달성했다고 볼 수 있지 않을까? 이 책의 완독은 결코 끝이 아니라 시작인 셈이다. 본 서적을 통해 컴퓨터 구조와 운영체제에 대한 관심과 흥미가 한층 커지고 이들에 대해 좀 더 제대로 학습하고 싶다는 열망이 타오른다면 그것만으로도 이 책은 본연의 역할을 다했다고 볼 수 있으리라.
컴퓨터 구조와 운영체제는 단연코 쉬운 주제의 학습 대상이 아니다. 그렇기 때문에 이들을 향한 첫걸음을 떼기도 전에 좌절했다면, 그리고 절망했다면 이 책을 통해 다시금 새로운 마음으로 학습을 시작해 보는 건 어떨까?
전공을 아니나 종종 프로그램 속에 들어가 볼 일이 있기도 하고, 자주 랩탑 구매에 관여하기도 한다. 그런데 전공도 아니고 따로 공부를 하고 있지도 않아서 정해진 루트만 이용하고, 컴퓨터 구매시에도 할 때마다 어렵다.
그래서 신청하게 된 이 실무교재, <혼자 공부하는 컴퓨터 구조 + 운영체제>. 평소 내가 알고 싶어했던 기초적인 지식 다지기에 더없이 적합한 내용이였다.
기대 이상의 전문적인 내용이여서 때론 이해하기 힘든 부분도 있었지만,
컴퓨터의 구조를 알기위해서는 데이터 표현 방식, 명령어들, 컴퓨터의 4가지 핵심부품, CPU, 메모리, 보조기억장치, 입출력장치, 운영체제를 이해하기 위한 프로세스와 스레드, 가상 메모리와 파일 시스템, 등으로 구성되어있어서, 체계적인 혼공을 할 수 있게 도와주고 있었다.
각 장마다 마무리 페이지로, 용어정리와 함께 확인 문제로 습득여부를 시험해볼 수 있도록 하고 있었고, 별책으로 용어 노트를 제공해 주고 있었다. 중간중간에 있는 ‘여기서 잠깐’ 박스도 매우 유용하다.
아직은 100% 모두 다 내 것이 되지는 않았지만, 여기저기 열어보면서 필요할 때마다 도움 받고 싶은 교재이다. 강추하고픈 컴퓨터관련 기초다지기 혼공교재이다.
_CPU는 프로그램을 실행하는 과정에서 메모리에 저장된 데이터를 빈번하게 사용합니다. 하지만 CPU가 메모리에 접근하는 시간은 CPU의 연산 속도보다 느립니다. CPU가 연산을 빨리 한다 해도 메모리에 접근하신 시간이 느리면 CPU의 빠른 연산 속도는 아무런 쓸모가 없겠죠? 이를 극복하기 위한 저장 장치가 바로 캐시 메모리입니다._
_모든 프로세스는 운영체제로부터 자원을 할당받습니다. 프로세스마다 필요로 하는 자원은 각기 다르지만, 모든 프로세스가 공통으로 사용하는 자원이 있다면 그건 CPU입니다._
학부 때에 전공필수였던 '컴퓨터 구조'와 '운영체제' 과목은 꽤 어렵게 느껴졌습니다. 그래도 전공서적은 버리지 않았고, 아주 가끔은 회사 일로 찾아보기도 했습니다. 어느새 Java도 Spring 같은 프레임워크에서 쓰는 게 보편적이라 운영체제를 직접 상대할 일이 훨씬 줄어들었고, 퍼블릭 클라우드 기반의 MSA와 쿠버네티스가 흔해지면서 컴퓨터 구조조차 가상 위에 가상 위에 가상인 상황이며 당장은 이들 프레임워크에 능숙해지는 게 우선이 된 듯도 합니다. 그래도 이 프레임워크는 왜 이게 default일까, 왜 저런 기능은 나오지 않을까 같은 궁금증을 가지는 주니어 개발자와 엔지니어가 많을 겁니다. 그러한 니즈에 딱 맞는 책이 나왔습니다.
이 책이 제가 대학 다니던 시절에 있었다면 얼마나 좋았을까요? 더군다나 운영체제는 영문 원서라서 골치가 정말 아팠던 기억이 납니다. 나중에 읽어 보니 어차피 기술용어라 그냥 읽히는 수준이었건만 수업으로 들을 때에는 정말 힘들었습니다. 더불어 이 책에 나오는 그림은 정말로 이해에 도움이 됩니다. 전공서적의 그림들은 현학적으로만 느껴졌는데, 이 책의 그림들은 보면서 납득이 됩니다.
하지만, 분량이 전공서적의 절반 정도이다 보니 내용이 꽤 압축적입니다. 소견이지만, 이 책을 보고 RAID를 처음 접한 독자가 이 개념을 이해하지는 못할 겁니다. 물론 이 정도 분량으로 이 책보다 더 쉽게 쓰기는 힘듭니다. 아마도 그렇기에 혼공 홈페이지를 통해 이해를 돕는 게 아닐까 합니다.
2022년 9월 12일 기준으로 강의 영상이 모두 올라오지는 않았습니다. 몇 개를 보니 책에서 다루는 개념을 보다 친숙하게 느끼게 해줍니다. 보통 노력이 아닙니다. 영상 완결이 기다려집니다.
이 책은 컴퓨터공학도로서 '컴퓨터 구조', '운영체제' 과목 이수에 어려움을 겪거나 예습하려는 이에게 적극 권합니다. 컴퓨터공학도가 아니더라도 프로그래밍의 세계에 들어와서 이런 저런 교육을 받고 토이 프로젝트에서 코피를 쏟는 이에게도 권합니다. 스스로를 불안하게 하는 '깊이'를 채우는 데에 도움이 크게 될 겁니다. 이 책과 더불어 소프트웨어공학, 데이터베이스에 여력이 있다면 네트워크 관련 도서를 최신순으로 검색하여 골라 보면 어지간한 바탕은 다지는 셈입니다. 그후에는 실전 경험입니다.
대학교에서 컴퓨터를 전공하면서 가장 어렵게 느껴졌던 과목이 바로 '컴퓨터 구조'였다. 교수님의 설명도 이해가 되지 않았고, 아무리 책을 봐도 친절한 설명을 찾기 어려워 처참히 망했던 과목이자, 오래된 숙원 같은 존재였는데 한빛 미디어에서 최근에 혼자 공부하기 좋은 컴퓨터 구조/운영체제 책을 발간했다고 해서 기쁜 마음으로 리뷰를 남겨보려고 한다.
우선, 여타 책과는 다르게 컴퓨터 구조와 운영체제의 내용이 책 한 권에 들어가있는 점이 눈에 띈다. 전공생들 혹은 IT 직종 지망생이라면 필수적으로 익혀야 할 중요한 두 과목을 한 번에 컴팩트하게 공부할 수 있다는 점이 신선하고 좋았다.
책의 첫 부분인 1장~8장에서는 컴퓨터 내부의 구조와 작동법에 대한 설명으로 이루어져있다. 프로그래밍의 기본 작동 원리를 이해하고 문제 해결 능력을 기를 수 있는 부분으로, 자칫 어렵고 지루해질 수 있는 기술 부분을 쉽고 재미있게 설명해주고 있었다.
나머지 9~15장에서는 운영체제의 필요성부터 프로세스, 가상 메모리에 관련된 전반적인 부분을 다루고 있다. 다양한 예시와 설명을 통해 고난도의 지식들을 재밌게 공부할 수 있는 책이라고 느껴졌다. 줄글로만 이루어진 설명 대신 여러 그림들이 설명을 도우며 어려운 개념들도 혼자서 충분히 소화할 수 있게 구성이 되어 있었다.
특히 컴퓨터 구조가 어려운 입문자들에게는 무조건 추천하고 싶은 도서로, 내가 대학생으로 돌아간다면 반드시 이 책을 통해서 컴퓨터 구조와 운영체제를 공부하고 싶을만큼 공부 의욕이 샘솟는 책이었다.
컴퓨터 전공자라서 컴퓨터구조, 운영체제는 학부생 때 이미 지겹게 들었던 수업내용이다. 그럼에도 이 책을 선택해서 읽은 것은 대학 때의 기억이 가물가물해지기도 했고, 전공자임에도 용어나 개념을 막상 물어보면 제대로 대답하지 못했던 경험들이 생각나서 한번쯤은 다시 복습해보고 싶었다.
그렇다고 대학교 전공책들을 펼쳐서 읽어볼 용기는 나지 않았고(이미 버려서 책이 없기도 하다) 개념들을 재밌게 복습할 한 권의 책이면 족했다.
한빛미디어에서 출간하고 있는 "혼자 공부하는~" 시리즈는 쉽게 이해할 수 있는 자습서로 유명하다. 주변 동료들이 파이썬 언어를 공부한다고 한창 혼자 공부하는 파이썬 책을 사다가 독학하면서 마스터하는 모습들을 봐서 믿고 볼 수 있는 IT 도서라는 좋은 이미지가 박혀있었다.
그런데 컴퓨터구조, 운영체제를 대학 전공 때 교수님들이 좀 난해하게 가르쳐 주셨던 기억이 있어 마냥 어렵다는 느낌이 있어 과연, 쉽게 풀어낼 수 있을까 라는 의구심을 가지고 책을 읽었다.
이 책에 담긴 내용은 컴퓨터 구조 개요, 컴퓨터에서 인식하는 0과 1의 이진법, 문자집합과 인코딩, 소스코드와 명령어에 대한 이해, CPU와 작동원리, 레지스터, 명령어 사이클과 인터럽트, CPU 설계기법, 명령어 병렬처리, 메모리, 주소공간과 캐시메모리, 보조기억장치, RAID, 입출력장치, 운영체제, 프로세스와 스레드, CPU 스케줄링, 동기화, 교착상태, 가상메모리와 페이징, 파일시스템 등 정말 전공자들이 다루는 내용들을 다양하게 담고 있다.
이 책의 좋은 점은 그림 도식화가 예쁘고 귀엽게(?!) 되어 있어 편안하게 읽힌다는 것이다. 전공책들의 그림 도식화는 딱딱하고 다소 눈에 들어오지 않았는데 IT 입문자부터 이해할 수 있도록 눈높이를 독자에게 맞게 구성하다보니 그림도 아기자기하다. 책 내용도 이해가 쉽도록 비유가 많이 들어가있고 구어체처럼 쓰여있어 강의를 듣듯이 술술 읽히고 각 장마다 핵심포인트를 키워드로 딱딱 요약하고 확인문제까지 있어 독학, 스터디 교재 등등 다양하게 활용하면서 공부할 수 있을 것 같다.
용어노트도 있어 취준생, 전산직 공무원 준비생 등 면접을 준비하는 사람들에게도 도움이 많이 될 것 같다.
요새는 개발자 연봉이 높아져서 너도나도 개발을 시작하는데, 단순히 개발언어만을 다루는 것 뿐만 아니라 내가 짜는 프로그램이 컴퓨터 내부적으로 어떤 구조로 되어 있고 어떤 원리로 동작하게 되는지를 이해를 해야 정말 수준높은 프로그래머가 될 수 있다고 생각한다. 그러려면 컴퓨터구조, 운영체제는 어느 정도 알고 있어야 한다.
그러면 IT분야에 뛰어들 사람들은 이 책을 한번쯤 읽어보는 것을 추천하고 싶다.
이 책은 연계된 무료 유투브 강의도 있어 강의를 들으면서 책을 읽어도 된다. (전공자는 사실 책만으로도 이해가 잘 된다)
이 책은 컴퓨터 구조와 운영체제가 한권의 책으로 구성되어 있어서 대학에서 전공으로 관련 공부를 해야 하는 입문자들이거나 SW개발을 시작하는 비전공자들한테는 훌륭한 입문서이다.
적절한 예시와 이해하기 쉬운 그림으로 인해 비전공자도 쉽게 이해를 할 수 있도록 구성되어 있습니다.
많은 프론트, 백엔드 SW개발자들이 컴퓨터 구조에 대해서 어려워서 두려움을 가지고 있으나 이 책을 한번 본다면 그 두려움이 많이 줄어들 것이다. 그리고 보다 높은 단계의 개발자로 성장하기 위해서는 반드시 알아야 할 컴퓨터 구조와 운영체제를 눈높이 맞게 잘 설명해 주고 있는 책이다.
주니어 개발자들이랑 이야기를 하다보면 전공자들도 컴퓨터 구조나 운영체제에 대해서 자세히 모르고 있는 경우가 많았고 비전공자들은 굉장히 어려워하고 있었는데 이 책 한 권이면 그런 것에 대해 어느정도 해소될 수 있을것으로 보입니다.
용어 정리도 잘 되어 있어서 용어를 잊어버렸을 경우 용어 노트를 통해 쉽게 찾아서 확인할 수도 있다.
책의 구성은 1~3장은 컴퓨터 구조를 알아야 하는 이유와 컴퓨터 작동에 대한 큰그림 형태의 구성으로 되어 있습니다.
4~8장까지는 컴퓨터 핵심부품인 CPU,메모리, 보조기억장치, 입출력 장치에 대해 설명을 하고 있습니다.
9~10장은 운영체제가 관련된 내용으로 프로세스와 스레드 관련 내용에 대해 설명을 하고 있습니다.
11~13장은 CPU 스케줄링 및 프로세스 동기화와 관련내용에 대해 설명을 하고 있습니다.
14~15장은 가상메모리 및 파일 시스템에 대해 설명을 하고 있습니다.
이 책은 처음부터 순차적으로 학습해야 합니다. 그래야 쉽게 이해할 수 있습니다.
전공자는 알고 있던 정보를 좀 더 확실하게 내 것으로 만들 수 있고 비전공자들한테는 어려웠던 컴퓨터 구조와 운영체제를 좀 쉽게 이해시켜줄 수 있는 책이어서 SW개발자들은 반드시 읽어야 할 책으로 추천합니다.
Chapter 01 컴퓨터 구조 시작하기 컴퓨터 구조의 큰 그림과 공부해야 하는 이유를 설명해준다. 책에서도 설명되어있지만 컴퓨터 구조는 컴퓨터공학과의 전공 필수과목 중 하나이며 대부분의 채용 공고에서 컴퓨터구조를 중요시 여긴다. 서울대학교 컴퓨터공학과 교과목 정보를 살펴보면 2020입학 기준으로 컴퓨터 구조는 전공필수 과목이지만, 운영체제는 아니다. 덧붙여 개발자가 컴퓨터 구조를 알아야 하는 이유는 본인이 만든 제품이 어느 하드웨서 돌아가는지는 파악해야 한다고 생각하기 때문이다. 하드웨어 이해도가 높다면 코드를 작성할 때 처음부터 효율적인 알고리듬을 설계할 수 있으며 이는 최적화 및 성능과 연결된다. 가령 본인이 만든 제품이 대박이 나고 온라인에서 동시 접속을 늘려야 하는 경우가 올 때, 자기 제품이 하드웨어에서 어떻게 동작하는지 알고 있다면 간단한 소프트웨어 조작만으로도 최적화할 수 있고 이는 장기적으로 개발 비용을 엄청 절약할 수 있다. 또 대표적인 예시로 최근 하드웨어서 캐시 같은 부분 때문에 왠만한 경우에서는 해시맵 보다 배열을 쓰는게 훨씬 빠르다. 단순하게 공간복잡도만 따져서 해시맵을 쓴다면 이런 부분을 간과할 수 있다.
Chapter 02 데이터 컴퓨터가 데이터를 이해하는 방법과 단위에 대해 알아본다. 결국 컴퓨터는 기계이기 때문에 모든 데이터는 0과 1로 이루어져있다는 사실을 항상 기억하고 있어야 한다.
Chapter 03 명령어 컴퓨터는 명령어를 처리하는 기계이고, 프로그래머들이 작성한 모든 코드는 결국 명령어 형태로 변환된다. 즉, 챕터2에서 언급한 0과1로 바뀐다는 것인데 이것만 봐서는 뭔 말인지 알 수가 없다. 이를 번역한 언어가 어셈블리어다. 프로그래머가 어셈블리어를 볼 필요도 없고 배울 이유도 없다고 주장하시는 분도 있다. 물론 어셈블리 레벨까지 내려가서 코딩하는 일은 사실상 없을 것이다. 그러나 최종적으로 탑급 프로그래머가 되기 위해서는 컴퓨터가 어떻게 동작하는지를 알아야 된다고 봅니다. 물론 어셈블리어를 봐야하는 프로그래머는 전체 중 약 5%도 안될 것이다. 그러나 다시 한번 말하지만 컴퓨터는 명령어를 처리하는 기계이고, 모든 데이터는 0과 1로 이루어져서 동작한다.
Chapter 04 CPU와 작동 원리
어찌보면 컴퓨터구조에서 가장 중요한 챕터이다. CPU 내부에서 계산을 담당하는 ALU의 동작 방식과 제어 장치, 레지스터에 대해 설명한다. 책에서 간략한 그림으로 설명을 잘 해두었지만, 좀 더 직관적인 이해를 위해서는 영상이 좋다고 판단한다. 이에 대해 자세한 설명을 해준 영상을 소개하고 넘어가도록 한다. 유튜브 bRd 3D : CPU는 어떻게 작동할까? https://youtu.be/Fg00LN30Ezg
Chapter 05 CPU 성능 향상 기법 챕터의 제목이 살짝 애매한 파트이다. 빠른 CPU를 위한 설계 기법과 명령어 병렬 처리 기법에 대해 알아본다. 즉, 프로그램 성능 향상이 아닌 CPU 성능 향상이고 이를 위해 현대 CPU에서는 어떻게 동작하는지를 보여준다. CISC와 RISC에 대해 설명해주는데, 이는 현재 가장 좋은 CPU 양대산맥을 이루는 Intel과 ARM의 차이점을 말해줍니다. Intel CPU는 CISC 기기이며, ARM 기반 CPU는 RISC입니다. 이 2개의 작동 방식을 다르기 때문에 잘 알아두면 나중에 CPU 선택할 때 좋다.
Chapter 06 메모리 CPU와 더불어 중요한 챕터다. 결국 프로그램은 입력을 받아 메모리에 적재하고 CPU에서 계산하여 다시 메모리에 저장 후 출력하는 과정을 거친다. 메모리에 데이터가 어떻게 저장되고 CPU에서 이 데이터를 가져다 쓰기 위해서 어떤 과정이 이루어지는지 알 수 있다. CPU가 메모리에 접근하는 속도는 레지스터에 접근하는 속도보다 느리기 때문에 캐시 메모리를 사용하는데, 이 챕터에서는 캐시메모리가 어떤 것인지 어떻게 동작하는지를 자세히 알 수 있다.
Chapter 07 보조기억장치, Chapter 08 입출려장치 7,8 챕터는 컴퓨터가 기본적으로 동작 방식 이외에 주변 장치들에 대해 설명해준다. 알아두면 좋은 내용이지만 앞의 챕터들에 비해서는 중요도가 조금 떨어지긴 한다. 가볍게 읽고 넘어가면 좋은 챕터들이긴 하다. 여기까지 읽으면 컴퓨터 구조에 대한 설명이 끝이난다.
책에서는 아래와 같이 2가지를 제안한다. 1. 직접 컴퓨터 부품들 찾아보기 2. 특정 제품 분석하기 개인적으로는 단순하게 그냥 컴퓨터 부품을 사서 조립해보기로 귀결되는 느낌이다. 내 컴퓨터를 더 좋은 컴퓨터로 업그레이드 하기 위해 제품을 사면 결국 그 제품에 대한 스펙을 알아보게 되고 분석하게 된다. 더 나아가서 컴퓨터 제품을 만드는 회사의 발표 영상을 보는 것도 도움이 된다. 대표적으로 ARM나 Apple에서 새로 발표하는 제품에 대한 성능에 대한 부분이다.
Chapter09 운영체제의 큰 그림 이 책에서 가장 중요한 파트가 시작된다. 개인적으로는 컴퓨터 구조와 운영체제 중 하나를 선택해서 공부하라면 운영체제다. 프로그램은 운영체제 위에서 동작하기 때문에 운영체제에 대해 알아야 한다. 운영체제가 뭔지 모른다면 컴퓨터 사서 전원키면 윈도우가 당연히 실행되는 줄 안다. 물론 현재 운영체제 시장의 약 90%는 윈도우이기 때문에 일반 사용자들 입장에서는 상관없지만, macOS가 점점 10%까지 올라오고 있기 때문에 차이점을 알고 있어야 한다. 챕터1과 마찬가지로 운영체제에 대한 큰 그림에 대해 설명하며, 책에서는 그냥 지나갔지만 부팅이 무엇인지 알아두면 좋다. 운영체제 과목 중간고사 혹은 대학원 컴퓨터 공학과 단골 질문 중 하나이기 때문이다.
Chapter 10 프로세스와 스레드 대부분의 운영체제에서 프로세스와 스레드를 구분하지만, 리눅스에서는 명확하게 구분하지 않는다. 이 책에서는 그 이유를 리누스 토르발스의 메일을 인용하여 설명해준 점이 좋았다. 간단하게 실행 중인 프로그램을 프로세스, 프로세스를 구성하는 실행의 흐름 단위를 스레드라고 한다. 프로세스와 스레드의 차이점은 신입 개발자들 단골 질문들 중 하나이다.
Chapter 11 CPU 스케쥴링 모든 프로세스는 CPU를 필요로 하고 먼저 사용하고 싶어한다. 그러나 CPU 자원을 할당하는 것은 한정되어 있기 때문에 어느 프로세스는 나중에 받을 수 밖에 없다. 즉, CPU 자원 할당을 뒤늦게 받는 프로세스는 동작이 느리다는 뜻이다. CPU 스케쥴링을 이해하면 프로세스 우선순위 높이는 방식을 알 수 있으며, 이는 본인이 만든 프로그램 성능 향상을 어떻게 할 수 있는지 깨닫는다. 문제는 우선순위를 높이는 방식이 항상 좋은 것만은 아니라는 점을 알아두어야 한다.
Chapter 12 프로세스 동기화 현대 프로그래밍은 결국 병렬처리로 갈 수 밖에 없다. 대규모의 데이터를 빠르게 처리해야 하는데, CPU 자원은 한정적이기 때문이다. 이 챕터에서는 간략하게 설명해주었지만, 프로세스 동기화와 처리 방법에 대해서는 동시성 프로그래밍 책을 추천한다.(molonlabe.tistory.com/32)
Chapter 13 교착 상태 흔히들 말하는 데드락. 식사하는 철학자 문제를 그림으로 잘 설명해주었다.
Chapter 14 가상 메모리 운영체제의 가장 핵심적인 역할 중 하나다. 지금까지 컴퓨터구조와 운영체제를 알아야 하는 이유는 프로그램 최적화와 성능과 직결되기 때문이다. 그 중 핵심적인 역할을 하는 부분이 가상 메모리다.
Chapter 15 파일 시스템 USB 포맷을 해봤다면 NTFS와 ext 포맷 중 선택하라는 것을 본 적이 있을 것이다. 어떠한 차이가 있는지 설명해준다.
최근에 성능과 최적화 분야에 관심이 많아서 그런지 책을 굉장히 재밌게 읽었다.
물론 현재 맡고 있는 업무에 바로 직결되는 부분은 없기 하지만 일부 도움되는 부분은 있었다.
다른 개발자 동료들이 단순히 면접용 질문으로 공부하지 말고 근본을 파고들어 공유하는 문화가 발달했으면 좋겠다.
이번에 리뷰할 책은 혼자 공부하는 컴퓨터구조 + 운영체제라는 책 입니다. 최근 대학원 졸업을 하고, 최근 많은 IT 기업에 면접을 다니고 있습니다. 면접에서 컴퓨터 구조와 운영체제에 대한 질문을 받은 적이 있는데, 한번도 배우거나 공부해본 적 없는 내용이다보니 하나도 대답을 못한 적이 있습니다. 데이터 분석 + AI 엔지니어쪽을 희망하더라도, 기본적인 컴퓨터구조나 운영체제쪽은 알아야겠다는 생각에 해당 책을 읽기로 마음먹었습니다.
해당 책의 구성은 컴퓨터 구조(1~8장), 운영체제(9~15장)으로 구성되어있습니다. 전체 페이지는 500페이지로 양이 생각보다 많은 편입니다. 좀 더 세부적인 내용 구성은 아래와 같습니다.
1~3장 : 컴퓨터 구조를 알아야하는 이유 및 구조에 대한 그림, 작동 방법
4~8장 : 컴퓨터의 핵심 부품 : CPU, 메모리, 보조기억장치, 입출력장치
9~10장 : 운영체제, 프로세스와 스레드, 멀티프로세스와 멀티스레드
11~13장 : CPU 스케쥴링, 동기화
14~15장 : 가상 메모리 관리, 파일 시스템
생각보다 양이 많아서 아직 내용은 다 못봤고, 관심이 있는 9~10장 내용을 먼저 보기 시작했습니다. 읽으면서 좋았던 점이 그림이 많아서 이해하기가 쉬웠고, 마무리로 학습문제가 있어서 중고등학교때 교과서를 읽는 느낌을 받았습니다.
책의 표지에 개발자에게 필요한 전공 지식을 습득하고 싶을때, 기술 면접을 제대로 준비하고 싶을때라는 표현이 있는데, 굉장히 맞는 표현으로 느껴졌습니다. 기술 면접을 준비하는 많은 분들에게 도움이 될만한 책인 것 같고, 기술 면접을 준비하지 않더라도 해당 분야를 처음 공부하는 사람들에게 많은 도움이 되는 책 같습니다.
- 개발자가 되기 위해 프로그래밍 언어와 관련된 공부를 하는 사람은 많이 있습니다. 코드를 작성하고 잘 동작하는 것이 중요하기 때문이죠. 하지만 컴퓨터 구조와 운영체제까지 공부하는 사람은 흔치 않습니다. 이를 몰라도 코드를 작성하는데 큰 문제는 없기 때문입니다.
- 하지만 어떤 문제가 발생했을 때, 컴퓨터 구조와 운영체제를 아는 것이 문제 해결에 더 빠르고 쉬운 길을 제공하는 경우가 많습니다. 키워드만을 알고 있더라도, 어디가 문제인지 파악하는데 더욱 효율적인 셈이죠. 또한 기술면접에서 간단한 CS 질문에 대해 답을 못하는 것은 매우 치명적이기 때문에 이를 위해서도 공부하는 것이 필요합니다.
## 혼자 공부하기 좋은 특징
- 컴퓨터 구조와 운영체제 전공 도서를 보면 빽빽한 텍스트에 지레 겁을 먹기 좋습니다. 외워야 할게 매우 많아 보이기도 하죠. [혼자 공부하는 컴퓨터 구조 + 운영체제, 혼공컴운]은 혼자 공부하기 좋은 구성을 가지고 있습니다.
### 꼭 필요한 내용만을 담았다
- 컴퓨터 구조와 운영체제는 보통 두 권의 책으로 공부합니다. (Mano의 컴퓨터 시스템 구조와 Abraham의 운영체제, 보통 공룡 책이라 부르죠) 그만큼 공부할게 많고 알아야 할것도 매우 많습니다.
- 하지만 혼공컴운은 입문자의 입장에서 두 권의 책에서 반드시 알아야 하는 것들만 녹여내 부담스럽지 않은 분량으로 구성되어 있습니다.
### 충분히 많은 그림으로 상황을 설명한다
- 딱딱하고 복잡한 설명 대신 다양한 상황을 그림과 함께 설명하고 있어, 책에서 설명하는 내용을 더욱 쉽게 이해할 수 있습니다.
- 또한 간단하고 재밌는 예시로 비유적인 학습이 가능한 것도 장점 중 하나입니다.
### 반복학습이 가능한 구조
- 각 챕터는 개념에 대한 설명 -> 키워드로 정리하는 핵심 포인트 -> 확인 문제로 구성되어 있습니다. 상대적으로 많은 내용을 먼저 학습하고, 짧은 키워드로 핵심 내용을 정리한 다음, 확인 문제를 통해 마지막으로 복습하고 있어, 보다 오래 기억될 수 있도록 잘 짜인 구조가 큰 장점입니다.
## 대상 독자
- 컴퓨터 구조와 운영체제를 한 번도 공부하지 않았던 개발자나, 개발자가 되고 싶은 예비 개발자가 읽기에 아주 적합한 도서라고 생각합니다.
벌써 네 번째 읽어보는 혼공 시리즈 책입니다. 이번에는 컴퓨터 구조와 운영체제를 주제로 나왔네요. 저는 솔직히 혼공 시리즈가 너무 쉽다는 이유로 별로 좋아하지 않았습니다. 전공자 입장에서는 더 세부적인 걸 원하게 되는 것 같습니다. 그러나 몇몇 다양한 책을 읽어보니 혼공 시리즈만큼 읽기 편한 책이 없었습니다. 이제는 비전공자 또는 막 공부하기 시작하는 전공생에게 너무 도움이 되는 시리즈라고 느끼고 있습니다.
컴퓨터 구조를 처음 공부하게 되면 architecture를 ARM 또는 RISC-V로 배우게 되는데 이 책은 입문자를 대상으로 하니 그런 어려운 지식은 거의 배제되어 있습니다. 너무 디테일하게 CS 지식을 알려주는 책은 아니라는 겁니다. 만약 이 책이 디테일하고 쉽게 설명되었더라면 책 두께가 어마어마했을 것입니다.
정말 꼭 필요한 필수 요소 즉, 핵심만 들어가 있으며 공부하면서 쓸데없는 고민을 하지 않게 해줍니다. 그런 점에서 저는 이 책이 매우 읽기 쉬웠다고 생각합니다.
혼자 공부하게 되면 자신이 공부한 지식이 제대로 머리에 남았는지 알기 쉽지 않습니다. 그렇기에 공부한 후에 지식을 점검하는 것은 꼭 필수라 생각합니다. 이 책은 각 장의 마지막에 마무리로 정리를 다시 해주고, 확인 문제를 통해 제대로 공부했는지 점검할 수 있게 해줍니다. 이게 혼공 시리즈의 장점이라 생각합니다.
책의 맨 끝에 부록으로 혼자 공부하는 사람을 위한 혼공 용어 노트가 있습니다. 정말 별거 아니지만, 정말 출판사가 혼자 공부하는 사람을 위해 노력하고 있다는 모습이 보여서 재밌기도 하고, 이 책을 읽는 사람에게는 도움이 많이 되겠다고 생각했습니다.
컴퓨터 구조와 운영체제 수업을 선행 학습해보고 싶은 2학년 전공생에게 추천합니다. 제가 컴퓨터구조, 운영체제 수업을 들을 때 이 책이 왜 없었는지 아쉽기만 합니다. 그때로 돌아간다면 수업보다 이 책으로 먼저 공부를 시작했을 것입니다.
또한, 요즘 많은 비전공자들이 국비 학원 또는 다양한 교육 프로그램을 통해 개발을 공부하고 있는 걸로 알고 있습니다. 그러나 그런 프로그램에서는 CS 공부를 정말 간단하게 하는 경우가 많은 것 같습니다. 솔직히 저는 그 정도의 공부로는 부족하다고 생각하는 사람으로서 프로그램의 수업을 듣되, 꼭 책도 읽어보라고 권합니다. 나중에 다시 책 추천할 일이 있더라면 이 책으로 컴퓨터구조와 운영체제를 공부해보라고 할 것 같습니다.
책 신청 이유개발자로서 요즘 같이 이직 준비 및 면접관으로써 참여 시에 CS 지식이 점점 더욱 필요한 시기인 것 같아서 공부도 하고 좀 더 깊이 있는 개발자로 성장하고 싶어서 신청하게 되었습니다.
목차컴퓨터 관련은 01 ~ 08챕터까지이고
운영체제 관련은 09~15챕터까지입니다.서평큰 챕터는 아무래도 책 제목처럼 컴퓨터, 운영체제로 나뉩니다.
이 책에서는 그래도 혼자 공부하는 시리즈라서 다양한 가이드가 있습니다.
이 책에서는 학습 로드맨을 제시를 해줍니다. 학습에 있어서 한눈에 어떤 파트가 중요한지 알 수 있어서 좋았던 것 같습니다.그리고 내용 중에 이해하기 쉽게 도표나 서식 도형 등 및 강조되는 내용은 볼드 처리되어 있어서 더욱 이해하기 좋았습니다.
이렇게 메인보드에 CPU, 메모리, 시스템 버스랑 보조기억장치, 입출력 장치들이 어떻게 연결되어 있는지 그림으로 설명이 잘되어 있어서 더욱 이해하기가 좋았습니다. 이게 혼공 시리즈의 장점인 것 같아요.
학부시절에 십육 진법 손가락으로 외우는 방법 또 그림으로 보니 더욱 새롭네요.
그리고 해당 책에서는 좀 더 알아보기 파트에는 해당 내용에서 좀 더 보충 설명이 있어서 해당 파트에 대해 좀 더 이해하기 좋았어요. 저는 이렇게 스택과 큐가 은근히 헷갈릴 수도 있는걸 이렇게 그림으로도 설명이 잘되어 있습니다.혼자 공부하기 너무 좋아요.
이렇게 마지막에는 마무리로 키워드로 핵심 포인트를 다시 한번 짚어보고 문제도 풀어볼 수 있습니다.이 책을 읽고 나서 더욱더 컴퓨터 구조와 운영체제에 대해서 깊이 있는 학습을 하였고무엇보다 전산 쪽을 전공하시는 학생분들 또는 신입 개발자 분들에게 더욱더 추천을 드리고 싶습니다.
경력이 쌓일수록 제일 중요한 건 기본(컴퓨터 구조와 운영체제) 이거든요.그리고 기술면접에서도 이런 배경지식이 있다면 더욱더 좋을 거라 생각합니다.
이제는 운영체제 및 컴퓨터구조를 알고 배워야하는 일이 소수의 사람들만 하지 않는 시대이다. 컴공과를 졸업하는 이쪽분야의 전공자이든 아니든 혹은 ICT분야에 뛰어든 어느 누구든 반드시 알아야 할 필수 지식이 되었다. 저 또한 이런 종류의 전문서가 꼭 필요하다고 정말 있어야 한다고 생각하던 차에 만날 수 있는 참 좋은 기회였다. 특별히 컴퓨터 구조 하나하나 기초부터 설명되어 있는 책은 정보처리 관련 자격증 수험서에서 접할 수 있었던 내용이어서 자격증 시험이 아닌 전문서를 보다 쉽게 접할 수 있었다.
이 책은 컴퓨터 구조에서 반드시 알아야 하는 기초부터 다루고 있다. 일반적인 지식에서 보다 한층 더 깊이 만날 수 있는 하지만 그림과 곁들여서 같이 버무려가며 읽어가는 재미 또한 맛볼 수 있다. 작은 소단원을 마칠때마다 확인문제를 통해 다시 한번 읽었던 내용을 복습하게 하는 것도 저자는 놓치지 않는다.
”혼자 공부하는~” 시리즈의 다른 책 처럼 스스로 학습할 수 있도록 잘 다듬어진 책 한권을 끝내면 내 자신이 더 크게 얻을 수 있는 지식의 깨달음을 경험할 수 있도록 잘 안내하고 있어서 ICT를 전공하고 특별히 운영체제나 컴퓨터 구조에 대해 길을 묻는 후배들에게 좋은 길잡이가 될 것이며, 마지막 페이지를 덮을 때쯤이면 스스로 나 자신이 많이 성장해 있음에 대견해 할 것이다.
요즘 IT개발자 취업에 대해서 관심이 많아지면서 IT전공자들 뿐만 아니라 IT비전공자들도 부트캠프나 여러 IT교육기관등을 통해서 IT개발자로의 취업을 준비도 많이하고 취업도 하고 하는데, 이런 단기 과정들을 통할경우 취업에 바로 사용할수 있는 코딩기술등에 대해서만 교육을 하고 취업에 내가서 일을 하게 되기 때문에, 일을 하면서 운영체제위에서 개발도구들을 통해서 컴파일 해서 결과가 실행되는 과정들만을 하게 되어 운영체제나 컴퓨터 하드웨이 장비들에 대한 깊이 있는 이해를 할수 없어서 본인의 스킬을 향상시키는데 어려움이 있는 경우가 많이들 발생하고 있습니다.
IT전공자들은 전공필수 과목으로 컴퓨터구조나 운영체제, 컴파일러등 그리고 오래전에 교육을 받으신 분들은 어셈블리어등에 대해서도 조금은 경험을 해본 경우들이 있어서 프로그래밍 개발을 할때 이게 어떻게 컴퓨터에서 작동을 하는지 전반적인 부분을 이해할수 있기는 하나 한번 정도는 정리가 필요하신 분들에게도 계실듯 합니다.
이번에 새로 출간된 '혼자 공부하는 컴퓨터 구조+운영체제'는 제가 개인적으로도 좋아하는 '혼자 공부하는' 시리즈로 새로 나온 책으로 IT비전공자들 뿐만 아니라 전공자들도 혼자서도 독학으로 공부를 할수 있도록 나온 책으로, IT개발자로 취업을 준비하거나 일을 하시면서 코딩을 할때 어떻게 컴퓨터에서 작동이 되는지 전반적인 컴퓨터 구조와 운영체제 등에 대해서 이해를 하는데 많은 도움이 되는 책이라고 생각이 됩니다.
컴퓨터는 0과 1만을 이해한다고 들어보셨을 겁니다. 고급언어인 요즘 많이들 사용하는 자바, 파이썬 등으로 코딩을 하면 이게 어떻게 컴퓨터가 이해할수 있는지에 대한 과정에 대해서 책의 앞부분에서 책의 학습의 시작을 하게 되며, 컴퓨터이 두뇌라고 할수 있는 CPU, 모바일에서는 AP에 대해서 어떻게 작동하는지를 알수 있으며, 그 다음으로는 프로그램의 명령어와 데이터등을 저장하는 메모리(RAM) 그리고 데이터를 보관할수 있는 보조기억장치 순으로 학습을 하게 되며, 마지막에는 운영체제에 대해서 이해할수 있게 되면서 전체적인 컴퓨터가 어떻게 작동을 하는지 이 책 한권으로 전반적인 것을 다 정리하고 이해할수 있습니다.
컴퓨터에 대한 모든 내용들을 모두 깊이있게 이해하고 학습할수 있다면 그보다 좋은 것은 없을 것입니다.
IT개발자로 현장에서 일을 하는데 그정도 까지는 아니더라도 꼭 필요한 컴퓨터 구조와 운영체제에 대한 꼭 알아두어야 하는 정도의 필요한 내용들을 이 책 한권에 정리가 되어 있기 때문에, IT개발자 뿐만 아니라 IT엔지니어등 ICT, IT관련 취업이나 관심이 있는 IT비전공자, 전공자 모두에게 이번 기회에 깔끔하게 정리를 할수 있을 것이고, IT취업을 준비하고 있는 분들에게 '기술면접'을 대비할수 있는 최고의 책이라고 생각 해서 추천 합니다.
예산이 한정된 상황에서 값비싼 컴퓨터가 늘 최선의 선택은 아닙니다.(p38) ... 여러분이 개발한 프로그램이 어떤 환경에서 어떻게 작동하는지는 여러분이 가장 잘 이해하고 있어야 하고, 프로그램을 위한 최적의 컴퓨터 환경을 스스로 판단할 수 있어야 합니다.(p39)
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
◎ 컴퓨터구조와 운영체제를 알면 할 수 있는 일들에 대하여
난이도는 초초급이며, 내용 또한 기초를 다지는데 주 목적을 두고 있다. 삽화도 개념마다 다 있어서 내 머릿속에 그림이 그려진듯 했고, 항상 일상에서 컴퓨터를 쓰는데, 컴퓨터란 뭘까? 궁금해! 라고 느낀 사람이라도 누구나 교양으로 읽어도 될 거라고 느꼈다. (가볍게 하루에 1~2 챕터씩 본다는 생각으로 읽으면 2주에 볼 수 있다.)
책 소개에서 기술면접을 대비해서 알아야 한다고는 했지만, 실제 내가 신입때 겪은 수십여개의 면접에서는 이런 구조와 운영체제 관련된 직접적인 질문이 없었던 것 같다. 그러나 실무에서 서버를 다루면서 cpu, 메모리, TPS 등 고려하고 판단해야 하는 일들이 점점 생기면서 어디서부터 접근해야 할지 막막했는데 근간이 되는 컴퓨터의 원리와 운영체제를 통해 이를 해소할 수 있는 이해의 실마리가 되어 줄 것 같다.
책 구성은 컴퓨터구조(p30~p257), 운영체제(p258~p480), 확인문제정답+찾아보기index(p481~p503), 부록으로 용어노트 있다. 부록은 한빛미디어 혼공사이트에서 다운이 가능하다!
컴퓨터가 있는 일상이 자연스럽다 못해 당연한 모습이 된 뒤부터 기계를 바라보는 시각이 바뀌었습니다.
기계의 동력이 전기인 게 이상하지 않은 지는 벌써 오래되었습니다. 전기로 움직이는 기계, 특히 일상에서 자주 접하는 제품들은 뭔가 알아서 움직이고 필요하면 사람에게 신호를 보내기도 하며 사람과 상호작용하는 걸 당연시하고 있습니다. 최근에는 상호작용의 수단으로 언어를 사용하기까지 합니다.
제품 안에 물리적 장치 말고 뭔가 더 있다는 걸 압니다.
개발의 도구이자 목표이기도 한 컴퓨터의 내부를 들여다봅니다.
주의, 요약서이지 전무 서적이 아닙니다. 그렇지만 충분히 그림을 그려볼 수 있습니다.
방대한 영역 가운데 필요한 내용들을 선별하였다고 합니다. 가볍게 접근하여 재미있게 볼 수 있지만 고민하고 생각하기 시작하면 만만치 않습니다. 꽂히는 주제에 파고드는 일은 책을 다 읽고 난 뒤에 해도 늦지 않다고 생각합니다.
컴퓨터의 주요 부품이 움직이는 구조와 원리
문단 제목이 지나치게 거창한 느낌이라는 건 인정합니다. 요약서의 내용을 다시 요약하면 이런 일이 발생할 수 있습니다. 들어줬으면 하는 핑계라고 봐주시기 바랍니다.
누구나 한 번쯤 컴퓨터 조립이라는 말을 들어보았을 것입니다. 누군가에게는 뭐가 뭔지 알 수 없는 말이고, 누군가에게는 재미있는 순간일 수 있습니다. 하지만, 끼우고 연결하고 조이는 건 다루지 않습니다.
컴퓨터라 불릴만한 게 작동할 때 그 컴퓨터 내부의 부품 안에서 어떤 일들이 일어나는지 알려줍니다.
4가지 핵심 부품들이 가진 특성, 작동을 위해 맡은 역할, 성능 향상을 위한 구조와 적용하는 처리 기법들을 그림과 설명으로 풀어나갑니다.
각 부품은 하루아침에 하늘에서 뚝 떨어진 게 아니라 시간을 두고 개선하고 많은 아이디어를 적용하여 발전시킨 결과임을 알 수 있습니다.
운영체제가 하는 일
한마디로 컴퓨터가 가진 자원을 나누고 할당합니다.
물리적인 한계를 극복하고 성능을 최대한 끌어올리기 위해 어떻게 하고 있는지 보여줍니다.
쪼개고, 분리하고, 공유하기도 하고, 순서를 바꾸기도 합니다. 이러한 시도는 교착 상태라는 상황을 피할 수 없습니다.
피하기보다 맞닥뜨릴 때마다 해결하며 나아가는 방향을 택합니다.
프로그래밍 언어에서 사용하는 용어의 출처
개발을 하다 보면 참 이해하기 어려운 단어들을 만나는 일이 종종 있습니다.
사전에서 뜻을 확인해봐도 뭔가 아귀가 맞지 않는 느낌입니다. 다른 단어도 많은데 왜 하필 이 단어를 사용하는지 도무지 알 수 없습니다. 그냥 그런가 보다 하고 넘어가지만 그 단어를 만날 때마다 느끼는 어색함은 어쩔 수 없습니다.
이 책을 읽으면서 답답함을 해소할 수 있었습니다.
운영체제에서 적절하게 사용하기 시작한 용어가 프로그래밍에서 사용하는 용어로 자연스럽게 넘어간 것이었습니다.
최근에 컴퓨터 공학이 많이 각광을 받고 개발로 커리어를 전환 하시는 분들이 많습니다. 그리고 복수 전공, 부전공을 통해 컴퓨터 공학을 공부하시는데 그 중에서도 개발자 면접에 있어서 가장 기본적으로 나오는 단골 질문은 컴퓨터 구조와 운영체제의 기초입니다. 학교에서도 전공생이 듣기 쉽지 않고 지루한 과목으로 저도 공부하는데 있어서 동기부여 혹은 프로그래밍만큼 재미있게 흥미를 붙이기 힘들었습니다.
본 책에서는 컴퓨터 구조와 운영체제의 기초부터 심화 부분을 예제를 통해 설명을 해주는 점이 최고 장점입니다. 그리고 비전공생들에게도 이해가 쉽도록 그림과 함께 설명을 해주고 있습니다. 또한 혼자 독학을 하는데 있어서도 유튜브에 강의가 있다는 점이 최대 장점인 것 같습니다.
제가 이전에 이책을 보았더라면 운영체제와 컴퓨터 구조를 이해하는데 적은 시간과 효율적으로 공부할 수 있었을 것 같습니다. 더불어서 시각적으로 개념이 설명되어 있는 점은 이해를 하고 시험 준비 그리고 면접 준비를 하는데 다른 분들에게도 큰 도움이 될 것으로 예상됩니다.
마지막으로 좋은 책 제공과 기회를 주신 한빛미디어 담당자 분들께 감사 드립니다. 9월에도 내용이 탄탄한 도서를 읽고 빨리 리뷰를 남기고 싶습니다.
'혼자 공부하는' 시리즈는 특유의 구성과 중간중간 상세한 그림 설명들까지 그려져 있어 좋아하는 책이다. 이번에 읽어본 '혼자 공부하는 컴퓨터 구조+운영체제'는 한 번 이 내용에 대해서 배워보거나 공부해본 적이 있는 사람이라면 수월하게 읽을 수 있게 되어있다. 설명도 충실하지만 어렵지 않게 다뤄서 마치 교양 서적을 읽는 듯한 느낌을 받을 수 있다. 다만 완전히 전공서적과 같은 느낌은 아니기 때문에 더 깊은 내용을 공부하고 싶다면 다른 자료를 참고해야 하는 편이 좋을 것 같다. 전공자에게는 가볍게 내용을 떠올려 볼 수 있고, 초심자에게는 나름대로 쉽게 내용을 공부해볼 수 있는 좋은 책이다.
"‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접을 제대로 준비해야 할 때’ 다른 입문서에서는 알려주지 않았던 진짜 컴퓨터 공학 지식을 『혼자 공부하는 컴퓨터 구조+운영체제』에서 만나 보자!"
학습 로드맵을 살펴 보면 이 책에서 알려 주고 싶은 목표를 명확하게 확인 할 수가 있습니다.
먼저 컴퓨터 구조를 살펴 보고 운영체제에서 프로세스와 스레드의 개념, 가상메모리와 파일 시스템까지를 이해 하도록 로드맵으로 되어 있는것을 확인 할 수 있습니다.
컴퓨터구조를 이해하면 우리가 PC를 구매하거나 클라우드 서비스를 이용할때 자신에게 적합한 모델을 선택하기가 용이해질 뿐만 아니라 프로그래밍을 하고 있는 개발자도 자신이 만든 프로그램이 문제가 발생했을 때 H/W의 사양 때문인지 혹은 OS의 플랫폼과의 충돌인지 자신의 프로그래밍 문제인지 빠르게 파악 할 수가 있습니다.
이 책에서는 컴퓨터 구조에서 각각의 부품들이 어떤 역할을 하는지 자세히 다루고 있기 때문에 이렇게 각각의 부품들의 역할을 이해 한다면 일반인이라면 PC를 선택하거나 문제가 발생했을 때 원인을 해결 할 수 있고, 프로그래머 라면 자신의 프로그래밍 문제인지 빠르게 확인 할 수가 있겠네요.
또한 프로그래머라면 운영체제에서 사용하는 프로세스와 스레드의 개념을 이해 해야만 운영체제 위에서 동작하는 멀티스레드 프로그래밍을 자유롭게 구현할 수 있을 것입니다.
이 책에서는 프로세스와 스레드의 개념을 이해하고 cpu 스케줄링 알고리즘을 다루면서 서로 다른 프로세스끼리 데이터를 공유할 때 동시다발적으로 실행되는 수 많은 프로세스가 한개의 자원을 사용하게 되면 서로 사용하기 위해 교착상태에 빠지게 되는데 이러한 것을 처리하기 위한 방법등을 살펴 보게 되므로 이러한 부분을 이해한다면 프로그램 구현 시 한단계 업그레이드 된 프로그램이 탄생할 것입니다.
서평
이 책을 읽기 전에 막연하게 "컴퓨터 구조는 어느 정도 알고 있으니 굳이 이 책을 읽어 볼 필요가 있을까?" 라고 생각하면서 살짝 망설이면서 신청한 책이었는데요~
읽어 보면서 제가 명확하게 알지 못했던 내용들도 다시 한번 짚어 보면서 그 동안 알고 있던 구조들이 더욱 명확해 지면서 많은 도움을 받았습니다.
프로그래밍을 하시는 분들이 흔히 놓치기 쉬운 부분이 "컴퓨터구조를 굳이 알 필요가 있을까?","플랫폼만 이해하면 프로그래밍 하는데 문제가 없잖아" 라고 생각하시기 쉬운데요. 컴퓨터 구조를 이해하고 프로그래밍을 하는 것과 그렇지 않은 경우는 어떤 문제가 발생했을 때 해결하는 방법에서 많은 차이가 있을 수 있습니다.
마치 이미 만들어진 플랫폼 위에서 블록을 조립하듯이 끼워 맞춰서 자신이 원하는 자동차를 만드시는 분이 두 명이 있다고 하면 한 명은 그 위에 블록을 조립하는 방법만 이해하고 있는 분과 한명은 플랫폼의 내부의 구성을 이해하고 있는 분이라면 자신이 만들고 싶은 자동차가 블록조립만으로 안 될때 처리하는 방법이 달라 진다는 것이죠~
블록을 조립하는 방법만 이해하는 분은 자신이 원하는 블록이 나올때 까지 기다려야 하겠지만, 플랫폼의 구조를 이해하는 분이라면 스스로 그 블록을 만들 수 있기에 좀 더 자유롭게 설계를 할 수 있지 않을까요~
프로그래밍 역시 마찬가지입니다. 컴퓨터 구조를 이해하지 않더라도 프로그래밍이 가능하지만 컴퓨터 구조와 운영체제를 이해 한다면 훨씬 다양한 프로그래밍을 구현 할 수가 있게 될것 같네요.
이 책은 컴퓨터 구조에 관심이 있는 분들이 보셔도 좋겠지만, IT 분야에 종사하시는 분들에게 정말 많은 도움이 될 것 같은 생각이 드네요.^^
개발자 등 IT 관련 직접적 업무를 하지 않고 있기 때문에 컴퓨터 구조나 운영체제와 같은 과목은 주로 대학(원)과 자격시험 대비를 위해서 공부해왔다. 그렇다 보니 절반은 이해를 하고, 그렇지 못한 부분은 늘 코 앞에 닥친 시험을 위해(학교 혹은 자격시험) 물리적으로 무작정 외우는 수 밖에 없었다. 더욱 답답한 것은 어려웠던 내용을 간신히 이해하고 풀렸다 싶은 내용이 책 덮이는 순간 인사도 없이 휘발되버린다는 것이다. 그래서 또 다시 해당 과목들을 봐야 할 때 매 번 똑같은 경험을 반복하게 된다.
이 책은 IT에서 기초 아니 기본 중 가장 기본적인 내용이자 필수로 알아야 하는 내용들이다. 오래전에 대학원 수강시에 해외대학에서 재직중인 교수님께서 잠시 귀국하여 한 과목을 강의하신적이 있는데, 어떠한 과목이라고 밝힐수는 없지만, 그 과목 역시 기본은 운영체제에서 시작해야 한다며 운영체제를 그 과목에 맞추어 강의를 하셨었다. 그리고 덧 붙이신 말은 이미 알고 있는 내용들이라 식상하거나 시간낭비라 생각할 수도 있겠지만, 자신도 10년이 넘게 학생들을 가르치며 보고 또 보아도 새로운 것을 발견하게 된다며 시각을 조금 더 바꾸고 그 시간을 함께 하면 좋겠다고 하셨었다. 그리고 그 덕분에 혼자 공부하며 무조건 물리적으로 외워야 했던 내용의 많은 부분을 이해하는 계기가 되었다. 굳이 개인 적인 이야기를 덧붙이는 이유는 이 책을 만나서 펼쳐보았을 때 그 당시 강의시간을 계속해서 떠올릴 수 있었기 때문이다.
[사진] '컴퓨터 구조'에서 RAID 의 정의와 종류를 설명하고 있는 페이지 (본책 p.221)
[사진] '운영체제'에서 페이징을 통한 가상 메모리 관리를 설명하는 페이지 (본책 p.403)
[사진] '운영체제' 파일시스템 중 '파일 할당(연속 할당)'을 설명하는 페이지 (본책 p.457)
나 역시 컴퓨터 구조나 운영체제 과목은 처음 접하는 것도 아니고 완전 초보도 아닌 그렇다고 절대 잘 알지도 못하는 애매한 상태에 있기 때문이 무작정 1페이지부터 차근 차근 보려고 하지는 않았다. 대신에 책을 처음 받았을 때 먼저 목차를 살펴보고 앞서 말한 강의 시간에 그리고 그 이후 몇 년에 걸쳐 시험 준비를 하며 어려워 했던 내용들을 별도의 챕터로 구분해서 다루고 있는지 살펴보았다. 특히 컴퓨터 구조 부분에서는 CPU 성능과 관련한 CISC와 RISC 부분, 메모리 공간, 그리고 이해가 됐다 안 됐다 했던 RAID 부분을 표시해서 살펴 보았다. 운영체제의 경우 메모리 할당 부분과 파일 시스템 부분을 집중적으로 보았다. 물론 현재는 작정하고 이 책만 판 것이 아니고 어려웠던 부분이 이 책의 제목 대로 혼자로 보아도 이해가 가능한가를 중심으로 통독을 한 상태라 여전히 100% 이해하지 못한 부분도 분명히 있지만, 그래도 대학 등에서 사용되는 외국 번역 교재(그것도 번역이 엉망이라 늘 원서와 번역서를 함께 펴놓고 보면서 영어를 못함에도 원서가 더 이해가 된다는..)를 보며 힘들어 했던 기억 때문인지 페이지를 넘기는 시간이 훨씬 단축되고 수월했다.
[사진] 본책 권말에 노트 형태로 수록되어 있는 혼공 용어 노트
그리고 이 책의 장점 중 하나는 몇 문제 되지는 않지만 각 챕터마다 관련 문제가 있고, 권말에 정답과 짤막한 해설이 모두 실려있다는 것이다. 대게 IT 교재의 큰 문제점은 연습문제에 대한 정답과 해설을 구하기 어려워 풀어 놓고도 내가 제대로 이해했는지 늘 확인할 수 없어 고생했었는데, 적어도 그것 때문에 고생하거나 시간낭비는 안해도 된다는 점이다. 그리고 조금 아쉬운 것은 권말에 별책 부록으로 붙어있는 '혼공 용어노트'를 굳이 별책 부록으로 하지 않았어도 되지 않았나 하는 것이다. 별책으로 할 만큼 분량이 많지 않아 권말에 그냥 페이지 수를 늘려서 싣거나 홈페이지에서 PDF 자료로 받아보는게 책이 더 깔끔했을 것 같다. 수험서가 아니기 때문에 굳이 필요하지는 않았던 부분인 것 같다.
그리고 개인적으로 이 책을 추천하는 대상은 보안 관련 자격시험을 준비하는 분들이다. 처음에 말했듯 IT 및 기술 관련 종사자가 아니다 보니 딱 내 경험에서 보이는 만큼일지는 모르겠지만, 정보보안기사와 산업보안관리사(기술보안 부분)를 준비하시는 분들의 경우 운영체제 과목을 준비할 때 시중에 있는 해당 시험 교재의 운영체제는 중상급 이상의 수준이라 기초를 다지고 싶은 분들은 이 책의 운영체제 부분을 통해 먼저 보충하면 쉽게 이해할 수 있을 것 같고, 디지털포렌식 전문가를 준비하시는 경우 역시 해당 시험 대비용 교재를 통해 부족한 부분은 컴퓨터구조와 운영체제 즉 이 책 전 범위 모두 그 시험에 해당되기 때문에 참고하시길 권한다. 게다가 포렌식 자격시험의 경우 필기 뿐만 아니라 실기시험 시에도 파일시스템 관련하여 위치 계산이 필요한 경우가 있기 때문에 이 책을 통해 기본 사항을 먼저 습득한 후 해당 교재 등을 통해 실습을 하면 큰 도움이 될 거라 생각된다.
매번 온라인 서점에서 컴퓨터 구조 책과 운영체제 책을 몇 권 정해두고 구입해서 볼까 망설이기를 1년은 한 것 같다. 분명 구입하고도 제대로 보지 않을 것이 분명하기 때문이다. 그리고 애써 구입했는데(오프라인에서는 해당 교재의 경우 비닐로 봉해진 경우가 많아 내용 확인이 안되고, 도서관에서는 해당 분야의 신착 도서를 만나기가 어려워 역시 내용 확인이 어렵다.) 원했던 내용이 아닐까 하는 걱정도 있었다. 좋은 기회에 만난 이 책은 그간의 고민을 싹 덜어주는 것 같다. 읽는 독자의 지식 상태나 위치에 따라 느끼는 상태는 다르겠지만, 오래전 운영체제와 연결해 강의해주시던 그 교수님의 말처럼 분명 이 책을 보는 동안 새로운 사실을 깨닫게 되거나, 물리적으로 외우며 그냥 넘겨야했던 상당 부분을 이해하는 기쁨을 맛 볼 수 있을 것 같다. 이 두 과목을 지금 공부해야 한다면 일 독을 권한다.
입문하기 어려운 컴퓨터 구조와 운영체제에 대해 대표 개념부터 워밍업한 후, 본격적으로 알려줍니다. 마무리에서는 주요 개념을 한 번 더 복습하므로 프로그래밍 공부가 난생 처음인 입문자도 무리없이 완독 가능합니다.
또한, 혼자 공부하는 것에 힘을 실어 줄 동영상 강의와 혼공 학습 사이트를 제공합니다. 저자 직강 동영상과 질문을 할 수 있는 학습 사이트를 제공하여 질문을 하나하나 저자가 직접 답변을 달아주고 있으며 관련 최신 기술과 정보를 얻을 수 있습니다. 혼공 학습단도 같이 제공하고 잇습니다.
마지막으로, 용어 노트를 제공하여 낯선 컴퓨터 공학 지식을 반복적으로 학습하여 익숙하게 해줍니다.