Bongta      

code - ④

소요유/묵은 글 : 2008.02.16 20:12


사용자 삽입 이미지

저는 앞에서 질적 자료일지라도 컴퓨팅의 객체가 되기 위해서는
양화(量化)되어야 한다고 말했습니다.
저는 지금 이 순간 양화가 필요하다라든가, 가능하다든가, 마땅하다든가
하는 따위의 증언을 하고 있지 않습니다.
다만, 컴퓨터의 세계에선 양적 자료만 취급한다라는 말씀을 드릴 뿐입니다.

이를 전제로, 자료 또는 정보를 어떻게 셈(=演算)의 세계로 끌어들여
다루는가 하는 그 방법론을 말씀드리고자 합니다.
여기서 잠깐 멈추어, 생각난 김에 미리 말씀드려두는 바입니다만,
컴퓨터는 양화(量化)될 수 있는 것만을 취급한다는 것을 잊지 마시기를 부탁드립니다.
결국은 양화(量化)의 한계를 지적하는 것이 되고 말았습니다만,
한계가 정말 있는지, 있다면 그 수준은 어느 정도이며, 그것이 극복될 수 있는 것인지
“이 물음들이 스스로에게 진지하게 던져져야 한다”는 것을
저는 재차 확인해두고자 하는 것입니다.

Binary numeral system(2진법)

자, 여기 콩이 있습니다.
이 콩을 세고자 합니다.
소반 위에 콩을 죽 벌려놓고 하나하나 고르며 낱알들을 세어갑니다.
이리 세어나가면 언제고 콩을 셀 수는 있겠지요.

동화 신데렐라에서는 계모가 완두콩과 렌즈콩을 잿가루에 섞어놓습니다.
신데렐라는 이를 가려놓아야 무도회에 갈 수 있습니다.
이 때, 신데렐라의 석발(石拔)행위는 무도회에 참석하기 위한 고행일 터이지만,
왕자비가 되기전까지는, 콩을 고르는 과업은 계모로부터 되풀이 부과될 것입니다.

강력한 컴퓨팅파워를 가진 컴퓨터가 마련되어 있습니다.
하지만, data를 셈하기 위해서는 특별한 취급기술을 고안해야합니다.
동화에서, 신데랄라는 다행히 새들의 도움을 받아 콩을 골라냅니다.
하지만, 사람들은 정보(데이타)를 셈하는 방법을 아래와 같이 스스로 고안했습니다.

그것은 2진법입니다.
삼라만상을 2가지 상태(2 state)로 나눕니다.
이것을 음, 양으로 이름하여도 좋고, 0, 1로 이름하여도 좋습니다.
또는 밤/낮 또는 여자/남자로 불러도 좋습니다.
하여간 둘로 나누었다라는 사실에 주목하도록 합니다.
이 2 state로 나누어 정보를 다루고자 하는 최초의 시도가 있었고,
그것을 일찍이 동양에서는 음/양이라고 칭했지요.
컴퓨터에서는 이를 0/1로 나누어 구별하고,
이 정보 구별 단위를 bit라고 명명합니다.
bit는 binary digit의 약자로서 정보(계량)의 최소단위가 됩니다.

bit 하나로는 정보를 단지 2개로 변별합니다.
만약 bit 두 개를 동원한다면 4 state(2^2)까지 구별 가능합니다.

00
01
10
11

첫째 자리 bit가 0,1의 2 state,
둘째 자리 bit 역시 0,1의 2 state가 가능하므로,
이처럼, 경우의 수는 도합 4가지가 됩니다.

1bit로 예컨대 여자/남자를 구별하는데 이용한다면,
2bit로는 서양여자/동양여자/서양남자/동양남자와 같이 더 세밀히 분별할 수 있습니다.
이런 식으로 bit 수를 늘리면

4bit => 1^4 = 16
8bit => 1^8 = 256
16bit => 1^16 = 65536
등으로 폭발적으로 다룰 수 있는 state 수가 늘어납니다.

8bit는 1byte라고 칭하며,
보통은 1byte를 정보 처리의 기본 단위로 취급합니다.

1byte가 256 state를 변별할 수 있기 때문에
이 정도면 현실 세계에서 바로 무엇인가를 도모할 수 있습니다.
1byte를 이용하여 문자를 구별하는 실제 예를 간단히 살펴보지요.

