코딩? 너도 할 수 있어! (파이선)
여러분은 외국어를 몇 개 국어나 할 수 있나요? 대부분은 모국어인 한국어를 제외하고, 영어 조금과
학교에서 배운 제2외국어 인사말 정도 아는 수준일 것입니다. 외국어를 배우기 어려운 이유는 새로운 언어이기
때문인 것도 있지만 일상생활에서 외국어를 배우기 어려운 이유는 새로운 언어이기 때문인 것도 있지만 일상생활에서 외국어를 사용할 일이 별로 없기 때문입니다. 컴퓨터 언어도 ‘외국어를 배우는 것’과 비슷합니다. 새로운 언어이기
때문에 자주 접하고 많이 사용해야 실력이 늡니다. 그럼 컴퓨터 언어를 살펴보기 전에 우리가 언어를 이해하는 방법을 잠깐 생각해 보겠습니다.
우리는 언어를 어떻게 이해하는가? 우리말로 ‘사과’인 빨갛고 동그랗게 생긴 과일을 영어인 ‘apple(애플)’로 얘기해도
듣는 사람의 머릿속에는 ‘사과’,‘apple’ 같은 단어가 아니라 빨갛고 동그랗게 생긴 사과 이미지가 떠오릅니다. 즉, 언어는 사람과 사람 사이에 정보를 전달하기 위한 수단일 뿐이고 머리로는 언어를 생각하지 않습니다. 아주 오래전 ‘언어’가
아직 발달하지 않았을 때 인류의 선조들이 그림으로 표현하고 소통했던 것과도 일맥상통하지요.
컴퓨터는 대화를 어떻게 이해하는가? 컴퓨터의 세계도 사람의 세계와 똑같다고 말할 수 있습니다. 예를 들어 사과를
‘사과’, ‘apple’이라고 언어마다 각각 다르게 표현하듯이 사람이 대화하는 ‘언어’도 여러 종류가 있습니다. 또한 어떤
언어로 말하든 사람이 머릿속으로 사과 이미지를 떠올리듯이, 컴퓨터는 머릿속에서 한 가지 방법으로만 생각합니다.
그렇다면 컴퓨터가 머릿속에서 생각하는 한 가지 방법은 무엇일까요? 그것은 바로! 비트라고 합니다. 컴퓨터는
머릿속에서 비트라는 단위로 생각합니다. 비트? 조금 낯선 용어이네요. 비트의 원래 의미를 사전에서 찾아보았는데요. 단어의 의미는 ‘조금’,‘잠깐’이라고 합니다. 아마도 컴퓨터를 처음 개발한 분들이 컴퓨터의 생각 단위가 너무너무
단순하고 쪼그맣다고 해서 ‘쪼끔’이라는 별명을 붙인 것이지 않을까? 라고 생각해 보았습니다. 대체 얼마나 단순하기에 ‘쪼끔’이라고 했을까요? 비트에는 딱 두 가지 뜻만 있습니다. 전등의 스위치를 켜고 끄는 것과 같은 의미인 끈다는 것(Off)과 (On) 켭니다. 컴퓨터 개발 초기에는 ‘전기가 들어오고, 들어오지 않고’를 하나의 의미 즉 신호로 이해했습니다.
하지만 ‘전기가 들어오고, 들어오지 않고’와 같이 표현하면 의미 전달이 간결 명료하지 않기 때문에 쉽게 ‘아니요(No)
또는 예(Yes)’속은‘거짓(False) 또는 참(True)’ 혹은 ‘0 또는 1’이라고 표현을 바꿔서 말하기 시작했습니다. 이 중에서 0
또는 1’ 이 짧은 말을 좋아했던 초기 개발자들이 가장 선호하는 표현이었습니다. 결론적으로는 ‘비트는 0 또는 1중 하나의 정보를 가지는 쪼끄만 정보 단위다’라고 이해할 수 있습니다. 그런데 말이죠? 좀 이상하지 않나요? 손바닥만 한
스마트폰도 상상할 수 없을 만큼 다양한 일을 처리하는데, 컴퓨터가 생각하는 방식이 이렇게 단순해도 될까요? 그래서! 한가지 약속을 정한 게 있습니다. 각기 다른 비트의 조합이 의미하는 것들을‘약속’했습니다. 이렇게 ‘약속된 0, 1로
만들어진 부로’를 코드(Code)라고 부릅니다. 먼저 코드의 단어 뜻을 같이 알아볼까요? 부호의 의미도 있지만 관례, 규정이라는 뜻도 있습니다. 좀 더 친숙한 표현으로는 ‘약속’을 의미합니다. 그래서 프로그래밍에서 ‘코드’란 서로 간의 규정 또는 약속의 의미가 더해진 ‘약속된 부호’로 이해할 수 있습니다. 0 여러 가지 표현을 만드는 방법을 알아낸 다음, 컴퓨터 개발자들은 사람의 언어와 컴퓨터 언어를 연결하기 위해 약속이 몇 가지나 필요한지를 곰곰이 따져 보았습니다. 그 과정에서 영문 알파벳과 숫자, 특수문자의 개수를 일일이 세어보고, 비트를 8개 정도 연결하면 충분한 약속이 만들어질 수
있다는 것을 알게 되었죠. 그래서 비트 8개를 묶어서 1바이트라는 새로운 단위를 만듭니다. 왜 바이트라고 처음에 표현했는지는 알 수 없지만, 저의 상상으로는 한 입 베어 물어 먹을 만큼 쪼끄만 단위를 모아놓은 조각이라는 의미에서
‘한 입’이라는 뜻의 영어단어 바이트에서 따온 것이 아닌가 싶습니다. 지금까지의 이야기를 토대로 살펴본 대로 전달할 때는 아스키코드로 때는 DK 코드로 해석하면 정보가 잘못 전달됩니다. 이런 상황을 디코딩 오류라고 합니다. 사람의
언어를 컴퓨터 언어로 바꾸는 과정을 인코딩, 그 반대의 과정을 디코딩이라고 하는 데서 유래된 용어죠. 그렇다면
암호화된 코드는 어떻게 만들어지는가? ‘암호화’ 또한 인코딩, 디코딩과 원리가 같습니다. 코드의 내용이 공개되지 않고, 암호화 코드를 특정 사람들만 알아볼 수 있도록 제한한다는 점만 다를 뿐입니다. 예를 들어 2차 세계대전에서 독일군이 ‘뚜-뚜-뚜-뚜’라는 신호를 ‘미사일 발사’로 해석하는 코드를 비밀리에 만들어 사용한다면, 영국군은 ‘뚜-뚜-뚜-뚜’라는 신호를 몰래 엿듣는다고 하더라도 그 의미를 알 수 없기 때문에 이해를 못 합니다. 암호화되었기 때문입니다. 만약 ‘뚜-뚜-뚜-뚜’ 신호가 들리고 독일군이 실제로 미사일을 발사하는 일이 여러 번 반복되면 그때부터는 영국군도 ‘뚜-뚜-뚜-뚜’가 ‘미사일 발사’와 관련된 신호라고 예상할 수 있겠죠? 이런 식으로 암호 해독이 진행됩니다.
하지만 실제로는 상대방이 알아채지 못하게, 더욱 복잡한 방법으로 신호를 주고받습니다. 노이즈를 끼워 넣는 것이
하나의 예입니다. 예를 들면 독일군끼리는 처음 두 가지 신호는 아무런 의미가 없는 신호라고 규정하는 것입니다.
이렇게 되면 독일군 사이에서는 ‘뚜-뚜-뚜-뚜-뚜-뚜’든 ‘뚜-뚜-뚜-뚜-뚜-뚜’든 ‘미사일 발사’를 의미하는 같은 신호일 뿐입니다. 하지만 영국군 입장에서는 두 신호가 다르게 들리기 때문에 이 신호의 의미를 해석하는 일이 좀 더 복잡해집니다. 이런 식으로 코드 암호화가 갈수록 진화해 2차 세계대전 중엔 도무지 해독이 불가능한 복잡한 암호가 등장하게
됩니다. 하지만 앨런 튜링이라는 천재 수학자가 컴퓨터를 이용해서 굉장히 빠른 속도로 암호 해독을 해내는 데
성공합니다. 앨런 튜링 덕분에 군사기술에서 컴퓨터의 성능이 비약적으로 발전하게 되었고, 이제는 컴퓨터 없는 세상은 상상조차 할 수 없게 되었습니다.
'코딩' 카테고리의 다른 글
너도 코딩 할 수 있어! 5편 (파이선) (0) | 2022.07.04 |
---|---|
코딩? 너도 할 수 있어! 4편 (파이선) (0) | 2022.06.29 |
코딩? 너도 할 수 있어! 3편(파이선) (0) | 2022.06.27 |
코딩? 너도 할 수 있어! 3편 (파이선) (0) | 2022.06.25 |
코딩? 너도 할 수 있어! 2편 (파이선) (0) | 2022.06.24 |