안녕하십니까? 박성수입니다.
오늘은 먼저, 아스키코드(ASCII CODE)와 스캔코드(Scan Code)에 대하여
말씀드리고자 합니다.
제가 이것부터 택한 것은 얼마 전, 어느 분이 바로 이 질문을 했기
때문입니다.
뭐 그냥 알면 아시는 대로, 모르면 모르시는 대로 넘어가셔도 괸찮으리라
여겨집니다.
그럼, 시작해볼까요?

1. 아스키 코드(ASCII Code : American Stand Code for International
Interchange)
아스키코드란 한 마디로 얘기해서, 우리가 어떤 특정한 문자는 어떤 특정한
코드로 하자고 약속한 것입니다.
예를 든다면, 점자에서 ㄱ 은 4점, ㄴ 은 1 4 점, .... 하는 식으로
컴퓨터에서도 대문자 A 는 아스키 코드로 65(41h), 대문자 B 는 66(42h) ....
대문자 Z 는 90(5Ah), .... 소문자 a 는 97(61h), .... 소문자 z 는 122(7ah)
등의 코드로 정하기로 약속한 것입니다. (괄호 안의 숫자는 16진수(Hexa
code)를 나타냄)
이렇게 문자에 대하여 코드값을 부여하는 이유는 컴퓨터에게 일정한 신호를
일정한 값으로 바꿀 수 있도록 하기 위함입니다.
컴퓨터는 사실, 우리가 사용하는 문자를 알지 못하지요! 아니 알 수가
없지요!
그럼에도 불구하고, 우리가 A 라는 문자를 입력하면 A 로 출력하는 이유는
입력되어진 특정한 신호에 대응하는 특정한 코드값이 있기 때문입니다.
만일, 이러한 약속된 코드값이 없다면 어떻게 될까요?
아마도 컴퓨터는 대혼란에 빠질 겁니다.
예를 들어, 갑이라는 사람의 자신의 컴퓨터에서 문서를 작성해서 을이라는
사람의 컴퓨터에서 출력을 하려고 할 경우, 갑과 을의 컴퓨터의 코드값이
다르다면, 갑의 컴퓨터에서는 A 로 보였던 문자가 을의 컴퓨터에서는 K 로
보이고, 갑의 컴퓨터에서는 분명 숫자 0 이었는데, 을의 컴퓨터에서는 X 이고
.... 이런 현상이 일어날 겁니다.
여러분, 혹시 우리 점자에서 옛날 점자와 요즘 점자를 아시는지요?
점자로 1 2 3 4 5 점을 써놓고, 읽어봐라 하면, 요즘 사람들은 당연히 '인'
이라고 읽겠지요? 그러나, 예를 들어, 80 드신 우리 대선배 할아버지께
읽어보시라고 한다면, '인'이 아니라 '예'라고 읽을 것입니다.
그래서, 우리의 옛날 성경을 보면, "인수께서 가라사대 ...." 하는 말이
많이 나오는데, 사실은 그것이 인수가 아니라, '예수'인 것입니다.
이제 왜 아스키코드가 필요한 지 대충 짐작을 하셨으리라 여겨집니다.
현재, 1바이트(8비트)로 한번에 만들어낼 수 있는 문자의 조합은 2^8(2의
8승)=256 개(0부터 255) 이며, 이 중에서 2^7(2의 7승)=128 개(0부터127)
까지를 아스키코드로 지정해 놓고 있습니다.
이를 잠깐 살펴보면, 0-31(0h-1fh)는 각종 특수문자키, 32-47(20h-2fh)는
각종 부호, 48-57(31-3ah)는 숫자, 58-64(3bh-40h)는 각종 부호, 65-90(41h-
5ah)는 영어 대문자, 91-96(5bh-60h)는 각종 부호, 97-122(61h-7ah)는 영어
소문자, 123-127(7bh-7fh)는 각종 부호 등입니다.

