날개셋 한글 입력기 8.4

<날개셋> 한글 입력기 8.2가 나온 지 거의 4개월 만에 또 새 버전인 8.4가 나왔다.
이번 버전도 짬밥이 어디로 간 게 아니라 정말 많은 부분이 개선되고 중요한 기능들이 많이 추가되었으므로 많이 사용하시기 바란다.

API 구조의 변경으로 인해 타자연습도 3.45로 살짝 업데이트가 됐다.

1. 사용자 정의 후보 문자열에 @ 탈출문자 추가

지난 7.0 버전에서는 사용자 정의 후보 기능이 추가되었다. 덕분에 고급 입력기의 사용자 정의 조합이 아니라 일반적인 한글을 입력하고 있을 때도 한자 키를 눌렀을 때 나타나는 변환 문자들을 사용자가 임의로 정할 수 있게 되었으며, 원래 있던 한자 변환 기능과도 병용이 가능해졌다.

한자 후보에 대해서 한자의 훈과 음이 나오듯이 사용자 후보에 대해서도 사용자가 설명문을 기재할 수 있다. 그런데 어떤 문자에 대해서 들어갈 만한 설명 정보라는 게 뻔할 뻔 자인 경우가 많은 관계로, 이번 버전에서는 그 절차를 간편하게 해 주는 탈출문자를 추가했다. 후보 문자열이 딱 한 글자로만 구성되어 있다면 탈출문자를 사용할 수 있다. 기본 입력기의 사용자 정의 후보와 고급 입력기의 사용자 정의 후보에서 모두 동일하게 쓸 수 있다.

탈출문자는 @로 시작한다. @N은 이 문자의 유니코드 번호이다. 그리고 문자가 BMP 영역에 있는 경우, 문자의 유니코드 명칭을 나타내는 @C를 사용할 수 있다. 이건 내 프로그램이 아니라 운영체제로부터 얻어 오는 명칭이다.
다음으로 @H는 이 문자가 BMP 영역의 한자인 경우 훈과 음이다. @ 자체를 표현하려면 @@이라고 쓰면 된다.

사용자 정의 후보의 설명문과 관련하여 뭔가 2% 부족한 게 있다고 지금까지 생각해 왔는데 그걸 탈출문자를 통해서 해결하게 됐다.
그러면 이제 여러 후보들에 대해서 설명문을 획일적으로 [@N] @C/@H 이런 식으로 지정할 필요도 생기는데, 이것도 대화상자 UI 차원에서 가능해졌다. 후보 목록에서 1개 이상의 후보 문자열들을 선택한 후, 위의 ‘후보 문자열 입력란’은 비우고 설명문만 입력한 뒤 ‘추가’를 누르면 선택된 후보들의 설명문이 모두 동일하게 바뀐다.

2. Alt+=를 끄는 보정 기능 추가

지난 8.2에서는 시스템 계층에 ‘키보드 드라이버의 동작 보정’ 기능이 추가되어서 type 1 키보드에서도 오른쪽 Ctrl/Alt를 인식할 수 있으며 반대로 type 3에서도 Shift+Space와 한영을 구분해서 인식할 수 있게 되었다. 이번 버전에서는 그에 덧붙여 Alt+=도 전/반각이 아니라 있는 그대로 인식하는 기능이 추가되었다.

전통적으로 Windows의 한국어 키보드 드라이버는 Alt+=를 전/반각 전환 글쇠로 인식해 왔다. 하지만 오늘날은 이건 거의 안 쓰다시피 하는 잉여 기능이며, 오히려 자기도 모르는 사이에 저걸 누른 뒤에 알파벳과 숫자가 엉뚱하게 입력되어서 사용자를 놀라게 하는 경우가 많다.
이 보정 기능을 켜면 <날개셋> 외부 모듈에서 Alt+=가 눌려도 전/반각 전환을 하지 않게 만들 수 있으며, 편집기 같은 다른 구현체에서는 거기에다 아예 다른 기능을 배당할 수도 있게 된다.

단, 보정 기능은 언제나 택일 형태이기 때문에 이 기능을 기존 type 1/3 한영 관련 보정과 같이 사용할 수는 없다.

3. 다단계 입력 분리

두벌식 글자판에서 음절 경계에 도달했을 때 앞글자 종성과 뒷글자 초성을 구분하는 방법은 여러가지가 있다.
보통은 자음은 종성에 최대한 붙을 수 있는 데까지 결합시켰다가 안 되면 다음 글자로 넘어가고, 모음은 직전에 입력되었던 종성 한 타만 다음 글자의 초성으로 이동하는 '도깨비불 현상'을 일으킨다. 그것보다 더 세밀한 제어가 필요하다면 크게 다음과 같은 방법들을 사용하면 된다.

  • 특수 도깨비불(3.9에서): 중성이 입력되어 도깨비불 현상이 일어날 때, 종성 입력 순서와 무관하게 아무 종성과 초성으로 쪼개지게 한다. 한글 로마자 입력기에서 ch, l, x 같은 건 이걸로 구현하는 게 제일 무난하다.
  • 초· 종성 공유 낱자 결합(6.0에서): 종성을 2개의 초성을 합성하여 입력하는 구도로 만들어 준다. 낱자 결합 규칙을 훨씬 더 간단하게 만들어도 후속 처리를 프로그램이 알아서 해 주며, 도깨비불도 오른쪽 초성 덩어리 단위로 떼어서(치는 데 몇 타가 들었든) 해 주니 매우 편리하다. 휴대전화 입력 방식은 이걸로 구현하면 된다.
  • 조합 종료 타이머(6.0에서): 특정 오토마타 상태에서 일정 시간 이상 동안 타자를 안 하고 가만히 있으면 자동으로 조합이 끊긴다. 천지인 같은 입력 방식에서 '국가/구카' 구분을 위해 사용하면 된다.

그 뒤 이번 버전에서는 "다단계 입력 분리"라는 제4의 메커니즘이 추가되었다.
이것은 도깨비불과는 달리, 초중종 등 동일한 성분의 낱자가 계속 N-1단계까지 입력되었는데.. 제 N째 낱자가 기존 낱자와 결합이 불가능할 때, N만 다음 글자로 빼는 게 아니라 M<N을 만족하는 임의의 M~N단계의 낱자 결합을 몽땅 다음 글자로 옮기고 앞글자는 1~M-1단계까지만 남기는 역할을 한다.
쉽게 말해 ㄺ 다음에 ㅅ을 입력했는데 ㅩ으로 갈 수는 없을 때, ㄺ+ㅅ으로 있는 그대로 분리되는 게 아니라 느닷없이 ㄹ+ㄳ으로 가게도 해 준다.

도깨비불은 두벌식 종성이 입력된 상태에서 두벌식 "중성"이 입력되었고 이로써 오토마타가 0으로 바뀌었을 때 발생한다. 하지만 저건 초중종 같은 성분의 낱자가 입력됨으로써 낱자 결합이 65531이라는 낱자로 도달했을 때 발생한다. 조합 중인 낱자를 0으로 만드는 역할을 하는 65530에 이어 또 다른 특수 낱자가 추가된 것이다.

그런데 세벌식이나 '종성 두벌식'이 아니라 일반 두벌식 형태의 종성이 분리되었을 때는 다음 글자는 종성이 아니라 초성으로 바뀐다. 그렇기 때문에 다단계 입력 분리로 할 수 있는 일의 일부가 바로 도깨비불과 동일하지는 않지만 비슷한 형태의 '두벌식 음절 경계 구분'이 된 것이다. 개념적으로 종성과 다음 글자 초성을 동시에 결합시키는 날개셋문자와도 좀 비슷하나, 형태가 간편한 대신에 자유도가 그것만치 높지는 않다.

현대 한글에서 초성 ㅃㄸㅉ, 옛한글에도 정치음· 치두음 같은 건 초성에만 존재한다. 이걸 초성과 종성에 공통으로 존재하는 낱자의 결합으로 입력할 수 있는데 두벌식으로 종성을 결합하는 도중에 인위적인 음절 구분(조합 종료) 없이 자동으로 초성으로 넘어가는 형태로 입력하고 싶다면 딱 이 기능을 사용하면 된다.

예전 같았으면 '한글 출력 치환'을 이용해서, 여전히 조합이 끊어지지 않은 종성 상태이지만 겉보기로는 정치· 치두음 초성이라고 글자를 임시로 표시해야 했다. 그 뒤 모음이 입력됐을 때 특수 도깨비불 현상 같은 걸로 정치· 치두음 부분을 떼어냈겠지만 지금은 좀 더 직관적인 방법도 생겼다. 자세한 설명은 프로그램의 도움말에 나와 있다. 연속 입력 가능성 판별 기능도 다단계 입력 분리까지 감안해서 동작하도록 알고리즘이 수정되었다.

요건 원래 개발 계획에는 없던 아이디어였는데 꽤나 무겁고 중요한 기능이 되어 버렸다. 이런 기능이 지금까지 없었다. 예정에 없던 기능 때문에 한 달에 가까운 시간이 그냥 훅 가 버렸지만..ㅠㅠ 투자한 시간이 아깝지는 않다.

4. 허용 한글 범위 관련 처리

아무 한글이나 조합이 되지는 않게 하는 '허용 한글 제약'과 관련하여 여러 기능들이 추가· 강화됐다.
먼저, '다단계 입력 분리'가 이 기능과도 연계된다. 가령, '쌰'를 조합할 수 없는 'KS X 1001 완성형 제약'을 사용하고 있는데 ㅑ를 ㅏ+가획으로 입력해서 '쌰'를 만들려고 시도했다면.. '가획'만 넘어가는 게 아니라 "ㅏ+가획"이 한꺼번에 다음 글자로 넘어가게 할 수 있다. 이전까지는 그게 가능하지 않았기 때문에 이 상황에서 그냥 '싸'와 함께 조합이 중단돼 버리곤 했다.

65031 낱자 결합을 통해 일어나는 다단계 입력 분리와는 달리 저 분리는 별도의 옵션이 지정되어 있을 때만 수행된다. 그리고 앞의 분리는 A+B+C+D와 C+D가 모두 가능하다면 A부터 시작해서 최대한 많은 타수를 분리하는 반면, '허용 한글 제약' 관련 분리는 C+D처럼 최대한 적은 타수를 분리한다. 분리의 성격이 서로 다르기 때문이다.

단순히 낱자 결합 규칙이 더 존재하지 않아서 결합 불가일 때랑, 허용 한글 범위 제약에 걸려서 결합 불가일 때를 구분 인식이 가능해진 것은 예전 글에서 이미 언급했으므로 참고하시고..

끝으로, <날개셋> 한글 입력기가 제공하는 "문자열을 글자판 입력으로" 필터는 '허용 한글 범위 제약' 기능을 전혀 감안하지 않고 동작한다. 즉, '똠'이라는 문자를 조합할 수 없는 상태에서도 '똠'을 입력하는 순서를 구해 준다.
그 동작을 약간 변경하여, 이걸 부분적으로 감안하여 동작하게 로직을 바꿨다. 이제는 KS X 1001 제약이 적용된 상태에서는 '똠'은 입력할 수 없는 글자로 간주하여 입력 순서를 찾아 주지 않는다.

그러나 이 기능은 중간 과정에서 생성되는 모든 글자들을 일일이 체크하지는 않는다. 즉, '썅'은 중간의 '쌰'를 입력할 수 없음에도 불구하고 최종 결과물이 입력 가능하기 때문에 입력 순서를 찾아 준다.

5. Backspace 3과 4 지원

<날개셋> 한글 입력기는 한글 입력 과정에서 사용되는 Backspace와 후보(≒ 한자) 변환이라는 명령을 내부적으로 특수글쇠의 일종으로 취급한다. 그런데 그게 하나만 있는 게 아니라 각각 4종류씩 있다.

먼저 후보 변환의 경우, 지난 7.0 버전에서 4개의 용례가 완전히 정착했다. 1은 고정적으로 제공되는 한자 및 특수문자 변환이며 2와 3은 각각 입력기 계층에서 제공되는 내장 및 외장형 후보 변환이다. 4번은 편집기 계층에서 제공되는 공통 후보 변환이며 형태는 내장과 외장 어느 것이든 될 수 있다.
후보 변환 데이터의 성격에 따라(공통인가, 아니면 특정 입력 방식에 종속인가?) 원하는 변환 방식을 고를 수 있다. 그리고 어떤 단계에서 후보가 존재하지 않을 때 이전 단계로(1) 갈 것인지 다음 단계로(4) 갈 것인지 포워딩 방식도 지정할 수 있게 했다. 이런 식으로 후보 변환과 관련해서 생각할 수 있는 customization 방식을 모두 구현했다.

이번 버전에서는 후보 변환에 이어 Backspace에 대해서도 손을 봤다. 예전부터 Bksp 1은 통상적인 bksp 글쇠에 대응하고 Bksp 2는 Shift+bksp에 대응한다는 관행이 정착해 있었지만, 3과 4는 영역이 배당만 됐고 실제로 쓰이지 않았다.
이제는 Bksp 동작 방식에서 '자세히'를 누르면 1, 2뿐만 아니라 3, 4도 다 제각기 동작 옵션들을 지정할 수 있다. 그리고 아무 글쇠에나 Bksp 3/4를 뜻하는 C0|0x8A 또는 0x8B를 배당하면 그 옵션대로 Bksp가 동작한다.

원래 Backspace는 한글 입력기(IME 프로그램)와 응용 프로그램이 공용하는 글쇠이다. 한글을 조합하는 중일 때는 IME가 Bksp를 가로채지만, 조합 중이지 않고 앞 글자에 딱히 달라붙거나 할 필요도 없을 때에는 IME가 Bksp를 가로채지 않고 그냥 응용 프로그램으로 넘겨 준다. 그렇기 때문에 A나 1 같은 문자 글쇠에다가 Backspace 1 같은 걸 배당하면 평소에는 글자가 지워지는 게 아니라 A나 1이 입력되어 버린다. 앞 글자를 지우고 싶으면 이런 고수준의 Backspace n 특수글쇠를 배당하는 게 아니라, Backspace가 수행하는 저수준 동작인 '한 타 지우기, 마지막 단계의 낱자 전체 지우기, 입력 순서와 관계 없이 마지막 단계의 낱자 한 단계 지우기'를 배당하는 게 보통이다.

Backspace 3과 4는 저런 오동작이 없다. 언제나 글쇠를 가로채며, 구현체의 기술적인 한계로 인해 앞 글자를 건드릴 수 없을 때는 그냥 아무 동작 없이 가만히 있기만 한다. 입력기 차원에서 조합 바깥의 앞 글자를 직접 지울 수 없는 환경에서는 T ? C0|0x8A: KY|8 이렇게.. 한글을 조합하고 있을 때만 bksp 3, 아니면 수동으로 bksp 생성(응용 프로그램이 글자를 직접 지우게) 이렇게 bksp 기능을 혼용해도 된다. 이런 방식으로 bksp가 아닌 자리에 bksp의 기능을 독자적인 동작 옵션으로 온전히 이식이 가능하다.

6. 글쇠배열 편집 UI에 시각 피드백 추가

<날개셋> 한글 입력기는 잘 알다시피 기본 입력 스키마에 글쇠배열을 편집하는 기능이 있다. 그런데 상위 옵션의 영향으로 인해, 여기서 글쇠배열을 아무리 고쳐도 그게 실제 입력 때 반영되지 않는 경우가 있다.

  • 첫째, '빈 입력 스키마와 호환되게' 옵션이 켜져 있고 현재 편집기가 아닌 외부 모듈/입력 패드 구현체를 사용 중일 때. 이때는 해당 입력 항목은 의도적으로 모든 글쇠를 처리하지 않고 넘기는 '빈 입력 스키마'와 동일하게 동작하므로 자신의 모든 입력 설정들이 무효가 된다.
  • 글쇠 인식 옵션에서 기존 글쇠배열의 문자· 숫자· 기호 47개 자리의 일부를 지정하여 다른 용도로 사용하고 있을 때. 여기에는 가로채지 '않게' 하는 것도 포함된다.

이제는 이런 상황에 속하는 글쇠들은 회색으로 흐리게 표시되며, 전부 또는 일부 글쇠가 이런 이유 때문에 동작하지 않는다는 설명문까지 잠시 표시된다. 그러므로 글쇠배열을 고쳤는데도 그게 동작하지 않고 왜 그런지 사용자가 이유를 알지 못하는 상황을 예방할 수 있다.

사용자 삽입 이미지사용자 삽입 이미지

'빈 입력 스키마와 호환되게'의 영향을 받는 구현체에서 해당 옵션을 켜면 추가 글쇠 인식 옵션이라든가, 고급 입력기의 고급 글쇠 인식 옵션도 다 흐리게 표시되어서 값 편집 불가 상태가 되게 했다. 어차피 이런 기능들이 동작하지 않는 상태가 되기 때문이다. 이번 버전에서는 이런 UI도 추가했다.

7. 그 밖에 사소한 개선과 버그 수정

