시작하기에 앞서, 저는 현재 모대학 전기공학부에 재학 중인 학부생임을 알려드립니다.

 

----------------------------------------------

서론.

 

최근 알파고 때문에 뉴스와 신문이 떠들썩합니다.

 

특히 알파고가 뉴스에 나오게 된 이후로


'인간은 기계에게 지배당할 것이다'


'기계 때문에 일자리가 다 사라질 것이다' 하고


걱정을 하시는 분이 많은 걸로 알고 있습니다.

 

하지만 아직까지 인공지능이 갈 길은 많이 남아 있습니다.


이번에 알파고도 구글 클라우드 컴퓨팅으로

그렇게 많은 연산들이 가능했던 것이지

일반 컴퓨터로는 아직 택도 없는 얘기고요 ㅠㅠ

 

사실 사람들이 인공지능에 대해 두려움을 가지는 것은

인공지능과 컴퓨터에 대해 잘 모르는 부분이 많기 때문이라고 생각됩니다.

 

매일 컴퓨터와 스마트폰을 쓰기는 하지만

사실 많은 사람들이 그 원리를 모르는 것도 사실이지요.

 

하지만 '적을 알고 나를 알면 백전 불패'라는 말이 있듯이

 

인공지능이 사람을 대체하게 될 미래에서 생존하려면,

무엇보다 컴퓨터와 인공지능에 대해 잘 알고 있는것이 필요한 듯 싶습니다.

 

이 글에서는 컴퓨터의 가장 기본적인 원리에서 시작해서,

컴퓨터가 어떻게 동작하는 것인지,

컴퓨터 내부에서는 어떤 일들이 일어나는지,

더 나아가, 알파고는 어떤 원리로 동작하고 있는 것인지 까지

 

가능하면 비전공자도 알 수 있도록,

제가 아는 한도 내에서 알기 쉽게 설명드려 보겠습니다.

 

(어려워보여도 너무 겁먹지 말아주세요 ㅠㅠ)


-----------------------------------------


1. 논리 회로 (혹은 디지털 회로)

 

1.1 디지털 신호란?

 

컴퓨터에 잘 알고 있지 않는 분들도

컴퓨터가 01을 사용해서 연산을 한다는 사실은 잘 알고 계실 겁니다.

여기서 1은 전기적으로 스위치가 ON 상태임을 의미하며

0은 반대로 OFF인 상태를 의미하게 됩니다.

 


여기서 01이 물리적으로 어떤 의미를 가지는지

그림을 통해 알아보도록 하겠습니다.

 

쉽게 생각하면 컴퓨터는 입력 신호를 계속 받고 있는데,

이 입력 신호는 전기적인 신호로써, 전선을 통해 들어온다고 생각할 수 있습니다.


예를 들어이 전선에 5V 의 전압을 걸어주면 컴퓨터는 1로 인식하고


0V 의 전압을 걸어주면 컴퓨터는 0으로 인식하게 됩니다.

 

, 전압을 걸어주느냐 안 걸어주느냐가 각각 ON상태와 OFF상태인것이며,

또한 이를 통해서 컴퓨터는 10을 인식하게 됩니다.

 

물론 여기서 10의 값은 시간에 따라 바뀔 수 있게 되고,

전송선을 통해 전해진 신호들을 나열하면

01000111101... 같은 신호가 컴퓨터에 전해지는 게 되겠지요.

이렇게 01로 이루어진 신호를 디지털 신호라고 합니다.

 

우리가 마우스나 키보드를 통해서

컴퓨터에 어떠한 입력신호를 주고는 있지만,

 

사실 이러한 기기 또한 컴퓨터에게

0V 또는 5V의 전압을 가해서

신호를 보내고 있는 것이라고 이해를 하시면 됩니다.

 


1.2 디지털 회로의 구성 원리

 

컴퓨터(정확히 말하면 CPU)의 기본적인 기능을

단순화 시켜서 생각한다면


1. 외부로부터 입력 신호를 받고

2. 이를 계산한 다음

3. 또 다른 전송선을 통해 출력 신호를 보낸다

 

3단계로 이루어져 있습니다.

여기서 첫 번째로 입력 신호를 주는 것은 위의 그림처럼

01을 전송선을 통해 보내주는 것이 됩니다.

 

또한 세 번째에서 출력 신호를 보내는 것은

마찬가지로 01의 신호를 전송선을 통해 보내주는 것이 됩니다.

 

그렇다면 컴퓨터는 두 번째 과정인

