profile image

L o a d i n g . . .

컴퓨터 구조 시작하기

컴퓨터 구조를 알아야 하는 이유

컴퓨터 구조는 실력 있는 개발자가 되려면 반드시 알아야 할 기본 지식입니다.

 

내가 이 책을 관심있게 바라보고 읽기 시작한 것은 이 생각에서 비롯되었다.

작년부터 개발자 업무를 시작하며 컴퓨터에 대해 잘 알아야하는 이유를 몸으로 조금씩 느끼고 있었다.

다만 면접을 통과하기 위해 벼락치기로 외운 지식만으로도 충분하지 않을까란 핑계를 대며, 다시 복습할 엄두를 못내고 있었다. 해당 내용 공부는 정말 학교 공부하는 느낌이 들기 떄문이다.

하지만 이 책은 정말 읽기 쉽게 쓰여져 있고, 첫 장부터 왜 개발자라면 컴퓨터 구조를 알아야 하는지 그 근거가 분명하게 쓰여져 있어 너무 좋다.

 

문제 해결

컴퓨터 구조 구성 요소와 작동 원리를 몰라도, 프로그래밍 언어의 문법만 알면 프로그램을 개발하고 실행하는 데 전혀 지장이 없다.

하지만 분명 개발할 때 내 컴퓨터에서는 문제없이 돌아갔던 코드가 다른 컴퓨터에서는 돌아가지 않거나, 실제 배포 환경에서 오류가 나는 일은 다들 겪어봤을 것이다.
이는 분명 코드 상의 문법적인 오류가 문제의 원인이 아닐 것이다.

프로그래밍 언어의 문법만 알고 있는 사람에게 컴퓨터란 코드를 입력하면 어찌어찌 결과물을 툭 내놓는 '미지의 대상'이다. 컴퓨터라는 기계에 코드를 '입력'만 할 수 있을 뿐 그 이상은 하기 어렵다.

하지만 컴퓨터 구조를 이해하고 있다면 문제 상황을 빠르게 진단하고, 문제 해결의 실마리를 다양하게 찾을 수 있다. 이들에게 컴퓨터란 '미지의 대상' 이 아닌 '분석의 대상' 이기 때문이다.

컴퓨터 구조 지식은 문법에 맞는 코드를 작성할 줄 아는 개발자를 넘어 다양한 문제를 스스로 해결할 줄 아는 개발자로 만들어준다.

 

성능, 용량, 비용

개발한 프로그램이 어떤 환경에서 어떻게 작동하는지는 개발한 자신이 가장 잘 이해하고 있어야 하고, 프로그램을 위한 최적의 컴퓨터 환경을 스스로 판단할 수 있어야 한다.

우리가 웹사이트를 개발했다 치자. 우리가 개발한 웹사이트를 사용자에게 선보이려면 이를 실행할 컴퓨터, 즉 서버 컴퓨터가 필요하다.
어떤 스펙의 컴퓨터가 필요하고 어떤 저장 장치, 어느 정도의 용량이 필요할까? 결국 우리가 판단해야 한다.

컴퓨터 구조에서 배우는 내용은 필요한 성능, 용량, 비용을 이해하는 것과 직결된다.

 

컴퓨터 구조의 큰 그림

개발자가 알아야 할 컴퓨터 구조 지식

개발자가 알아야 할 컴퓨터 구조 지식

 

컴퓨터가 이해하는 정보

개발자가 알아야 할 컴퓨터 구조 지식
  • 데이터
    숫자, 문자, 이미지, 동영상 등 정적인 정보.
  • 명령어
    데이터를 움직이고 컴퓨터를 작동시키는 정보

예를 들면 다음과 같다.

명령어: '더하라, 1과 2를' 데이터: '1'과 '2'

 

아래 내용을 자연스레 이해해볼 수 있을 것 같다.

컴퓨터를 한 마디로 정의해보세요 -> "컴퓨터는 명령어를 처리하는 기계입니다."  컴퓨터 프로그램은 명령어의 모음.

 

컴퓨터의 핵심 부품

개발자가 알아야 할 컴퓨터 구조 지식

 

컴퓨터 핵심 부품

개발자가 알아야 할 컴퓨터 구조 지식



메모리(주기억장치)

  • 프로그램이 실행되기 위해서는 반드시 메모리에 저장되어 있어야 한다.
  • 메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장한다.
  • 메모리에 저장된 값의 위치는 주소로 알 수 있다.

 

CPU

컴퓨터의 두뇌. CPU는 메모리에 저장된 명령어를 읽어 들이고, 읽어 들인 명령어를 해석하고 실행하는 부품이다.