우리가 흔히 쓰는 컴퓨터 자판을 보면 알파벳과 기호들이 배열되어 있습니다.
이들은 ASCII라는 코드체계에 따라 각 key마다 일대일로 코드화되어 있습니다.
이게 기본형은 1byte로 되어 있는데,

01000001 = A
01000010 = B
01000011 = C
...

등으로 알파벳 각 문자가 8bit(=1byte) 특정 코드(code)에 배대되어 있습니다.
8bit는 256 state를 나타낼 수 있으므로,
문자뿐이 아니고 $%^... 등등의 각종 기호도 충분히 카바할 수 있습니다.
(* 한글은 초.중.종성으로 되어 복잡하므로 1byte로 전부 나타낼 수 없어 2byte가 필요합니다.)

###

여기서 잠깐 컴퓨터는 왜 2진법을 사용했을까 생각해봅니다.
현실의 세계에서 우리는 10진법을 사용하고 있습니다.
컴퓨터에서 10진법을 쓰지 않고 굳이 2진법을 사용하게 된 이유가 있을 것입니다.

어떤 진법을 택하느냐에서 가장 중요한 점은 속도와 효율성 그리고 현실 적응성입니다.
수학적인 관점에서 보면, 상태 가짓수를 적은 표현량으로 표시할 수 있는 것은
실제론 2진법보다는 3진법이 더 효율적입니다.

앞에서 언급하였듯이 컴퓨터는 flipflop이라는 기본 소자를 기초로 연산기능을 수행합니다.
flipflop은 0, 1 두가지 state를 가지는데, 이게 2진법과 동일합니다.
사실 컴퓨터는 이 flipflop들의 거대한 집적물이라고 하여도 과언이 아닙니다.
컴퓨터를 flipflop 수십억개로 이루어진 거대한 스위칭시스템(switching system)이라고
개념적으로 이해해도 됩니다.
이것들이 일사분란하게 조직되어 단위 flipflop 각각이 on/off(set/reset) 되며
특정 과업을 수행하게 되는 것이지요.
밤하늘에 명멸하는 별처럼 각자는 초고속으로 켜졌다, 꺼졌다하며 회로안에서 자신의 소임을 다합니다.

- 어느날 밤 불이 켜있지 않은 방안에 제가 들어섰습니다.
마침 개복(開腹)된 컴퓨터내의 LED가 깜빡이며 한참 돌아가고 있습니다.
순간 저는 광막한 우주에서 반딧불처럼 반짝반짝 빛을 내며 고독 속을 걸어가고 있는 
생명체를 대한듯 반갑기도 하고, 한편으로는 쏴하니 슬픔이 지나더군요.
저 차가운 물체에 숨을 불어넣은 이가 그 누구이던가 ?
아니 그는 어디서 와서,
인적 드문 골짜기에 수줍게 핀 꽃인 양,
저리 외로와, 파르르 떨고 있는 것인가요 ?
불을 켜면, 저 위로 광풍이 몰아재껴,
저 생명이 다칠까 두려웠습니다.
그저 가만히 멈춰, 어둠을 지켜주고 싶었습니다. -

on/off의 단순성, flipflop과 2진법의 정합성, 전압레벨의 판독 신뢰성 등에 있어 
현재로선 2진법의 현실 적응성이 3진법보다는 뛰어납니다.
하지만, 차후 다른 진법체계가 택해져 그것으로 변할런지도 모릅니다.
세상 모든 것은 변합니다.
현재라는 이름 하나로 2진법을 고집할 까닭은 없습니다.

태극을 보면, 보통은 음양으로 된 二太極이 일반적입니다.
그러나 우리나라 고유의 태극은 본시 三太極입니다.

사용자 삽입 이미지

삼태극은 천지인 3요소로서 그려지는 것이니,
이는 3진법에 속합니다.
예전에 모신학대학교수가 퍼지이론과 韓철학을 연결하여 연재한 칼럼을 본 기억이 있는데,
거기에서 그는 삼태극을 거론하며,
컴퓨터에서 2진법보다 3진법을 사용하면 더 효율적이라고 주장하였습니다.
이것을 소개드리고 싶었습니다만, 수십년전 전자신문에서 본 기사라,
지금은 찾아낼 길이 없군요.

