이 글은 10월의 하늘 강연자의 내용을 담아 출간된 '10대를 위한 미래과학 콘서트' 에 담긴 내용의 초고입니다.


현재의 우리는 하루 24시간 중 대부분을 컴퓨터와 함께 보냅니다. 알람 시계 대신 스마트폰이 아침을 깨워주고, 학교와 학원의 수업은 컴퓨터로 진행되며, 버스 속 TV도 컴퓨터로 재생됩니다. 컴퓨터가 진화하고 빨라지면서 점점 더 많은 물건들이 컴퓨터를 품기 시작했습니다. 자전거부터, 밥솥, 자동차, 장난감 등 다양한 물건들이 컴퓨터와 함께 작동하고 있습니다. 이러한 컴퓨터가 수많은 수학, 과학적 이야기를 간직하고 있는 것을 알고 있나요?

0과 1로 표현되는 컴퓨터 속 세상

컴퓨터가 우리에게 보여주는 다채로운 화면은 우리눈에 보이는 것과 달리 컴퓨터에겐 따분한 숫자의 나열에 불과합니다. 동영상 속 주인공의 날렵한 움직임이나, 게임 속 캐릭터의 화려한 스킬은 컴퓨터가 0과 1을 조합하여 만든 결과물입니다. 컴퓨터가 0과 1을 가지고 이세상의 수많은 정보들을 저장하고 관리하는 것은 이진법이 있었기에 가능했습니다.

이진법은 독일의 수학자인 라이프니츠가 만들어낸 숫자를 표현하는 방식입니다. 2개의 숫자만을 이용하여 모든 숫자 표현을 가능하도록 만든 것으로, 컴퓨터에서는 이 2개의 숫자만을 표현하는 한 자리를 비트(bit - binary digit)라고 합니다. 일반적으로 이진법은 0 이상의 정수만 표현이 가능합니다. 하지만, 음수와 양수를 표현하여 주는 비트를 추가하여, 음수와 양수인지를 구분해 줄 수 있습니다.

(라이프니츠의 이진법, 이미지1.png, 자체 제작)

우리가 모니터를 통해 바라보는 모든 정보는 컴퓨터 속에서 이진수로 이루져 있습니다. 게임 속 캐릭터의 움직임이나, 아이템도 눈에 보이는 것과 컴퓨터가 가진 정보는 많이 다릅니다.

(컴퓨터가 보는 피카츄 예시, 이미지2.png, 자체제작)

(컴퓨터가 보는 피카츄 예시, 이미지3.png, 자체제작)

우리눈에 비치는 모니터의 빨간색은 컴퓨터에게 '#ff0000'라는 문자로 인식됩니다. 이 문자는 프로그램을 만드는 프로그래머가 컴퓨터를 조금 더 쉽게 다룰 수 있도록 만들어진 문자입니다. 실제로 이 문자는 00100011 01100110 01100110 00110000 00110000 00110000 00110000로 컴퓨터속에서 인식됩니다. 56자리로 구성된 0과 1이 모니터에선 아주 조그만 빨간 점 입니다.

컴퓨터 속에 저장된 수많은 정보들이 우리 눈에 보여지기 위해서 얼마나 많은 숫자의 변화가 이루어지는 지 상상하기는 쉽지 않습니다. 이처럼 숫자만으로 구성된 컴퓨터가 우리와 대화하기 위해 하는 일들을 보면 조금이나마 컴퓨터 속 세상을 알수 있을 것입니다.

컴퓨터가 우리와 대화하는 법

앞에서 이야기했듯이 컴퓨터 속에는 0과 1을 제외한 숫자는 없습니다. 글자, 사진, 동영상 등 컴퓨터가 보여주는 정보들은 모두 0과 1로 저장됩니다. 오직 0과 1만으로 수백만가지의 색과 수만가지의 글자를 보여줍니다. 컴퓨터는 이 수백만가지 색과 글자를 0과 1로 표현하기 위해 Coder 와 Decoder 를 활용합니다. 우리가 동영상 프로그램으로 영상을 재생할 때 사용하는 Codec이 바로 이 Coder 와 Decoder를 합친 말입니다.