계산하는 과정을 어떻게 수행하는 것일까요?

 

물론 컴퓨터가 주판을 쓰거나 손가락을 써서 계산하는 건 아닐테고,

전기적인 회로를 써서 계산을 하는 게 되겠지요.

 

컴퓨터(정확히는 CPU가 맞겠지만)

외부에서 들어온 01등의 신호를 받아서

내부적으로 계산해주는 계산 회로들을 수없이 많이 가지고 있습니다.

 

또한 이러한 계산 회로들은 더 작고 기본적인 계산 회로 여러 개로 나눌 수가 있는데,

 

여기서 이러한 가장 기본적인 계산 회로들을 ‘Gate’라고 합니다.

 

쉽게 생각하면,

컴퓨터는 01을 계산해주는 Gate를 여러 개를 모아서 만든 전기적인 계산기라고 보시면 됩니다.

(Computer 자체가 원래는 계산기라는 뜻이니까요 ㅎㅎ)

 


1.3 Gate의 종류

그렇다면 실제로 Gate가 어떻게 생겼는지 알아보도록 하겠습니다.

가장 대표적인 Gate에는 AND OR, 그리고 NOT이 있습니다.

 

  

왼쪽부터 차례대로 And Gate, OR Gate, NOT Gate 입니다.


Gate들은 각각 01로 이루어진 입력 신호를 받아

그 계산 결과를 다시 0과 1의 형태로 출력합니다.

 

And Gate 같은 경우에는

AB의 두 개의 전송선에서 각각 입력신호를 받아 (총 2개의 입력신호)

계산된 결과를 Q로 출력을 해줍니다.


여기서 계산은 다음과 같은 표를 따릅니다.



참고로 이렇게 계산 결과를 나타내주는 표를 Truth table, 진리표라고 합니다.


And Gate의 두 개의 전송선에 01의 신호를 주면

And Gate는 항상 진리표를 보고서 기록된 대로 그 결과를, Q로 출력해줍니다.

 

참고로 ORNOT의 진리표는 다음과 같습니다.

  

각종 논리 회로(혹은 디지털 회로) 들은 이처럼 AND, OR, NOT 과 같은

Gate들의 조합으로 만들어져 있습니다. 컴퓨터 CPU도 예외는 아니죠.

 

실제로 AND Gate는 우리가 작동시켜 볼 수도 있습니다.

 

  

 

왼쪽 그림은 74ac08 이라는 이름의 반도체 칩인데요.


이 녀석 내부에는 오른쪽 그림과 같이 AND Gate4개 들어있습니다.

(물론 자세한 회로도는 더 복잡하지만, 여기선 그냥 넘어가도록 하겠습니다 ㅎㅎ)

 

이 녀석의 다리에 전선을 납땜하고, 전압을 가해줘서 01의 신호를 보내주면

실제로 AND 연산을 해줘서 출력을 내보내는 구조인거죠

 

컴퓨터 내부에도 위와 비슷한 반도체 들이 들어있는데,

사람이 눈으로 볼 수 없을 정도로

아주 아주 작게 만든 녀석들이 들어가 있다고 보시면 됩니다.

 


1.4 실제 계산기의 예

 

그렇다면 실제로 이러한 gate들을 이용하여

간단한 계산기를 만들어보도록 하겠습니다.

 

가장 간단한 계산기라고 한다면

덧셈을 해주는 기능이 들어가야 하겠죠? ㅎㅎ


여기서는 덧셈을 해주는 계산 회로인

'Adder' 를 한번 만들어 보겠습니다

 

먼저 시작하기에 앞서 우리가


어떤 두 개의 이진수를 서로 더한다고 가정을 해보겠습니다.

 

여기서 이진수란 01로 이루어진 수 체계인데,

0, 1, 10, 11, 100, 101, 110, 111, 1000, ...

순서대로 하나씩 커지는 수입니다.


이진수 체계에서는

2는 10으로 표현되고 3는 11로 표현되고 4는 100으로 표현되고

이런 식인거죠

 

먼저 00을 더한다고 한다면?

00을 더하면 결과는 물론 0이 나오겠지요.

 

그다음 01을 더하면? 결과는 1이 됩니다.

10을 더해도 1이 나오고요.

 

그렇다면 11을 더하면 어떻게 될까요?


우리가 자주 사용하는 십진수에서는 물론 2가 되겠지만,

이진수에서는 10이 됩니다.

자릿수가 한자리 더 늘어나게 되는 거지요.

 