여기까지가 아스키코드에 관한 설명인데요. 아스키코드는 아니지만, 우리
한글코드에 대해서 잠깐 살펴보고 넘어가기로 합시다.
아까 제가 1바이트는 8비트로서 2의 8승 하면 256 가지의 코드 표현을 항ㄹ
수 있다고 말씀드렸었지요?
그런데, 한글은 어떤가요? 초성 19자, 중성 21자, 종성 무받침까지 28자,
이것을 조합해서 나올 수 있는 한글의 글자 수를 보면,
19*21*28=11172가 나옵니다. 이것이 현대 한글의 총 자수이고, 이렇게 조합을
해서 만든 한글이 바로 조합형 한글입니다.
그런데, 1바이트 즉, 256개의 코드 가지고 어떻게 이 한글의 글자를 다
표현하겠습니까? 그것도 영어와 숫자 및 기타 부호와 충돌하지 않으면서,
....
그래서, 다양하게 연구를 한 결과 1바이트만으로는 아무래도 부족하고,
2바이트를 결합하여 한글을 만들게 된 것입니다.
2바이트가 결합하게 되면, 8비트+8비트 즉, 16비트가 되게 되지요?
16비트로 표현할 수 있는 코드의 가지 수는 2^16(2의 16승)=65536 이
됩니다.
그런데, 우리는 조합형 한글이니, 완성형 한글이니 하고 얘기하고 있지요?
이게 뭐냐면, 어쩌면 아스키코드의 개념과도 연관이 될 수 있는 것입니다.
원래의 개념은 조합형한글은 아까 말슴드린 대로 초성 * 중성 * 종성
(19*21*28)=11172자를 만든 것인 데 비해, 완성형한글은 한글 11172자 중
특히 많이 사용되는 2350 자를 뽑아 단순하게 이에 대한 코드를 부여해 놓은
것입니다.
그러니, 완성형 한글에서는 외국어 등을 표현할 때 빠진 글자가 많아서
키보드로 표현이 안되는 것이 많을 수밖에 없지요!
뭐 여기까지는 사용자에 입장에서는 조합형한글과 완성형한글의 차이점을
느끼지 못할 수도 있습니다. 그러나, 정작 문제는 똑같은 한글 글자(예를
들면, 가 나 다 라 ....)라고 할 지라도, 조합형한글과 완성형한글 사이에
코드값이 다르다는 것에 문제는 비롯되는 것입니다.
그러니, 조합형에서 완성형을 보고 들으면, 깨져 보이고, 완성형에서
조합형한글을 보고 들으면 또 이상하게 깨져보이는 겁니다. 미국처럼 같은
글자에는 같은 통일된 코드를 부여해 놓고 사용한다면 이러한 문제는 전혀
발생하지 않겠지요!
그래서, 엄밀히 말하면, KSCII(Korean Standard Code for International
Interchange)가 있어야 한다고 저는 주장을 합니다.

이제 정말 아스키코드에 대한 설명을 마무리하려 합니다.

2. 스캔코드(Scan Code)
아스키코드가 우리가 사용하는 문자에 특정한 코드값을 부여해 놓은
것이라면, 스캔코드는 우리가 사용하는 키보드의 특정한 한 키에 특정한
고유의 한 값을 부여해 놓은 것입니다.
우리가 키보드를 눌렀을 때, 키보드에서는 어느 특정한 신호가 컴퓨터
정해져야 하고, 이 신호는 같은 키는 같은 키에 대하여 같은 신호이어야
하겠지요? 만일, 그렇지 않다면, 우리가 같은 키를 눌러도 때에 따라서 다른
동작을 할 테니까요.
우리가 그냥 눌러서 비록 아무런 동작을 하지 않는 것 같은 키(예를 들면,
ctrl, alt, shift .... )등도 고유의 키값을 가지고 있는 것입니다.
그래서, 스캔코드의 수는 단독으로는 우리가 사용하는 키보드의 수와 같고,
여기에서 다시 배합이 되어 나가는 것입니다.
스캔코드는 일반적으로 4자리의 숫자로 표현되는데, 앞의 2자리는 좌우
컴트롤키와 좌우 쉬프트 및 좌우 알트키의 조합을 나타내고, 다음의 2자리는
키보드의 배열에 따른 고유의 키보드의 값을 나타냅니다.
예를 들어, 우측 쉬프트키의 값이 01 이고, 숫자 1의 값이 02 라면, 우측
쉬프트+1 을 동시에 누른 스캔코드값은 0102가 되는 것입니다.
그럼, 왜 이러한 스캔코드값을 정해 놓았느냐면, 바로 키보드 하나를
가지고, 다국어를 표현하기 위해서이지요.
즉, 영문으로 놓고, 키보드를 치면, 영어가 되고, 한글로 놓고 키보드를
치면 한글이 되는 까닭은, 한/영키를 통하여 스캔코드의 값을 제어할 수 있기
때문입니다. 물론, 다른 이유도 있어요.
그래서, 혹시 태백이나 한메한글의 메뉴를 맞추다 보면 '스캔코드'에 관한
항목이 나오는데, 이것은 이런 이유 때문입니다.
현재, 스캔코드의 키값을 얻을 수 있는 유틸리티로는 10진수의 값을
얻으려면, 송오용씨가 만든 를 이용하면 되고, 16진수의 값을
얻으려면, 'pcdic'에 포함되어 있는 유틸리티 중 을 이용하면
됩니다.

자, 이제 오늘의 주제인 아스키코드와 스캔코드에 관한 모든 내용이
끝났네요! 너무 내용이 딱딱하고 지루해서 죄송합니다.
제가 글을 자주 올리지는 못할 것입니다.
그러나, 시간이 나는 대로 조금씩 조금씩 올려보도록 노력하지요!
여러분도 다같이 좋은 강좌들을 많이 올려서 이곳을 찾아오는 사람들의
발걸음이 저절로 머물 수 있도록 합시다!
긴 글 끝까지 읽어주셔서 감사합니다.

Posted by Real_G