컴퓨터 속에 codec은 0과 1로 표현된 숫자 정보를 색이나 글자같은 사용 가능한 다른 값으로 변환하는 기능을 수행합니다. 동영상 파일에 저장되어 있는 0과 1을 이용하여 순서대로 동영상 속 컬러를 재생하는 식입니다. 우리가 보는 글자도 유니코드 문자를 변환하는 codec에 의해 숫자에서 글자로 변경됩니다. 우리가 스마트폰으로 듣는 mp3도 audio codec 중 하나를 통해 이어폰으로 전달됩니다. 그렇다면 codec은 어떤 방식으로 이러한 일을 수행할까요?

codec은 0과 1로 구성된 숫자와 변환할 정보를 미리 매칭하여 두는 방식으로 정보를 변환합니다. 컴퓨터에서 많이 활용되는 ASCII 코덱은 이진수와 글자를 순서대로 연결해두고, codec에 들어온 이진수와 같은 순서에 있는 글자를 보여줍니다. 예를 들어, 이진수인 01100001(97)를 ASCII codec에 넣으면 알파벳 a가 나오고, 이보다 1만큼 큰 01100010(98)을 ASCII codec에 넣으면 다음 알파벳인 b가 나옵니다. 97부터 122까지 총 27개의 숫자에 각각의 알파벳이 순서대로 연결되어 있습니다.

컴퓨터는 codec을 이용해서 수많은 이진수들을 우리가 알아볼 수 있는 정보로 변환해줍니다. 수많은 이진수들이 수많은 codec을 통해서 적당한 값으로 변환되는 것입니다. 이진수와 연결된 정보는 codec마다 다른데, 이러한 특징은 우리에게 종종 당혹감을 주기도 합니다.

컴퓨터에 저장해놓은 문서가 궭뱛뤾 같은 이상한 문자로 변형되어 있는 것을 본적이 있나요? 이러한 문제는 우리가 일반적으로 컴퓨터에서 사용하는 codec과, 저장해놓은 문서의 codec이 달라서 생기는 문제입니다. 같은 01100001(97)이어도 ASCII codec에서는 알파벳 a 이지만, 연결된 값이 다른 codec에서는 일본어 ア 로 나오기도 합니다.

codec은 저장된 정보를 우리가 알아볼 수 있도록 바꿔주는 역할도 하지만, 우리가 컴퓨터에게 내리는 명령도 codec을 이용하여 이해하기도 합니다. 키보드를 컴퓨터에 꽂으면 설치되는 드라이버 속에는 키보드 각각의 버튼과 이진수를 연결해줄 codec이 함께 들어있습니다. 마찬가지로 마우스를 연결할 때도 버튼과 힐에 해당하는 움직임이 이진수와 연결되어 컴퓨터가 이해할 수 있게 변경해 줍니다.

컴퓨터 기술이 발달하면서 컴퓨터가 우리와 대화할수 있는 수단이 점점 늘어나기 시작했습니다. 그러한 대표적인 예로 3D 플레이어도 있습니다. 2D로 만들어진 동영상을 3D로 재생시켜 주는 3D 글래스는 왼쪽 화면에서 사용되는 codec과 오른쪽 화면에서 나오는 codec을 서로 다르게 적용하면서 두눈의 사이에 착시를 만들어내는 방식으로 만들어지기도 합니다.

컴퓨터에게 마중나가기

컴퓨터와 직접 대화하기 위해서 컴퓨터가 사용하는 0과 1을 이용한다면, 프로그램을 만드는 프로그래머들은 키보드에 0과 1 그리고 스페이스바만 있으면 됩니다. 수십자리에 해당하는 이진수를 외워서, 어떤 값이 0인지 1인지 알아야하고, 심지어 codec마다 연결된 값이 다르니 다른 codec을 사용할 때는 또 다른 이진수를 외워야 합니다.

이러한 과정을 간편하게 만들어준 것이 프로그래밍 언어입니다. 사람이 이해하기 쉬운 문자로 정보를 만들면, 이를 컴퓨터가 이해하기 쉽도록 바꿀 수 있게 만들어진 것이 바로 프로그래밍 언어입니다. 흔히 Python, C라고 부르는 언어들이 대표적인 프로그래밍 언어인데 우리가 흔히 사용하는 영단어들의 축약어로 구성되어 있는 경우가 많습니다.