한 개의 전송선은 한번에 한 개의 신호만 보낼 수 있으므로

10을 출력하기 위해서는

두 개의 전송선이 필요합니다.

 

하나의 전송선은 첫 번째 자릿수를 출력하고

다른 전송선은 두 번째 자릿수를 출력을 해주는 거지요.

 

그렇다면 이 때 필요한 진리표는 다음과 같아집니다.




여기서 AB는 각각 더하는 수,

C는 두 번째 자리 수, S는 첫 번째 자릿수라고 보시면 됩니다.

 

그런데 여기서 A, B, C만 본다면

아까 봤던 AND의 진리표랑 같네요?

 

그렇습니다!

C의 계산 결과는,

AB의 신호를 AND gate에 통과시켜서 얻을 수 있습니다!

 

또한 S의 경우에도 비슷하게

XOR gate라는 걸 쓰면, 위와 같은 결과를 얻을 수 있습니다.

 

그래서 최종적으로 필요한 회로는 다음과 같습니다.



여기서 위쪽에 있는 gateXOR gate입니다.

(자세한 건 구글 찾아보시면 됩니다 ㅎㅎ)

 

이러한 회로를 반쪽짜리 덧셈기라고 해서

‘Half Adder’라고 부릅니다.

 

? 그런데 왜 반쪽짜리 덧셈기라고 부를까요?

왜냐하면 이 회로는 한 자릿수의 숫자만 덧셈할 수 있기 때문입니다.

 

두 자릿수 이상의 덧셈에서는 받아 올림을 고려해야 하기 때문에

(자세한 설명은 생략하도록 하겠습니다 ㅎㅎ)


회로를 만들 때, ‘받아 올림까지 입력으로 넣어주도록 해야합니다.


이렇게 받아 올림까지 고려해서 만든 회로를

‘Full Adder’라고 부릅니다.


회로도는 다음과 같습니다.




받아 올림을 영어로는 ‘carry’ 라고 하는데

그림에서 C가 바로 carry를 의미합니다.

 

실제적으로 여러 자릿수 덧셈기는

위와 같은 ‘Full Adder’를 여러 개 연결해서 만들게 됩니다.

 


1.5 Flip-Flop

 

여기까지 우리는 가장 간단한 계산 회로인 덧셈기를 살펴보았습니다.

덧셈기는 가장 간단한 예제이긴 하지만,

다른 계산 회로들 (예를 들어 뺄셈기, 곱셈기, 나눗셈기 등등) 또한

위의 덧셈기처럼 ‘Gate’들의 조합으로 만들어집니다.

 

그런데 컴퓨터가 영어로 계산기라는 뜻이긴 하지만,

실제적으로 컴퓨터는

계산한 결과값이나, 혹은 입력된 신호들을 저장할 수 있는

저장 장치를 필요로 합니다.

 

이러한 저장장치는 하드디스크나 SSD 등 여러 가지가 있을 수 있지만,


신기하게도 우리는 Gate를 이용해서

이러한 저장장치를 만들 수도 있습니다!

 


 

일단 위의 그림은 SR flip-flop 이라고 하는 회로입니다. (혹은 SR latch)


이 녀석은 NOR gate라고 하는 gate 2개를 이용하여 만들 수 있습니다.

(NOR gateOR gateNOT gate를 합친 것이라고 보시면 됩니다.)

 

자세한 것은 생략하도록 하겠지만

이 회로에는 두 개의 입력이 들어가게 됩니다.

바로 SetReset 이죠. (그림에서는 SR로 나타나 있습니다.)

 

우리가 이 회로에서 Set1을 입력해 주면,

이 회로의 Q에는 1이란 출력 값이 나오게 됩니다.

(Q바에서는 항상 Q와 반대 값이 출력된다고 보시면 됩니다.)

 

반면에 우리가 이 회로에서 Reset1을 입력해 주면,

이 회로의 Q에는 0이란 출력 값이 나오게 됩니다.

 

그런데 우리가 이 회로에 1을 입력해주지 않는다면,

다시 말해서 SetReset에 모두 0을 입력해준다면

과연 어떤 일이 일어날까요?

 

신기하게도 이 회로는

지난번에 자기가 출력했던 신호를

계속 출력하게 됩니다!

 

(왜 그런지는 구글에 쳐보거나 위키피디아를 찾아보세요!)