(1) 편집기에는 한 글자만을 찾는데 찾는 조건을 수식을 이용해서 세밀하게 지정하는 '문자 영역 찾기'라는 기능이 있다.
거기에다가 앞글자 P와 뒷글자 N이라는 변수도 추가해서 사실상 최대 3글자까지 연달아 찾을 수 있게 했다. 마침표가 이어지지 않는 '다'를 찾는다거나, 한글 다음에 이어지는 한자를 찾는 식으로 활용이 가능하다. 문단의 앞에서는 P는 0, 문장의 끝에서는 N은 0이 된다.
또한 내정값으로도 한글 낱자 중에 유니코드 5.2 새 낱자만 찾는 수식도 추가했다.

(2) "한글 낱자 정규화" 텍스트 필터에 꽤 황당한 버그가 있는 것을 발견하여 고쳤다.
NFC 정규화를 시켜서 현대 한글이 옛한글처럼 자모 형태로 풀어져 있는 것을 바로잡고 나면, 그 뒤에 등장하는 옛한글들은 이상한 쓰레기 문자로 바뀌곤 했다.
한글의 정규화 방식이 바뀐 지난 8.0 버전에서부터 존재한 버그였다. 내가 스스로 찾아 낸 건 아니고 사용자의 제보를 통해 확인했다.

(3) <날개셋> 한글 입력기는 영문 UI에서 '한글'을 표기할 때 과거에는 Hangeul을 쓰다가 나중에 Hangul로 바꿨다. 당장 유니코드의 영역 이름에도 Hangul이 쓰이고 외국에서는 eu보다 u가 훨씬 더 널리 퍼져 있다고 판단되어서다.
그런데 프로그램 UI 중 특별히 콤보 박스 안의 항목이라든가, xml에 들어가는 내정값 같은 데에서 여전히 eu 표기가 남아 있는 것을 뒤늦게 자체적으로 확인하여 고쳤다.

(4) <날개셋> 제어판의 낱자 결합 탭에서 '낱자 결합 규칙'을 등록하는 UI에서..
'추가'를 그냥 클릭하면 지금까지 그런 것처럼 새 항목이 추가되고 입력 포커스는 A+B=C 중에 A의 위치로 간다.
하지만 Ctrl+클릭을 하면 A와 C의 값이 서로 뒤바뀌고 포커스는 A가 아닌 C에 가게(교환으로 인해 A의 값을 갖게 된) 했다.
그래서 A+B=C에 이어서 역으로 돌아오는 C+B=A라든가, C+B=D처럼 연타에 의한 후속 조합을 지금보다 더 수월하게 등록할 수 있게 했다.

(5) 끝으로 낱자 결합 규칙, 각종 사용자 정의 조합/후보 목록 등, <날개셋> 제어판에서 Windows 폰트가 아니라 자체 비트맵 글꼴로 출력되는 모든 UI들은..
뭔가 아이템을 추가/삭제하거나 순서를 조정하고 나면 지금까지는 스크롤 위치가 엉뚱하게 바뀌고 선택 막대도 화면 맨 아래에 어설프게 걸친 위치로 바뀌곤 했다. 이것 때문에 지금까지 무척 불편했는데 이걸 드디어 원천적으로 개선했다. 스크롤이 필요 없으면 스크롤이 발생하지 않으며, 선택 막대도 언제나 화면 안에 온전히 출력되게 했다.

Posted by 사무엘

2016/02/27 08:30 2016/02/27 08:30
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1197

기원에 대한 논의 외

* 예전에 이미 했던 말도 있겠지만 중요한 사항이니 다시 정리하겠다.

1. 언어의 기원

기원을 알기가 제일 난감한 분야이다. 화석이고 뭐고 물리적인 형태가 전혀 없기 때문이다. 문자 기록으로는 음운 계층에서의 통시적인 변화만을 추적할 수 있을 뿐, 그 문자의 저변이 되는 그 시절의 실제 음성 기록을 100% 정확하게 재현하는 건 불가능하다. 그 시절에 녹음기가 존재하지 않았으니 말이다.
하다못해 중세 국어에서 옛한글 자모의 음가조차도 여러 학자들의 추정만이 존재할 뿐 실제 발음이 딱 부러지게 어떠했는지는 알지 못한다.

음운뿐만이 아니라 형태· 어휘· 문법 쪽으로 간다 해도, 동물적인 꽥꽥 끼릭끼릭 의성 의태어로부터 추상적인 개념에다 복잡하고 재귀적인(안은 문장, 이어진 문장) 문법이 저절로 등장한다는 건 아무리 긴 시간이 흐른다 해도 실현 불가능이다. 그건 아메바로부터 원숭이를 거쳐서 사람이 저절로 만들어지는 것만큼이나 불가능이다.

고대까지는 몰라도 중세급의 과거 언어는 현대의 언어보다 더 음운이 다양하고 복잡하면 복잡했지, 오늘날보다 더 단순한 구조는 아니었다는 게 통론이다. 한국어만 해도 과거에는 '여덟'에서 ㅂ이 실제로 발음되었고 받침 ㅎ도 발음되었고 자음이 두 개, 세 개씩 있는 등 지금보다 스케일이 더 컸으리라 여겨지고 있다. 언어는 시간이 흐를수록 이것저것 탈락하고 생략되고 중화되고 제약이 생기는 쪽으로 변하는데 그럼 처음에 그 복잡한 시스템은 언제 어떻게 갖춰질 수 있었겠는가? 통상적인 진화론과는 정반대 경향이 아닐 수 없다.

언어야말로 걍 GG 치고 신수설을 주장한대도 증명도 반증도 할 수 없는 가장 난감한 분야이다. 그냥 신앙· 신념의 영역일 뿐이다. 언어에서 기원은 언어학계에서도 불가지론으로 간주되며 더 구체적인 논의 대상이 아니다. 과학적인 방법론을 동원해서 연구할 거리 자체가 없다.

2. 생명의 기원

생명은 무생물로부터 저절로 생겨나지 않으며, 스스로 유전자 차원에서 더 고등한 종으로 바뀌지도 않는다. 이건 일단 인정하고 들어가자.
유기물· 단백질처럼 생명을 담는 껍데기 그릇을 일부 겨우 합성하는 데 성공했다고 해서 거기에 생명이 생기는 것 역시 아니다. 다른 무생물 기계는 부품들의 상호 연결이 끊어지면 곧바로 작동이 멈춰 버리는 반면, 생명은 세포 단위로 쪼개도 각각의 단위들이 다 생명이 있어서 스스로 살려고 발버둥치고 노력한다는 매우 큰 차이가 있다.

생물과 무생물의 차이 중 이런 고증을 반영한 것이 스타크래프트에서 저그와 테란의 대미지 컨트롤 능력이 아닌가 한다. 저그는 건물과 유닛 공히 체력이 1만 남아도 아주 천천히라도 자동 회복되는 반면, 테란은 그런 게 없기 때문이다. 오히려 사람 서플라이가 없는 건물은 체력을 2/3 이상 잃은 뒤부터는 스스로 파괴돼 버리기까지 한다.

이걸 인간이 도대체 어떻게 만들어 내겠는가? 지구 안에서는 빛도 산소도 없고 도저히 생명체가 존재할 수 없다고 여겨지는 척박한 수천 m 아래 초고압 해저에도 심해어가 존재하지만, 반대로 지구 밖의 광활한 우주에는 생명이란 게 일단은 전혀 없다는 것 역시 진지하게 생각할 점이다. 이건 뭔가 인위적인 현상이라고 보는 게 자연스럽다.

다음으로 연대기 문제로 넘어가면, "지금" 지구상에 존재하는 인간을 포함한 모든 생명들은 할아버지에 할아버지를 거듭해서 거슬러 올라가면 6천여 년 전의 6일 창조에서 딱 끝난다고 일단 본인은 믿는다. 세속 역사에서도 인간의 문명이라는 건 천 자리 범위를 넘어서는 연도의 과거로는 절대로 가지 않는다.

단, 그 전의 엄청 옛날, 이전 세상에서도 생명체가 있긴 했다. 그러다 이전 세상이 멸망한 뒤 대부분의 품종은 원래 있던 종류대로 다시 창조되긴 했는데(after his kind), 다만 고래나 인간 같은 일부 종은 예전에 없었다가 6천 여 년 전에 새로 등장하기도 했다. 성경이 말하는 이전 세상의 멸망은 지질 시대에서 다루는 '대멸종'과 관계가 있을 거라는 생각이 든다.

3. 지구의 기원

방사성 원소· 탄소 원소 측정법 등 다양하게 교차 검증되는 방법을 통해 지구의 나이는 수십억 년 정도 되었다고 여겨지고 있다. 인간이 달에 실제로 간 적이 없다고 믿는 아폴로 계획 음모론자들은 달 착륙 미션이 오로지 아폴로 11호밖에 없었던 것처럼 생각하는 경향이 있는데, 이와 비슷한 맥락으로 젊은 지구 창조론자들은 지구의 나이를 측정하는 방법이 오로지 한두 가지 방법밖에 없는 것처럼 오해하는 경향이 있다.

하루는 우라늄 동위원소의 반감기를 이용해 지구의 나이를 측정하는데 이상하게 실험 진행이 잘 안 돼서 원인을 찾다 보니, 공기 중에 납의 농도가 비정상적으로 높다는 것을 알게 됐으며, 이게 자동차의 배기가스 때문이라는 것까지도 알아냈다. 이런 과정에서 20세기 후반에 무연휘발유가 발명될 수 있었다. 납은 인체에 몹시 해로운 중금속이기 때문이다. 연대 측정법이라는 게 저런 사소한 변인까지도 찾아낼 정도로 정밀하니, 창조 과학회의 주장만치 그렇게 호락호락 허술한 체계가 아니라는 뜻이다.

인류 이전에도 죽음 자체는 지구상에 존재했다. 이전 세상은 물의 넘침으로 멸망했지만, 그 시절의 흔적은 화석이나 지층에 남아 있다고 본인은 믿는다. 노아의 홍수보다 훨씬 더 거대한 스케일로 말이다.

4. 우주의 기원

흔히 생각하는 것과는 달리, 우주의 기원은 화석이나 지층 같은 '흔적'만으로 추론을 하는 게 아니다. 이 바닥은 수십억 년 전에 출발하여 수십억 광년 거리를 달려서 우리 눈에 도달하여 2차원 애니메이션을 만들어 내는 빛을 망원경으로 직접 관측하면서 현상을 해석한다! 방법론이 다른 기원과는 근본적으로 다르다. 그래서 "관측 가능한 우주"라는 개념이 있으며 대폭발설 내지 130억 년~200억 년 같은 계산이 나오는 것이다. (전산학에서 계산 가능한 문제, 과학에서 재연 가능한 현상, 철학에서 반증 가능한 명제처럼..)

이 연구 방법론이 근본적으로 부정되려면 (1) 예전에는 우주의 본질 자체가 지금과는 근본적으로 달라서 빛의 속도 자체가 지금과는 넘사벽급으로 달라질 수가 있어야 하거나, (2) 아니면 저 옛날 별빛의 모습이 실제 별빛이 아닌 페이크 가짜여야 한다. 허나 (1)은 과학적으로 가능성이 없으며, 과거라 해도 광속의 변화는 무시할 수 있는 아주 미미한 수준일 뿐이다.
그리고 (2)는 과연 하나님이 인간에게 자연 계시를 설마 그렇게까지 속임수를 동원해서 남기셨을까 하는 신학적인 문제를 일으킨다. 아무리 아담도 성년으로 창조됐고 닭과 달걀 중에 닭이 먼저라 해도, 저건 성년 창조설이라는 명목으로 실드 칠 수 있는 범위를 넘어선다고 여겨진다.

덧붙이는 말

0.
기원과 관련된 기독교계와 세속 과학계의 논쟁은 가장 먼저 잘 알다시피 "2. 생명의 기원"에서 시작되었다. 언어의 기원은 양쪽 모두 근거가 부족하다 보니 별로 이슈가 되지도 않는 것 같고(걍 서로 믿고 싶은 대로 믿고 말자), 생명에 비해서는 지구나 우주의 기원은 비록 서로 전혀 무관한 건 아니지만 일단 부가적인 문제이다.
각각의 기원에 대해 어떤 견해를 갖고 있건, 일단 언어, 생명, 지구, 우주의 기원은 문제를 보는 관점이 다르고 연구하는 방법론이 서로 완전히 다른 분야라는 것을 인지해야 할 듯하다.

창조 과학회는 진화론만 반박하다가 "젊은 우주"를 주장하면서 생명 영역뿐만 아니라 지구와 우주 영역에까지 주변에 온통 적을 만들었다. 자기 학설이 받아들여지지 않고 사이비 유사과학 취급을 받는 게 온통 진리를 일부러 거부하는 부패한 무신론자 학계의 음모 때문이라는데... 진실은? 과연 글쎄다.

이들은 6천 년 전 문자적인 24시간 6일을 사수한 것은 잘한 것이지만 성경과 과학에서 모두 하나만 알고 둘은 모르는 병크로 인해서 오류를 저지른 것도 적지 않다. 결국은 이전 세상과 현 세상을 구분하고 6천 년 전 문자적인 6일 창조도 인정하되, 창 1:1-2 사이에 간극을 설정하는 것이 성경 교리도 문자적으로 정확하게 사수하고(특히 물과 어둠, 사탄 마귀의 기원) 세속 과학의 관찰과도 조화를 이루는 가장 훌륭한 방법이다. "젊은 생물(현 세상의), 오래 된 지구"인 것이다. 내가 보기엔 그것 말고는 답이 없다.

1.
성인 형태로 어제 갓 창조된 따끈한(?) 아담을 생각해 보자. 그는 덩치와 지능, 떡대만이 30대 청년이지 피부 표면은 가히 갓난아기처럼 뽀송뽀송하고 노화의 징조는 통상적인 30대 성인 수준으로도 전혀 발견되지 않았을 것이다. 활성 산소나 각종 해로운 찌꺼기 같은 것도 전혀 없었을 것이고 심지어 응가를 해도 우리와 같은 끔찍한 악취 없이 태변과 비슷한 분비물이 나왔을 것이다. (동안· 꽃미남· 미소년 이런 것과는 별개의 얘기임!) 그러니 생물학적 나이라는 것도 무슨 관점에서의 나이인지를 다시 생각할 필요가 있다.

게다가 결정적으로, 그는 30대 성년의 형태로 갓 창조됐다고 해서 자신이 직접 겪지도 않은 유년기, 10· 20대에 대한 기억을 갖고 있지는 않을 것이다. 하나님께서 그런 것을 거짓으로 주입해 넣으셨을 이유가 없다. 왜냐하면 하나님의 주요 성품 중 하나는 결코 거짓말을 하지 않으시는 것이기 때문이다(딛 1:2).

비록 기술적으로야 가능은 하겠지만 하나님은 자신의 성품에 위배되는 일을 하지는 않으실 것이다. 그저 "오래 된 것처럼 보이게 창조를 하셨겠지"라고 기원에 대해 넘겨짚기 전에 이런 면모도 진지하게 생각할 필요가 있다. 공장에서 갓 생산된 따끈한 새 자동차에 적산거리계만 한 10만~20만 km로 조작해 놨다고 해서 그 차가 진짜 오래 된 차인 것처럼 보일까?

2.
만화영화 라이온 킹의 대사가 문득 떠오른다. 거기에 나름 우주를 논하는 대화가 있기 때문이다.
심바· 품바· 티몬 일행이 거하게 저녁 식사를 한 뒤 풀밭에 누워서 밤하늘을 보고 있는데, 품바가 티몬에게 "야, 넌 저 밤하늘에 빛나는 점(별)들이 정체가 뭔지 궁금하지 않냐?" 라고 묻는다.
티몬은 자기는 답을 확실하게 알고 있기 때문에 궁금하지 않다고 의기양양하면서, 저것들은 시꺼먼 표면에 달라붙은 반딧불이라고 얘기한다. 휴.. 시골에서 반딧불이를 직접 본 사람이라면 그렇게 생각할 수도 있겠다.

품바는 "아 그래? 난 저것들은 수십억 마일 이상 떨어진 곳에 있는 가스 불덩어리인줄 알았는데. (아니었구나)" 이렇게 얘기함.
품바의 말이 정답임에도 불구하고 티몬은 "ㄲㄲㄲ 넌 그냥 모든 게 가스인 것처럼 보이지?" 이렇게 면박을 준다. 이전의 하쿠나 마타타 씬을 보면 품바는 배 속에 가스가 가득찬 지독한 방귀쟁이여서 어린 시절부터 왕따를 당했다고 나오니까..;;

이 대화에서 심바는 어린 시절에 부친에게서 언뜻 들은 종교 주술적인 대답을 했는데(돌아가신 선왕들이 별이 돼서 우리를 지켜본다) 이건 완전히 가루가 되도록 폭풍처럼 까인다.
그런데 영화 전체를 보면, 티몬의 말은 실제로 맞아서 적중한 게 별로 없었다. 오버와 허세가 좀 쩌는 듯..

  • 처음에 사막 한복판에서 쓰러진 심바를 발견했을 때 "사자를 키우면 위험하니 얘를 데려가서는 안 된다" → 심바는 전혀 위험하지 않았으며 품바· 티몬 일행과 잘만 친한 사이가 됨
  • "저 별들은 반딧불이다" → 네버.
  • 극중에서 Can you feel the love tonight 노래가 끝나고 결말부. "심바와 날라가 서로 상봉했으니 우리 우정은 이제 끝장났다" 엉엉 ㅠㅠ → 그 뒤에도 전혀 끝장나지 않음.