프로그래밍 언어중에 가장 쉽다고 알려진 Python은 정말 간단하게 컴퓨터와 대화할 수 있습니다.

(이미지4.png, 자체 제작)

그림과 같이 2줄로 구성된 간단한 문장만 입력하면, 컴퓨터에게 'Winning team Doosan!'이라는 문장을 출력하라고 전달할 수 있습니다.

전세계적으로 프로그래머들이 많아지면서 쉽고 간편한 프로그래밍 언어들이 만들어지고 있습니다. 예시로 사용한 Python 뿐만 아니라 GO, Ruby 등 다양한 언어들이 프로그래머를 꿈꾸는 많은 학생들에게 열려있습니다. 컴퓨터를 좀더 이해하고 싶다면 프로그래밍 언어를 한번 배워보는 것은 어떨까요?

(이미지5.png, 스크린샷)

(*) https://www.bloc.io/ruby-warrior프로그래밍 언어에 대한 관심이 높아지면서, 위 홈페이지 처럼 프로그래밍 언어를 배우면서 게임을 해볼 수 있도록 홈페이지를 제공하기도 합니다.

컴퓨터와 과학

과학을 돕는 컴퓨터

우리가 사용하는 컴퓨터의 발전은 과학 덕분이지만, 어느덧 과학의 발전을 컴퓨터가 돕고 있습니다. 이미 많은 분야의 과학 연구에서 컴퓨터가 사람의 일을 대부분 대체하고 있습니다. 과거에는 컴퓨터가 과학 연구에 활용되더라도 주로 사람이 반복적으로 해야 할 일을 대신 해주거나, 사람의 일을 보조해주는 선에서 활용되었습니다. 하지만 이제는 컴퓨터가 발전하면서 실험을 통해 증명하기 어려운 가설들을 증명하거나, 컴퓨터를 이용해 가상 실험의 결과값을 예측하여 불필요한 실험을 줄여주기도 합니다.

컴퓨터의 영향을 받아 생긴 과학 학문도 존재합니다. 계산 물리학은 순전히 컴퓨터 상에 존재하는 데이터만을 활용하여 물리학을 연구하는 학문입니다. 실존하는 물질들을 가상의 데이터로 변환하여 컴퓨터 상에서 실험을 진행하기도 하고, 컴퓨터를 활용하여 복잡한 수식을 풀어내는 것도 계산 물리학에 포함됩니다. 최근에는 이론으로만 알려진 물리학 이론들을 계산 물리학을 통해 검증해내기도 합니다.

우주 과학의 발전에도 컴퓨터는 큰 역할을 하고 있습니다. 우주에서 얻는 데이터를 연구하기 위하여 우주정거장으로 슈퍼 컴퓨터를 보내기도 하고, 발사된 로켓의 경로 예측을 컴퓨터를 통해 계산해냅니다.