여담입니다만, 생각난 김에 몇마디 보탭니다.
그림에서 보면 맨우측 그림은 국민고충처리위원회 로고인데,
이는 삼태극이 아닌 예로 제가 우정 예시한 것입니다.
이런 모양의 것이 우리나라 모항공사 로고에도 보입니다.
짐작컨대, 디자인된 창작물일 터이지만,
저로서는 태극문양은 이리 함부로  비틀어 그리면 재미 없다라는 것을 특별히 지적하고 싶군요.
삼태극은 중심을 향해 삼자가 서로 균등 분할하여 자리를 나누어 잡고 있습니다.
삼자간 넘치고 기우는 것이 없이 서로 평등한 자리를 지키고 있으면서도
중심을 깃점으로 나선형의 형상을 하고 있어, 역(易)의 동적 변화 가능성을 내포하고 있습니다.

허나, 지적한 이들 로고에서는 공간이 삼분되었을 뿐,
삼자간 통일된 세력 균형에 대한 고려가 없습니다.
오히려 중앙색이 다른 두 색 영역을 가르고 있어 분열상을 노정하고 있는 것입니다.
또는 청홍의 음양이 가운데 백색이란 이질적 세력의 등장으로
갈등을 겪지 않을 수 없는 모습입니다.

보십시요.
이태극이든, 삼태극이든 제대로 된 문양에선, 소용돌이 모양을 하고 있습니다.
때문에, 나누어진 그대로 고착된 것이 아니라,
음양의 동태적인 균형이 상보적인 관계속에서 예비되고 있습니다.
이들 이자 또는 삼자 내에서, 세력간 우열이 없이 대등한 점 역시 주목하여야 할 점입니다.

제가 易에 그리 정통한 것은 아닙니다만,
이들 변형된 태극문양은 易學上 대단히 凶한 형국으로 읽혀집니다.
수십년전 한참 우리나라 국적기의 추락사고가 빈번할 때,
저는 그 항공사의 로고에 주목하여, 혼자 의심하며 쓴웃음을 지은 적이 있었습니다.

특히 태극, 괘상 등을 원용한 디자인은 극히 조심하여야 합니다.
태극중 음, 또는 양 하나를 취한다든가,
이를 섣불리 변형하는 것은 바람직하지 않습니다.
태극이란 부호가 뿜어내고 있는 영적기운을 믿건 아니건을 떠나,
변형된 순간 그것은 태극이 아니라는 것을 잊어서는 아니됩니다.
그것이 태극이 아닌 이상,
애초에 태극을 빌어 기도하고자 했던 상징성도 훼손되고 마는 것입니다.
세상에 태극의 상징성을 벗어나 구할 태극 이상의 것으로 무엇이 있을 터인지요 ?
보십시오.
역사의 뒷안길로 스러진 우리나라의 몇몇 정당들의 로고 역시
태극의 변형물들이 적지 않습니다.
그들은 국민을 배반하였을 뿐만 아니라, 태극도 모독한 것이 아닐런지요 ?

하지만, 이에 큰 의미를 부여하는 것은 적절하지 않습니다.
그런 태도 역시 code에 대한 지나친 집착의 결과일 터.
재미로 일별하고 그냥 지나치시길 바랍니다.

###

다시 정리합니다.
8bit 즉 1byte는 256 state를 변별할 수 있다라는 것이고,
이들 state를 특정 문자들과 짝을 지어 배대하면
문자 일습을 코드화할 수 있다라는 소식을 전했습니다.

여기서 잠깐 code란 무엇입니까 ?
이게 사전을 찾아보면 기호, 암호 정도로 새겨집니다만,
여기서의 주제어인 code는 무엇을 감추려는 의도하에 만들어진 암호와는 성격이 다른 것인즉
일단은 기호 또는 부호 정도로 새겨놓고 출발하시지요.

지금 저는 편의상 예를 들기를 문자셋트에 한정하여 말했습니다.
이 때 말씀드린 ASCII는 American Standard Code for Information Interchange의 약어로서
정보통신용 미표준코드쯤으로 새기면 됩니다.

이리 미리 마련된 코드체계에 따라 문자/기호들을 2진법의 코드로 변환할 수 있습니다.
이리 변환하는 까닭은 무엇입니까 ?
2진법으로 변환시키면, 컴퓨터에서 다루기가 쉬워지기 때문입니다.
2진법의 0,1은 전기신호의 on/off와 바로 정합되므로 컴퓨터가 처리하기 용이해지는 것이지요.
이제 컴퓨터에선 인간의 문자가 아닌 2진법 0,1로 이루어진 수를 대상으로 처리를 하게 되므로
고속으로 목표 작업을 수행할 수 있는 것입니다.
최종적으로 작업이 완료되면,
이젠 역으로 현실 세계의 문자로 되변환합니다.
이 때 인간이 비로서 이를 취하게 되는 것입니다.

