[독서샬롱] 한 권으로 읽는 컴퓨터 구조와 프로그래밍 1,2화 독후감
이 포스팅은 독서샬롱 스터디의 독후감 포스팅입니다.
![[독서샬롱] 한 권으로 읽는 컴퓨터 구조와 프로그래밍 1,2화 독후감](https://cdn.hashnode.com/res/hashnode/image/upload/v1723127420737/b2629cec-b5b7-4641-8dc6-d0d6404a41ac.png)
본 포스팅은 CS지식을 채우기 위해 진행하고 있는 독서모임의 정기 독후감입니다.
1장 컴퓨터 내부의 언어 체계
컴퓨터의 언어가 0과 1로 이루어졌다는 건 영화 매트릭스에서 무수히 떨어지는 초록색 0과 1로 처음 접했다. 다만 그 당시의 나는 컴퓨터의 언어가 왜 이진수, 비트로 이루어졌는 지 알지는 못했다.
이후 개발을 공부하면서 비트로 이루어져있는 이유를 조금이나마 이해하게 됐는데, 이 책을 보니 조금 더 정돈된 이해가 된 것 같다.

이 때는 그냥 댕 멋진 한 장면이구나 라고만 생각했다. 숫자 비가 내려와~
비트의 시작은 논리 연산이다.
비트, 즉 2진수는 0과 1로만 구성되어있고 이는 질문의 답변이 두개인 것들에 대해서 효과적으로 답변할 수 있으다.
가장 대표적인 것이 예/아니오, 끄다/켜다 같은 답변을 요구하는 질문들인데, 다른 비트들이 표현하는 내용으로 부터 "새로운 비트":를 만들어 내는 동작을 논리연산 이라고 하게 된다.
@ :나는 천재인가?
?? : 아니오. (너는 바보입니다. or ETC)
이런 논리연산을 마치 "숫자"와 같이 다룰 수 있게 하는 방법 중 하나로 불리언 대수 라는 것이 고안되었는데, NOT, AND, OR, XOR 이라는 연산자들이 그것이다.
이는 비교적 최근에 포스팅 했던 수학 리부트 관련 포스팅에서 일부분 다룬 적이 있다.
아무튼 이 불리언 연산자들을 진리표로 만들어 중학생 때였나 공부했던 드모르간 법칙(분배, 교환, 결합 따위의..)이 절로 떠오르는데 맞다. 그 규칙이 이 논리 연산에서도 적용된다.
비트로 여러가지 표현하기
숫자
자 이런 0과 1로 이루어진 숫자는 간단하게는 논리연산을 표현하지만 복잡하게는 숫자, 문자, 특수기호 그리고 그외에 많은 예약명령어들을 처리해야한다.
그 중 먼저 알아볼 것은 숫자인데 십진수를 이진수로 만들고 이진수를 십진수로 만드는 것은 CS공부를 하면서 드문 드문 많이 했던 거라 그냥 쓱하고 지나간다.
(그냥 n진수일 때, 각 자리마다 n의 자릿수-1 제곱한 숫자가 들어가는 것과 같다. 그리고 그걸 적절히 조합하고 더하면 구해진다. 끝-)
자 양의 정수는 위에 처럼 표현할 수 있다.
문제는 음의 정수, 그리고 실수를 표현하는 것인데,
음의 정수를 표현하는 방식부터 짧게 살펴보자.
음의 정수
부호와 크기
숫자를 표현하는 비트의 자릿수를 정해놓고 맨앞자리(MSB)를 부호를 위한 자리로 고정하는 방법이다. 예를 들어 4비트 숫자가 있다면
| 1 | 1 | 0 | 1 |
이라고 했을 때 -5가 된다. (MSB는 0 : 양수, 1 : 음수를 나타내고 나머지는 숫자다)
하지만 이 방법은 결국 MSB가 표현할 수 있는 게 겨우 단 두가지(음수와 양수) 밖에 없다는 점에서 어마어마한 자원 낭비일 수 밖에 없다. (만약 MSB가 숫자의 크기로 활용된다면, 8가지의 숫자를 더 나타낼 수 있고, 비트가 늘어날 때마다 그 수는 기하급수적이게 된다.)
1의 보수
1의 보수는 그냥 모든 숫자를 뒤집어 해결한다.
| 0 | 0 | 0 | 1 |
숫자 1
| 1 | 1 | 1 | 0 |
숫자 -1
그냥 말그대로 숫자를 뒤집는다. 하지만 이 경우에도 덧셈을 하면 MSB에서 자릿수가 넘어간 걸 LSB에서 받아 순환올림 해줘야한다는 아주 괴랄한 로직이 추가되어야한다.
비효율적이다. 요즘 안쓰인단다.
그래서 이제 많이들 쓰는 2의 보수
똑같이 뒤집는데, 덧셈해서 MSB에서 올림이 발생하면 그냥 버린단다. 그게 끝임.
실수 표현. 앗차차!
고정소수점
정수부분과 분수부분을 .(점!!)으로 구분한다.
정수부분은 말그대로 정수고, 분수부분은 말그대로 분수다
00.10 이면 0과 이분의 일이다.
하이고 괴랄타.
부동소수점
가수과 지수를 마찬가지로 .(점!)으로 구분한다.
1.001 이면
1.0 * 2의 1제곱 하는 거고
1.010 이면
1.0 * 2의 2제곱 하는 거다.
즉 각각 2, 4 되는 거다.
그 외
8진, 16진, 2진화된 10진등 별의 별 것이 많다. 하지만 내가 책 요약하는 건 아니니 간략하게 얘기하자면, 컴퓨터 한놈 이해시키기 거 엄청 힘드네! 이다.
텍스트
텍스트는 아스키 코드와 유니코드를 얘기하게 되는데,
아스키코드는 영문자와 숫자, 일부특수문자와 예약된 제어문자 정도를 표현하는 127가지이나, 세계는 하나-여도 언어는 수백가지인 인류의 니즈를 위해 다시 만들 필요가 있었고 이를 다시 만들어낸 게 유니코드다. 정도만 기억하면 될 것같다.

인간이 너무 많다.
사실 이 유니코드 파트를 보면서 흥미로웠던 것은 인코딩 관련된 부분이었다.
각종 인코딩 형식들
UTF-8
HTML을 처음 접한 사람들은 charset 이라는 메타데이터를 작성하면서 이게 뭐예요? 하고 물으면 아~ 지금 알 필요는 없고 일단 그렇게 쓰면 돼요~ 라고 하며 UTF-8 을 작성하는 강사나 강의를 본 경험이 다들 한번쯤 있을 거라고 생각한다.
그런 UTF-8을 이 책에서 언급해줬다. 유니코드 변환 형식 8비트(Unicode Transformation Format-8 bit) 라는 거창한 이름을 가진 것이라는데, 뭐 단순하게 얘기하면 8비트 형식(이라고 하고 7비트인)의 아스키 코드 외에 다른 문자의 경우에는 아스키를 받는 프로그램들이 깨트려 먹을 수 있으니 그거 방지하겠다고 만든 인코딩 방식이라는 거였다.

ㅎ롤로로롤루루로루룰로루루
Base 64 인코딩
Base64는 FileReader 쓰거나 하면 많이 보게 되는 겁나 긴 텍스트로 변환된 이미지 뭐 그런거다. 직전의 QP인코딩이라는 녀석이 1바이트를 표현하는데 3바이트(이거 .. 미친놈인가?)를 먹어 재껴서 비효율적이니, 3바이트로 4
글자 작성할 수 있는 놈을 만들자 해서 만들었다고 한다. 뭐 전자우편 첨부파일 같은 데서 쓴다는데, 솔찍히 백엔드 개발자 입장에서는 (프론트도..) 개극혐일 수 밖에 없을 듯.
이건 짤올리기도 싫다
URL 인코딩
퍼센트 인코딩이라고도 부른다는데, %뒤에 어떤 문자의 16진 표현을 붙이는 형태라고 한다. 말그대로 URL표현할 때 좀 본 거 같긴하다. (대충 이미지 URL업로드할 때 봄 ㅇㅇ)
그 외
색같은 것도 표현한다
RGB : 24비트를 8비트 영역으로 나눠서 표현하게 되는데, R(8비트), G(8비트), B(8비트) ,A(8비트 투명도) 식이다. 웹디나 디지털 매체 디자이너에게 친숙한 그것... 혹은 사진작가...
CYMK : 편집디자이너, 출판디자이너에게 익숙한 그것...
헥사 코드 : #000000, 프론트개발자에게 친숙한 그것..
2장 전자회로의 조합 논리
이 파트는 ... 킹찍하게 두번은 더 읽어봐야 반이라도 이해할 거 같다. 사실상 머리에 흡수되는 것 없이 다 뱉어진 거 같은데, 일단 기본적으로 하드웨어 역시 논리 연산을 기초로 하여 조합 논리 를 구현하는 것으로 하드웨어 장치가 만들어 졌다는 것이다.
그리고 이 파트에서 흥미로웠던 개념을 몇가지 얘기하자면 첫째로는 디지털과 아날로그에 대한 정의이다.
디지털과 아날로그
나는 디지털과 아날로그를 어떻게 생각하고 있었는가... 라고 한다면 디지털은 전파 어쩌고... 아날로그는 물리력 쓰는 어쩌고... 였다....
정확한 디지털과 아날로그의 개념을 알게 된 시간이었는데, 디지털은 이산적인, 아날로그는 연속적인의 의미라고 한다. 전파 어쩌구 물리력 어쩌구.. 가 아니었다...,ㅇ
쉽게 얘기하면 1과 2사이에는 몇개의 숫자가 있나요! 했을 때,
그 사이에는 무한한 수가 있어요! 하는 친구는 아날로그 친구
그 사이에 수가 어딨나요. 1과 2는 1과 2일 뿐이에요. 하는 친구는 디지털 친구다
그런 의미에서 우리 손꾸락으로 숫자세는 것도 걍 디지털 계산기였음. ㅇㅇ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋ그리고 사실 이 뒤로는 하드웨어 관련 어쩌구 여서 좀 당황스러워서 머릿속에 아무것도 정리가 되지 않았는데, 다음 포스팅에 추가로 좀 정리해보도록 하겠다.
음 그리고 무엇보다 이 파트에서 전자 회로 관련 얘기 나오기 전
증폭회로와 관련된 얘기를 하는 것을 보았는데, 음향 엔지니어링 관련 수업을 들으면서 얘기했던 것이 이곳에 있어서 조금 신기했다.
아 아무래도 음악이 아니라 컴공을 전공했어야하나 싶을만큼 재밌었는데, 그 뒤의 빡심때매 다 깼다.
느낀 점.
매 장마다 앞 부분은 그래도 어디선가 들어본 잡지식의 전문화된 영역이었는데, 조금만 페이지를 뒤로 넘겨도 난리가 나는 바람에 조금 어질어질 하긴 했으나, 여러번 읽어보고 자료도 찾아보면 이해가 되지 않을까 싶다. 물론 대부분의 내용이 정말 "몰라도 개발하는 것에는 지장이 없어!" 인 내용이라고 생각한다. 하지만 결국 어떤 분야이든 본질 위에 서서 질문하는 것이 더 깊은 이해를 낳고, 더 많은 것을 보게 한다고 믿는다.
비록 처음에는 이렇게 이해가 되지 않는다면서 당황할 진 몰라도, 이 책을 다 읽고난 후와 그 이후 더 많은 지식을 탐구한 후의 내가 기대가 된다.


![[트러블슈팅] 서버를 터뜨린 쟈그마한 함수](https://cdn.hashnode.com/res/hashnode/image/upload/v1748357643167/fc68d237-0bfe-4f79-8e28-15fd98c5710d.png)
![[기술 서적 후기 및 요약] 쏙쏙 들어오는 함수형 코딩](https://cdn.hashnode.com/res/hashnode/image/upload/v1743129459556/14a7d741-d22e-4622-98e4-1857e449821e.png)
![[Daily Flow 1.] Validator 리팩토링](https://cdn.hashnode.com/res/hashnode/image/upload/v1741161717995/a62693a8-0f24-4dc9-8d80-cefe541ed663.png)