본문 바로가기

computer science

[#혼공] 혼자 공부하는 컴퓨터 구조+운영체제 [Chapter.01]

현재, 비전공자 출신으로 백엔드 개발 및 데이터 엔지니어링 업무를 하고 있습니다.

책에 "프로그래밍 언어의 문법만 안다고 해서 실력 있는 개발자가 되기 어렵다. 같은 코드를 입력해도 환경에 따라서 제대로 작동하지 않을 수 있다."라는 문장에 격하게 공감하여 망설임 없이 이 책을 선택하여 공부하기 시작했습니다.

 

책을 읽으면 읽을 수록, 개발 작업을 하다 마주하는 수 많은 변수와 문제들을 지혜롭게 해결 할 수 있는 배경 지식을 너무나 쉽고 자세하게 알려주고 있다는 생각이 들었습니다.

 

자, 그럼 챕터 1부터 내용을 간략하게 정리해보도록 하겠습니다. :) 

 

 

 

 

[01-1] 컴퓨터 구조를 알아야하는 이유

 

 

 

문제 해결 

 

책에서는 종종 같은 코드를 입력해도 누군가의 환경에서는 코드가 정상적으로 작동이 안되는 일이 비일비재하다고 합니다. 코드를 처음해보는 초보자의 시야에는 컴퓨터 구조나 환경에 관한 지식이 없기 때문에 발생하는 영역이고, 500 페이지가 넘는 이 책의 내용을 모두 이해해본다면, 이러한 이슈를 마주했을 때 혼자 해결하는 역량이 키워질거라고 기대합니다. 따라서, 구글이나 삼성과 같은 IT 대기업에서의 채용 공고에는 컴퓨터 구조를 이해하는 사람들이 필요하다고 명시해놓기도 합니다.

 

 

 

성능, 용량, 비용

 

저희 팀장님께서도 말씀하시길, 좋은 데이터 엔지니어라면 성능, 용량, 비용을 모두 고려할 줄 알아야한다고 조언해주십니다. 업무를 진행하면 할수록 이 말의 뜻을 이해하게 됩니다. 데이터를 수집하고, 변환하는 과정에서 AWS의 서버 컴퓨터를 활용하게 되는데요. 가장 효율적인 비용으로 최대한 우리가 원하는 작업의 성능을 맞추도록 노력해야합니다. 최근에는 csv -> json으로 바꾸는 작업을 진행하면서, 데이터를 읽고 처리하는 과정에서 (1)비동기, (2)동기, (3)pandas 3가지 옵션을 고민하였습니다. 단순히 빠르고 쉽게 처리하는 것이 아니라, 도커 컨테이너에서 제한된 성능과 용량의 환경에서 어떤 옵션을 적용해야 하는지 고민을 해보면서 그  필요성을 절실히 느낀 바 있습니다.

 

 

"성능, 용량, 비용"은 단순히 프로그래밍 언어 문법만 안다고 해결할 수 있는 영역은 아닙니다. 좋은 개발자가 되기 위해서는 위의 3가지 요소까지 해결할 수 있어야 합니다.

 

 

 

 

 

[01-2] 컴퓨터 구조의 큰 그림

 

 

 

 

 

컴퓨터가 이해하는 정보

 

크게 데이터, 명령어 2가지로 생각하면 됩니다. 숫자, 문자, 이미지, 동영상과 같은 정적인 정보를 데이터라고 표현할 수 있으며, 그러한 데이터를 움직이고 컴퓨터에 작동시키는 명령어가 있다고 생각하면 됩니다. 따라서, 데이터와 명령어가 컴퓨터의 네 가지 핵심 부품에서 작동하게 되는 개념이라고 생각하면 됩니다. 예를 들면, '1', '2'는 데이터이고, '더하라 1과 2를'은 명령어 입니다.

 

 

 

 

컴퓨터의 네 가지 핵심 부품

 

(1) 메모리

 

메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품입니다. 아래는 메모리에 데이터와 명령어가 저장되어 있는 예시입니다. (5번지, 6번지에는 저장되어 있지 않음)

 

 

 

 

(2) CPU(중앙 처리 장치)

 

컴퓨터의 두뇌라고 생각하면 됩니다. 메모리에 저장되어 있는 명령어를 읽고, 해석하고 실행합니다.

CPU는 ALU(산술논리연산장치), 레지스터, 제어장치 3가지로 이루어져 있습니다. 

 

ALU : 간단하게 말하면 계산기입니다.

레지스터 : CPU 내부의 작은 임시 저장 장치입니다.

제어장치 : 제어 신호라는 전기 신호를 내보내고 명령어를 해석하는 장치입니다. "메모리 읽기, 메모리 쓰기"라는 제어 신호를 보냅니다.

 

 

 

(3) 보조기억 장치 

 

위의 메모리는 2가지 치명적인 약점이 있습니다. 첫 째는 가격이 비싸서 용량이 적다는 점입니다. 두번째는 전원이 꺼지면 저장된 내용을 잃는다는 점입니다. 따라서 메모리 용량이 크고, 저장된 내용을 잃지 않는 메모리를 보조할 저장 장치가 보조기억장치입니다. 하드 디스크, SSD, USB 메모리, DVD, CD 등이 보조 기억 장치의 예시입니다.

 

 

 

(4) 입출력장치

 

입출력장치는 마이크, 스피커, 프린터, 마우스, 키보드, 모니터 등의 장치를 말합니다. 컴퓨터 내부와 외부의 정보를 교환할 수 있게 도와줍니다.