(천궁 1호의 추락 예측 시뮬레이션, 이미지6.jpg, 출처: http://www.freedomnews.co.kr/news/articleView.html?idxno=5393)

2018년 3월 말 부터 예측되어오던 중국의 우주정거장 천궁 1호를 아시나요? 중국이 만든 우주정거장으로 지구 내에 추락 중이라는 기사가 올라와 화제가 되었습니다. 천궁 1호는 매우 빠른 이동 속도와 높이, 바람의 영향 등으로 인해 정확한 추락 지점을 알수가 없어, 전세계가 불안에 떨었습니다. 당시 여러 컴퓨터 과학자들은 추락중인 천궁 1호의 궤도와 각 대기층의 저항력, 위성에서 전달된 각 대기층의 풍속 등을 바탕으로 천궁 1호의 추락 시나리오를 만들었고, 추락 2시간 전부터는 추락 지점을 확정할 수 있었습니다.

컴퓨터의 발전은 항상 과거보다 현재가 더 빠르게 진행되고 있습니다. 이론 물리학과 실험 물리학으로 나눠져있던 물리학계는 이제 컴퓨터가 주도하는 계산 물리학이 추가되었고, 수많은 화학자들은 새로운 원소의 조합을 컴퓨터로 실험해보고 있습니다. 앞으로 더 많은 과학 연구들이 컴퓨터를 통해 진행될 것이라는 예측은 많은 과학자들이 인정하고 있습니다.

컴퓨터를 돌보는 과학

컴퓨터를 통해 과학이 발전하면서, 다시 컴퓨터의 발전도 빨라지기 시작했습니다. 양자전기역학을 연구한 리처드 파인만은 1985년 발표한 논문에서 컴퓨터에도 양자역학을 적용 가능할 것이라고 예측했습니다. 흔히 알려진 좋은 양자 컴퓨터가 바로 이 논문에서 발표된 컴퓨터입니다.

양자 컴퓨터는 물리량의 최소 단위인 퀀텀을 의미하는 양자와 컴퓨터를 합친 단어입니다. 앞서 보았듯이 일반 컴퓨터는 전기가 통하는 1, 전기가 통하지 않는 0 두가지 값으로 작동합니다. 이와 다르게 양자 컴퓨터는 전자기파를 이용하여 원자를 붙잡아두는 기술을 이용합니다. 진공 공간에 원자를 풀어둔 후, 움직이지 않도록 한 뒤에 원자 하나하나를 옮겨 0, 1, 2, 3 등의 숫자를 구분할 수 있도록 하는 방식입니다. 이런 방식으로 한 공간에 원자를 2000개 넣어 0부터 1999까지 숫자를 셀수 있도록 할 수 있습니다.

양자 컴퓨터에 쓰이는 이러한 공간 1개를 qubit(큐빗) 라고 부릅니다. 하나의 qubit 이 표현할 수 있는 정보는 안에들어있는 원자의 수에 따라 다른데, 현재까지 나와있는 최고 성능의 qubit은 약 50개의 원자가 들어있습니다. 이 qubit 하나가 0부터 49까지의 수를 셀 수 있다는 것 만으로도 0과 1밖에 구분하지 못하는 일반컴퓨터와의 차이가 느껴집니다.

0과 1뿐 아니라 다른 숫자까지 표현할 수 있다는 장점이 얼마나 효과적일까요? 앞에서 이진수에 대해서 이해해보았으니, 49라는 숫자를 이진수로 한번 표현해 보겠습니다. 49는 110001 이라는 이진수로 표현할 수 있습니다. 1을 표현하는 bit 3개와 0을 표현하는 bit 3개가 필요하니 총 6개의 bit가 필요합니다. 50qubit으로 49를 표현하면, 1개의 qubit으로 표현이 가능합니다. 6대의 계산기가 1대의 계산기와 같은 성능을 내는 것으로 이해하면, 양자 컴퓨터가 얼마나 빠른지 예상이 되시나요?

지금까지 전세계에 출시된 양자 컴퓨터 중 가장 빠른 양자컴퓨터는 D-Wave 2 라는 양자 컴퓨터입니다. 가장 빠른 컴퓨터라니, 얼마나 좋을지 계산해볼까요? 기상청과 같은 많은 정보를 처리하는 곳에서는 슈퍼컴퓨터를 사용합니다. 슈퍼컴퓨터는 1초에 3경번 계산을 할 수 있는데, 이는 일반적으로 사용하는 컴퓨터의 6만대가 함께 작동하는 것과 같은 성능입니다. 양자 컴퓨터 중 가장빠른 D-Wave 2는 이 슈퍼컴퓨터보다 약 3600배 빠릅니다. 여러분 집의 컴퓨터보다 2억배 이상 빠른 컴퓨터이지요.

과학의 힘으로 발전한 컴퓨터의 성능은 다시 과학에게 힘을 보태고 있습니다. 이미 여러 영역에서 슈퍼컴퓨터 대신 양자컴퓨터를 도입하여 더 빠르게 정보를 처리하기 시작했습니다. 특히 우주 과학과 물리과학에서는 1년 이상 걸리는 연구를 양자컴퓨터를 통해 3주 미만으로 단축하기도 했습니다. 컴퓨터와 과학이 서로 도우며 발전하고 있는 모습입니다.

컴퓨터와 수학

양자 컴퓨터와 같이 과학이 컴퓨터에게 큰 도움을 주고, 컴퓨터도 과학에게 큰 도움을 주고 있지만 사실 컴퓨터의 기원은 계산기입니다. 영국의 수학자인 앨런 튜링이 만들어낸 튜링머신이 우리가 사용하는 컴퓨터의 기원입니다. 수학자이자 암호학자인 앨런 튜링은 세계대전이 일어난 시기, 독일군의 암호 해독을 위해 사용할 계산기를 만들고자 이 장치를 고안했습니다. 처음의 목적에 맞게 컴퓨터를 활용한 수학적 발견들이 지금까지 이어지고 있습니다.

컴퓨터가 해결한 수학 문제

"세계 지도를 4개의 색만으로 색칠할 수 있을까?" 라는 질문을 들어본 적 있으신가요? 언뜻 보면 쉬운 질문으로 보이지만 이 문제는 약 120년의 시간동안 답을 찾지 못한채 해메이다 1976년 컴퓨터를 통해 해결되었습니다. 당시의 컴퓨터 2대를 이용해 50여일동안 계산하여 찾아낸 결과입니다.

(이미지7.png, 자체 제작)

전세계에는 수많은 지도가 있고, 각 나라, 각 지역마다 세부 지역을 보여주는 지도가 존재합니다. 최초의 간단한 질문 속엔 "어떠한 모양의 지도라도 4개의 색만으로 색칠할 수 있을까?" 라는 내용이 들어 있습니다. 이 질문에 120년동안 답을 찾지 못한 것은 사실 지도로 표현 가능한 영역이 너무나 다양하기 때문입니다. 매번 새로운 지도가 나타났을 때마다 사람이 일일이 증명해 보아야 하는 답변은 오답일 가능성이 존재하기 때문입니다.

4색 정리라고 불리는 이 문제는 컴퓨터가 해결한 최초의 수학 문제로 널리 알려져있습니다. 총 633가지의 경우의 수를 컴퓨터에게 입력하여, 모든 경우의 수에 4색으로 표현 가능한지를 판단한 방식입니다. 사람이 직접 세보는 것보다 정확하고 더 빠른 이 방식은 수학자들에게 '아름답지 못한 증명'이라며 욕먹었지만, 결과적으로 수학의 발전에 도움을 주었습니다. 이 증명을 통해 위상수학의 많은 이론들이 발전하였고, 많은 수학자들이 컴퓨터를 통해 증명을 검증할 수 있도록 발판을 제공하였습니다.

컴퓨터와 수학이 만난 문제

4색 정리처럼 컴퓨터가 수학적 문제를 해결하기도 했지만, 새로운 수학적 문제를 만들어내기도 했습니다. 대표적인 문제가 P-NP 문제 입니다.

(이미지8.png, 자체 제작)

평소에 수학에 많은 관심을 갖는 학생들이라면 '밀레니엄 문제'라는 7개 문제를 들어본적이 있을 것입니다. 이 문제들은 한문제당 10억원에 가까운 상금이 걸려있는 엄청난 문제들로, 아직까지 7개중 1개의 문제만 해결된 수학의 난제들입니다. 앞서 언급한 P-NP 문제가 바로 이 '밀레니엄 문제' 들 중 1가지 입니다.

P-NP 문제를 간단히 알려드리고, 여러분이 10억원 상금의 주인공이 되길 기대하겠습니다. 일반적으로 컴퓨터가 해결할수 있는 문제는 P 문제라고 부릅니다. 컴퓨터가 문제를 해결하기 위해서 수행하는 계산의 횟수가 다항식으로 표현이 가능한 문제들을 P 문제라고 부릅니다. 예를 들어 숫자 100개 중 가장 작은 값을 찾는 문제들이 P 문제에 해당합니다. 좀더 수학적으로 이야기하면 P 문제는 문제의 해답을 찾기위해 걸리는 시간이 다항식(Polynomial) 으로 표현이 가능한 문제입니다. 100개 중 가장 작은 값을 찾기 위해선 단순히 99번의 연산 즉 (100-1)번의 계산으로 가능하지요.

반대로 NP 문제는 계산을 해서는 도저히 얼마나 걸릴지 예상이 안되지만, 답이 맞는지 틀린지에 대해서 판단하는 것은 예상이 가능한 문제들을 말합니다. 예를 들어 한붓 그리기 같은 것들이 해당합니다. 한붓그리기를 푸는 것은 어렵지만, 맞는 답인지 아닌지는 쉽게 판단할 수 있습니다.

P-NP 문제는 모든 NP문제가 P문제인지에 대한 질문입니다. 주어진 문제가 NP 문제라면, 이 문제가 P문제이기도 하냐는 것이지요. 이 문제가 왜 컴퓨터와 연관이 되어있을까요? 모든 P 문제는 컴퓨터가 해결 가능한 문제입니다. 정해진 시간안에 해결이 가능한 문제이니 컴퓨터에게 계산식만 넣어주면 되기 때문입니다. 반대로 P문제가 아니라면 컴퓨터가 해결할 수 없습니다. 어떤 계산식으로 문제를 해결해야 하는지 알수 없거나 또는 너무 오랜 시간이 소요되기 때문입니다.

P-NP 문제가 컴퓨터와 밀접한 이유는, 컴퓨터가 해결가능한 문제의 범위가 달라지기 때문입니다. 만약 모든 NP 문제가 P문제라면, 모든 NP문제는 컴퓨터로 해결이 가능한 문제이고, 아직 인류가 그 문제의 올바른 계산법을 모르는 것이다 라고 정리되기 때문입니다. 그렇게 된다면 컴퓨터를 통해서 어려운 문제들을 계산하는 방법을 모두 알아낼 수 있게 됩니다. 흔히 알려진 근의 공식처럼 어려운 문제의 쉬운 해법들이 컴퓨터를 통해서 만들어지게 될 수 있을지도 모릅니다.

컴퓨터와 더 친해지려면

컴퓨터가 과학과 수학에 얼마나 많은 영향을 주고, 받고 있는지 이해 되시나요? 컴퓨터가 성장해온 길에는 수많은 과학적 발전과 수학적 발견이 있었습니다. 그만큼 컴퓨터와 두 학문은 밀접한 관계에 있습니다. 컴퓨터를 잘 이해하기 위해 컴퓨터에 대한 공부뿐 아니라 과학 그리고 수학에 대한 공부도 무시할 수 없는 이유입니다. 컴퓨터를 잘 하기 위해서 단순히 프로그래밍 언어만 배운다면 내가 만들고 싶은 프로그램을 만들지 못할 수도 있습니다.

프로그래머가 되고 싶은 많은 학생들에게서 프로그래머들이 받는 질문 중 유명한 질문이 있습니다. "재밌는 게임을 만들고 싶은데 프로그래밍 언어를 열심히 공부하면 될까요?" 많은 게임 프로그래머들이 이 질문에 항상 대답하는 답은 아니오입니다. 모두들 수학 공부를 열심히 하라고 하지요. 이 질문에 대한 대답은 단순히 게임 프로그래머뿐 아니라 모든 프로그래머가 동일하게 이야기합니다. 물론 과학도 마찬가지입니다.

컴퓨터와 대화하는 것, 즉 프로그래밍 언어를 작성하는 일은 이 세상에 존재하는 무언가를 컴퓨터에게 전달하는 일입니다. 그 무언가를 설명하기 위해선, 수학적 사고와 과학적 근거를 컴퓨터에게 같이 전달해주어야 하지요. 여러분이 길을 가다가 넘어진다면 중력, 가속도, 물체의 탄성 등 다양한 수학적, 과학적 지식을 통해 이를 설명합니다. 프로그래밍 언어를 알더라도 이러한 지식을 갖추지 못한다면 컴퓨터가 내 말을 온전히 이해하지 못하게 됩니다.

가장 중요한 것은 일상 속에서 일어난 일들을 한번씩 수학, 과학을 이용하여 설명하려고 시도해보는 습관입니다. 하루에 한번씩 생각해본 경험이 프로그래머가 된 이후에 정말 큰 힘이 될 것입니다. 그러한 경험들이 쌓여, 다양한 현실속 일들을 컴퓨터에게 전달할 수 있게 되면, 컴퓨터 속에서 나만의 세상을 만드는 것도 어려운 일이 아닐 것입니다.