CPU 내부 구성요소 중 가장 중요한 세 가지

  • 산술논리연산장치 (ALU; Arithmetic Logic Unit)
  • 레지스터 (Register)
  • 제어장치 (CU; Control Unit)

ALU 는 계산하는 장치,
레지스터는 임시 저장 장치,
제어장치는 제어 신호를 발생시키고 명령어를 해석하는 장치.

 

보조기억장치

메모리는 아래의 치명적인 약점이 있다.

  1. 가격이 비싸 저장 용량이 적다.
  2. 전원이 꺼지면 저장된 내용을 잃는다.

전원이 꺼지면 작업한 내역을 읽게 되는 이유가, 실행 중인 프로그램을 메모리에 저장하는데
메모리는 전원이 꺼지면 저장된 내용이 날아간다.

이에 메모리보다 크기가 크고 전원이 꺼져도 저장된 내용을 잃지 않는 저장 장치가 필요 -> 보조기억장치!

하드디스크, SSD, USB 메모리, DVD, CD-ROM 과 같은 저장 장치가 보조기억장치의 일종이다.

메모리가 현재 '실행되는' 프로그램을 저장한다면, 보조기억장치는 '보관할' 프로그램을 저장

 

입출력 장치

마이크, 스피커, 프린터, 마우스, 키보드처럼 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치이다.

 

메인 보드와 시스템 버스

지금까지 알아봄 컴퓨터의 핵심 부품들은 모두 메인 보드 라는 판에 연결됨. 마더 보드라고도 부른다.

메인 보드에 연결된 부품들은 서로 정보를 주고받을 수 있는데, 이는 메인보드 내부에 버스라는 통로가 있기 떄문이다.
여러 버스 가운데, 컴퓨터의 핵심 부품들을 연결하는 가장 중요한 버스는 시스템 버스 이다.

 

데이터

0과 1로 숫자를 표현하는 방법

컴퓨터는 0과 1만을 이해한다. 0과 1을 나타내는 가장 작은 정보 단위를 비트(bit) 라고 한다.

1 바이트(byte) : 8 비트
1 킬로바이트(kB) : 1000 바이트
1 메가바이트(MB) : 1000 킬로바이트
1 기가바이트(GB) : 1000 메가바이트
1 테라바이트(TB) : 1000 기가바이트

참고) 1 KiB : 1024 바이트 1 MiB : 1024 KiB 1 GiB : 1024 MiB 1 TiB : 1024 GiB

 

0과 1로 문자를 표현하는 방법

문자 집합과 인코딩

문자 집합
컴퓨터가 인식하고 표현할 수 있는 문자의 모음.

문자 인코딩
문자를 0과 1로 변환하는 것. 이를 통해 컴퓨터가 문자 데이터를 이해할 수 있다.

문자 디코딩
인코딩 반대 과정. 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정이다.

 

유니코드

여러 나라 문자들을 광범위하게 표현할 수 있는 통일된 문자 집합.
UTF-8, UTF-16, UTF-32 모두 유티코드의 인코딩 방식.
UTF-8이 가장 대중적이다.

 

명령어

컴퓨터는 명령어를 처리하는 기계

명령어는 컴퓨터를 실질적으로 작동시키는 매우 중요한 정보.

C, C++, JAVA, Python, Javascript 같은 프로그래밍 언어로 만든 소스 코드.
이 모든 소스코드는 컴퓨터 내부에서 명령어로 변환되어서 실행된다.

 

소스 코드와 명령어

  • 고급 언어는 사람이 이해하고 작성하기 쉽게 만들어진 언어이다.
  • 저급 언어는 컴퓨터가 직접 이해하고 실행할 수 있는 언어이다.
  • 저급 언어는 0과 1로 이루어진 기계어와 기계어를 사람이 읽기 편한 형태로 번역한 어셈블리어가 있다.
  • 컴파일 언어는 컴파일러에 의해 소스코드 전체가 저급 언어로 변환되어 실행되는 언어이다.
  • 인터프리터 언어는 인터프리터에 의해 소스코드 한 줄씩 저급언어로 변환되어 실행되는 언어이다.
    개발자가 알아야 할 컴퓨터 구조 지식


확인문제

p.51
3번 다음 설명의 빈칸에 들어갈 알맞은 내용을 써보세요.

프로그램이 실행되려면 반드시 (메모리)에 저장되어 있어야 합니다.

 

p.65
3번 1101(2)의 음수를 2의 보수 표현법으로 구해보세요.

0011(2)

 

#혼공학습단 #혼공 #혼공컴운

복사했습니다!