콜?

Posted by 사무엘

2016/02/24 08:36 2016/02/24 08:36
, , , , , , , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1196

흔히 한국어가 한편으로는 끔찍하고 한편으로는 구수한(?) 욕설이 유난히 발달해 있다고 하는데.. 사람 사는 곳은 동서고금 어디나 마찬가지이고 다른 문화권에서 폭언과 욕설이 없는 건 아니다. 다만, 한국어는 다양한 욕설 표현에 비해 '똥'이 단순 비하(똥컴, 똥차, 똥폰..) 이상으로 저주나 다른 욕설로는 거의 쓰이지 않는다는 게 이례적이다. (shit, 쿠소 등)

미국은 마초이즘에 입각한 군사물에서 욕설이 많다.
듀크 뉴켐 3D/포에버에서는 게임 중에 개마초 주인공의 궁시렁궁시렁 성인 욕설을 들을 수 있으며,
둠도 게임 자체는 스토리가 부실하지만 이를 배경으로 한 둠 코믹스는 매 장면들에 강렬한 욕설을 동반한 명대사들이 즐비하다.
포레스트 검프에서는 카우보이 모자를 쓴 훈련소 교관이 그냥 말 끝마다 '갓댐'인 거 다들 기억하실 것이다.

이거 끝판왕은 역시 월남전을 배경으로 하고 있는 스탠리 큐브릭 감독의 <풀 메탈 자켓>에 나오는 하트만 상사. 후대의 전쟁 영화에 등장하는 악질 교관의 표준 컨셉을 제시했다고 해도 과언이 아니다. "훈련소를 수료하고 나가는 날 네놈들은 일당백 인간 흉기 전사로 개조돼 있을 것이다. 그러나 그 전까지는 네놈들은 그냥 인간 이하의 구더기, 토사물만도 못한 개 쓰레기들이다! 알겠나~~!"

제3자가 들으면 그야말로 웃음이 나오기까지 할 정도의 찰진 욕설, 특히 부모 패륜 드립과 음담패설이 넘쳐난다. 흔히 군대에서 총(개인 화기)은 니 애인, 니 불알보다도 더 소중하게 간수하라고 그러는데, 실제로 그걸 빗댄 섹드립 군가를 부르는 것도 있다. 똑같이 내 총인데, 이건 전투용, 저건 유흥용이라고.. -_-;

듣기로는 시나리오 작가가 써 준 정식 대사 외에 배우의 즉흥 애드립으로 들어간 것도 많다고. 이런 욕도 어지간히 창의력이 뛰어난 언어의 마술사가 돼야 만들어 낼 수 있지 아무나는 못 한다. 근데.. 현장에서 그 욕설을 듣고 진짜로 웃어 버린 고문관은 저 교관한테 완전 찍혀서 군생활이 꼬인다.

스타 1에서 시즈 탱크를 지겹도록 클릭했을 때 나오는 대사 중 하나가 What is your major malfunction?인데.. 이것도 출처가 이 영화에서 하트만 상사의 대사이다. 사실은 "너 미쳤냐 쳐돌았냐? 도대체 어디 장애가 있냐? 대가리에 총 맞았냐?" 급의 꽤 강한 비하· 모욕 뉘앙스가 들어간 갈굼이다.

이건 반전 컨셉으로 군대의 비인간적인 면모를 비판하고 깔 목적으로 만들어진 영화임에도 불구하고, 오히려 저런 묘사가 마초스럽고 멋있다며 미군 관계자들이 좋아했을 정도였다고 한다.

왜, 국내에서도 10여 년 전에 MBC 제5공화국 드라마가 방영되니까 이 덕화 씨의 연기 덕분에 멋있다고 도리어 전 두환 팬클럽까지 생겼다지 않는가? 정치 견해 때문이 아니라 그냥 멋있다고. -_- "좋아, 아주 좋아"처럼 말이다..;; 원래는 그 드라마가 군사 정권을 얼마나 비판하고 까는 컨셉인데도 역효과가 난 것이다.

21세기 이후에 오늘날까지 전대갈, 전땅크 하면서 그에 대해서 조금이라도 멋있어하는 이미지는 거기서 유래되었다고 해도 과언이 아니지 싶다. 또한 이건 옛날에 얼짱 강도 현상수배 포스터가 나돌자 그 사람 팬카페가 생겼던 것과도 비슷한 이치이다. -_-;;
(얼짱 강도도 참 오랜만에 다시 회상하네. 그 예쁘장한 아가씨는 남자 친구 잘못 사귄 죄로 강도 공범 혐의로 어린 나이에 전과가 생겼을 뿐만 아니라, 얼굴이 대문짝만하게 알려져 버리기까지 해서 인생이 한동안 굉장히 꼬였지 싶다. 안됐다. 그 뒤로 개명에 성형이라도 하고서 새 삶을 잘 살고 있길..;;)

창작물이 아니라 실존 인물 중에서는 성깔 하나는 둘째 가라면 서러웠던 조지 패튼 장군이 있었다. "제군들은 이제 제대 후 고향에 가서 손주들에게 이렇게 당당하게 말할 수 있을 것이다. '이 할아버지는 2차 대전 때 후방에서 꿀이나 빨고 있지 않았다. 조지 패튼이라는 빌어먹을 개XX와(a son-of-a-goddamned-bitch named George Patton) 함께 최전방에서 용감하게 진군했다'라고 말이다!" 자기 자신에 대해서 아예 연설을 저렇게 했다.

정치· 군사· 안보 같은 심각한 주제 말고 다른 분야에서는 '욕쟁이 할머니'라는 컨셉· 기믹이 있다. 한국만의 고유한 문화인지는 모르겠다.
10여 년 전에 웹툰 츄리닝에서는 미국인 손님이 들어오자, 주인공인 욕쟁이 할머니 역시 영어를 직접 구사하진 못해도 비장한 표정과 함께 꼴뚜기질로 기선 제압을 했다는 병맛 만화가 올라오기도 했다.

사용자 삽입 이미지

1960년대 말이던가 박 정희 대통령이 전주에 시찰을 와서는 삼백집이라는 실존 콩나물국밥 식당을 이용했는데, 그 당시 거기도 주인장이 내공 백 단의 욕쟁이 할머니였댄다.
처음엔 수행원들이 미리 방문해서 배달 주문을 하려 했으나, 당연히 "이 썩을놈들이 얻다대고 배달 같은 소리나 씨부리고 쳐자빠졌네(혹은, X랄이야).. 직접 와서 쳐먹어!"라는 불호령과 함께 단칼에 문전박대를 당했다.

주인장은 직접 찾아온 박 대통령에게도 인정사정 없이 욕으로 상대했고.. 식사 중인 박통의 얼굴을 찬찬히 뜯어 보더니 반숙 계란 요리를 서비스로 가져와서는 "어라, 이눔 봐라? 네놈은 신문에서 보던 박 정희랑 어찌 그리 얼굴이 묘하게 닮았더냐? 그런 의미에서 옜다, 이거나 더 쳐먹어라." 그랬댄다.. =_=
박통은 껄껄 웃으면서 "내가 박 정희를 닮은 게 아니고 박 정희가 날 닮은 거요"라고 넘겼댄다. 주인장은 그건 "에라이 니미럴 염병하네"라고 응수했을 테고.

박통은 훈훈하게 밥을 잘 먹고 서울로 돌아갔다. 그 식당 주인장은 몇 년 후 노환으로 타계했지만, 전해지는 야사에 따르면 그때 그 놈팽이는 대통령을 아주 닮은 사람이었을 뿐이라며, 설마 진짜 박통이었을 거라고는 죽는 순간까지도 절대로 믿지 않았다고 한다.

군사 쪽이든 민간 쪽이든.. 욕도 아무 컨트롤 없이 무개념으로 싸지르면 정말로 교양 없고 무례한 양아치밖에 되지 않을 것이다. 욕을 해도 때와 장소와 대상을 가려 가면서 센스 있게, 창의적으로(?), 그리고 궁극적으로는 듣는이에 대한 애정을 담고 자기 본업의 장인 정신까지 포함해서 "츤데레"스럽게 구사해야 할 거다.
이런 가이드라인을 준수할 자신과 멘탈이 없다면, 차라리 언제나 정중하게 바른말 고운말 컨셉만 유지하는 게 자신의 대외 평판에 나을 것이다.

Posted by 사무엘

2016/02/21 08:29 2016/02/21 08:29
,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1195

1. 공산주의 유머

구소련의 사회/정치 관행을 풍자한 공산주의 유머 중에는 이런 게 있다.

(1)
소련의 한 작은 마을에 살던 이반이 시베리아 수용소에 끌려갔다가 그나마 살아서 돌아왔다. 마을 사람들은 한데 모여서 그에게 수용소 생활이 어땠는지 이야기해 달라고 부탁했다.
그는 거기 일상은 물자가 좀 열악하고 따분한 노동의 연속이긴 했지만 그래도 그럭저럭 지낼 만했다고 털어 놓았다. 이에 어떤 마을 사람이 이렇게 반문했다.

"놀랍군, 이반. 하지만 얼마 전에 시베리아에서 돌아왔다가 다시 끌려간 미하일의 말은 정반대였는데? 열악한 환경에서 끔찍한 인권 유린, 살인적인 중노동이 밤낮으로 이어졌다고 말야."

그러자 이반은 담배를 깊게 빨고는 한 마디 했다.
"아, 그 친구? 말을 그딴 식으로 했으니 당연히 또 끌려갈 수밖에 없지."

... 마을 사람들은 모두 찬물을 끼얹은 듯 숙연한 표정으로 고개를 끄덕거리며 흩어졌다.

(2)
러시아에 사는 한 유대인 부부가 이스라엘로 이주하려고 애썼는데, 행정상의 잘못으로 인해 서로 헤어지게 되었다. 남편인 아브라함을 제외한 그의 아내와 아이들만 소련을 떠나도 된다는 허락을 받은 것이었다.

가족이 찢어지게 되었고 당분간 서신 왕래만 가능할 텐데, 부부는 소련 당국의 검열을 피하기 위해 간단한 규칙을 정했다. 편지에서 남편이 검은색 잉크로 쓴 글자는 사실이므로 문자 그대로 이해하면 되고, 붉은색 잉크로 쓴 글자는 전부 거짓이니 반대로 이해하라는 것이었다.

아내와 아이들이 이스라엘에 도착한 지 일주일 후, 그녀는 남편으로부터 편지를 받았다. 편지는 검은색 글씨로 "여긴 모든 게 괜찮다. 여건이 더 좋아지고 있고 먹을 것도 풍부하고 사람들은 표현의 자유를 누리기 시작했다." 등 온통 긍정적이고 희망적인 내용이었는데...
편지는 끝까지 읽어 봐야 했다. 추신엔 이런 문장이 있었다.

"그런데 말이오, 한 가지 문제가 있소. 아무리 해도 붉은색 잉크를 도무지 구할 수 없구려."


이걸 보면 공산주의 국가에서는 왜 표현의 자유를 허용할 수 없는지, 남한과 북한끼리는 제대로 된 이산가족 상봉은커녕 서신 왕래와 전화 통화조차 왜 절대로 성사되지 못하는지 그 본질적인 이유를 알 수 있다. 조금이라도 정보 왕래의 통로가 뚫리면 사람들은 정말 상상을 초월하는 기상천외하고 교묘한 방법으로 의사소통을 하려 애쓰기 때문이다. 가령, 빽빽한 텍스트에서 세로드립은 고전적인 테크닉 중 하나일 뿐이다.

범죄자가 아닌 다수의 평범한 사람들 간의 의사소통은 북한의 체제 유지에 도움이 되지 않는다. 반대로 소수의 간첩· 불온세력간의 의사소통은 불행히도 남한의 안보를 저해하는 용도로 악용된다. 그러니 서로 왕래를 절대로 할 수 없게 막아 놓는다.

2. 일본의 재일 교포 북송 사업

저 공산주의 유머에서 1은 그렇다 치더라도 2의 경우 실제로 비슷한 사례가 가까운 곳에 있었다.
과거에 우리나라가 일제로부터 해방되고 나자, 일본은 그 뒤에도 한국으로 돌아가지 않고, 그렇다고 일본으로 정식 귀화하지도 않고서 자기네 나라에서 계속 정착해 있는 조선인 집단 때문에 골머리를 썩고 있었다. 이거 뭐 과거의 식민지 시절처럼 정부 차원에서 대놓고 차별하고 착취하거나 잡아 가둘 수도 없고..;; 그 당시 남한과 북한은 모두 공식적으로 일본과는 서로 생까는 미수교 상태였을 뿐만 아니라, 본토 사정도 워낙 가난하고 혼란스러웠으니 재일 교포들을 일일이 다 받아 주고 챙길 여유가 없었다.

그런데 6·25 전쟁을 한바탕 치른 뒤 1950년대 말엔 북한이 일본 내부의 조총련을 주축으로 하여 재일 한국인들을 대대적으로 북한으로 데려 오려는 공작을 벌였다. 북한은 노동 인력을 확보하고 자기 체제를 어필하고 싶었으며, 일본은 재일 교포들을 빨랑 워이~ 내보내고 싶었으니.. 이해관계가 서로 맞아서 거래가 성사되었다. 물론 일본이 대놓고 공산주의 국가와 손잡는 건 국제 정세상 보기가 안 좋기 때문에 적십자라는 민간 단체를 거쳐서 일을 진행했다.

북한 당국과 일본 적십자사는 우리로 치면 마치 월북 권유 불온삐라처럼, "북한은 공산권 국가로부터 원조를 직통으로 받으면서 한창 발전 중임. 아직도 전쟁 폐허에 거지들이 우글거리는 헬게이트 남조선과는 차원이 다름! 무상 의료 무상 복지! 지금 이 기회에 북한으로 가면 정착 지원이 얼마이고 혜택이 어쩌구" 하면서 온갖 감언이설로 재일 교포들을 현혹했다.

그리고 이 말을 믿고 실제로 북한으로 가는 사람들이 몇백 명 정도 생겼다. 교류가 완전히 끊어져 버린 남한/북한과는 달리, 북한/일본은 그 당시 아직 일말의 서신 교류는 가능했던 모양이다. '만경봉호'라고 불린 북송선을 먼저 타기로 한 어떤 교포는 후발대에게 편지로 연락을 주기로 약속했는데.. 여기서는 저 서양 유머 버전처럼 변별 요소가 잉크 색깔이 아니었다. CJK 문화권답게 "내가 편지를 세로쓰기로 보내면, 저 소문이 사실이란 뜻이오. 이북이 정말 살기 좋은 곳이니 너도 후속 북송선을 타고 빨랑 오시오. 하지만 가로로 써서 보내면 저거 다 거짓말이라는 뜻이니 오지 마시오."라고 규칙을 정했다.

결과가 어땠을까? 후발대에게 도착한 편지들은 검열을 의식하여 겉보기로 내용은 온통 지상락원 드립에 위대한 김 일성 장군님 칭송이었다. 그러나 텍스트가 배열된 형태는 한 치의 예외 없는 가로쓰기였다! 그래서 그 편지를 받은 사람들은 기겁을 하고 월북(?)을 포기했다는 일화가 전해진다. 영락없이 저 공산주의 유머의 실화 버전이지 않은가?
심지어 "여기는 일본의 ○○○만치 풍요로워요!"라는 문장도 있었는데, 북한 관리가 일본 문화를 몰라서 검열을 통과했을 뿐, ○○○는 실제로는 '달동네, 꽃동네' 급의 일본의 극빈민가 명칭이었다. 영락없는 반어법이 된 셈.

일본에서 재일들은 다소 차별 받으며 2등 인민 취급을 받아 왔다고 하지만, 북한에서의 실제 대접은 2등도 못 되는 삼류 이하 적대계층이었고 여건이 훨씬 더 나빴던 것이다. 차라리 일본에서 계속 지내는 게 나았다. 그들은 감언이설에 속은 것이었다.
아니, 상식적으로 생각을 해 보라. 2등 인민이라지만 일단 자유 진영 바깥 문물을 맛보다가 저 미끼에나 달랑 낚여서 들어온 사람들을 북한 당국이 호의적으로 대접해 줄 하등의 이유가 없지 않겠는가? 감시하고 착취하고 부려먹기나 하겠지.

3. 검열의 과거 실제 사례

하긴 옛날에 유럽에서는 1차 세계 대전 때 참호전이 워낙 참혹한 생지옥이다 보니, 병사들이 고향으로 편지를 보낼 때 현장 묘사를 대놓고 하지 말라고 불가피하게 검열을 했다. 전시에 이 정도로 표현의 자유를 좀 통제하는 건 심지어 미국도 괜히 반전 여론을 일으키지 않으려고 슬금슬금 한 적이 있다.