(https://ko.wikipedia.org/wiki/플립플롭)

 

이전에 1을 출력하고 있었다면 계속 1을 출력하고

이전에 0을 출력하고 있었다면 계속 0을 출력하게 되는 것이죠.

 

이를 이용하여 이 회로에다가 SetReset의 입력 신호를 한번 주고

SetReset의 신호를 둘 다 0을 만들어서

0 또는 1의 값을 이 회로에게 기억하도록 만들 수 있습니다.

 

그렇다면 여기서 SetReset에다가 동시에 1을 주면 어떻게 되냐?

라는 질문이 있을 수 있습니다.

 

이 경우에는 회로가 맛탱이가 가버려서

출력 값이 01을 왔다갔다 하는 이상한 값이 나와 버리게 됩니다.

(전문 용어로는 race condition 이라고 합니다)

 

그래서 실제로 이 회로를 이용할 때는

SetReset에 동시에 1의 신호를 주면 안 됩니다.

 


1.6 레지스터

 

여기까지 우리는 데이터를 저장할 수 있는

flip-flop 이라는 회로를 배웠습니다.

 

실제로 flip-flop은 종류가 많지만,

대부분이 위에서 나온 SR flip-flop을 응용하여 만든 회로라고 보시면 됩니다.

 

flip-flop들 중에 한 종류로

D flip-flop이라는 녀석이 있습니다.


이 녀석의 내부에는 위에 보신 SR flip-flop에다가

여러 가지 다른 회로들이 추가적으로 들어가 있습니다.

 

이 녀석은 D 신호선을 통해서 0 또는 1의 신호를 받아들입니다.

그리고 한번 신호를 받게 되면

다음 신호를 받을 때까지 그 신호를 기억하고 있게 됩니다.

 

그리고 누군가가

레지스터에 어떤 값이 저장되어 있는지 궁금하다면

 

레지스터의 Q에서는 그 저장된 신호가 계속 출력되고 있므로

Q의 전압을 재보면 레지스터가 저장하고 있는 값을 알 수가 있습니다.

 

한편 D flip-flop에는

클락(clock) 이라는 신호가 들어갈 수 있습니다.

(그림에서 삼각형으로 표시된 곳으로 들어감)

 

이 신호는 쉽게 말하면 시간을 알려주는 신호로,

D flip-flop은 이를 통해 특정 시간대에서만

저장된 값을 바꿀 수 있습니다.

 

여기서 D flip-flop

한 개의 신호만을 저장할 수 있는데,

 

여러 개의 flip-flop들을 연결하여

여러 개의 신호를 저장하는 회로를 만들 수 있는데,

이러한 회로를 바로 레지스터라고 합니다.

(사실 엄밀한 정의는 아님. 누누히 말하지만 궁금하면 구글 찾아보세요 ㅠㅠ)

컴퓨터 CPU에서는 이러한 레지스터가 여러 개 들어있어서,

데이터를 기억하거나 하는데 레지스터를 이용하고 있습니다.

 

사실 레지스터에도 종류가 많이 있지만

대표적인 레지스터로 쉬프트 레지스터(shift register) 라는게 있습니다.


쉬프트 레지스터는 1비트짜리 레지스터가 직렬로 연결된 회로로

다음과 같이 생겨습니다.




여기서 가장 왼쪽에 있는 입력 신호선에서 data를 입력해주면

입력신호가 한칸씩 이동(shift)하게 되는데


이런식으로 총 4개의 이진수 숫자(0 또는 1)을 기억할 수 있게 되는겁니다. 



-----------------------------------

 

여기까지 우리는 컴퓨터 CPU 내부가 어떻게 만들어졌는지 알아보았습니다.


컴퓨터는 Gate라고 하는 소자로 만들어진 거대한 계산기입니다.


이 계산기에는 덧셈기, 곱셈기와 같은 다양한 연산 회로가 들어가 있으며,


한편으로 레지스터와 같이 데이터를 저장하는 회로도 들어가 있습니다.

 


그렇다면 다음 글에서는


컴퓨터가 실제로 이러한 회로들을 어떻게 이용하고 있는지,


그리고 CPUGPU 등등의 장치는 정확히 어떤 의미를 가지고 있는지,


그리고 더 나아가서 여러대의 컴퓨터가 어떻게 협동을 하는지,


그리고 구글 클라우드 컴퓨팅이 어떤 원리인지에 대해 알아보도록 하겠습니다.

 

긴 글 읽어주셔서 감사합니다.

질문은 언제든지 환영입니다 ^^


다음글

http://www.inven.co.kr/board/powerbbs.php?come_idx=2097&iskin=lol&l=519508