여기서, 문자 -> 2진법 숫자의 세계로 변환하는 것을 coding이라 하며,
반대로 2진법 숫자 -> 문자로 변환하는 것을 decoding이라 합니다.

그런데 코드체계는 ASCII만 있는 것이 아닙니다.
문자 중심의 코드로는 EBCDIC, MBCS 등 여러 코드체계가 있습니다.
또한 문자코드에 국한 된 것이 아니라, 
다른 영역에서도 필요에 따라, 다양한 약속된 코드체계가 만들어져 있습니다.
때로는 임의로 국지적인 소용에 따라 창설되기도 합니다.
즉, S/W를 만드는 일개 프로그래머도 자신의 필요 따라 프로그래밍 과정 중
code를 자유롭게 짓고 허물며 작업을 하게 됩니다.

그런데, 기실은 이 프로그래밍이라 것 자체 역시 한치도 틀림없는 코드입니다.
그런즉, 프로그래밍을 다른 말로 코딩이라 하기도 합니다.
물론 이 경우는 공인된 약속어인, 컴퓨터 언어를 사용합니다.
이게 이해 난이도로 보아 기계쪽에 가까우냐, 인간 쪽에 가까우냐에 따른
차이가 있습니다만,  하여간 다양한 프로그래밍 언어가 존재합니다.
이 부분은 지금 논의에서 중요한 게 아니니까 이 정도에서 그칩니다.

어쨋든, 여기서 중요한 것은
사물에 임하여 coding/decoding 한다는 것.
이게 중요한 핵심입니다.

정작 논의하고자 하는 code에 앞서 서론이 이리 길어졌습니다.
이를 바탕으로, 다음 회차부터는 code에 대하여 집중하고자 합니다.
앞으로 마무리 짓는데 2회가 예상됩니다.


====================================================================

댓글 모음

bongta :

ooo/

역시, 아주 중요한 점을 지적해주시는군요.
컴퓨터에서의 code는 다른 종류의 code에 비해서는 오히려 문제를 덜 일으키는 측면이 있습니다.
앞에서 지적한 量化란 문제를 논외로 한다면 말입니다.

즉 coding/decoding이 아주 건조한 형식으로 1:1 대응되기 때문입니다.
말씀하신 $0000FF(16진법 표기) = blue라고 했을 때,
blue를 $0000FF로 바꾸어 표기했다고 치부하면 그만입니다.
그러니 제기하신 문제는 컴퓨터 code인 $0000FF가 아니라
곧 blue란 언어의 문제에 다름아닙니다.
(물론 그후에 컴퓨터 안에서 조작처리하는 방식을 문제 삼을 수는 있을 것입니다.
이 문제는 또 다른 문제겠지요.)

하지만, 주역에서 가령 地天泰란 괘가 있다면,
이것은 새로운 언어 즉 code인 것이지요.
게다가, 주역에서는 기표, 기의문제가 일반언어와는 다릅니다.
즉 지천태에 대한 해괘(解卦)가 decoder(卜者)에 의해
천차만별 다 다르게 나타날 수 있다는 것입니다.
이 문제는 次回에서 잠깐 다룰 예정입니다.

code란 기실 매개적인 앎을 긍정한다든가,
그런 형식을 통해 세계를 이해할 수밖에 없는 인간 한계의 징표이기도 합니다.
ooo님이 늘 말씀하신 동물들은 직접적인 경험으로 세상을 살기에
coding이란 “분리를 예정하는 척도”를 사용하지 않을런지도 모릅니다.

code 문제로부터 시작되었지만,
이게 나아가면 관념성, 실재성 등의 문제로 전개될 형편입니다.
이 부분은 다른 분들의 도움으로 완성되어야 할 과제입니다.
저는 그저 문제 제기 정도의 수준에서 이 글 씨리즈를 마무리할 예정입니다.

'소요유 > 묵은 글' 카테고리의 다른 글

쩍벌녀  (0) 2008.02.18
code - ⑥ 終回  (0) 2008.02.17
code - ⑤  (0) 2008.02.17
code - ④  (0) 2008.02.16
code - ③  (0) 2008.02.16
code - ②  (0) 2008.02.15
code - ①  (0) 2008.02.15
Bongta LicenseBongta Stock License bottomtop
이 저작물은 봉타 저작자표시-비영리-변경금지 3.0 라이센스에 따라 이용행위에 제한을 받습니다.

  댓글 쓰기