하지만 그 정도면 낫지, 나치 독일의 유대인 강제 수용소로 가 보자. 입구에는 보통 "ARBEIT MACHT FREI(노동이 그대를 자유케 한다)"라는 표어가 마치 군부대 입구의 표어처럼 만들어져 있는데, 어떤 수용소의 것은 ARBEIT의 B에서 윗부분의 D 모양이 아랫부분의 D보다 살짝 크게 글자 모양이 좀 왜곡돼 있었다. 보통은 둘 다 완전히 동일하거나, 아랫부분이 윗부분보다 더 크지 않던가.

사용자 삽입 이미지

전혀 자유롭지 않은 참혹한 수용소에서 수감자들이 저딴 표어까지 강제로 만들어야 하다 보니, 아~주 소극적이고 깨알같은 저항으로 역설을 표현한 것이었다. 삐딱한 B의 의미는 "자유 같은 소리 하고 쳐자빠졌네. 여러분 이거 다~ 거짓말인 거 아시죠?"였다.
노동 정신을 크게 왜곡한 저 역사적 사례로 인해, 말 자체는 별로 문제될 게 없던 저 표어는 오늘날 그쪽 바닥에서는 나치식 경례만큼이나 절대금기 표어가 되어 버렸다. 뭐, ARBEIT 자체는 알바/아르바이트 덕분에 한국어에서 가장 잘 알려진 독일어 단어가 돼 있긴 하다만..;;

한편, 우리나라에서도 손 기정 마라토너는 일장기와 관련하여 가슴아픈 사례가 과거에 있었다.
3등을 한 남 승룡 선수는 손 기정에 대해... 1등을 해서 금메달을 받고 히틀러와 악수까지 한 건 별로 안 부럽고, 진짜 부러운 이유는 따로 있었다고 회고했다. 그는 우승자인 덕분에 월계수 화분을 득템했으며, 그걸로 복부의 일장기를 그럭저럭 가릴 수 있었기 때문이다!

사용자 삽입 이미지사용자 삽입 이미지

허나, 시상대의 측면에서 찍은 사진은 손 기정의 노력에도 불구하고 보다시피 일장기가 여전히 노출되는 형태로 찍혔으며, 일본의 언론은 이를 그대로 보도했다. 동아일보는 그 사진을 인용하면서 마치 인쇄 실수나 기술 한계인~~ 척 일장기 부분을 하얗게 덧칠하여 슬쩍 지우고 얼룩으로 가려서 사진을 내보냈으나, 포토샵이 없던 시절이어서 그런지 이건 조선 총독부 검열에서 고의적인 덧칠 삭제라는 게 탄로났다. 그래서 해당 신문사는 기자와 화가가 콩밥을 먹고 사장이 경질되었으며, 그걸로도 모자라서 신문 자체가 정간 처분까지 받는 보복을 당했다.

암울한 일제 강점기였으니까 저런 행동이 항일 독립 운동의 일환이라고 칭송받지, 순수하게 언론의 자세로만 따지자면 저런 식의 사진 변개는 아무리 일본이 원쑤라고 해도 바람직한 행동이 아니라고 개인적으로 생각한다. 절대로 져서는 안 되는 축구 한일전이라 해도, 한국 선수가 반칙을 한 건 한국인 심판이라도 지적할 수 있어야 하며, 언론은 현장에서 있었던 일은 일단은 있는 그대로 보도해야 하지 않는가? 책에서도 번역자는 번역만 해야지 제멋대로 원문을 해석하고 고쳐서는 안 되듯 말이다.

물론, 지금의 배부른 기준을 갖고 그 시절을 제멋대로 판단할 생각은 없다. 애초에 일제가 동아일보를 저 정도로 해코지한 이유도 "일장기라는 최고조넘에 대한 모독 때문"이지, 팩트를 있는 "그대로 보도하지 않고 사진을 왜곡했기 때문" 자체가 아니니까 말이다. 그건 그리 중요한 문제가 아니었다.

그리고 손 기정 본인도 동아일보 이상으로 표현의 자유 제약 때문에 괴로움을 당했다. 우승 소감 인터뷰를 녹음할 때 말이다. "저 언덕에서 일장기가 나를 반겨 주더군요. (...) 이 승리는 내 개인의 승리가 아니라 전 일본 국민의 승리입네다" 이런 영혼이 없는 말을 강제로 각본대로 읽어야 했기 때문이다. 이런 낯뜨거운 대목에서 손 기정의 말투가 오그라들자 옆에서 누군가가 '크게 말해!' 면박을 주는 장면까지 살짝 녹음되어 들어갔다. 그게 그 시절의 아픈 모습이었다.

4. 일본 적십자 센터 폭파 미수 사건

주변 잡설이 또 길어졌으니 다시 재일 교포 북송 얘기로 돌아오겠다.
이렇게 일본과 북한이 서로 짜고 재일 교포들을 북송하는 것에 대해, 남한을 접수하고 있던 이 승만 정권은 굉장한 불쾌함과 거부감을 표시했다. 비록 우리 남한도 너무 가난해서 이들을 다 포용하고 먹이고 재우고 일자리를 줄 처지는 못 되지만, 그래도 이들도 같은 동포인데 북한으로 그것도 거짓말로 꾀어서 보내는 건 절대 있을 수 없다는 입장이었다. 뭐, 남북 체제 경쟁에서 뒤쳐진다는 압박감도 덤으로 있었겠지만 말이다.

지금으로 치면 중국과 불거져 있는 탈북자 북송 문제와 비슷하다.
목숨 걸고 탈북을 시도한 사람들을 다시 생지옥으로 돌려보내는 건 인간적으로는 정말 잔인하고 극악무도한 짓이다. 하지만 중국의 입장에서 저 탈북자들은 자국 땅에 있어 봤자 좋을 게 하나도 없고, 또 북한과 맺은 약속도 있고 하니 저렇게 미지근하게 대응하는 것이다. 일본이 재일 한국인이라는 '난민'에 대해 갖고 있는 감정도 이와 같지는 않지만 비슷했다. 저놈들이 북한 가서 어찌 될지는 내 알 바 아니고, 일단은 골치 아픈 사람들이 우리 땅에서 나가 주니까 누이 좋고 매부 좋은 거다.

게다가 그 당시에 이 승만은 평화선을 선포해 놓고, 독도 일대에서 깝죽거리는 일본 어선을 해군까지 동원해서 무자비하게 쫓아내고 나포하고 있었다. 그걸로도 모자라서 쓰시마 섬까지 한국 땅이니 내놓으라고 으름장을 놓았다.
기가 찬 일본은, 한국으로부터 편지나 소포가 왔는데 우표가 울릉도· 독도가 그려진 것이면, 그 우표에서 독도 부분을 뜯어내고 물건은 그대로 반송을 해 버릴 정도였다...;; 그런 쪼잔한 저항이 통용될 정도로 한국과 일본은 안 그래도 미수교인 데다 앙숙이 돼 가고 있었다. 이런 일본이 재일 교포 북송 문제에 대해서 대한민국의 고집불통 대통령의 말을 들어야 할 하등의 이유가 있었겠는가? 도대체 무슨 이쁜 구석이 있다고?

이 승만은 어렸을 때 조선이 외교전에서 밀려서 미국으로부터 버림받고 서서히 일제에게 먹혀 망하는 걸 똑똑히 지켜본 대통령이었다. 그게 평생 남는 트라우마였다. 그래서 먼 훗날 대통령이 된 뒤엔, 비록 내치에서는 부하를 잘못 뽑고 병크도 많이 저질렀지만 외교는 정말 한 치의 양보가 없는 초강경 노선을 고집했다. 그는 그 시절 세계 각국의 정상들 중에 최강의 고학력자였으며, 이 바닥은 똘끼 충만한 고수 100단이 돼 있었다. 이 꼰대 영감쟁이가 뭔 똥고집을 부리다 무슨 사고를 칠지는 아무도 예상할 수 없었다.

대표적인 예로 그는 전쟁 중에 북한 송환을 원치 않던 거제도 반공 포로를 무단으로 석방해 버린 전력도 있다. "자유를 원하는 개인에게 자유를 선사해 주는 게, 그들을 인질로 잡고서 외교 거래를 하는 것보다 더 올바른 일이다. (그러니 이 자유를 지키는 전쟁을 무작정 정치 논리대로 어중간하게 휴전해 버려서도 안 된다!)"를 호소하기 위해서였다.
그와 같은 맥락으로, 재일 교포의 북송은 비록 남의 나라에서 일어나는 일이지만 눈 뜨고 지켜볼 수 없었다. 그래서..;; 이판사판인데 무슨 북파 공작원마냥 공작원을 "일본에다" 보내, 북송 주선 기관인 일본 적십자사 본사에다 테러를 가하려 했다.

실미도 북파 공작원만 있었던 게 아니다. 군사 정권이 아닌 이 승만 때 우리나라가 북한도 아닌 일본에다가 공작원을 보낸 적이 있었다는 사실을 아는 사람이 얼마나 될까? 무슨 항일 독립 운동가도 아니고! 이게 1959년의 일이다. 게다가 그 공작원 중에 김 구의 암살범인 안 두희까지 있었다는 건..;; 어지간한 소설과 영화를 능가하는 기막힌 노릇이 아닐 수 없다.
하지만 첫 시도가 그만 검문에 의해 발각되어 버렸으며, 추가적인 양성과 투입이 있기 전에 4·19로 인해 이 승만이 하야하면서 이 일은 없었던 것으로 묻히게 됐다.

곧이어 박 정희 군사 정권이 들어섰다. 이들은 쿠데타 이력를 무마하고 정통성을 확보하기 위해 반공 + 경제 개발을 적극 실천해야 했다. 그래서 1965년에는 그 당시에 매국질이라고, 일제 강점기 피해를 푼돈에 졸속으로 퉁쳤다는 욕을 잔뜩 쳐먹으면서 결국 일본과 재수교를 하게 된다. 경제 개발을 할 자금 밑천이 필요하기 때문이었다.

이 승만 시절에는 일본이 아직 전범 낙인이 단단히 찍혀 있던지라, 뼛속까지 반일 대통령이 비록 허세뿐이나마 일본을 상대로 갑질을 막 해댔다. 그러나 박통 때는 우리가 급전이 필요한 관계로 일본에게 상대적으로 저자세로 굽히고 들어가야 했다. 평화선도 이때 폐지되었다.

과거에 재일 교포 북송에 관여하던 조총련은 나중에 박통 때엔 육 영수 여사 피살 사건의 배후로 지목되면서 이미지를 더욱 나쁘게 구겼다. 이때는 책임 소재 규명에 미온적인 일본이 괘씸하다면서 박통의 입에서도 "(우리라고) 동경 폭격 못 할 줄 알아?"라고, 판문점 도끼 만행 사건 때에 버금가는 강한 말이 나왔다.
하긴, 일본은 역사적으로 핵폭탄뿐만 아니라 도쿄 소이탄 대공습의 끔찍한 트라우마가 있는 동네인데 저 소리 들으면 굉장히 발끈하긴 했겠다. 박통도 언제나 일본에 무조건 굽신굽신 하지는 않았다.

박 정희가 나라에 긍정적이든 부정적이든 끼친 영향이 워낙 너무 엄청나기 때문에, 이 승만 시절의 배고프던 남한은 남한의 역사인 것 같지가 않게 느껴질 정도이다. 그 정도로 이질감이 크다. 화폐 단위만 해도 1962년 이래로 현행 시스템이 유지되고 있으니 딱 박 정희 이전과 이후로 나뉘는 것이나 마찬가지이고, 이 승만은 '박 근혜' 같은 직계 후손도 없어서 더욱 단절감이 크다. 조선과 일제 강점기를 모두 경험하고서, 이 나라를 올바른 방향으로 세워만 놓고 건국 초기의 시행착오 병크로 인한 뭇매는 다 맞은 뒤 혜성처럼 사라져 버린 그리운 영웅이다. 기적을 통해 민족 해방을 경험하고, 나중에 타지에서 죽은 건 성경의 모세를 닮았다.

끝으로, 재일뿐만 아니라 먼 옛날에 쿠바에 이민 간 교민들도 남한과 북한 모두에게서 환영받지 못하고 사생아뻘 되는 지위로 전락해 있다고 들었다. 쿠바도 우리나라와는 아직까지 미수교 상태이다. 이 역시 슬픈 20세기 한반도 역사의 단면인 것 같다.

Posted by 사무엘

2016/02/18 08:30 2016/02/18 08:30
, , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1194

1. 사람이 죽었다

“왕을 해하려 하는 모든 자들은 그 청년과 같이 되기를 원하나이다.” (삼하 18:32)
성경에서 다윗은 아들 압살롬이 죽은 것을 부하의 이 말만으로 바로 알아채고 멘붕에 빠졌다.
사람의 생사를 확인하는 과정이 저렇게 은유적이고 드라마틱한 경우가 실제 역사나 창작물에서 종종 있었다.

1979년 10월 26일엔 잘 알다시피 박 정희 대통령이 암살당했다. 당시 대통령의 주치의였고 국군 수도 병원 서울 지구의 원장이던 김 병수 공군 준장은 엄중한 감시 하에서 얼굴도 모르는 어느 VIP 중상자의 의학적 사망을 인증했다. 허나, 복부를 보고서 이 사람이 다른 외국 귀빈이나 극비 첩보 요원이 아니라 대통령 각하임을 직감했다.

그 후 얼마 지나지 않아 국군 보안사로부터 전화가 왔다. 하지만 그는 청와대 경호원의 감시 때문에 이 사실을 마음대로 발설할 수 없는 처지였다. 이때 전화를 건 우 국일 준장이 거기 상황을 눈치 채고는, 대답을 예/아니요로 아주 간접적으로만 하면 되게 상황을 만들어 줬다.

작고했나? / 예
차 실장(차 지철)이냐? / 아니요
코드 원(각하)이냐?


이로써 군부는 대통령의 죽음을 확인하게 됐다. 무슨 통화를 했느냐는 경호원의 추궁에 김 병수 준장은 즉석에서 이렇게 둘러댔다고 한다.

거긴 아무 일 없냐? / 예
너 혹시 지금 신변의 위협을 받고 있냐? / 아니요
알았다. 여기도 잘 지키고 있으니 걱정 말고 있어라. / 예


2. 사람이 살았다

사망이 아니라 생존을 은유적이면서도 아주 짜릿하게 잘 표현한 경우는... 비록 실화가 아니라 영화 속 허구이긴 하지만 <에어 포스 원> 대사를 따를 게 없다. 이 영화는 딱 두 마디만 기억하면 된다. “내 비행기에서 내려! (Get off my plane)”와 바로 이것.

“자유 24호, 콜싸인을 변경합니다. 자유 24호가 이제 에어 포스 원입니다! (Liberty 24 is changing call signs. Liberty 24 is now Air Force One.”
“와아아~~~!!”


대통령이 죽거나 실종돼 버렸다면, 이 비행기는 대통령의 유가족만 탔기 때문에 콜싸인이 에어 포스 원이 아닌 다른 명칭이 됐을 것이기 때문이다.
<라이터를 켜라>도 "열차가 부산 역에 안전하게 멈춰 섰다. 다시 반복한다. 열차가 ..." 이런 방송과 함께 중앙 통제실이 환호 분위기로 바뀐다는 점에서는 <에어 포스 원>의 결말과 좀 비슷한 구석이 있다. 하지만 간지는 훨씬 덜하다.

정부에서 운용하는 물리적인 대통령 전용기가 있는 건 사실이다. 하지만 이와는 별개로, 현실에서는 그 특정 비행기가 아니라 대통령이 탑승한 비행기가 그냥 에어 포스 원이 된다. 물론 평소에는 대통령은 줄곧 그 전용기만 타겠지만 말이다. 이것은 오성장군 군대 계급인 원수랑, 국가 수장을 뜻하는 원수만큼이나 서로 혼동해서는 안 될 개념이라 여겨진다.

그리고 이것은 병역특례 티오하고도 비슷한 개념이다. 처음엔 병특 지정 회사들이 병무청으로부터 올해는 총 몇 명을 채용할 수 있다는 티오(인원 편성)를 받는다. 하지만 회사가 티오를 써서 일단 사람을 채용한 뒤에는, 그 티오는 회사가 아니라 복무자 자신의 소유가 된다.

어떤 회사가 2명 티오를 받아서 그만치 채용을 했다고 치자. 그런데 도중에 한 명이 전직· 만료하고 나간다 해도 그 회사는 다른 한 명을 병특으로 또 채용하지 못한다. 반대로 그 복무자는 병특 지정 업체이기만 하다면, 이미 티오를 다 쓰고 없거나 애초에 올해 티오를 한 명도 못 받은 회사로도 얼마든지 전직이 가능하다. 복무자 자신이 곧 추가적인 티오이기 때문이다.

즉, 회사 사정이 어떤지와 무관하게 업계 전체의 관점에서는 '병특 인원 보존의 법칙'이 성립한다. 그러니 이 제도는 상대적인 약자인 복무자에게 유리할 뿐만 아니라 병무청의 입장에서도 인원 관리하기가 수월해서 좋다. 복무자가 사고로 죽기라도 해야 그 티오가 그 사람이 당시 종사하던 회사로 돌아가지 싶다.
얘기가 어쩌다가 옆길로 한참 샜지...;; 아무튼 대통령이 탄 비행기가 곧 에어 포스 원인 것만큼이나, 병특은 복무자 자신이 곧 티오인 시스템이라는 얘기를 엮어서 하고 싶었다. -_-;; 본인이 산업 기능 요원 출신이기도 해서 말이다.

3. 넌 죽을 것이다

사람이 죽었거나 살았다는 통보에 이어 마지막으로 이번에는 죽을 거라는 경고 차례다. 이 분야는 간지 넘치는 대사가 픽션이 아닌 현실의 정치 분야에도 꽤 있다. 예전에 한 번씩 인용한 적이 있는 대사들이지만 다시 복습해 보고자 한다.

(1) “빈 라덴을 용서하는 건 신이 할 일이다. 그러나 빈 라덴과 신과의 만남을 주선하는 건 우리가 할 일이다.
너무 멋있지 않은가? 이것은 빈 라덴이 살아 있던 시절에 미군 해병대의 모토였다고 한다. 그런데 '빈 라덴'을 임의의 '테러리스트'라고 말만 바꿔서 러시아의 푸틴 대통령이 또 유사한 드립을 쳤다고 한다.

(2) “아이를 살려 보내면 너도 살고, 아이가 죽으면 너도 죽는다.”
예전에도 한번 언급한 바 있지만, 1980년 가을에 이 윤상 군 유괴 사건이 발생했을 때 전대갈 아저씨가 남긴 대통령 특별 담화이다. 나중에 가해자가 잡히고 아이가 죽은 채로 발견되자, 전대갈은 실제로 사법부에 압력을 넣어 강제로 사형을 때려서 가해자도 죽여 버렸다.
삼권분립의 관점에서는 좀 아슬아슬하게 월권을 한 것이진 하지만, 요즘처럼 강력 사건에 가해자 인권만 있고 피해자 인권이 처참하게 짓밟히고 있는 시기엔 저렇게 시원시원하던 옛날이 그리울 때도 왕왕 있다.

(3) “지금이라도 내 딸을 보내 주면 그걸로 일이 끝날 거다. 하지만 안 보내면 난 지구 끝까지라도 쫓아가 네놈을 기필코 찾아 내어 죽여 버릴 거다.”
테이큰, 브라이언의 전화 대사 의역. 더 이상의 자세한 설명은 생략한다.

난 복수극 영화 취향인가 보다. <테이큰>, <킬 빌>, <에어 포스 원>이 딱 내 스타일이다.
성령 충만으로 용서하는 게 가능한 맥락이 아니라면(개인이 아닌 공권력/국방 문제라든가..) 악당은 다 때려 부숴야 제맛 아니겠는가? 성령 충만은 악에게 굴복하는 나약함을 조장하는 게 결코 아니다.

사용자 삽입 이미지

괜히 쓸데없이 종교색 표방하면서 성경이나 교회 왜곡하는 것들은 극혐(<밀양> 같은 거). 세계관이 너무 비현실적이거나 뭔 어설픈 열린 결말 이런 것도 싫음.

Posted by 사무엘

2016/02/15 08:34 2016/02/15 08:34
, , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1193

* 이 글의 내용은 클립보드 API, const 이야기의 연장선상에 있다. 관심 있으신 분은 예전에 썼던 글을 먼저 읽어 보시기 바란다.

1.
Windows API에는 GetPriorityClipboardFormat라는 함수가 있다. 이것은 클립보드로부터 '붙여넣기'(paste) 기능이 있는 프로그램이 사용할 만한 함수이다. 이 함수가 지목하는 포맷에 해당하는 클립보드 내용을 붙여넣으면 되며, 사실은 그보다도 먼저 이 함수의 실행 결과에 따라 '붙여넣기' 메뉴를 enable/disable시킬지를 결정하면 된다.

내 프로그램이 지원하는 클립보드 포맷이 단 하나밖에 없다면 IsClipboardFormatAvailable을 쓰면 된다. 그렇지 않고 여러 종류의 포맷을 지원하는데, 현재 클립보드에 존재하는 포맷 중에 우선순위가 가장 높은 놈은 무엇인지 알고 싶다면 말 그대로 저 priority라는 단어가 들어간 함수를 써서 요청을 해야 한다. 이것은 마치 커널 오브젝트의 동기화에서 쓰이는 WaitForSingleObject와 WaitForMultipleObjects 함수쌍의 관계와 일면 비슷하다.

그런데 내가 궁금한 점은 이 함수의 첫째 인자가 const UINT *가 아니라 왜 그냥 UINT *냐는 것이다.
첫째 인자는 함수로 전달하는 복수 개의 클립보드 포맷 리스트의 포인터이며, 속성이 엄연히 out이 아닌 in이라고 명시되어 있다. 저 함수 역시 인자로 받은 리스트 내용을 참조만 할 것이니, 포인터가 read-only가 아니라 일반 read-write 형태여야 할 하등의 이유가 없다. WaitForMultipleObjects만 해도 HANDLE의 배열 포인터는 분명히 const HANDLE *로 잡혀 있지 않던가?

저게 const라면,

static const table[] = { CF_UNICODETEXT, CF_HDROP }; //사람이 텍스트로 입력한 파일명 & 탐색기에서 복사해 놓은 파일명을 모두 받아들임
int res = GetPriorityClipboardFormat(table, ARRAYSIZE(table));

이런 식으로 간편하게 static const 배열을 함수에다 넘겨 줄 수 있을 텐데, const가 아니기 때문에 일이 좀 귀찮아진다. table에 const 속성을 제거하든지, 아니면 함수에다 넘겨 줄 때 const_cast 연산자를 써 줘야 한다. 내 경험상, 강제로 const 포인터로 고친다고 해서 딱히 프로그램 동작에 문제가 생긴다거나 하는 건 아니더라.

하지만 내 프로그램 내부에서 값을 고칠 일이 절대로 없기 때문에 const로 엄연히 봉인해 버리고 싶은 테이블을 봉인하지 못한다니, 썩 보기 좋아 보이지 않는다. 또한 const_cast 같은 연산자가 늘어나는 건 내 소스 코드에서 무질서도가 쓸데없이 증가하는 듯한 느낌을 준다.

물론, 동일한 유형의 데이터에 대해서 클립보드 포맷을 복수 개 지원한다는 건 대개가 custom 포맷과 표준 포맷을 혼용하는 경우이다. 리스트의 모든 원소가 상수가 아니며, 우선적으로 선택되었으면 하는 앞부분은 어차피 RegisterClipboardFormat의 리턴값인 경우가 많다. 워드 프로세서라면 모든 정보가 보관되어 있는 고유 포맷일 것이고, 텍스트 에디터라면 칼럼 블록을 명시한 고유 포맷이다.

그러니 저 함수의 인자로 전달되는 배열 포인터는 애초부터 const가 아니라 일반 배열일 가능성이 더 높다. 메시지만 해도, 시스템 차원에서의 유일성을 보장받기 위해 RegisterWindowMessage로 특수하게 등록한 메시지는 WM_USER+x와는 달리 가변적인 값이다. 그렇기 때문에 윈도우 프로시저에서 switch/case를 이용해 걸러낼 수가 없으며 if문을 써서 비교해야 하지 않던가. (이 두 Register* 함수는 프로토타입이 UINT Foo(PCTSTR name)로 완전히 동일하며, 명칭을 hash하여 숫자로 바꿔 준다는 공통점이 있어서 더욱 동질감이 느껴진다)

그런데.. 그런 식으로 치자면 WaitForMultipleObjects가 받아들이는 HANDLE도 NULL이나 INVALID_HANDLE_VALUE 같은 오류 상황 말고는 고정불변 상수값이 존재할 여지가 전혀 없는 타입이다. 값의 가변/불변성과는 무관하게 해당 함수가 값들을 읽기만 한다면 함수 인자가 응당 const 포인터로 잡혀 있어야 할 텐데, 클립보드의 저 함수는 왜 저렇게 설계되었으며 디자인에 문제를 제기하는 사람이 왜 없는지 궁금하다.

2.
서식이 없고 칼럼 블록도 없는 일반 텍스트 에디터에서 붙이기를 구현한다면 굳이 custom 포맷을 등록할 필요는 없을 것이고 애초에 복수 개의 클립보드 포맷을 살펴볼 필요도 없을 것이다. 단, 여기에도 원래는 유니코드/ANSI와 관련된 미묘한 문제가 있다. wide 문자 기반인 CF_UNICODETEXT와, ansi 문자 기반인 CF_TEXT가 따로 존재하기 때문이다.

Windows NT는 이들 사이에서 '유도리'를 제공한다.
응용 프로그램이 유니코드 텍스트 형태(CF_UNICODETEXT)로 클립보드에다 텍스트를 복사해 놓은 뒤, 나중에 유니코드를 지원하지 않는 프로그램이 클립보드로부터 CF_TEXT 포맷을 요청하는 경우 운영체제는 CF_TEXT도 있다고 답변을 하며, CF_UNICODETEXT로부터 CF_TEXT 데이터도 자동으로 만들어 준다. 그 반대도 물론 해 준다. (복사는 CF_TEXT로, 붙여넣기는 CF_UNICODETEXT로)

마치 Get/SetWindowText, WM_GET/SETTEXT에서 운영체제가 A/W 문자열 보정을 하듯이, 클립보드에 대해서도 그런 보정을 해 준다. 재미있지 않은가? 그러니 오늘날의 Windows에서는 유니코드를 지원하는 프로그램은 어떤 경우든 CF_UNICODETEXT만 생각하고 요걸로만 읽고 쓰면 유니코드를 지원하지 않는 구시대 프로그램과도 의사소통에 아무 문제가 없다.

하지만 문제가 되는 건 내부적으로 유니코드를 사용하는 프로그램이 Windows 9x까지 고려해서 만들어질 때이다. 9x 계열에서는 CF_UNICODETEXT는 응용 프로그램이 굳이 요청해서 자기들끼리 쓰지 않는 한, 운영체제 차원에서 공식적으로는 '없는 포맷', 지원하지 않는 유령/공기 포맷이다. 고로 NT 계열과 같은 타입 자동 변환이 없다.

텍스트 에디터가 자기는 내부적으로 유니코드 기반이라고 해서 자신이 native로 사용하는 CF_UNICODETEXT 형태로만 데이터를 복사해 놓으면, 기존 메모장 같은 프로그램에서는 텍스트 붙이기를 할 수 없게 된다.
그렇기 때문에 9x 계열과 유니코드라는 두 토끼를 모두 잡으려면 응용 프로그램은 클립보드로부터 데이터를 읽을 때도 IsClipboardFormatAvailable가 아니라 저 GetPriorityClipboardFormat를 써서 CF_UNICODETEXT와 CF_TEXT를 모두 살펴봐야 한다. 물론 1순위는 유니코드로 하고 말이다.

그리고 빈 클립보드에다 텍스트를 복사해 넣을 때에도 CF_UNICODETEXT부터 먼저 집어넣은 뒤, CF_TEXT 타입도 자동으로 생겨 있는지를 IsClipboardFormatAvailable로 체크하고, 없으면 ansi 텍스트도 수동으로 넣어 줘야 한다. Windows NT에서는 유니코드 텍스트만 집어넣어도 CF_TEXT로 붙여넣는 게 저절로 가능하지만 9x에서는 그렇지 않기 때문이다.

참 얼마 만에 클립보드 얘기를 또 꺼내게 됐는지 모르겠다. 지금이야 먼 과거의 유물이 됐다만, Windows 9x 시절에는 텍스트 하나를 유니코드 형태로 주고받을 때는 이렇게 미묘하게 귀찮은 면모가 좀 있었다.

클립보드에다 데이터를 지정하는 SetClipboardData는 GMEM_MOVEABLE을 지정해서 GlobalAlloc으로 평범하게 할당한 메모리 핸들을 넘겨 주는 방식으로 사용하면 된다. 함수를 호출한 뒤부터는 그 메모리 핸들은 운영체제의 관할로 넘어가기 때문에 우리가 임의로 해제해서는 안 된다.
이것과 굉장히 비슷한 개념으로 운용되는 다른 함수는 SetWindowRgn인 것 같다. 평범한 HRGN을 넘겨 주지만 이제부터 이 region은 운영체제의 관할이 되기 때문이다. 우리가 더 건드려서는 안 된다.

3.
C/C++은 여느 언어와 마찬가지로 const라는 속성이 존재하는데, 이것은 (1) 완전히 붙박이 상수가 될 수 있으며, 아니면 (2) 런타임 때 가변적인 초기값이 붙는 것도 가능하지만, 한번 값이 정해진 뒤에는 불변이라는 의미도 될 수 있다.
이거 혼동하기 쉬운 개념이다. C/C++의 const는 (1)은 딱히 보장하지 않고 일단은 (2)만 보장한다.

const형 변수를 초기화하는 초기값으로는 반드시 case 레이블이나 static 배열의 크기처럼 컴파일 타임 때 값이 결정되는 상수만 와야 하는 게 아니다. 변수도 얼마든지 초기값으로 지정할 수 있으며, 이건 그냥 const뿐만 아니라 static const에 대해서도 마찬가지이다. 애초에 const는 타입에 제약이 없으니까. (1)을 정수 명칭에 한해서 보장해 주는 건 enum, 아니면 템플릿 인자이다.

그래서 C#은 이 두 개념을 const와 readonly로 확실하게 구분해 놓았는데, 이건 상당히 매력적인 조치라 여겨진다. 배열· 테이블도 const로 지정이 가능하니까 말이다. 또한 붙박이 불변 const는 스택에든 어디든지 여러 인스턴스가 중복해서 존재할 이유가 하등 없으니 static 속성도 자동으로 포함하는 걸로 간주된다.

한편, 포인터가 const라면(가령 p) p 자신의 값을 바꿀 수 없는지, 아니면 p가 가리키는 메모리의 값을 바꿀 수 없는지(*p 혹은 p->)가 문제가 된다. const TYPE *p라고 하면 *p가 잠기고, TYPE * const p라고 하면 p가 잠긴다. const TYPE * const p라고 하면 짐작하시겠지만 둘 다 잠긴다.
문법이 좀 복잡한데, const T와 T const는 의미상 동일하다. 그리고 포인터값 자체를 잠글 때는 * 뒤에다가 const를 추가로 붙인다고 생각하면 비교적 직관적으로 이해할 수 있다.

하지만 포인터라는 게 지니는 값은 NULL 같은 특수한 경우가 아니고서야 언제나 가변적인 메모리 주소이기 때문에.. 포인터에다 const는 p 자신이 아닌 *p를 잠그는 용도로 훨씬 더 많이 쓰인다. 클래스 멤버 함수에 붙는 const도 this 포인터에 대해서 *this를 읽기 전용으로 잠그는 역할을 한다. this는 예약어이다 보니 this의 주소값 자체를 변경하는 건 어떤 경우든 원래부터 가능하지 않으니 말이다.

그리고 *p가 잠긴 const 포인터에 대해서 그 잠김을 일시적으로 해제하는 형변환 연산자는 잘 알다시피 const_cast이다. 다만, const가 사라진 TYPE *라는 타입명을 그 뒤의 <> 안에다가 수동으로 일일이 써 줘야 한다. 이름은 const_cast이지만 얘는 '쓰기 금지'뿐만 아니라 언어 차원에서의 타입과 "무관하게" 변수 접근 방식과 관련하여 붙어 있는 추가적인 제약 속성을 제거할 때에도 쓰인다. volatile이 대표적인 예이고, 비주얼 C++의 경우 IA64 아키텍처 기준으로 __unaligned 속성도 이걸로 제거할 수 있다. (IA64는 기본적으로 machine word 단위로 align이 된 곳만 메모리 접근이 가능한지라..)

Windows API에는 포인터의 const-ness 구분 때문에 불편한 게 몇 군데 있다. 대표적인 건 CreateProcess 함수.
실행할 프로세스를 가리키는 명령줄은 PCTSTR이 아니라 PTSTR이다. 함수가 내부적으로 실행될 때는 파일명과 인자명을 구분하기 위해서 문자열의 중간에 \0을 삽입해서 토큰화를 하기 때문이다. 즉, strtok 함수가 동작하는 것처럼 토큰화를 하며 문자열을 변경한다.

이 함수는 실행 후에 문자열 내용을 다시 원래대로 되돌려 놓긴 하지만, 명령줄 문자열을 나타내는 메모리는 일단 read-only가 아니라 쓰기가 가능한 놈이어야 한다. *a+=0; 을 수행하려면 비록 *a의 값이 실제로 변경되지는 않지만 그래도 가리키는 메모리가 변경 가능해야 하는 것과 비슷한 이치이다.
Windows NT 계열에서 CreateProcessA 함수를 호출하면 얘는 어차피 문자열을 쓰기 가능한 문자열에다가 유니코드로 변환해서 내부적으로 W 함수가 사용된다. 그렇기 때문에 A함수에다가 (PSTR)"notepad.exe sample.txt" 이런 식으로 줘도 안전하긴 하다. 그러나 범용성을 고려하면 이는 그렇게 깔끔한 코드라고 보기 어렵다.

다음으로 DrawText도 기능을 제공하는 형태가 조금 지저분하다.
얘는 문자열을 받아들여서 출력하는데 폭이 부족할 경우 문자열을 있는 그대로 출력하는 게 아니라 "Abc..."라고 줄여서 출력하는 옵션이 있다. 그런데 사용자가 원한다면 자기가 받은 문자열 자체를 그렇게 출력되는 형태로 '수정해' 주는 옵션이 있다(DT_MODIFYSTRING). 이 옵션을 사용한다면 str은 PCTSTR이라는 프로토타입과는 달리 쓰기 가능한 포인터여야 한다.
또한 RECT *인자도 좀 아쉬운 구석이 있다. 일단은 in/out 겸용이어서 RECT *이지만, 이것도 out 없이 문자열을 찍을 영역만 지정하는 in 전용이 가능했으면 좋겠다.

끝으로, 리스트/트리 같은 공용 컨트롤에 데이터를 추가하는 LVITEM이 있다. 이들 구조체의 pszText는 PCTSTR이 아니라 PTSTR이다. 문자열을 얻어 올 때와 지정할 때 모두 동일한 구조체가 쓰이기 때문에 const 속성이 없는 것이다.
이 때문에 컨트롤에다 데이터를 처음 추가할 때 item.pszText=const_cast<PSTR>("Hello") 같은 연산이 부득이 쓰이기도 한다.

C++과는 달리 자바에는 클래스 멤버 함수라든가, call-by-reference로 전달되는 데이터에 대해서 const-ness를 보증하는 개념이 없다. 클래스에서 Get*으로 시작하는 메소드라고 해서 const를 따로 지정하지는 않으며, final 키워드는 함수의 오버라이드 불가, 값의 변경 불가 같은 '종결자' 용도로만 쓰인다. 과연 const가 없어도 괜찮은 걸까?

그런데 포인터의 단계가 복잡해지다 보면, const가 있어 봤자 가리키는 놈이 const인지, 나 자신이 const인지 일일이 따지고 추적해서 내부 상태의 불변성을 보장하겠다는 시도가 별 의미가 없어지긴 한다. 즉, this가 this와 *this까지 몽땅 봉인되어서 나 자신의 멤버 값은 변경할 수 없지만.. 내가 가리키는 메모리 영역의 값을 한 단계 거칠 수가 있으며 거기 값을 변경하는 게 가능하다면.. 궁극적으로 그 개체의 속성/상태는 바뀌었다고 볼 수 있기 때문이다.

어떤 코드를 실행해 보지 않고 메모리 접근이 안전한지 입증하는 정적 분석 기능이 만들기 까다로운 것도 본질적으로 이런 이유 때문이다. 컴파일러의 경고가 동작을 예측하고 비정상을 지적해 줄 수 있는 것도 간단한 지역변수 수준일 뿐이지, 몇 단계짜리 포인터에 구조체가 줄줄이 따라오면.. 답이 없다.

거기에다 클래스의 인터페이스 상으로는 Set*이 아니라 Get*처럼 "read-only"이고 값이 변하지 않는 기능만 사용한다고 하더라도, 클래스의 내부 상태는 얼마든지 바뀔 수가 있다. 한번 구해 놓은 계산값을 다음에는 빠르게 되돌리기 위해서 그 값 자체 내지 중간 상태를 캐싱하는 것처럼 말이다. 이런 경우가 워낙 많으니 C++에서는 나중엔 멤버의 const-ness에 예외를 허용하는 mutable 키워드도 도입하지 않을 수 없었다.

이건 마치 고유명사와 보통명사의 경계와도 비슷한 맥락의 문제인 것 같다. 로마자 알파벳이 한글과는 달리 대문자가 있고 고유명사는 첫 글자를 대문자로 적게 돼 있어서 일면 편리한 건 사실이다. 하지만 좀 깊게 생각을 해 보면, 새로운 명칭이 만들어졌을 때 그걸 고유명사로 볼지 기준이 생각만치 엄밀하지는 않은 경우가 많다. 기준이 생각만치 엄밀하지 않으며 그냥 자의적이다. 번역하지 않고 음역하는 놈은 죄다 고유명사인 걸까? 실체가 지구상에 오로지 하나밖에 없는 놈? 그렇다면 실물이 존재하지 않는 무형의 개념은? 그걸 정하는 기준은 무엇?

지금 우리가 보통명사로 별 생각 없이 쓰는 명칭들도 그 명칭이 처음 등장했던 시절엔 첫 글자를 대문자로 적는 유니크한 고유명사이기도 했다. const 개념 구분도, 대소문자 구분도 있건 없건 어느 하나가 다른 하나보다 절대적으로 우월하고 좋은 솔루션은 아니어 보인다는 생각이 든다.

에휴, 클립보드부터 시작해서 유니코드, const 등 별별 이야기가 다 이어져 나왔다. 이상~~ ^^

Posted by 사무엘

2016/02/12 08:36 2016/02/12 08:36
, , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1192

약 빨고 영상물 만드는 실력은 일본이 무척 탁월한 편이니 먼저 일본 얘기부터 좀 하겠다. 2000년대를 풍미했던 일본 환타 CF 시리즈가 떠오른다.
A반 가죽점퍼(록커) 선생부터 시작해서 아침 멜로 드라마 여선생까지 골고루 나오고, 별난 선생 때문에 학교 생활이 참 고달픈데 그래도 결론은 기승전..환타이다. 나중에 번외편으로 교장 선생편도 있었다.
DJ 선생은 학생에게 문제 풀이를 시킬 때도, 그리고 풀이의 정오 여부를 알려 주기 전에도, 심지어 교장 선생이 훈화를 하고 있는 동안에도 완전 음악에 심취해서 지내더라.

뭐, 그래 봤자 환타는 인공 색소와 설탕이 가득하고 마치 콜라만큼이나, 스팸 가공육만큼이나 몸에는 별로 좋을 게 없는 탄산음료일 뿐이겠지만, CF에서는 한자 선생이던가? '트로피칼 후르츠'를 강조하면서 열대 과일을 표방한다는 선전을 잔뜩 했다.

그리고 공익 광고 중에 이런 게 있었다.
학교에서 동물 그림을 그리는 시간에 어떤 애는 도대체 뭐가 씌였는지 흰 도화지 몇 장째를 온통 새까맣게 도배할 뿐이다. 장난 깽판을 친다고 보기에는 아이의 표정이 너무 진지하고 눈이 초롱초롱하니, 차마 대놓고 혼내지도 못하겠고.. 그래서 선생과 부모는 그 아이에 대해 정신 감정을 의뢰한다.
그런데, 각각의 종이들을 가로 x칸 세로 y칸으로 연결하니까 아이는 무진장 큰 시꺼먼 고래를 그리고 있었다는 게 밝혀진다.
...;; 아이의 잠재성과 창의성을 어른의 잣대로 단정짓지 말라는 뭔가 의미심장한 광고였다.

다음으로, 토요타보다는 아니고 '혼다'라는 일본 자동차 회사에서 2000년대에 창의성과 근성이 돋보이는 2분짜리 CF를 두 편 선보였다.
혼다 시빅(Civic)이라는 아반떼급 준중형차 CF는 무슨 합창단이 자동차의 엔진음과 주행음, 바깥 소음을 사람의 발성 기관만으로 흉내 내는 궁극의 비트박스를 시전했다. 컴퓨터에서 아주 정교하게 잘 만들어진 아스키 아트 텍스트 파일을 보는 듯한 느낌이다.
심지어 씨디를 집어넣어서 카오디오에서 음악이 나오는 것까지도 비트박스로 재현했다.

그리고 혼다 어코드(Accord)라는 쏘나타급 중형차 CF는.. 근성 도미노 스타일이다. 자동차 부품을 일렬로 쭈욱 늘어놓고 하나만 툭 건드려 주니까 나사가 돌아가고 나사 하나의 무게 차이 때문에, 기름 몇 방울의 무게 때문에 시소가 기울고 뭐가 툭 굴러 떨어지는 장치가 열몇 개씩 이어진다. CG가 아니라 진짜 다 실제로 세팅해서 촬영한 것이며, 세팅을 처음부터 전부 갖추는 데만 몇 시간이 걸렸을 정도의 극도의 근성의 산물이라고 한다.

옛날에 월트 디즈니 만화영화 <뮬란>에서 황제의 대사 중에는 "A single grain of rice can tip the scale. (쌀 한 톨의 무게 차이만로도 저울이 기울어질 수가 있는 법일세)"가 있었다. 영화에서 그 대사는 뮬란이 바로 전쟁이라는 저울의 승패를 가르는 그 쌀알이 될 거라는 복선이다만, 저 CF는 황제의 그 대사의 물리적인 실사판이나 다름없었다. ㄲㄲㄲ 다만, 타이어가 관성만으로 오르막을 저렇게 오른다거나 기름통이 너무 잘 굴러가는 건 현실성 개연성이 좀 떨어져 보여서 어색하다.

저것과 완전히 동일하지는 않지만 우리나라에도 옛날에 근성 도미노의 원조가 있었다. 바로 지금은 KCC로 바뀐 고려 화학의 '고려 페인트' CF다. 고려 페인트 광고는 지금도 기억하는 사람들이 많으며, 참신함과 기발함 덕분에 굉장한 호평을 받으며 회사 이미지의 제고에 도움이 됐다고 한다.

사용자 삽입 이미지

고려 페인트의 도미노 CF는 원조가 첫 등장한 게 1989년이고 2차가 1992년, 마지막 3차가 1996년으로, 총 세 종류의 버전이 있다. 저 엄청난 양의 도미노는 CG가 아니며 실물을 직접 만들어서 쓰러뜨리며 찍은 거라고 한다. 세팅 하느라 굉장히 고생 많았을 듯. 1992년 당시의 신문 기사를 보면, 2차분 CF의 경우 8만 개에 달하는 도미노 칩을 사용해서 제작되었다는 보도가 있다. 도미노는 개념상 카드섹션 매스게임의 무인 버전뻘 되지 않을까 싶다. =_=;;

사실, 1990년대 초는 미국 할리우드의 영화/애니메이션 업계에서조차 CG가 이제 막 슬금슬금 도입되던 과도기 단계였다. 가령, 월트 디즈니를 예로 들자면, 1989년에 나온 <인어 공주>가 CG가 전혀 없이 100% 셀 애니메이션만으로 만들어진 '마지막' 작품이고, 그 뒤 <미녀와 야수>, <알라딘>에서는 배경부터 시작해 CG가 조금씩 들어가기 시작했다.
그러니 우리나라는 그 시절의 CF는 아직 아날로그 기술만으로 실사 제작일 수밖에 없었다. 다만, 1990년대 중반으로 들어서면서 기술 격차는 갈수록 줄어들고, 우리나라 역시 기상천외한 CG 합성 CF들이 곧 등장했다. 당장 떠오르는 건 하이칼스(1993) Alias라는 워크스테이션급 CG가 온통 도배가 돼 있다.

비주얼 다음으로 청각적인 면을 살펴보자면, 고려 페인트의 1차 CF에서는 도미노가 쫙 넘어지는 동안의 BGM은 그냥 피아노 건반으로 음이 또르르르르르 올라가는 소리 위주이다. 마치 보글보글에서 잔기가 하나 늘었을 때 나는 소리(점수가 일정 숫자 돌파, 혹은 EXTEND 보너스)와 비슷하게 들린다.
2차에서는 '도도 도 솔파미레도'로 시작하는 C장조 전자음 BGM이 추가되어서 음향이 더 미려해졌으며,
3차에서는 도미노가 실사 사진으로 바뀌는 효과가 더 부각되고 BGM은 뭔가 코러스가 곁들어진 명랑한 외국 팝송으로 바뀌었다.

본인은 3차 CF에서 나오는 A플랫 장조의 짤막한 BGM을 무척 좋아했다. 저런 음악이 있었다는 것만 기억하고 이 역이 고려 페인트 CF의 일부인 줄은 모르고 있었는데 도미노 CF에 대해 검색하던 과정에서 지금까지 끊어져 있었던 연결 고리를 되찾았다.
고려 페인트 CF에는 클래식 음악이 쓰였고 출처가 뭐냐 하면 그리그의 <페르 귄트 모음곡 - 솔베이그의 노래>라고 각종 지식인, 개인 블로그, 음악 음원 사이트에 잔뜩 소개되었으며 심지어 1996년도의 신문 기사에도 올라 있다.

그런데... 저건 도대체 고려 페인트의 어느 CF에 들어간 음악이지?? 아시는 분?
내가 듣기에는 2차 버전, 3차 버전 그 어느 것도 여자 솔로인 "솔베이그의 노래"하고는 하나도 닮은 구석이 없는데?

딱 들어 봐도 CF에 들어간 음악은 명랑한 장조이지만 저 원조 클래식은 단조풍이다.
원곡을 리메이크 했다고도 볼 수 없고 그냥 완전히 다른 음악이다. 저 세 편의 고려 페인트 도미노 CF에는 클래식이 들어간 적이 없다. 3차 CF에 들어간 그 명랑한 BGM의 정확한 출처를 알고 싶다.

그리고 마지막으로...;;;
오래 전에 한번 다루기도 했지만 우리나라의 역대 공익 광고들을 또 짚고 넘어가도록 하겠다.
내가 인생에 대한 기억이 본격적으로 생겨서 선사시대에서 역사시대로 바뀐 게 1980년대 말~1990년대 초이다. 그래서 그 시기에 텔레비전 화면을 본 기억이 많이 남아 있다. 그 시절엔 환경 오염, 반공, 마약 등을 소재로 하는 공익 광고는 강한 훈계조에 섬뜩하고 무섭기로 악명 높았다.

시꺼먼 감방 같은 배경에서 "마약은 모든 것을 빼앗아 갑니다."가 흘러나온다든가(1989) 올가미가 휙휙 던져지기도 하고..(1991) 국민 소득 4천$, 소비 수준은 2만$. 풍선이 뻥 터지는 과소비 추방 광고(1989)까지. 어린애들은 트라우마가 생길 정도였다.

사용자 삽입 이미지

본인은 초딩 시절, "두껍아 두껍아..."로 시작하는 요 1990년작 CF를 직접 본 기억이 있다. 음산한 BGM과 함께 흰 바닥에서 시꺼먼 얼룩이 불어나는 게 공포 그 자체였다. 마약 광고보다도 더 무서웠다. ㅠ.ㅠ 하물며 저 얼룩이 블랙이 아니라 핏자국을 표방하는 레드였다면 아마 최악의 안구 테러가 됐을 것이다.

사실은 고려 페인트 이전에도 도미노를 소재로 한 광고가 있었다. 바로 도미노 블럭이 쓰러지는 걸 범죄자들이 소탕되는 것에다 비유한 1989년도 공익 광고이다. 본인은 이걸 직접 본 기억이 있다.
20년 남짓한 세월 동안에도 영상 문화의 흐름이라는 게 정말 확 달라졌다.

그 중에 지금까지도 많은 사람들의 기억에 남아 있는 고퀄의 공익 광고는 "필름 역주행"(1991, 1분)이다. 처참한 정면 충돌 교통사고가 난 동영상을 뒤로 돌려 보니 결국 발단은 질펀한 술자리. "필름은 되돌릴 수 있어도 생명은 되돌릴 수 없습니다."와 함께 영상이 끝난다. 이건 당시 무슨 국제 광고 공모전에서도 입상했다고 한다.
시대 정황상 역시 CG의 도움을 그다지 받지는 못했을 텐데 설마 자동차 두 대를 진짜로 충돌시켰을까? 어떻게 만들었까 싶은 생각도 든다. 8만 개짜리 도미노 블럭이야 그래도 생명의 위협이 없으니 근성으로 만들었다 치더라도. 아니면 충돌해서 운전자가 튕겨 나가는 부분만 실제 배우 대신 정교한 마네킹으로 대체했을 수도 있다.

그로부터 20여 년 뒤에 만들어진 음주운전 추방 광고는.. 아주 경쾌한 BGM과 함께 맥주잔이 출렁거리면서 도로를 질주하다가 교통사고가 나는 걸로 끝난다. 묘사가 훨씬 덜 간접적인 형태로 바뀌었으며, 앞부분만 봐서는 오히려 맥주 상업 광고인가 하는 착각이 들 정도이다. 그러나 결말부에는 역시 "즐거우셨습니까? 인생의 마지막 운전이 될 수도 있습니다"라는 경고문이 나온다.

이렇게 내 기억에 남는 CF들을 좀 늘어놓아 보았다.
작곡가, 기자, 작가(글/사진), 영화 감독처럼 뭔가 창의력으로 먹고 사는 사람들에게는 평생 한두 번 찾아올까 말까인 '명작운', '특종운'이라는 게 있는 것 같다.
난 영상이나 음악은 아니고 아시다시피 글과 코드를 주로 창조해 왔다. 하지만 음악 쪽도 언젠가 내가 만든 곡에 내가 꺼뻑 가는 작곡을 하는 순간이 왔으면 하는 소망이 있다.

프로그램 쪽이야 난 날개셋을 계속 만들지 않았으면 진작에 철도로 전공과 직업을 바꿨을 수도 있다. -_-;; 어쩌다가 약을 단단히 빨고서 이렇게 아무도 관심 안 갖는 분야의 엽기적인 프로그램의 창조자가 됐는지 모르겠다.
여러 분야의 글 중에서 기독교/성경 쪽만 예를 들자면, <음란한 성경은 가라>에 아마 평생의 명작운이 전부는 아니어도 대부분 투입되지 않았나 싶다. 그게 정말 독보적인 대박을 쳤으며 킹 제임스 옹호 진영과 반대 진영 모두에 내 이름을 알렸다.

페인트 광고에 근성 도미노가 나오고, 자동차 광고에 궁극의 부품 도미노와 합창단 비트박스가 나오는.. 그런 급의 명CF가 앞으로 또 국내외에서 얼마나 등장할지 지켜볼 일이다.
본인 역시, 30여 년 평생에 뭔가 똑같은 내용을 공부하고 암기해서 치는 시험에서 남보다 앞서고 뭔가 재미를 본 적은 거의 없었다. 그 대신 남 안 하는 짓, 창의적인 분야에서 뭔가를 기여하고 명성을 얻은 편이었다. 그런데 그게 꼭 부귀영화를 가져오는 분야는 아니어서 문제이긴 하다만=_=, 난 앞으로도 계속 그 방면을 파면서 살게 될 것 같다.

Posted by 사무엘

2016/02/09 08:35 2016/02/09 08:35
, , ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1191

날개셋문자 명세서

<날개셋> 한글 입력기는 사용자가 어떤 글쇠를 눌러서 만들어 낸 입력 단위를 ‘날개셋문자’라는 계층으로 추상화해서 표현한다. 영문 같은 간단한 글쇠배열이라면 A~Z까지 입력하는 문자 자체가 그대로 입력 단위이겠지만, 한글 입력은 그 이상의 계층이 또 필요하기 때문이다.

먼 옛날 1.x 시절에는 <날개셋> 한글 입력기는 그냥 조합형이라는 1 또는 2 multibyte 기반이었으며, 기본 입력 단위의 크기는 16비트였다. 그 16비트 숫자가 한글 자모라면 그건 한글을 조합하는 입력이고, 그렇지 않으면 조합을 만들지 않는 비한글 입력이니 아주 단순한 구조였다.
그 시절에도 특정 성분을 바로 지우고 앞뒤로 빼내는 ‘특수글쇠’라는 개념이 있었지만 그건 일반 자리에는 배당이 가능하지 않았고 Ctrl 조합에다가만 따로 배당할 수 있었다. 지금 생각해 보면 정말 원시적이고 미개하기 그지없었다.

그 뒤 2.x에 와서는 입력 단위의 크기가 32비트로 확장되었고 초중종성 성분의 크기도 5비트에서 8비트로 커졌다. 덕분에 옛한글과 간단한 가상 낱자도 표현할 수 있게 됐다. 입력 단위는 문자 아니면 특수글쇠(비문자)라는 이분법적인 구분이 생겼다. 하지만 여전히 내부 체계는 1.x와 별 다를 바 없을 정도로 빈약했다.

뭔가 지금과 같은 체계가 잡힌 것은 3.x에 온 뒤부터이다. 문자 코드는 완전히 유니코드 기반으로 바뀌었고, 날개셋문자라는 명칭이 정립됐으며 그 크기도 64비트로 넉넉하게 커졌다.
같은 문자도 한글과 비한글이라는 구분이 생겼다. 한글을 조합하는 데 쓰이는 ㅏ와, 단순히 있는 그대로 입력시키는 U+1161짜리 문자인 ‘ㅏ’를 구분할 수 있게 됐다는 뜻이다.

게다가 종전에는 글쇠배열의 벌식 정보가 글쇠배열 전체에 일괄적으로 적용되는 속성이었던 반면, 3.x부터는 각각의 날개셋문자가 자체적으로 두벌/세벌 정보를 갖게 했다. 도깨비불 현상은 두벌 속성을 지닌 날개셋문자 종성에다가 역시 두벌식 속성을 가진 중성이 결합할 때에만 일어난다. 따라서 한 글쇠배열에 세벌식으로 동작하는 글자(가령, ㅃ, ㅉ, ㄸ)와 두벌식으로 동작하는 글자(가령, ㅂ, ㅈ, ㄷ)가 자연스럽게 공존 가능하다.

3.x에서는 한글의 경우 여러 성분을 한꺼번에 배당해서 입력하는 것도 가능해졌다. 초성+중성 내지 중성+종성 같은 것 말이다. 그리고 자주 쓰이지는 않지만 굳이 한글 자모를 실제로 입력하지 않고도 오토마타의 내부 상태를 강제로 바꾸는 ‘상태 전이’라는 날개셋문자 타입도 추가했다.

그래서 ‘일반 문자, 한글 세벌식, 한글 두벌식, 특수글쇠, 상태 전이’ 이렇게 5종류의 날개셋문자 타입이 정립됐다. 카테고리를 더 나누자면 ‘한글, 비한글, 비문자’ 정도로 요약된다. 그리고 backspace와 한자(후보) 변환은 특수글쇠의 일종인 형태로 개념이 세워졌다.
이 정도면 버전 1~2 시절에 비하면 엄청난 발전을 이룬 것이었다.

그 뒤 날개셋문자에 타입이 또 추가될 일은 거의 없었다. 그러다가 2010년, 5.65 버전에서 다중 입력과 관련된 새로운 타입이 세 종류가 더 추가됐는데, 이것은 모두 나름대로 의미가 있는 것들이었다.

첫째, ‘다중 문자’이다. 기존의 ‘일반 문자’는 문자 하나의 유니코드 포인트 번호를 갖고 있으므로 일종의 UTF-32 스타일이다. 그러나 다중 문자는 UTF-16 방식으로 표현된 유니코드 문자를 최대 6바이트까지 저장하고 있는다.

일반 문자는 숫자 하나로 표현된다는 대표성이 있으며, 최종 변환이나 글쇠 치환등 각종 치환의 영향을 받는다. 그러나 다중 문자는 다수 개의 유니코드 포인트로 표현되는 합자, 옛한글, ‘000’ 같은 문자를 간편하게 표현할 수 있으며, 입력기 내부에서 다른 치환의 영향을 받지 않고 언제나 1~3개의 문자를 있는 그대로 입력하는 역할만 한다. 그러므로 존재의 의미가 충분하다고 볼 수 있다.

둘째, <날개셋> 한글 입력기가 복수 개의 한글 자모를 입력할 수 있다는 점에 착안하여, 그 자모들이 한 글자가 아니라 두 글자에 걸쳐서 입력되게 하는 날개셋문자가 추가되었다. 즉, 초+중+종이 아니라 종부터 입력한 뒤 음절을 끊고 초+중을 입력하는 놈, 그리고 중+종을 입력한 뒤 음절을 끊고 초성을 나중에 입력하는 놈 두 종류가 있다. 얘는 도깨비불과는 무관하므로 세벌식의 파생형이다.

덕분에 2010년대부터는 <날개셋> 한글 입력기가 제공하는 날개셋문자 타입은 8종류로 늘었는데.. 2012년, 버전 6.7에서는 잘 알다시피 두벌식에도 파생형이 하나 추가되었다. 바로 ‘종성 두벌식’ 되시겠다.
C++에서 new operator와 operator new가 서로 다른 용어이듯이, ‘종성 두벌식’과 ‘두벌식 종성’은 <날개셋> 한글 입력기의 내부에서 의미가 다른 개념이다.

지금까지 <날개셋> 한글 입력기가 제공한 두벌식 방식의 날개셋문자는 ‘초성 두벌식’이었다. 종성이 도깨비불 현상을 통해 다음 글자로 넘어갔을 때 초성으로 승격이 됐기 때문이다. 그러나 종성 두벌식은 다음 글자로 넘어갔을 때도 종성이 계속 유지된다.

순서를 바꿔서 ‘두벌식 종성’이라고 하면, 타입이 ‘초성 두벌식’이든 ‘종성 두벌식’이든 무관하게 어쨌든 두벌식이고 종성에 nonzero 값이 있는 날개셋문자를 가리킨다. “두벌식 종성과 두벌식 중성이 만나야 도깨비불 현상이 일어난다. 그런데 그 종성의 타입이 ‘초성 두벌식’이냐 ‘종성 두벌식’이냐에 따라 그 종성은 다음 글자에서 각각 초성이나 종성으로 등록된다.” 이렇게 관계가 정리된다.

세벌식과 두벌식에 대해 각각 이런 파생형 타입을 고안해 낸 것은 개인적으로 굉장히 뜻깊은 업적이라고 생각된다. 전에는 가능하지 않았던 한글 입력기의 새로운 기능이 추가된 것이기 때문이다. 특수글쇠 내지 타자 입력 순서 계산 같은 부수적인 기능들까지 중성 두벌식의 컨셉과 맞춰서 정확하게 동작하도록 로직을 강화하는 작업은 7.x대 중반 버전까지 내부적으로 계속되었다.

그리고 현재까지 <날개셋> 한글 입력기에 마지막으로 추가된 날개셋문자 타입은 바로 2015년 초, 7.9 버전에서 추가된 “글쇠 입력”이다. 비한글과 한글에 이어 ‘비문자’ 분야에도 타입이 또 추가된 것이다.

A라는 글쇠에다가 B를 누르는 날개셋문자를 추가한다면, A를 누른 것 자체는 <날개셋> 한글 입력기가 가로채어지며 응용 프로그램으로 전달되지 않는다. 그러나 이로 인해 B를 누른 동작이 인위로 생성되며, 이것은 <날개셋> 한글 입력기가 처리하지 않고 언제나 응용 프로그램으로 가는 것이 보장된다.

이 기능을 이용하면 간단한 단축키 조작을 할 수도 있고 영문과 숫자의 경우 IME가 아니라 키보드 직통으로 응용 프로그램으로 전달할 수도 있다.
키보드 입력을 생성하는 것 자체를 별도의 날개셋문자 타입으로 독립시키겠다는 생각을 어떻게 하게 됐나 정말 신기하다. 이 타입은 한글 입력과 관계가 있는 게 아니므로 굳이 ‘기본 입력기’가 아니라 ‘빈 입력기’에서도 제약 없이 사용할 수 있다.

이런 긴 과정을 거쳐서 <날개셋> 한글 입력기에는 현재 한글 세벌식 3종류, 두벌식 2종류, 비한글 문자 2종류, 비문자 3종류 이렇게 총 10종류의 날개셋문자 타입이 존재한다. 3.0 시절에 비해 정확하게 두 배로 증가한 것이다.

<날개셋> 한글 입력기의 구현체에 대해 논하자면 1.0때 처음부터 개발되어 온 에디터(since 2000), 2.5 과도기를 거쳐서 3.02때부터 개발된 외부 모듈(since 2004), 그리고 5.3 때부터 등장하여 최근에 많이 발전한 입력 패드(since 2009) 세 종류가 있으며 이들은 특징이 제각각이다.
그런 구현체의 종류 이상으로 <날개셋> 한글 입력기가 입력 단위로 받아들이는 날개셋문자의 타입도 종류가 다양하며 제각각 내력이 있다. 과연 미래에 제11째 타입이 등장할 일이 있을지 궁금해진다.

Posted by 사무엘

2016/02/06 19:34 2016/02/06 19:34
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1190

C/C++에서 대괄호 [ ]는 일단 배열과 관련이 있는 문자이다.
타입을 선언하는 문맥에서 a[...]라고 하면 a가 배열임을 나타내고 선언한다. [] 안에는 배열의 크기를 나타내는 정수 상수(= 컴파일 타임 때 바로 값이 결정되는)만이 올 수 있다.
그 반면 값을 계산하는 문맥에서 a[...]는 일단은 배열이나 포인터를 역참조하는 *(a+...)와 동치가 되기 때문에, 상수가 아닌 임의의 변수값이 들어올 수 있다. 게다가 C++에서는 []를 연산자로서 오버로드도 할 수 있으므로 정수가 아닌 다른 타입의 값이 들어오는 게 가능하다.

그럼 속에 아무것도 없이 말 그대로 []만 달랑 오는 건 언제 가능할까?
일단 값을 계산하는 실행 문맥에서는 전혀 가능하지 않다. 함수 호출이 아닌 일반 수식에서 일반 괄호가 ()요렇게만 달랑 올 수가 없는 것과 같은 이치이다. 또한 인자가 전혀 없는 형태로 [] 연산자 함수를 오버로딩 하는 것도 안 된다.
얘가 쓰이는 가장 유용하고 편리하고 직관적인 상황은, 이니셜라이저로부터 크기를 자동으로 유추할 수 있는 배열을 선언하여 곧장 초기화할 때이다.

char pt[] = "Hello"; //null 문자까지 합해서 6이라는 크기가 자동으로 유추됨.
static const int samp[] = {1, 5, 7, 8}; //4라는 크기가 자동으로 유추됨.

이 정도야 []는 명백하게 배열을 나타내며, 그 의미를 충분히 납득할 수 있다. 헷갈릴 게 없다.
그리고 지역변수 말고 다른 번역 단위에 있는 배열을 요런 게 있다고 선언만 해 놓는 문맥일 때도 구체적인 크기가 생략된 arr[] 같은 구문이 올 수 있다. 이 경우 클래스로 치면 forward 선언과 얼추 비슷한 역할을 한다. 배열을 참조하는 코드를 생성할 수는 있지만 sizeof 연산자는 쓸 수 없게 된다. 온전한 배열은 아니지만 포인터도 아니기 때문에 여기에 다른 임의의 주소를 대입할 수는 없다.

그런데 []는 일부 제한된 문맥과 범위에서는 그냥 포인터를 나타낼 때도 있다. 이거 다시 보니 굉장히 요물스럽게 느껴진다.

void foo(char ptr[]);
void foo(char *p);

위와 아래의 함수 선언은 완전히 동치이다. 그렇기 때문에 저 두 쌍으로는 함수 오버로딩을 할 수 없다.
이게 요물스럽게 느껴지는 이유는, (1) 첫째, 함수의 인자에서만 사용 가능한 문법이기 때문이다.
일반 변수를 선언할 때야 char ptr[]은 포인터가 아니라 배열로 인식된다. 그렇기 때문에 이니셜라이저 없이 저렇게만 달랑 써 놓으면 크기를 알 수 없다고 컴파일 에러가 난다.
그에 반해 함수 인자에서는 배열을 선언하거나 초기화 따위 할 일이 없으니 ptr[]은 *p와 동일하게 인식된다.

우리는 프로그램으로부터 명령 인자를 받기 위해 main 함수로부터 argc, argv 인자를 살펴본다. 그런데 정말 이상한 건 argv는 거의 언제나 관행적으로 *argv[]라고 선언해 놓고 써 왔다는 것이다. 이건 알고 보면 **argv와 본질적으로 완전히 동치일 뿐인데도 말이다. 하지만 *argv[]와 **argv는 왠지 느낌상 서로 동일해 보이지가 않는다.

함수 인자와는 달리 리턴값은 char *bar()만 가능하지 char []bar 이렇게 쓸 수 없다. 함수 인자 말고는 리턴값이나 지역 변수 선언, 형변환 연산자, typedef 등 타입을 명시하는 그 어떤 문맥에서도 []를 저런 식으로 쓰는 건 문법적으로 가능하지 않다.

(2) 둘째, []는 그렇다고 해서 함수 인자이기만 하면 *와 완전히 등가 교환이 가능한 것도 아니다.
[]의 지원 범위는 오로지 1중 포인터 한정이다. 2중 포인터인 char **a를 a[][] 따위로 대체할 수는 없으며 오로지 한 단계만 *a[]로 대체할 수 있을 뿐이다. 한 단계 포인터를 대체할 수 있다는 점에서는 C++의 참조자 &를 살짝 닮은 것 같기도 하다.

그럼 함수 인자에서는 왜 저걸 예외적으로 가능하게 해 놓은 것일까?
정확한 이유는 알 수 없지만 C/C++은 배열은 함수 인자로 전달할 때 값이 새로 복제되는 게 아니라, 언제나 주소(= 포인터) 형태로만 전달한다는 점을 부각시키기 위해서 저렇게 한 게 아닌가 싶다. N차원 배열은 언제나 N-1차원 배열의 1중 포인터가 된단 얘기다. 다차원 배열을 선언해서 함수로 전달하는 상황을 생각해 보자.

int table[][2][4]={
    {{1,2,3,4}, {3,4,5,6}}, {{2,6,2,3}, {5,6,3,4}}, {{1,}, {2,}}
};

foo(table);

사실 C/C++은 엄밀히 말하면 다차원 배열이라는 것도 없고 그저 '배열의 배열'이 있을 뿐이다.
2*4 배열의 배열을 선언한다는 건 생략할 수 없고, 유일하게 생략할 수 있는 건 제일 겉에 있는 최종 원소의 개수(저기서는 3)이다.
이런 3차원 배열을 인자로 받는 함수는 프로토타입을 어떻게 만들면 좋을까?

void foo(int a[][2][4]);

table은 함수의 인자로 전달할 때는 그대로 2*4 배열의 포인터가 되고, 그걸 함수 인자로 표현하는 걸 배열 변수를 선언할 때와 동일하게 [][2][4]로 할 수가 있다. 함수 인자에서 []의 의미는 바로 여기에 있다고 보는 게 타당할 것이다. 함수 인자에서도 [] 안에 숫자를 생략할 수 있는 건 제일 겉의 차원수 하나뿐이다.

위의 함수의 인자는 개념적으로 아래와 완전히 동일하다. *(a+2)와 a[2]가 동일한 것만큼이나 서로 동일하다.

void Fune(int (*a)[2][4]);

a[][2][4]를 사용하지 않았으면 그냥 포인터나 다중 포인터가 아니라 '배열의 포인터'를 표현하기 위해 저렇게 괄호를 쳐야 했을 텐데 [] 표기는 괄호가 또 들어갈 필요를 없애 주고 표현을 간결하게 만들어 준다.
배열 선언 table[][2][4]에서는 []는 원소 개수가 이니셜라이저에 명시돼 있다는 뜻이고, 함수 인자 a[][2][4]에서는 이게 포인터라는 뜻이라니..;;

이건 무슨 최신 C++ 기능도 아니고 C의 완전 기초 필수 아이템인데도... 본인조차 []의 의미와 용도에 대해서 제대로 진지하게 생각을 안 했던 것 같다. 신기하기 그지없다.

Posted by 사무엘

2016/02/04 08:27 2016/02/04 08:27
,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1189

각종 언어 관련 생각들

1.
“A is better than B.” (A는 B보다 더 낫다)라는 영어 평서문에 담긴 정보를 생각해 보자.
여기서 A를 묻는 wh 질문을 만든다면 “Who is better than B?” (누가 B보다 낫다고?)가 될 것이다. 이건 쉬운 문제다.
그럼 B를 묻는 질문은 뭐가 될까?

Who is A better than? (A가 누구보다 낫다고?)
Than who is A better?

내 문법 시스템으로는 위와 같은 두 문장이 만들어지긴 한데... 평생 저런 형태의 문장을 만들 일이 없다가 만들고 보니 정말 괜찮은가 모르겠다.
인간의 언어가 경이로운 점이 뭐냐 하면 화자는 평생 접한 적이 없는 새로운 문장을 그것도 안긴 문장· 이어진 문장 같은 복잡한 형태로 자유자재로 만들어 낸다는 것이다.

2.
그리고 than 다음에는 문법 원칙상으로는 목적격이 아니라 주격이 온다. better than me가 아니라 일단은 better than I가 맞다는 것. 하지만 It's me/I만큼이나 이건 원어민들 사이에서도 구분이 굉장히 문란해져 있다.
게다가 who와 whom의 구분도 이와 같은 처지이다. 3인칭 단수는 him/her을 쓸 곳에다가 he/she를 갖다붙이지는 않을 텐데 왜 그러는 걸까?

테이큰에서도 리암 니슨이 유괴범을 고문하면서 "You sold my daughter? You sold her? Huh? To who(m)?"라고 물을 때 나는 당연히 whom이라고 말했을 거라고 생각했으나, 다시 들어 보니 너무나 분명하게 그냥 who였다.
의문대명사 얘기가 나오자마자 이번에도 내 머리는 0.1초 만에 테이큰 대사를 검색 결과로 내놓았다. 영화 한 편 제대로 봐 놓으니 실생활에서 대사를 정말 많이 우려먹으며 지낸다. 테이큰은 좋은 영화이다~ㅎㅎ

3.
다음으로, “Replace A with B.” (A를 B로 바꿔라)라는 문장을 생각해 보자.
여기서 A를 묻는 wh 질문은 What do we replace? (우리는 뭘 바꾸는가?) 이다.
그럼 또 B를 묻는 질문은 어떻게 만들면 될까? 영어는 with만 붙이면 간단히 해결된다.

With what do we replace? (우리는 무엇으로 바꾸는가?)
What do we replace with?

그래서 찾기/바꾸기 대화상자를 우리말로 옮길 때면 난 늘 껄끄러웠다. Find what / Replace with가 각각 "찾을 문자열 / 바꿀 문자열"이긴 한데, '바꿀 문자열'은 문맥에 따라 개념상 B뿐만 아니라 A도 의미할 수 있기 때문이다.
그렇다고 한국어에서 체언 없이 조사를 앞세워서 '으로 바꿈'이라고는 안 쓰니까 의미가 엄밀하지 못하게 되는 건 뭐 어쩔 수 없다. (뭐, See also를 가뿐하게 '도보시오'라고 옮긴 백괴사전은 참 기발하다.)

4.
우리말에서 (내가 보기에) 관계가 굉장히 이상해져 있는 단어의 쌍이 최소한 둘 있는데, 바로 '장/쪽'과 '성/이름'이다. 양면이냐 단면이냐가 분명치 않다 보니 '다섯 장'은 대부분의 경우 다섯 페이지이지만 가끔은 앞뒤로 열 페이지를 의미하기도 한다. page/sheet에는 양면 개념이 없는 것 같은데 우리말만 왜 그런지 잘 모르겠다.

이름의 경우, 가끔은 first와 family를 모두 포함한 full name을 뜻하지만 가끔은 그 자체가 '성'과 대립하여 first name만을 뜻하기도 한다. 한 단어가 상위 개념과 하위 개념을 모두 포함하다니 거 참..;;
성/이름도 그렇고 다시 '장'으로 돌아오면, '장'은 '쪽'뿐만 아니라 알다시피 chapter를 의미하기도 해서 더욱 지저분하다. 이런 건 순우리말만으로 도저히 변별이 불가능하다면 외래어를 로컬라이즈 해서라도 논리적으로 분간이 되게 만들어야 하지 않나 싶다.

5.
그리고 말이 나왔으니 말인데... 한국어에는 sibling을 뜻하는 한 단어가 없나 참 궁금하다. '내일', '초록' 같은 건 순우리말이 없어서 한자어라도 있지만, sibling은 부모/자식 같은 한 단어도 없어서 그냥 "형제 자매는 있습니까?" 이렇게 매번 풀어서 설명하게 되는 게 불편하다. 이렇게 꼭 필요한 우리말이 없으니 전산학에서 트리 구조를 설명할 때는 오늘도 '시블링, 시블링' 이런 외국어가 나올 수밖에 없다.

6.
한국어는 '저희'라는 1인칭 복수형이 존재하는 것도 다른 언어에서 유례를 찾기 힘든 아이템이라고 한다. '우리'와는 달리 청자를 확실히 배제한 1인칭 복수이고 1인칭 쪽을 좀 낮춤으로써 청자를 높이는 효과까지 있으니, 특히 회사가 고객에게 말할 때 사용하기에 무척 적절한 대명사이다. 언어학자에 따라서는 이것을 제4인칭으로 분류하기까지 한다고 들었다.

7.
종교관 중에는 이신론(deist)이라는 게 있다.
신의 존재를 인정하긴 하지만 그 신은 아주 기계적이고 정교한 자연 법칙에 가까운 추상적인 존재일 뿐, 무슨 인격을 갖고 있고 인간의 삶에 관여하거나 인간에게 무슨 계시를 주지는 않는다고 생각하는 종교관이다. 뉴턴의 법칙은 절대적인 법칙이긴 해도 무슨 종교적인 숭배의 대상은 아닐 테니까. 유신론을 뭔가 무신론 내지 불가지론 스타일로 풀이한 것 같다.

미국이 지폐에까지 In God we trust가 적혀 있는 나라이고, 메이플라워 서약 역시 "하나님의 이름으로 아멘"으로 시작할 정도로 기독교 이념이 철철 넘쳤다고는 하지만, 한편으로는 초대 대통령을 포함한 건국 공신들이 다 프리메이슨이네, 구원받은 크리스천이 아니네 하는 이의 제기도 많다. 이들은 성경이 말하는 하나님을 믿은 신자가 아니라 실제로는 저런 이신론자였다는 말을 어디선가 들었다.

그런데 여기서 잠깐. 이신론의 '이'는 한자로 무엇일까?
二(2)는 당연히 아니요,異(다름)도 아니며, 바로 理(이치)이다. 이성이라고 할 때의 그 한자이다.
한때 일부 '유(柳)씨' 가문에서 자기 성을 한글로 '유'가 아닌 '류'로 쓰게 해 달라고 소송도 냈던 것 같던데, 理는 '리'로 좀 구분해서 쓰고 싶다는 생각이 든다. '리신론'. 二나 異와는 완전히 다르지 않은가?
게다가 우리는 이미 "그럴 리가 없다" 같은 문맥에서 의존명사 理는 두음법칙 없이 오랫동안 잘 사용해 오고 있다. 그래서 내가 이런 생각이 더욱 강하게 들기도 하는 것 같다.

8.
뭐, 영어도 만능은 아니긴 마찬가지다. time이 시각도 되고 시간도 되고.. number가 번호도 되고 수도 되어서 꽤 모호하게 느껴질 때가 있는 건 본인이 예전 글에서 몇 번 지적한 바 있거니와, free가 무료 & 자유를 다 의미하는 것도 상당히 불편한 점이다. "free software"는 영어권 사람이 문서에다가 친히 'free as in free beer(맥주가 공짜!)'이라고 모호성 해소를 해 줄 정도로 free는 유명한 다의어이다.

한국어가 ㅐ와 ㅔ의 중화로 인해 '내, 네'가 동음반의어가 돼 버린 것은 굉장한 막장 상황이긴 하다만, 영어도 2인칭 대명사의 단· 복수 구분이 없는 것과, 남녀 구분 없이 3인칭 단수 사람을 간단히 일컫는 대명사가 없는 것은 굉장히 불편한 점이다. 이것 때문에 (s)he, he or she, 심지어 they 등 갖가지 꼼수가 나돈다. 그렇다고 사람까지 it으로 싸잡아 일컬을 수는 없는 노릇이니까.

9.
영어에서 안테나(antenna)의 복수형은 antennas또는 antennae이다.
곤충의 더듬이를 가리키는 안테나의 복수형은 불규칙인 antennae인 반면,
더 나중에 생긴 기계 안테나의 복수형은 규칙인 antennas이다.

이와 비슷한 진통을 겪고 있는 대표적인 단어는 mouse이다. 요놈의 복수형에 대해서는 영어권에서도 혼란이 많다.
전통적인 생물 생쥐의 복수는 mice이지만, 컴퓨터 포인팅 장비인 마우스는 mouses도 인정하는 분위기이다.

동사 hang은 처음에는 '걸다, 매달다'이다가 '사람 목을 매달다 → 교수형에 처하다'라는 뜻이 확장되어 나갔다.
본래 뜻인 '걸다, 매달다'의 과거형은 불규칙인 hung이지만, '교수형에 처하다'의 과거형은 역시나 hanged이다.
이렇듯, 다의어의 경우, 단어의 활용· 파생 형태에까지 그대로 의미 확장이 반영되지는 않는 경우가 종종 있다.

10.
그나저나 일본어에는 우리말 주격조사 이/가(일본어 발음으로는 '가')와 보조사 은/는(일본어 발음으로는 '와')에 개념적으로 거의 그대로 대응하는 조사가 존재한다는구나..!! 신기하다. 그래서 '고레와', '고레가' 요런 말이 있었구나.
지구상에 이런 개념 pair가 존재하는 언어는 한국어/일본어 정도밖에 없다고 한다. 굉장한 레어템을 공유한다는 것만으로도 두 언어가 문법 구조는 무척 비슷하며, 상호간 학습 장벽을 크게 낮춰 준다.
일본어는 음운 구조가 워낙 간단하다 보니 한국어처럼 받침 유무에 따른 이/가 바리에이션 같은 건 없다. 다만, 쓰기는 '하'라고 적고 읽기는 '와'라고 이상하게 한다는 것도 어렴풋이 들었다.

11.
'르' 불규칙이 적용되는 형용사 용언인 '빠르다'와'다르다'를 생각해 보자. 얘들은 '-ㄹ리'가 붙어서 '빨리, 달리'라고 부사형 활용이 가능하다. '-이/-히'라는 부사형 접미사가 붙어서 얼추'빠르게, 다르게'를 짧게 줄인 뜻이라고 생각하면 된다. '멀다/가깝다'에 서 '멀게/가깝게' 대신 '멀리/가까이'라고 하는 것처럼.

그런데 이런 활용은 보편 생산적이지 않다. 즉, '바르다'(right, correct 형용사), '가파르다', '푸르게' 같은 용언은 저렇게 활용이 가능하지 않다. '게으르다'는 '게을리 하다' 정도로만 활용 가능한데 양상이 좀 다른 듯.
그래서 '달리', '빨리' 같은 단어는 좀 예외적인 케이스로 간주되어서 사전에 별도로 등재돼 있기도 하다.
올림픽 표어를 '보다 빠르게'라고 번역할 때와, '더 빨리'라고 번역할 때는 어감이 서로 확 달라지는 것 같다. "더 빨리, 더 높게, 더 힘차게" 중에서 faster만 '-게'로 끝나지 않는다는 걸 주목하라.

'다르다'가 활용된 '다른'은 말 그대로 활용된 형용사(different)도 되지만, another를 의미하는 관형사 '다른'도 된다. 같은 형태의 단어가 두 의미를 모두 지닌다는 게 꽤 흥미롭다. '와/과'가 and뿐만 아니라 with의 뜻도 갖는 것처럼.
사전에서 '다른'을 찾아 보면 관형사의 뜻만 실려 있다. 형용사 하나만 있는 영어와는 달리, 국어의 체언 수식언에서 형용사와 관형사가 구분이 필요한 이유 중 하나가 이 때문이다. 국어에서 형용사는 수식언 중에서 용언에서 유래된 것만을 일컬으니까 말이다. 이런 이유로 인해 '새 이름으로'에서 '새'는 관형사이지만, '새로운'은 형용사이다.

12.
옛날에는 인간 학문의 모든 분야가 그런 것처럼 언어 쪽도 지금으로서는 상상도 할 수 없을 정도로 학풍이 꼴보수였다.
대표적인 예가 <걸리버 여행기>를 지은 조너선 스위프트인데.. 사회 풍자적인 선구자라는 점에서는 중국의 루 쉰과도 이미지가 비슷해 보인다.

루 쉰은 한자를 없애지 않으면 중국 인민은 망한다고까지 한자를 디스한 걸로 유명한데, 스위프트는 사전을 만들어서 사랑스러운 자기 모국어 영어의 스냅샷을 기록으로 남기고, 앞으로 세속화되거나(?) 더럽혀지지 않게 영원토록 불변의 언어로 남길 생각을 했었다고 한다. couldn't 같은 구어체의 어휘가 버젓이 인쇄되어 나오는 것에도 왕창 분노했다고... 이런 사람이 오늘날의 일명 인터넷 축약어, 한글 파괴 이런 걸 보면 노발대발 "가정이 무너지고 사회가 무너지고 에휴.." 이랬을 것 같다.

오늘날은 분위기가 이와는 완전 반대로 갔으니 참 아이러니다. "그 어떤 것도 절대적인 건 존재하지 않는다, 사전은 말뭉치 데이터를 바탕으로 당대의 언어 상황을 있는 그대로 반영만 하면 된다."이다. '너무'도 사람들이 다 긍정적으로 쓰면 뜻풀이를 바꿀 수 있다. 동성애자들도 결혼을 하니까 결혼의 정의도 굳이 남자와 여자가 하는 건 아니라고 업데이트 할 필요가 있다는 식이니까.

지금 학풍이 0이고 스위프트가 1이라면 난 그래도 여전히 0.7~0.8 정도의 스탠스를 유지하고 있다. 내가 모든 걸 감히 판단할 만한 실력은 없지만, 난 그래도 언어에도 타락이라는 게 있긴 하다고 개인적으로 믿는다. 물론, 그 타락이라는 게 겨우 맞춤법 안 지키고 상스러운 비속어 남발 같은 단편적인 현상만을 의미하는 건 아님.
그냥 쓰기 나름, 정하기 나름인 용례가 바뀌는 것은 상관없지만, '다르다/틀리다'처럼 분명하게 구분이 되고 있던 개념의 구분이 문란해지는 것만은 막았으면 싶다.

Posted by 사무엘

2016/02/01 08:35 2016/02/01 08:35
, , ,
Response
No Trackback , 7 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1188


블로그 이미지

그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2016/02   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29          

Site Stats

Total hits:
3936245
Today:
661
Yesterday:
4175