1. rc 파일의 유니코드화

Visual C++ 2008까지만 해도 안 그랬던 것 같은데.. 2010쯤부터는 새로 만드는 프로젝트들의 리소스 스크립트(*.rc) 파일의 기본 인코딩이 유니코드(UTF-16LE)로 바뀌었다는 걸 본인은 최근에야 알아차렸다. 어쩐지 구버전에서는 파일을 열지를 못하더라.
그러니 이런 rc 파일의 내부에는 #pragma code_page(949) 같은 구차한 지시문도 없다.

리소스는 Windows의 실행 파일 포맷 차원에서 유니코드인데, 그걸 생성하는 스크립트 파일은 왜 유니코드가 아닌지 본인은 오랫동안 의아하게 생각해 왔다. 물론, 다국어 리소스는 언어별로 다 따로 만들지, 한 리소스 내부에 갖가지 외국어가 섞여 들어갈 일은 거의 없기 때문에 이런 방식이 크게 문제 되지 않았을 뿐이다.

리소스 파일 관련 속성을 보면.. MFC 모드로 동작할지 말지를 지정하는 옵션이 있다. 이건 rc 파일 내부에 저장되는 추가적인 옵션/플래그 같은 건 아니고, 그냥 Visual C++ IDE의 동작 방식을 결정하는 것이다. 프로젝트 내부의 설정으로 저장되는 것 같다.

이 옵션의 지정 여부에 따라 대표적으로 달라지는 것은 초기에 콤보박스 내부에다 집어넣을 데이터 목록을 지정하는 기능이다. 이것은 Windows API가 자동으로 해 주는 게 아니라, MFC가 추가적으로 구현해 놓은 기능이다. 그렇기 때문에 리소스 파일이 MFC mode로 지정돼 있지 않으면 해당 기능을 사용할 수 없다.

리소스 파일을 들여다 본 분은 아시겠지만 이 초기화 데이터는 Dialog 리소스 템플릿 안에 내장돼 있는 게 아니라, 240 (RC_DLGINIT)이라는 custom 리소스 타입에 따로 들어있다.
할 거면 리스트박스에다가도 같은 기능을 넣어 줄 것이지 왜 하필 콤보박스에다가만 넣었는지는 잘 모르겠다.

굳이 MFC를 사용하는 프로젝트가 아니더라도, Visual C++ 리소스 에디터가 저장해 놓은 대로 콤보박스를 초기화하는 기능을 내 프로그램에다가 넣고 싶으면 MFC의 소스 코드를 참고해서 직접 구현하면 된다.

그런데 리소스 스크립트 전체의 포맷은 유니코드로 바뀌었음에도 불구하고, 이 초기화 데이터는 기존 코드/프로그램과의 호환성 문제 때문에 여전히 CP_ACP이니 참 애석하다.
MFC 소스를 보면 문자열을 CB_ADDSTRING 메시지로 등록하는 부분에서 의도적으로 SendDlgItemMessageA라고 A 버전을 호출한 것을 볼 수 있다.

Windows는 여러 모로 UTF-8과는 친화적이지 않은 게 느껴진다. "UTF-8 + 32비트 wchar_t"를 전혀 찾아볼 수 없는 환경이다.

2. 소스 코드의 유니코드화, UTF-8 지원

앞서 언급한 바와 같이, Windows는 유니코드 계열이건 그렇지 않은 계열이건 2바이트(...) 단위의 문자 인코딩을 굉장히 좋아해서 전통적으로 UTF-8에 친화적이지 않았다. 친화도는 "UTF-16 > BOM 있는 UTF-8 > BOM 없는 UTF-8"의 순이다.

물론 Visual Studio의 경우, 먼 옛날의 200x대부터 소스 코드를 UTF-8 방식으로 불러들이고 저장하고, 파일 형식을 자동 감지하는 것 자체는 잘 지원한다. 하지만 한글 같은 게 전혀 없고 BOM도 없어서 일반 ANSI 인코딩과 아무 차이가 없는 파일의 경우 기본적으로 UTF-8이 아니라 ANSI 인코딩으로 간주하며, 디폴트 인코딩 자체를 UTF-8로 맞추는 기능은 기본적으로 제공되는 않는다는 점이 아쉽다.

다시 말해 새로 만드는 소스 코드라든가, 처음엔 한글이 없었다가 나중에 한글· 한자가 추가된 파일의 경우 실수로 여전히 cp949 같은 재래식 인코딩으로 파일이 저장될 여지가 있다는 것이다. 일일이 저장 옵션을 바꿔 줘야 된다.

Windows 환경에서 UTF-8 인코딩의 C++ 소스 코드는 (1) 주석을 다국어로 작성해서 온전히 보존 가능하고, (2) 동일 파일을 xcode 같은 타 OS에서도 깨지는 문자 없이 공유 가능하다는 것 정도에나 의미를 둬야 할 것이다.
L"" 문자열이 아니라 printf나 WM_SETTEXTA 같은 곳에 쓰이는 "" 문자열은 소스 코드의 인코딩이 무엇이냐에 따라 값 자체가 달라지기 때문이다.

Windows가 진정한 UTF-8 친화적인 환경이 되려면 시스템 코드 페이지 자체를 65001 UTF-8로 지정할 수 있고 명령 프롬프트에서도 그게 지원돼야 할 것이다. 하지만 UTF-8은 (1) 특정 로케일이나 언어에 속해 있지 않다는 점, 그리고 (2) 기존 multibyte 인코딩들과는 달리 한 글자가 3바이트 이상의 길이를 가질 수 있다는 점으로 인해 Windows는 이를 지원하지 않고 있었다. 그래도 요즘 마소가 워낙 파격적으로 변화하고 있고 Windows 10로 하루가 다르게 달라지고 있으니 이런 금기가 앞으로 깨지지 말라는 법도 없을 것 같다.

3. 디버그 로그의 유니코드화

Windows가 10이 나온 이래로 많이 바뀌긴 했다. 완전히 새로운 기능들만 추가되는 게 아니라, 이미 만들어졌고 앞으로 영원히 바뀌지 않을 것처럼 여겨지던 기능까지도 말이다.

가령, OutputDebugString 함수는 통상적인 다른 API 함수들과는 반대로, W가 내부적으로 A 버전을 호출하고 유니코드를 수십 년째 전혀 지원하지 않고 있었다. 이 때문에 굉장히 불편했는데.. 언제부턴가 Visual C++의 디버그 로그 출력창에 surrogate(확장 평면)까지 포함해 유니코드 문자열이 안 깨지고 온전히 찍혀 나오는 걸 보고 개인적으로 굉장히 놀랐다. 나중에 개선된 거라고 한다.

그리고 Windows의 에디트 컨트롤은 개행 문자를 오로지 \r\n밖에 지원하지 않기 때문에 메모장에서 유닉스(\n) 방식의 파일을 열면 텍스트가 개행 없이 한 줄에 몽땅 몰아서 출력되는 문제가 있었다.
그런데 이것도 Windows 10의 최신 업데이트에서는 개선되어서 \n도 제대로 표시 가능하게 되었다.
수백 KB~수 MB 이상 큰 파일을 여는 게 너무 오래 걸리던 고질적인 문제가 개선된 데 이어, 또 장족의 발전이 이뤄졌다.

Windows가 제공하는 유니코드 관련 API 중에는 주어진 텍스트가 유니코드 인코딩처럼 보이는지 판별하는 IsTextUnicode도 있고, 한자 간체-번체를 전환하는 LCMapString 같은 함수도 있다.
IsTextUnicode의 경우, 1바이트 아스키 알파벳 2개로만 이뤄진 아주 짧은 텍스트를 UTF-16 한자 하나로 오진(?)하는 문제가 있어서 내 기억이 맞다면 한 2000년대 Windows XP 시절에 버그 패치가 행해지기도 했다. 사실, 이런 휴리스틱은 정답이 딱 떨어지는 문제가 아니기도 하다.

저런 식으로 알고리즘이 일부 개정되는 경우가 있긴 했지만, Windows에서 데이터 기반으로 동작하는 유니코드 API들은 대개가 한 1990년대 말, 겨우 Windows NT4와 유니코드 2.0 정도나 있던 시절 이후로 그 데이터와 알고리즘이 업데이트 된 내역이 없다.

그래서 간체/번체를 변환하는 테이블에 등재된 한자는 내가 세어 본 기억에 맞다면 2300개 남짓밖에 되지 않으며, IsTextUnicode도 21세기 이후에 유니코드에 새로 추가된 수많은 글자들까지 고려하지는 않고 동작한다.
이 와중에 그래도 Windows 10에 와서 OutputDebugStringW가 제 구실을 하기 시작하고 메모장의 동작이 바뀌기도 한 것이 놀랍게 느껴진다.

한편, UTF-8은 그래도 첫 바이트로 등장할 만한 글자와 그 이후 바이트로 등장할 만한 글자가 형태적으로 무조건 정해져 있다. 그래서 데이터니 통계니 휴리스틱 없이도 자기가 UTF-8이라는 게 딱 티가 나며, UTF-8을 타 인코딩으로 오인한다거나 타 인코딩을 UTF-8로 오인할 가능성이 거의 없는 것이 매우 큰 장점이다.

4. 문자형의 부호 문제

컴퓨터에서 문자열의 각 문자를 구성하는 단위 타입으로는 전통적으로 char가 쓰여 왔다. 그러다가 유니코드가 등장하면서 이보다 공간이 더 커진 wchar_t가 도입되었으며, 언어 표준까지 채택됐다. 값을 다룰 때는 같은 크기의 정수와 다를 게 없지만, 포인터로는 서로 곧장 호환되지 않게 type-safety도 강화되었다.

그런데, 처음에 1바이트짜리 문자열의 기본 타입을 왜 괜히 부호 있는 정수형인 char로 잡았을까 하는 게 아쉬움으로 남는다. 물론 매번 unsigned를 붙이거나 typedef를 하는 건 귀찮은 일이며, 영미권에서는 문자 집합 크기가 7비트만으로도 충분했다는 그 상황은 이해한다. 하지만 문자 코드를 저장할 때는 애초에 부호 따위는 전혀 필요하지 않다. char보다 더 큰 wchar_t도 결코 부호 있는 정수형과 대응하지 않는다.

크기가 겨우 8비트밖에 안 되는 '바이트'는 양수 음수를 따지기에는 너무 작은 타입이기도 하다. 파일이나 메모리 데이터를 바이트 단위로 읽으면서 2의 보수 기반의 부호를 따질 일이 과연 있던가..?

이런 구조로 인해.. UTF-8이건 -16이건 -32이건 모두 대응 가능한 문자열 템플릿을 만들 때, char형에 대해서만 코드값 범위 검사를 할 때 예외를 둬야 하는 불편한 상황도 생긴다. 템플릿 인자로 주어진 어떤 타입에 대해서, 크기는 동일하면서 부호만 없는 타입을 자동으로 되돌리는 방법이 C++ 언어에는 존재하지 않기 때문이다.

그러니 다른 타입에서는 다 간단하게 >= 0x80을 검사하면 되는데, char만 <0을 봐야 한다. 이런 거 로직이 꼬이면 모든 타입에서 0xF0이 저장되어야 하는데 딴 타입에서는 0xFFF0이 저장되는 식의 문제도 생길 수 있다. 그렇다고 임의로 제일 큰 부호 없는 정수형으로 typecast를 하는 건 무식한 짓이다.

회사에서 일을 하다가 하루는 이게 너무 짜증 나서 std::basic_string<unsigned char>로부터 상속받은 클래스를 새로 만들어 버렸다. 베이스 클래스의 명칭이 딱 한 토큰 한 단어가 아니라 저렇게 템플릿 인자가 덕지덕지 붙은 형태인 게 특이했다만.. 생성자 함수에서 기반 클래스를 호출할 때는 __super를 쓰지도 못하더라.

내부적으로는 모든 처리를 unsigned char를 기준으로 하는데, 생성자와 덧셈 연산, 형변환 연산에서만 부호 있는 const char*를 추가로 지원하는 놈을 구현하는 게 목적이었다. 이런 생각을 나만 한 건 절대 아닐 텐데..
개인적으로 + 연산자를 만드는 부분에서 좀 헤맸었다. 얘는 +=와 달리 완전한 내 객체를 새로 만들어서 되돌리는 것이기 때문에 컴파일러 에러를 피해서 제대로 구현하는 게 생각보다 nasty했다. 그렇다고 도저히 못 할 정도는 아니었고.. 뭐 그랬다.

그러고 보니 Java는 기본적으로 부호 있는 정수형만 제공하지만, char만은 문자 저장용으로 부호 없는 16비트 정수를 쓰는 걸로 본인은 알고 있다.
그런데 얘도 그 크기로는 BMP 영역 밖은 표현할 수 없다. Java 언어가 처음으로 설계되고 만들어지던 때는 1990년대 중반으로, 아직 유니코드 2.0과 확장 평면 같은 개념이 도입되기 전이었다.
결국 범용적인 글자 하나를 나타내려면 부호 있는 정수인 int를 써야 한다. 상황이 좀 복잡하다..;;

5. Windows 문자열 변환 함수의 함정

Windows API 중에서 WideCharToMultiByte와 MultiByteToWideChar는 운영체제가 내부적으로 사용하는 2바이트 단위 UTF-16 방식의 문자열과 타 인코딩 문자열(UTF-8, CP949 등..)을 서로 변환하는 고전적인 함수이다.

이 두 함수는 크게 두 가지 모드로 동작한다. (1) 사용자가 넘겨준 문자열 버퍼 포인터에다가 변환을 수행하거나.. (2) 아니면 그렇게 write 동작을 하지는 않고, 이 원본 문자열을 몽땅 변환하는 데 필요한 버퍼의 크기만을 되돌린다.
일단 (1)처럼 동작하기 시작했는데 사용자가 넘겨준 버퍼 크기가 원본 문자열을 모두 변환해 넣기에 충분하지 못하다면 함수의 실행은 실패하고 0이 돌아온다.

이때도 기존 버퍼의 크기만치 변환을 하다가 만 결과는 확인할 수 있다. 하지만 원본 문자열의 어느 지점까지 변환하다가 끊겼는지를 이 함수가 알려 주지는 않는다. 그렇기 때문에 그 정보를 유의미하게 활용하기 어려우며, 이는 개인적으로 아쉽게 생각하는 점이다.

그러니 버퍼가 얼마나 필요한지 알 수 없는 일반적인 경우라면, WideCharToMultiByte를 기준으로 함수를 사용하는 방식은 이런 형태가 된다. 함수를 두 번 호출하게 된다.

const wchar *pSrcBuf = L"....";
int len = WideCharToMultiByte(CP_***, pSrcBuf, -1, NULL, 0, ...); //(2) 크기 측정
char *pTgtBuf = new char[len];
WideCharToMultiByte(CP_***, pSrcBuf, -1, pTgtBuf, len, ...); //(1) 실제로 변환
...
delete []pTgtBuf;

그런데, 이들 함수가 (1)과 (2) 중 어느 모드로 동작할지 결정하는 기준은 버퍼 포인터(pTgtBuf)가 아니라, 버퍼의 크기(len)이다.
보통은 크기를 측정할 때 포인터도 NULL로 주고 크기도 0으로 주니, 함수가 내부적으로 둘 중에 뭘 기준으로 동작하든 크게 문제될 건 없다.

하지만 한 버퍼에다가 여러 문자열을 변환한 결과를 취합한다거나 해서 포인터는 NULL이 아닌데 남은 크기가 우연히도 딱 0이 될 수 있는 상황이라면 주의해야 한다. 포인터와 버퍼 크기가 pTgtBuf + pos, ARRAYSIZE(pTgtBuf) - pos 이런 식으로 정해진다거나 할 때 말이다.

저 식에서 pos가 우연히도 배열의 끝에 도달했다면, 남은 크기가 0이니까 프로그래머가 의도하는 건 이 함수의 실행이 무조건 실패하고 0이 돌아오는 것이다. 그럼 프로그램은 버퍼 공간이 부족해졌다는 걸 인지하여 지금까지 쌓인 버퍼 내용을 딴 데로 flush한 뒤, 변환을 재시도하면 된다.

하지만 이 함수는 프로그래머가 의도한 것처럼 동작하지 않는다. 문자열 변환을 하지 않지만, 마치 실행에 성공한 것처럼 변환에 필요한 버퍼 크기를 되돌린다. 쉽게 말해 "(1)에 대한 실패"가 아니라 "(2)에 대한 성공"으로 처리된다는 것이다.

이 문제를 피하려면, 버퍼를 관리하는 프로그램은 WideChar...함수가 실패했을 때뿐만 아니라 포인터가 버퍼의 끝에 도달했는지의 여부도 따로 체크해야 하며, 그 경우 버퍼를 flush해 줘야 한다. 변환 함수가 후자까지 같이 체크해 주지 않기 때문이다.
날개셋 편집기가 9.5의 이전 버전에, 바로 이것 때문에 대용량 파일을 저장할 때 낮은 확률로 데이터를 날려먹는 버그가 있었다.

Windows API가 입력값이 0일 때에 대해 일관된 유도리가 없어서 불편한 예가 GDI 함수에도 있다.
주어진 문자열의 픽셀 단위 길이와 높이를 구하는 GetTextExtentPoint32의 경우, 문자열 길이에다 0을 주면 가로는 0이고 세로 크기만 좀 구해 줬으면 좋겠는데.. 그러질 않고 그냥 실행이 실패해 버린다.
높이만 구하고 싶으면, 공백 하나라도 dummy로 전해 준 뒤 리턴값의 cx 부분은 무시하고 cy를 사용해야 한다.

Posted by 사무엘

2018/09/29 08:35 2018/09/29 08:35
, ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1537

전화기라는 게 2010년대부터야 (1) 표면 대부분이 그냥 터치식 액정 화면인 스마트폰이 주류가 됐다. 그보다 약간 전 2000년대 과도기에는 피처폰이 있었고, 인류 역사상 가장 작은 전화기인 (2) 폴더식 휴대전화도 있었다. (뭐, 특수한 소비자 계층을 위해 폴더형 스마트폰도 있긴 함)

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

그 전에는 본체는 건물의 전화선에 연결돼 있고, 송수화기가 거기로부터 반경 몇십 m 정도까지는 떨어져 있어도 되는 (3) 무선 전화기가 많이 쓰였다. 무선 이전에는 당연히 유선이었고. 대략 1990년대의 얘기다.
전화기 송수화기와 본체를 연결하는 선은 여느 케이블과 달리, 유난히 굵고 꼬불꼬불한 형태였던 것 같다. 여기에 특별한 이유가 있는지는 잘 모르겠다.

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

전화기의 숫자 버튼들은 눌렀을 때 들리는 삑삑 신호음의 음높이가 각 숫자마다 모두 달랐다. 절대음감 황금귀는 그 음만 듣고도 무슨 숫자가 눌렸는지 알아챌 수 있었다. 그 반면 디지털 도어락은 저런 일이 있어서는 절대 안 될 테니, 모든 버튼의 음높이가 당연히 동일하게 맞춰져 있다.

뭐, 그 시절에도 진정한 의미의 무선 전화가 전혀 없는 건 아니었다. 카폰 같은 건 고가의 사치품으로 쓰였다. 우등 고속버스 안에는 1993년부터 무려 이동식 공중 전화기가 비치되기도 했다. 이용/통화료는 도입 당시에 40초당 100원이었다는데, 길거리의 공종 전화보다는 분명 더 비쌌을 것이다.

더 옛날, 한 1980년대쯤으로 거슬러 올라가면 이제 (4) 전화기의 숫자 버튼은 다이얼로 바뀐다. 다이얼은 한번 돌렸다가 되돌아오는 데 시간이 걸리기 때문에 버튼만치 번호를 빠르게 입력할 수 없다.

사용자 삽입 이미지

본인은 엄청 어린 시절에 다이얼 전화기를 써 본 기억이 있다. 요런 고전 전화기는 전화가 왔을 때 금속판이 부딪치면서 그 특유의 따르르릉~ 소리가 났다. 하긴, 옛날에는 초인종만 해도 요즘 같은 전자음 일색이 아니라 진짜 금속판이 부딪치는 청명한 딩동 소리가 났었는데.. (말 그대로 종)

이것보다 더 옛날 전화기는 거의 1960년대와 그 이전의 골동품이다. 여기부터는 본인이 실물을 직접 구경하거나 사용해 본 적이 없다. (5) 전화기가 새까만 상자 모양인데, 어딜 봐도 숫자를 입력하는 부분이 안 보인다. 그 대신 옆구리에 옛날 자동차의 수동식 윈도우처럼 뭔가 돌리는 손잡이만 달려 있다.

사용자 삽입 이미지

이건 무려 발전기와 연결된 손잡이라고 한다. 이걸 뱅글뱅글 돌리면 약한 전류가 생겨서 전화국으로 신호가 가고, 교환원과 연결되는가 보다. 그래서 송수화기를 들고 교환원에게 전화번호를 "구두로 전달"하면, 교환원이 그 전화번호로 연결을 해서 발신자에게 다시 전화를 걸어 준다고 한다. 그렇게 통화가 성사되고, 전화비는 물론 발신자에게 청구되는 식...??? >_<

전화번호 숫자를 사람에게 불러 줘야 했다니 그 불편함과 번거로움은 이루 말할 수 없었겠다.
하긴, 다이얼식 전화기가 도입된 뒤에도 시외 장거리 통화를 위해서는 여전히 교환원을 불러야 했다. 이렇게 말이다. (1968년도 대한뉴스 제 665호)
국내에서 지역 번호가 도입되고 이 절차까지 전국적으로 완전히 자동화가 된 건 1987년경의 일이라고 한다.
전화 교환원 내지 교환수는 타자수, 안내양만큼이나 20세기 중반 옛날에나 있었던 여성 위주의 직업이었다. 그러다 20세기 후반에는 완전히 사라졌다.

또한, 이 시점에서 전화기의 전원 공급 방식에 대해서도 생각해 볼 필요가 있다.
휴대전화야 당연히 배터리가 있어야 하고 주기적으로 충전을 해야겠지만, 유선 전화는 사정이 좀 달라서 전화선이 통신 겸 전원 공급 역할을 한다.
그렇기 때문에 예전의 유선 전화기는 전통적으로 타 전자 기기와 같은 100/220볼트 전원 플러그를 갖추고 있지 않았으며, 딱히 전원 on/off 버튼 같은 것도 없다. 그리고 건물이 정전됐을 때에도 전화는 여전히 사용 가능하다. 신기하지 않은가?

물론 유선 전화도 전화선 케이블을 뽑아 버리면 먹통이 되겠지만, 그래도 "수신자의 전화기가 꺼져 있습니다" 이런 말은 유선 전화보다는 무선 휴대전화로 오면서 훨씬 더 자주 듣게 된 에러 메시지이다.
이런 차이가 존재하는 이유는.. 유선 전화에서는 가입된 모든 전화들이 교환국에서 쏴 주는 동일한 전원을 송· 수신용으로 공유하기 때문이다. 이것을 '공동 전지식'이라고 부른다. 이렇게 하는 게 사실 속 시원하고 편하다.

그런데 전화라는 게 처음 등장했던 시절에는 이런 인프라가 없었다. 그렇다고 전화기가 외부 전원을 따로 끌어다 쓰지도 않았기 때문에 전화를 걸려면 사람이 손으로 소형 발전기를 돌리는 막장짓을 해야 했다. 옛날에 자동차에 스타터 모터가 없던 시절엔 밖에 노출된 엔진 플라이휠을 사람이 직접 힘들게 돌려서 시동을 걸었던 것과 비슷해 보인다.

이런 특성 때문에 그 시절에 옛날, 특히 군용 전화기는 전기 고문 도구(!)로 즐겨 쓰이기도 했다. 전화선을 통신용으로 안 쓰고 사람 몸에다 꽂은 뒤, 전화기 손잡이를 열나게 돌려 주면 됐기 때문이다.;;
지금이야 교환국에서 전기를 쏴 주니 전화기에서 전류를 직접 생산할 필요는 없어졌지만, 역으로 일반 전원 플러그 대신에 전화선으로부터 전기를 빼돌려 쓰려는 수작이 적발되는 경우가 있다고 그런다.

이건 벼룩의 간을 빼 먹는 짓이다. 전화기가 동작하는 데에나 적합한 최소한의 전압(20~40V 남짓)과 전력으로 누군가가 비정상적인 exploit을 시도하면 그쪽으로 과부하가 걸린다. 마치 송유관에서 비정상적으로 유압이 감소하는 지점을 중앙 통제실에서 감지해서 기름 유출과 절취를 적발하듯, 전화선 전류의 오용도 꼬리가 길면 밟히게 마련이다.

참고로, 1980년대 초반까지는 전화선 플러그 자체가 100V 플러그와 동일한 모양이던 시절이 있었다. 그렇다고 전화기를 진짜 100V 전원 플러그에다 꽂으면 기기가 과전압 때문에 타 버렸다.
그러다가 전화 플러그는 220V 같은 둥근 쇠막대를 가로 세로 두 줄 총 네 개씩 꽂는 형태로 바뀌었다.

전화기의 전원 얘기가 꽤 길어졌다.
아무튼, 저것보다 더 옛날 구식 전화기를 찾자면 거의 1940년대 일제 시대까지 거슬러 올라가게 된다.
분명 가정용 전화기임에도 (6) 지금의 공중전화처럼 거대하고 표면이 목재(...)이며, 송수화기가 분리되어 있는 그 물건 말이다.

사용자 삽입 이미지

뭔가, 사극에서 주재소에서 일본 헌병이 양손으로 송화기를 입에, 수화기를 귀에다 댄 뒤, "무시무시~?" 이러는 장면이 떠오를 것만 같다.
옛날에는 이런 원시적인 전화기조차도 일반 서민이 장만할 만한 물건이 아니었으니 말이다.

텔레비전만 해도 1950년대 말~1960년에 이름도 기억 안 나는 옛날 KBS의 전신 방송사에서 방송을 최초로 시작했을 때는..
주 겨우 4회에 저녁 6시 반부터 9시까지 꼴랑, 겨우 2시간 반씩만 방송을 했다. 그래 봤자 인서울 말고는 전파가 가지도 않았고, 서울 안에서도 TV 수상기를 보유하고 있는 사람은 극소수 부유층밖에 없었다. 그 시절에 따로 뉴스 영화라는 게 괜히 필요했던 게 아니었다.

자막 같은 보조 영상 처리는 카메라 바로 앞에다가 스케치북을 비추기도 하는 등 정~말 미흡하고 허접하기 그지없었으며, 물자가 부족하니 대부분 생방송이고 녹화분 백업 같은 것도 없다시피했다. 오늘날 TV의 영향력과 대조해 보자면 그 시작은 심히 미약하기 그지없었는데.. 그것처럼 전화기 역시 아주 귀하고 한편으로 다루기 어려운 물건이었다.

자, 우리는 지금까지 스마트폰에서 버튼/다이얼 유선 전화기, 수동 발전기가 달린 전화기까지 시간 여행을 해 보았다. 전화기의 모양이 워낙 드라마틱하게 변화했기 때문에 요즘 10대 어린애들은 ☎ <- 이게 어째서 왜 전화기인지도 이해하지 못할 지경이 돼 있다. 마치 저장 아이콘이 왜 디스켓 모양인지를 이해하지 못하는 것처럼 말이다.
그럼 이제부터는 '전화기'보다 더 거시적인 전화 시설의 역사를 살펴보면서 과거에서 현재로 다시 돌아오도록 하겠다.

1899년 9월에 한반도 땅에 최초의 철도 경인선이 개통한 것보다 몇 년 전.. 1895년 9월에 한성-제물포(= 서울-인천)간에 모스 부호 전신이 개통했으며 1896년에 음성 통화가 되는 자석식 전화기가 왕궁 위주로 설치됐다고 한다.
그 뒤 한성-제물포 사이의 시외 음성 통화가 가능해진 것은 1902년이다. 그래 봤자 전화 가입자는 극소수 부유층뿐이었다.

김 구가 소싯적에 일본인 상인을 죽이고(일명 치하포 사건) 감옥에 갇혔을 때, 고종 황제가 갓 개통됐던 전화로 긴급 명령을 내려 사형 집행을 중단시켰네 뭐네 하는 기록이 백범일지에 적혀 있다. 하지만 아직 1900년도 되기 전이던 그때는 고증상 시외 전화 같은 게 없었다는 반론이 있으며, 한편으로는 고종이 전화 통화가 아니라 전보로 명령을 내린 것이라는 재반론도 있다.

우리나라의 전화의 개통과 관련하여 이런 유명한 논란거리도 있다는 게 흥미롭다. 백범일지 기록이 미주알고주알 세부적인 디테일까지 다 정확하지는 않으며, 최악의 경우 주작이 들어갔을 수도 있음을 짐작케 하는 대목이다.

전화기는 자동차보다야 저렴한 물건이겠지만 이게 집집마다 빠짐없이 보급된 건 생각보다 최근의 일이다. 최소한 박통을 지나서 1980년대 전대갈 시절은 돼서야 마이카 시대와 비슷한 타이밍에 보급됐다.
자동차 등록 대수 1천만 대 돌파가 1997년의 일이고 2천만 대 돌파는 지난 2014년경인데, 전화 1천만 회선 돌파는 1987년 9월경에 이뤄졌다. 2천만 회선 돌파는 더 이른 1993년 11월이다. 1가구 1 전화를 넘어 2전화까지 달성된 셈이다.

그러니 옛날에는 전화번호부 책 한 권으로 시· 도의 전화 가입자 전체 명단을 쭉~ 나열할 수 있을 정도였다. 지금이야 리스트가 너무 방대하고 별 효용이 없으며, 개인 정보 보호에 대한 인식이 바뀌기도 했기 때문에 그런 명단을 만들지 않는다.
또한, 2천만을 찍고 나서 2010년대 이후로는 무슨 4천, 5천만 회선을 돌파했다거나 한 것도 아니다. 인구가 그만치 무한한 게 아니니 2900만 회선 정도에서 정점을 찍은 뒤 3천만은 돌파하지 못하고 이제는 감소 추세라고 한다.

전화번호라는 게 기본적으로 4자리 숫자이고 그 앞에 일명 '국번'이라고 불리는 전화 교환국의 번호가 붙어 있었다. 그래서 전화번호를 부르는 포맷도 이것 영향을 받아서 단순히 'xx 다시(dash) yyyy'가 아니라, 'xx국에 yyyy' 이런 식이었다.
지금이야 국번이라 불리는 앞쪽 번호가 기본이 3자리이고 대부분 4자리까지 차지하여 번호의 자릿수와 대등하다. 하지만 옛날에 전화 회선수가 적던 시절엔 국번이 정말 씨크하게 한 자리밖에 없던 시절도 있었다.

자동차의 번호도 기본이 4자리 숫자리고 앞 번호가 지금은 2자리인데 이제 번호가 부족해서 3자리로 확장하려 하는 것과 비슷하다. 옛날에는 자동차의 앞번호도 한 자리였던 것이 지금의 전화번호와 사정이 비슷해 보인다.

유독 전땅크 시절에 국내에 전화가 폭발적으로 보급될 수 있었던 것은 1985년, 우리나라에서 대용량 전화 전전자(全電子) 교환기를 국내 자체 기술로 개발하는 데 성공했기 때문이다. 무선 휴대전화까지 보급된 지금의 입장에서야 구닥다리가 됐지만 그 시절엔 국번 내지 지역번호만 보고는 전국에서 폭주하는 그 어떤 전화 트래픽에도 자동으로 대처하여 회선 교환을 자동으로 해 주는 최첨단 장비였다.

사용자 삽입 이미지

이건 1982년부터 ETRI에서 연구진들이 "이 정도 시간과 자금을 투입하고도 개발에 실패할 경우 어떤 처벌도 달게 받겠습니다" 각서까지 쓰고 굉장한 모험을 감내하며 개발한 것이었다. 승용차 포니, 경부 고속도로, 한국형 고속철, 포항 제철 등에 필적하는 중요 과업이었다. 거의 이런 근성으로 연구진들을 갈아넣은 끝에 개발에 성공했다.

  • 1950년대 월드컵 한일전에 처음 출전할 때: 왜놈들한테 졌다가는 대한 해협을 헤엄 쳐서 귀국하겠습니다.
  • 포항 제철 처음 만들 때: 이건 우리 선조들의 피눈물이 담긴 일제 피해 배상금을 밑천으로 만드는 거다. 실패라도 한다면 우리 다같이 우향우 해서 영일만 바다에 뛰어내려서 죽자.
  • 전화 교환기: 지금 얘기하는 대로..

어쨌든, 이게 개발이 성공하고 1986년에 상용화된 뒤에야 수동 교환원이라는 직업이 완전히 확인사살 퇴출되었으며, 전국 통합 지역번호라는 게 도입되어 장거리 시외 전화도 돈만 더 들 뿐 편리하게 걸 수 있게 되었다. 총기가 격발· 급탄 절차가 완전히 자동화되어서 원시적인 화승총이던 것이 기관총으로 변모한 것과도 같다.

전자식 교환기가 개발되기 전에는 장거리 전화를 거는 게 불편한 건 말할 것도 없고, 늘어나는 전화 가입 수요 자체를 감당할 수가 없었다. 무슨 최신형 아이폰을 구입하는 것도 아니고 그냥 집에 전화 개통 예약 대기가 몇 달~1년치까지 밀렸다는 게 믿어지지 않는다. 회선을 하나 추가할 때마다 전화 시설 측면에서 늘어나는 부담이 만만찮았던 것 같다.

그러니 이미 전화 회선을 받은 사람과 그렇지 못한 사람 사이의 위화감이 커졌으며, 196, 70년대에는 전화 회선을 무슨 명절 귀향 열차 암표처럼 타인에게 편법으로 양도하는 일까지 있었다고 한다. 전기통신법이 개정되어 전화 회선의 타인 양도가 뒤늦게 금지되긴 했지만, 새로 개설되는 회선에만 이 제약이 적용됐기 때문에 일명 백색 전화(양도 가능. 1970년 8월 이전 가입의 기존 전화) 청색 전화(양도 불가..) 촌극이 벌어졌을 정도였다. 당연히 전자의 가격은 폭등했다.

전화 자동화 사업 완료를 기념하는 1987년자 홍보 영상은 다음과 같다. (대한뉴스 제 1651호)
이것 역시 한번 만들고 끝이 아니라 처리 가능 용량을 더 증가한 업그레이드 시스템을 계속해서 개발하여 추후의 회선 증가에도 대처해 왔다.

ETRI에서는 무려 1982년에 국내 최초로 인터넷 연결도 해냈고(전 길남 박사 연구팀),
1988년엔 삼성 전자에서 국내 최초로 벽돌만 한 휴대전화를 만들어 내고.. 그게 나름 국내에서 세계 최첨단을 달린다는 전자 통신 연구진들이 그 시절에 하던 일이었다.

그러다가 2000년부터는 지역번호가 도 단위로 통합되어 더 단순해졌으며, 자동차 번호판은 영업용 말고 자가용 한정으로 지역 표기가 없어졌다.
이런 인프라를 바탕으로 기존 유선 전화와 무선 휴대 전화의 통합은 어떻게 이뤄졌으며, 발신자 표시 같은 기능은 어떻게 구현되었는지도 개인적인 의문이다. 정말 신기한 일이다.

그리고 지도에 표기되어 있는 도로나 철도뿐만 아니라 비행기의 항로, 그리고 광케이블(땅 속+바닷속) 내지 송유관의 배치는 어찌 되고 관리가 어찌 되고 있는지 같은 것도 궁금해진다. 전화와 통신 기술의 발달도 자동차 같은 교통 분야의 기술 발달과 연계해서 생각할 수 있는 것 같다.

끝으로 하나 더.. 전화기는 지금까지 주로 다뤘던 개인용만 있는 게 아니라 회사 같은 데서 쓰는.. "내선 연결" 인터폰 기능이 있는 약간 특수한 물건도 있다.
스마트폰 모양도 아니고 여전히 구닥다리 유선 버튼식이지만, 대표 전화번호 하에서 각 자리별로 전화를 세부적으로 걸 수 있으며, 남에게 내 전화를 전달하거나 남에게 온 전화를 자기가 대신 받을 수도 있다. 회사에 취직하면 처음에 이런 전화기를 사용하는 법을 배우게 된다. 사실, 별표*와 우물정# 버튼도 원래 이런 특수한 용도를 위해 만들어져 있다.

텔레비전도 전파를 받는 게 아니라 그냥 고정된 위치만 보여주는 CCTV라는 게 있고, 인터넷 세계에도 사내 전용망인 인트라넷이 있다. 그런 것처럼 전화에도 우리가 통상적으로 생각하는 것보다는 좀 local한 용도가 있는 셈이다.

Posted by 사무엘

2018/09/26 08:36 2018/09/26 08:36
, , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1536

이번 2018년 9월은 본인에게 의미심장한 전환점에 속하는 시기였다. 거의 50일 동안 날 괴롭히던 지긋지긋한 무더위가 드디어 물러가고 계절이 바뀌었다.
그리고 날개셋 한글 입력기 파이널 9.5 버전을 완성했다. 홀가분하고 기뻤지만 그 뒤에도 사소하게나마 프로그램에 수정 작업이 야금야금 진행되었으며, 더 나아가 동시치기 기능도 이게 다가 아닌데 정확도를 더 개선할 수 없을까 고민되기 시작했다.

이제는 한글 입력기 말고 글꼴 쪽 연구도 하면서 학위논문 쓸 걸 준비해야 하는데.. 뭔가 오랜 독재 정권이 갑자기 무너진 뒤에 사회가 혼란스러워지는 것 같은 느낌이 들었다. 여러 밀린 숙제들 중 무엇부터 진행하는 게 좋을까?
아.. 그 와중에 재작년에 했던 것처럼 자그마한 발표 논문을 하나 준비해서 투고했다. 이것도 여러 모로 스트레스 받는 작업이었다.

힘든 나날이 계속되었는데 날씨는 너무 좋았다. 낮엔 하늘이 완전 파랗다가 밤에는 싸늘해지고... 도저히 집에만 틀어박혀 있을 수 없었다.
그래서 추석을 열흘 남짓 남기고 논문 투고까지 마친 타이밍 때.. 본인은 이 억눌린 욕망을 발산하기 위해 남양주의 시골 마을로 차를 몰고 달려갔다. 짤막한 힐링 여행을 떠났다.

남양주는 생각보다 넓기 때문에 북쪽의 경춘선+북한강+가평 방면도 남양주이고, 남쪽의 중앙선+남한강+양평 방면도 남양주이다. 둘을 분리해서 생각해도 무방할 정도이다. 본인이 주목한 곳은 남쪽인 와부읍 일대였다. 그래서 미사대교를 건너서 덕소삼패 IC로 진출했다.

남양주는 도농 복합 도시인 관계로 조금만 교외로 나가면 아주 전원적이고 강과 산이 어우러진 아름다운 경치를 감상할 수 있다. 그리고 보안 시설이 여기저기 산재해 있다. 군부대뿐만 아니라 상수도 취수· 정화 시설도 있다.
이런 것들 말고 또 남양주의 명물로는 바로..

사용자 삽입 이미지

내가 알기로 거의 세계 유일의 보잉 747 초기 퇴역분 기체가 곁들어진 건물이다. 월문교 사거리 근처에 있다.
열차나 선박을 개조한 건물과 달리 비행기를.. 그것도 그냥 전투기 같은 크기의 물건을 전시만 한 게 아니라 거대한 여객기를 건물 형태로 꾸며 놓은 경우는 극히 드물다.

사용자 삽입 이미지

아쉬운 점은 주날개와 엔진이 완전히 제거되었고, 총으로 치면 마치 sawed-off 샷건처럼 뒷부분도 짤려서 뭉툭해졌다는 점이다. 날개가 없으니 기체가 일면 선박처럼 보이기도 한다.

하긴, 옛날에는 기체가 더 온전한 형태로 남아 있긴 했다. 하지만 제대로 관리되지 못하고 방치되어 칠이 벗겨지고 온통 녹슬고 몰골이 말이 아니었다고 한다. 관리에 부담 되는 부분이 짤려 나가긴 했지만 그래도 무려 그 육중한 747기가 깡그리 고철로 스크랩 되지 않고, 이렇게라도 형체가 남았다는 점에 위안을 삼아야 할 것이다.

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

건물주가 기체 내부를 개조해서 뭔가 활용을 할 의향은 있어 보인다. 하지만 안은 아직까지 굳게 잠겨 있고 외부인이 접근할 수 없었다.
위의 사진은 기체의 창문 안을 찍은 것이다. 내부가 어서 카페나 박물관으로 개방되는 날이 오기를 기대해 본다.

사용자 삽입 이미지

비행기 답사를 마친 뒤, 본인은 거기보다 살짝 더 북쪽에 있는 보안 시설을 찾아가 봤다. 알고 보니 한쪽으로는 군부대가 있고 다른 한쪽으로는 '서울 아리수 와부 정수장'의 진입로가 있었다.

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

가는 길은 이런 한적한 시골길이었다.
그리고 군인 아파트는 전국 어딜 가나 이런 투박한 모양인 듯하다.

참고로 여기 말고 또 다른 정수장으로 추정되는 보안 시설도 여기서 그리 멀리 떨어지지 않은 곳에 있다.
전자가 서울시 상수도 사업 본부 소속인 반면, 후자는 한국 수자원 공사 소속이다. 사진은 그냥 생략하고 넘어가지만, 담장의 쇠창살 모양이 팔당댐 근처의 정수장에서 본 것과 동일하긴 했다.

뭐, 이렇게 흥미로운 답사를 했다. 여기 주변은 온통 식당들이 널렸기 때문에 본인은 식사도 했다. 오늘의 마지막 끼니가 될 것이므로..

사용자 삽입 이미지

이제 본인은 시골 농로를 달려서 앞을 가로막고 있는 산을 향해 다가갔다.
지도와 내비상으로는 '어룡지'라고 저수지가 근처에 있는 듯했으나, 본인은 딱히 보지 못했다.

사용자 삽입 이미지

바로 여기. 30분마다 한 대씩 다닌다는 99-2라는 마을 버스가 서는 곳이 등산로의 입구이다. 하지만 이 등산로에는 차도도 있기 때문에 더 깊숙한 곳까지 차로 진입할 수 있었다.
포장 도로가 끝나고 차가 더 들어갈 수 없는 곳에는 차를 세 대 정도 세울 수 있는 주차 공간이 있었다. 이제 여기서부터 본인은 산을 오르기 시작했다. 굉장히 오랜만에 등산을 했다.

사용자 삽입 이미지

계곡에는 물이 졸졸 흐르고 있었다.
한 주 내내 날씨가 왕창 좋다가 하필 본인이 여행을 떠난 날에만 하늘이 허옇고 잔뜩 흐려진 게 아쉬웠지만, 이런 날씨도 차분한 분위기가 느껴지고 괜찮았다.

사용자 삽입 이미지

산길은 울타리와 깔개, 계단 같은 게 만들어져 있을 정도로 잘 정비된 건 아니지만, 그래도 ATV나 산악 자전거가 지나갈 수는 있을 정도로 폭이 확보되어 있었다. 일부 구간은 의외로 시멘트로 포장되어 있기도 했다.

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

숲길을 지나서 산 속에서 하늘이 보이는 공터를 발견하면 뭔가 느낌이 굉장히 새롭다. 괜히 기분이 좋아진다.

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

이 등산로도 무슨 누리길 누비길처럼 시에서 이름을 붙여 놓은 게 있었다. '큰사랑 산길'.
길은 꼬불꼬불 가팔라지기까지 하다가..

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

드디어 능선에 도달했다. 주변엔 쉬어 가라고 벤치와 평상이 놓여 있었다.
알고 보니 여기는 '새재고개'라고 한다. 성남-광주 사이에는 '이배재, 태재고개'가 있더니만..
성남과 광주 사이에 산들이 잔뜩 늘어서 있듯, 남양주 동부와 양평 사이에도 갑산, 예봉산, 예빈산 같은 산들이 잔뜩 늘어서 있다. 능선을 타는 길을 '천마지맥 누리길'이라고 부르더라.

본인은 그쪽으로 등산은 예봉산 한 번밖에 못 가 봤지만 여기도 기회가 되는 대로 차차 개척해 나가고 싶다.
하지만 오늘은 산을 하나 골라서 꼭대기까지 오른 게 아니라...

사용자 삽입 이미지

이 새재고개에서 텐트를 치고 야영을 했다. 산등성이에서 혼자 단잠을 잤다. 바닷가와 강가에서 텐트를 치고 자 봤으니 언젠가 꼭 산에서 텐트를 치고 자고 싶었는데 드디어 소원을 이뤘다.
마침 평상이 하나 있던 덕분에, 그 위에다 텐트를 치니 완전 딱이었다.

노트북 PC가 든 백팩뿐만 아니라 텐트와 돗자리까지 들고 산을 오르느라 몹시 힘들었다. 그러니 좁고 험한 길은 가지 못하고 처음부터 이런 큰길(?) 위주로, 그리고 산 중턱까지 최대한 차로 접근 가능한 등산로를 선택했던 것이다.
사실, 여기 주변의 샛길로 빠져서 적갑산이나 갑산의 정상으로 갈 수도 있지만 본인은 그러지 못했다. 짐 때문에 산에서의 이동성을 일부 희생한 대신, 산 속에서 극한의 주거성을 얻었다.

두어 시간 남짓 만에 해가 졌다. 인적이 완전히 끊기고 주변은 칠흑같은 어둠으로 뒤덮혔는데.. 텐트 안에만 있으면 비바람과 추위를 다 피할 수 있고 아늑하고 포근하기 그지없었다. 거기에다 침낭까지 뒤집어쓰면 밖이 영하의 혹한이어도 아무 걱정 없을 것 같았다. 난 이런 상태에 있는 게 노무노무 좋았다.

산 속 야영과 관련해서 혹시 법적인 문제는 없냐고 문의하는 분이 계신다.
해가 지면 모두 나가야 하고 야영을 해서는 안 되는 곳은 국립공원, 아니면 청와대 뒷산 정도이다. 그리고 서울 시내의 한강· 청계천 공원 같은 곳도 공식적으로 야영 금지이다.
하지만 그냥 저런 평범한 산들은 (1) 쓰레기 안 버리고 (2) 불을 피우지만 않으면 산 속에 짱박혀서 뭘 하든 문제될 것 없다.

이튿날 아침에 개운하게 눈을 뜬 뒤, 아쉬움을 뒤로 하고 차가 있는 곳으로 돌아가서 집으로 귀환했다. 공공시설인 평상을 너무 오랫동안 혼자 전세 내면 안 되니까..
산에서 야영을 한 번도 안 해 본 사람은 있어도, 한 번밖에 안 한 사람은 없을 것 같다..;; 날씨가 더 추워지면 또 오지에 있는 다른 산에서 야영을 할 것이다.

Posted by 사무엘

2018/09/23 08:29 2018/09/23 08:29
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1535

오늘날 중국은 그 넓은 대륙 전지역이 강제로 단일 시간대를 쓰며, 대만(중화민국)쯤은 자기뿐만 아니라 남들까지 승인하지 못하게 압력을 넣을 정도로 강경하게 1중국 단일 국가 정체성을 쪽수빨로 밀어붙이고 있다. 조금 수틀렸다간 지금의 유럽처럼 십수 개 이상의 나라로 쪼개지고 서로 독립하네 마네 내전 헬게이트가 밤낮 벌어졌을 수도 있는 대륙이 어쨌든 '중화인민공화국'으로 유지되고 있다. 뭐, 지금도 구석 곳곳에서 분쟁과 잡음이 전혀 없는 건 아니지만 말이다.

우리나라는 워낙 작다 보니 미국처럼 외국 나가서 세계 평화를 지키다가 산화한 자국 군인 같은 개념이 없고, 일본이나 중국처럼 자국 내부의 무슨 소수 민족 갈등 문제 같은 것도 없다. 옛날에는 울릉도나 제주도 사람들이 본토인들에 비해 문화가 이질적이었을지 모르지만, 거기도 본토 행정구역 편입과 동화가 이미 몇백 년 전에 마무리 됐으니 이제 와서 문제될 것은 없다. 굳이 민족간 갈등이라면 재중· 재러시아 동포라든가 탈북자, 북한 관련 문제가 있을 뿐이다.

이런 한국에 비해 중국은 참 크고 아름다운(?) 단일 국가이긴 한데, 이 때문에 말과 글까지 전지역에서 완전히 깔끔한 단일 체계로 유지되고 있지는 않다. 그리고 사정이 생각보다 복잡하다.
우리나라에서 중국어라고 하면 99%는 '니 하오 마, 워 쓰 뿌, 한 궈, 쭝 궈 런' 이러는 베이징 표준 중국어, 일명 보통화를 떠올린다. 실제로 이게 화자가 가장 많아서 중국 대부분의 지역에서 통용되며, 중국 정부에서 공식적으로 권장하기도 한다.

그렇지만 대륙에는 일명 Cantonese라고 불리는 광둥(광동)어 방언도 있다. 언어 구조는 중국어와 뿌리를 공유하지만 음운과 어휘는 보통화와 이질감이 굉장히 커서 통역이 필요할 정도라고 한다. 즉, 같은 글자를 발음하는 방식이 다르고 성조 체계도 다르다. 이 말인즉슨, 보통화에 맞춰진 병음 기반 입력 방식을 사용할 수 없다는 뜻이다.

표준 중국어는 일부 음운에 ㄴㄹㅇ 같은 유성음 받침이 존재하는 것 말고 다른 종성이 없다. 그래서 초성은 '성모'요, 중성과 종성은 한데 뭉뚱그려서 '운모'라고 부른다. 다시 말해 중국어는 음운 체계가 두벌식스럽다는 뜻이다.
그런데 광동어는 무성음 받침이 존재하며 한자들의 독음이 의외로 한국어 한자음에 더 근접해 있다.

전세계에서 모국어 화자가 가장 많은 보통화와는 달리, 광동화는 화자가 1억이 채 되지 않는다. 하지만 물 좋은(?) 홍콩과 그 인접 지역에서 통용되고 유명 무술 영화 같은 데서 많이 나오는 관계로 화자 수에 비해 임팩트가 좀 있어 보인다.

실제로 이 연걸만 해도 보디가드 영화에서 홍콩 여주인공으로부터 "대륙 아저씨"라고 비아냥 받지만 말하는 것은 광동화이다. 성조도 있고 뭔가 중국어처럼 들리긴 하지만 보통화를 배운 사람이 도무지 이해할 수 없는 소리를 내뱉는다.
킬 빌에서도 파이 메이 싸부가 광둥어 대신 일본어밖에 할 줄 모른다고 여주인공을 개무시하는 걸 볼 수 있다.

중국어는 (1) 말뿐만 아니라 (2) 글자도 잘 알다시피 간체자와 번체자로 파편화돼 있다.
간체자는 기존 한자가 획이 너무 많고 불편하다는 실용적인 이유로 인해 1950년대 말에 마오 쩌둥이 자기 재량으로 고안하고 제정한 문자 체계이다. 화폐 개혁이 아니고, 철자법이나 맞춤법 개정도 아닌 일종의 문자 개혁을 한 셈이다. 공산당 특유의 불도저 식 독재가 아니면 하기가 쉽지 않았을 것이다.

그러니 당장 1953년에 6· 25 전쟁 휴전 당시에만 해도 중국도 '나라 국'을 國이라고 썼는데 불과 몇 년 뒤에 그게 싹 달라진 걸 보면 굉장한 이질감이 느껴진다.
지금 같은 고성능 컴퓨터가 처음부터 짠 등장해서 잘 보급돼서 사람이 손으로 직접 한자를 쓸 일이 없어지다시피했다면 굳이 번거롭게 간체자 따위 만들어서 시간(옛날 문헌)과 공간(한국 및 대만..) 단절을 초래할 필요가 없었을 것이다. 하지만 옛날에는 지금 같은 상황이 아니었으며, 마오 휘하의 중국 공산당은 옛것을 청산한답시고 간체자보다 훨씬 더 심한 병크 뻘짓도 많이 저지르긴 했다.

이 때문에 오늘날 중국은 한자의 종주국이면서도 우리가 흔히 떠올리는 그런 종주국은 아닌.. 뭔가 어색한 위상을 지니게 됐다.
(그러고 보니 그럼 중국 말고 일본의 한자 약자는? 1949년에 '신자체'라는 이름으로 중국의 간체자보다도 먼저 자체 제정한 거라고 한다.)

문제는 간체자와 번체(글)가, 보통화와 광동화(말)가 서로 딱 정확하게 맞물리는 관계가 아니라는 점에서 더 커진다. 2*2=4개 조합이 모두 제각기 존재한다.
중국 대륙이야 보통화+간체이지만, 대만은 보통화+번체여서 문자만 서로 다르다.
홍콩과 마카오에서는 광동화+번체이지만, 중국에서 광동어가 통용되는 접경 지역은 광동화+간체여서 역시 문자만 차이가 난다.

  보통화 광동화
간체 베이징 포함 중국 본토 중국의 홍콩 접경 일부 지역
번체 대만 홍콩, 마카오

컴퓨터의 localize 관점에서 봤을 때 중국어 간체(chs)와 중국어 번체(cht)는 응당 서로 다른 것으로 취급된다. 하지만 표준 중국어(보통화+간체) 입력기라고 해서 번체 한자 입력 기능이 전혀 없는 건 아니다. zhongguo라고 입력했을 때 玉가 아니라 或이 들어간 中國이 제시되게 할 수도 있다는 뜻이다.

그럼 중국과 대만이 한 IME를 옵션만 바꿔서 쓰면 되느냐 하면 또 그렇지는 않다. 말이야 보통화 기반이니 '니 하오 마, 워 아이 니' 같은 간단한 말이야 그대로 통한다. 하지만 지리적으로 수십 년 이상 단절되었던 관계로, 최신 유행어라든가 외래어, 학술 용어로 가면 미묘하게 차이가 발생한다. 같은 브라우저 기능도 '즐겨찾기'와 '책갈피'로 서로 다르게 불리듯이, 다른 쪽 말을 알아들을 수는 있지만 현지에서 말을 그렇게 쓰지는 않는 것들이 생겨 있다는 것이다.

그렇기 때문에 중국어 입력기와 대만어 입력기는 그냥 서로 다른 어휘 DB를 사용한다. 간체자냐 번체자냐 하는 건 문자 표현 수단의 차이일 뿐, 말 자체의 차이에 비하면 아주 사소한 차이에 불과하다.

여담이지만, 보통화와 광동화도 차이가 나는 건 구어체 발화이지, 같은 문장이나 단어를 글자로 쓴다면 간체/번체만 일치한다면 글이 그다지 차이가 나지 않는다.
그리고 대륙 사람도 백지 상태에서 쓸 줄을 모를 뿐이지, 옛 번체자를 그럭저럭 알아보기는 한다고 한다. 이 사람들이 현대 중국어 말고 소위 말하는 공자 맹자 고전까지 그대로 읽을 수 있다는 게 신기하게 느껴진다.

물론, 그런 차이는 있다고 한다. 's, 다시 말해 '~의' 소유격을 나타낼 때 문어체의 고전에서는 之가 즐겨 쓰였지만 구어 위주의 현대 중국어는 잘 알다시피 de 的이 쓰인다.
일상적으로 之를 쓰지는 않지만 그렇다고 중국 사람들이 그렇게 쓰인 문장을 아예 독해를 못 하는 건 아니라고..
한국 사람들이 "-느니라, -노라, -느뇨" 이딴 말을 일상생활에서 안 쓴다고 해서 그걸 못 알아듣는 건 아니니 말이다.

오히려 중국어는 한국어 같은 복잡다난한 어미나 조사가 없고, 그야말로 어간 어근만 성조 넣어서 내뱉으면 되는 간결한 형태 고립어인데, 딱히 고어체와 현대어체가 달라질 만한 게 있는지.. 온통 궁금한 것 투성이이다.
중국어가 구어는 '한어'이지만 문어는 '한문'이 아니라 '중문'이라고 부르는 이유는 이런 고전과 현대 중국어를 구분하기 위해서라고 한다. 그리고 이런 심상의 차이 때문에 우리나라 역시 고전 중국어 시대의 인명 지명은 국어 발음으로 표기하고, 현대의 중국 인명 지명은 현지음으로 표기하는 게 아닐까 한다.

한편, 중국과 대만은 자기 나라 말을 한자 없이 (3) 발음만 표기하는 수단도 서로 달라져 있다.
원래 중국에서는 20세기 초에 한자의 획을 적당히 떼어내서 카타카나처럼 생긴 주음부호(bopomofo)라는 걸 만들어 쓰고 있었다. 그랬는데 대륙 중공은 1950년대 말에 간체자와 동시에 라틴 알파벳 기반의 한어병음이라는 것을 만들어서 이걸로 주음부호를 대체했다.

괜히 어설픈 독자 문자 대신에 라틴 알파벳을 채용한 것은 오늘날 같은 컴퓨터 시대에 혜안 선견지명이긴 했다.
하지만 옛 전통을 그대로 간직하고 있는 게 대만이고, 그걸 버린 것은 중화인민공화국인 것은 사실이다. 그래서 두 나라 입력기는 언어 DB뿐만 아니라 기본적인 말소리 입력법까지도 서로 달라지게 됐다.

※ 입력법

컴퓨터에서 중국어를 입력하는 방법은.. (1) 한자의 모양으로부터 입력하는 방법과, (2) 말소리에 대응하는 한자를 입력하는 방법으로 크게 나뉜다.
(1)의 가장 궁극적이고 원시적인 형태는.. 그냥 필기 인식(..;;; )일 것이다. 한자나 중국어에 대한 지식이 전혀 없이 생판 모르는 한자도 곧장 입력할 수 있다는 장점이 있지만, 너무 느리고 비효율적이고 그림과 문자의 구분이 없고.. 이럴려고 컴퓨터를 쓰나 싶은 자괴감이 들기에 충분하다.

그러니 한자를 적당히 기본 단위로 분해한 오필화수입법이나 창힐수입법이란 게 있다. 나름 중국에서 날고 기는 천재들이 머리를 짜내어 고안한 방식이겠지만, 일반인들은 그런 천재가 아니며 한자부터가 추상화나 기계화가 꽤 난감한 문자인 관계로.. 그런 입력법들은 처음에 그 체계 내지 파자(破字, 문자를 더 작은 모양 단위로 쪼갬) 이념을 익히는 게 까다롭다. 비록 익숙해지고 나면 속도가 제법 나겠지만 높은 진입장벽은 근본적으로 어쩔 수 없는 핸디캡이다.

(2)는 결국 더 단순한 표음문자의 도움을 받아서 한자를 '간접적으로' 입력하는 방법이다. 그렇기 때문에 빠르고 효율적인 입력 방식을 구현하기 어렵다. 한글만 해도 로마자 입력법이 기존의 두벌식이나 세벌식 글자판보다 절대로 효율적이지 못한 것과 비슷한 이치이다.
더구나 한자를 이런 식으로 입력하는 건 소리가 같은 한자들에 대해 후보를 고르는 과정을 반드시 필요로 하며, 글자보다는 단어 및 문장 묶음 단위의 입력을 지향해야 한다. 즉, 일이 더 복잡해진다.

하지만 (1)이 워낙 복잡하고 그에 비해 (2)는 직관적이고 입문하기가 쉽다 보니, 중국은 말할 것도 없고 일본에서도 가장 대중적인 입력법은 후자이다. (2)는 언어 데이터에다가 딥 러닝이니 뭐니 하는 인공지능 기술을 접목하여, 후보 추천과 자동 완성 같은 쪽이 갈수록 발전하고 있기도 하다.

그리고 (2)에 속하는 입력법이 한어병음뿐만 아니라 주음부호 방식이 존재한다.
주음부호는 알파벳보다 글자수가 많다 보니 4단의 숫자 글쇠까지 사용한다는 점, 단어보다는 성모+운모+성조까지 모두 입력해서 글자 단위 완성을 지향한다는 점, pin-gan / ping-an, xi-an / xian 같은 모호성이 없다는 점을 생각하면 한글 입력에서 세벌식과 비슷한 심상이 느껴진다.

PC에서는 숫자 글쇠가 후보 선택이 아니라 주음부호 입력용으로 계속 쓰이기 때문에 입력 방식이 병음과는 사뭇 차이가 있다. 하지만 그런 제약이 없는 모바일 스크린 키보드용 입력기에서는 주음부호도 병음처럼 쫘르륵 한데 늘어놓고 단어를 고르는 식으로 서로 비슷하게 동작하는 편이다.

※ 성조

끝으로, 중국어는 성조가 있는 것으로 유명하다. 표준 중국어 기준으로 흔히 4종류가 있다고 하는데, 지방 방언 중에는 성조 체계가 더 복잡한 것도 있다고 한다. 그리고 표준 중국어도 표기에 반영하는 것만 4종류이지, 표기를 생략하는 덜 중요한 성조(경성?)까지 포함하면 사실상 5종류이다.
알파벳 기반의 Pinyin에서는 경성이 생략되지만 주음부호에서는 1성인 평성(-)이 생략되고, 경성(·)이 점으로 표기된다는 것이 흥미로웠다.

한국어도 중세 시절에는 원래부터 그랬는지, 아니면 중국어의 영향을 받아서 그랬는지는 모르지만 성조가 비스무리하게 있었다고 한다. 그걸 표기하려 했던 흔적이 바로 방점이다. 하지만 성조는 몇백 년 전에 이미 깔끔하게 소멸하고, 그나마 장음과 단음 구분으로 간소화됐다고 하지만 오늘날은 이나마도 극도로 문란해진 지 오래다.

글쎄, 말, 벌, 눈, 밤 같은 단어는 어느 길이가 어느 뜻인지 한국 토박이도 분간을 못 하고 그냥 다 문맥에 의존한다. 하지만 '적다'처럼 용언에서는 짧은 '적'은 write이고 긴 '적'은 few라고 절대 헷갈리지 않는 것 같다. 옛날 사람들은 현대인보다 말의 길이와 ㅐ/ㅔ 구분 같은 것도 훨씬 더 신경 쓰며 살았을 것 같은데, 중세 국어가 현대 국어보다 더 복잡하고 정교했을 것 같다.

사실, 이건 중국어도 사정이 크게 다르지 않다. 중국 토박이들도 그 많은 글자들의 성조를 칼같이 다 구분해서 쓰고, 하나라도 어긋나면 완전히 말을 못 알아듣는다거나 하지 않는다. 그리고 성조를 외국인 학습자들처럼 과격한 연기 하듯이 큼직하게 구사하지도 않는다. 애초에 성조는 노래를 부를 때만 해도 깡그리 무시되는 요소이다. (뭐 그렇기 때문에, 중국에서는 뮤직비디오에 자막이 반드시 들어간다고 한다. 일본에서 한자로 적힌 고유명사에다가는 곁에 히라가나 발음이 거의 반드시 병기되는 것처럼 말이다. 읽는 방법이 워낙 다양할 수 있고 복잡해서..)

성조가 여전히 필요하긴 하지만, 그래도 거추장스러운 것으로 치부되고 문란해지는 기미가 조금씩 보인다는 것이다.

Posted by 사무엘

2018/09/20 08:32 2018/09/20 08:32
, ,
Response
No Trackback , 5 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1534

전기 저장 매체들

우리가 맨날 주머니에 넣고 들고 다니고 들여다보는 자그마한 스마트폰은 예전의 다른 휴대용 전자 기기들과는 차원이 다른 첨단 기술들이 복합적으로 집약된 결과물이다.
예나 지금이나 빛의 속도가 달라진 게 없고 전자기파의 특성이 달라진 건 없고, 20년 전이나 지금이나 시중에서 파는 랜 케이블의 재질이 달라진 건 없는 것 같은데.. 어째 인터넷 속도는 캐사기급으로 빨라졌는지? 더구나 유선이 아닌 무선까지도 말이다.

마치 비행기가 하늘을 나는 원리만큼이나 난 직관적으로 저게 이해가 되지 않는다.
스마트폰으로 유튜브 HD 동영상 보기 vs 30년쯤 전 모뎀 PC 통신으로 사진 한 장 다운로드 시켜 놓고 머리 감기/담배 피우고 오기...;;
이건 진짜 1950년대 전쟁 폐허 vs 1980년대 올림픽 개최만큼이나 너무 파격적인 차이가 아닐 수 없다.

스마트폰은 불과 2, 30년 전만 해도 상상도 할 수 없었던 초고성능 컴퓨터이다. 기존의 PC와는 발전 배경과 주 용도가 다르다 보니 구조적으로 공통점도 있고 차이점도 있는데.. 매우 중요한 차이는 네트워크 연결에 대한 관점이 아닌가 싶다.
PC는 원래 오프라인 상태로 쓰다가 인터넷 연결은 덤으로 추가로 가능한 구도인 반면, 스마트폰은 애초부터 기지국과의 연결을 전제로 깔고 운용된다. 그리고 PC와 달리 스마트폰은 365일 24시간 내내 켜져 있다.

그래서 현재 시각을 표시하는 기능만 해도 PC는 배터리 기반의 자체 시계가 있으며, 요즘 운영체제들이 주기적으로 시각 동기화 정도나 해 준다. 그 반면, 스마트폰은 기지국과의 연결이 끊어지면 현재 시각이 전혀 나오지 않는다.

인터넷 연결을 위해서 데스크톱 PC는 대개 유선 이더넷만 지원하고, 노트북 PC는 유선과 무선 와이파이를 모두 지원한다. 그 반면 스마트폰은 무선만 지원하고, 노트북 같은 다른 기기가 자신을 통해서 무선 인터넷 연결을 또 할 수 있게 태더링 기능까지 제공한다. 재미있는 차이점이다.

21세기 최신 과학 기술의 산물인 스마트폰을 가능하게 한 근간 기술을 몇 가지 추려 보면 다음과 같이 요약된다.

(1) 디스플레이: 옛날엔 PC의 모니터는 크고 무거운 CRT(브라운관) 방식이 대세였다. 그리고 반대로 액정이라 하면 지금 같은 천연색 화면이 아니라, 그 시절 전자 계산기처럼 녹두색 배경에다 기껏 7-segment 숫자 내지 도트가 다 보이는 저해상도 비트맵 글꼴 정도나 찍는 허접한 단색 화면이 전부였다.

(2) 플래시 메모리: 하드디스크는 기계적으로 동작하기 때문에 전력 소모가 많으며 진동과 충격에 취약하다. 즉, 근본적으로 모바일에 친화적인 물건이 아니다.
뭐, 그 대신 스마트폰의 메모리가 PC의 하드디스크와 비슷한 가격으로 수백 GB~테라바이트까지 가지는 못한다. 컴퓨터에서 과연 주 기억장치와 보조 기억장치의 경계가 허물어지는 날이 올까?

(3) 저전력 저발열 CPU: 난 저 정도로 고성능 CPU가 달린 스마트폰이 어떻게 냉각 팬이 없고 웽 소리를 전혀 안 내며 동작하는지 지금 생각해도 신기하기 그지없다.
물론, 오로지 메모리 용량 최적화이지 전력 소모 최적화와는 거리가 먼 구닥다리 x86 아키텍처를 기반으로 그런 스마트폰용 CPU를 만들 수는 없다. 그리고 스마트폰은 대체로 하드웨어 차원에서의 멀티미디어 처리 지원이 PC만치 범용적이지 않기 때문에, 아무 동영상이나 여유롭게 재생하지는 못한다.

(4) 그리고 2차 전지: 스마트폰은 냉장고처럼 24시간 켜져 있는 물건이다. 그런데 그걸 옛날 휴대용 전자 기기들처럼 1.5V짜리 건전지를 주기적으로 갈아 끼우면서 사용해야 한다면 정말 끔찍할 것이다. 게다가 그 물건들은 지금 건전지의 용량이 얼마나 남았는지 같은 것도 나오지 않고, 그냥 예고 없이 픽 꺼져 버리고 안 켜지곤 했다.

철도에서는 전기 기관차가 디젤로는 도저히 넘볼 수 없는 괴력을 자랑하면서 수십 량의 화차를 견인하는 차력쑈를 펼치고 있다. 1만 마력이 넘는 힘으로 시속 300으로 달리는 KTX도 전기로 달린다.
하지만 이건 레일을 따라 전차선이 있으니까 가능한 일이지, 배터리만으로 도로의 대형 버스나 트레일러의 동력원이 전기 모터로 대체되는 건 요원한 일이다.

배터리는 콘센트를 꽂을 수 없는 환경에서 인류가 사용하는 기계 중에 인력과 기름을 쓰지 않는 나머지 모든 것들의 동력을 책임진다고 해도 과언이 아니다.
특히 공기 중의 산소를 조달할 수 없는 곳에서 동작하는 기계는, 연료에 산화제가 같이 동봉된 로켓을 사용할 게 아니라면 전기밖에 선택의 여지가 없다. 월면차라든가 심해 잠수함 말이다. 산소는 물론이고 태양 자체로부터 한없이 멀어지는 외행성 탐사선은 아예 원자력 전지를 사용해야 한다.

내가 알기로 배터리는 크게 세 계열로 나뉜다.

(1) 납+황산
그 특성상 자동차(+잠수함) 같은 거대한 동력 기계에서 쓰이지, 최소한 사람이 일상적으로 갖고 다니는 전자기기에서는 볼 일이 없는 물건이다.
용량 대비 재료값이 저렴하지만, 무겁고 자연 방전 잘 되고 충전 속도가 더디며, 일정 수준 이상 방전되면 완전히 망가져서 못 쓰게 된다. (전압이 약해지는 것을 통해 방전을 간접적으로 유추함)
황산 용액은 인체에 위험하지만 그래도 고열로 인한 폭발 위험 같은 건 없다. 자동차가 안 그래도 교통사고와 화재의 위험에 노출된 물건인 걸 감안하면 이건 자동차 배터리로서 큰 장점이다.

(2) 니켈-카드뮴
일명 메모리 효과로 인해, 지금까지도 '완충 완방'이라는 더는 유효하지 않은 편견을 사람들에게 각인시킨 주범이다.
한때 노트북 등 여러 전자기기에서 쓰였지만 요즘은 잘 쓰이지 않는 것 같다. 카드뮴보다 재료 단가가 비싸지만 용량과 수명 등에서 더 유리하고 메모리 효과 단점도 없는 니켈-수소로 대체되었다.

(3) 리튬 이온
일단 소형 전자기기 정도 규모에서는 이만 한 가성비가 없는 만능 소재이다. 에너지 밀도가 아주 높고 메모리 효과 없고, 그러면서 아주 가벼우니 좋다. 하지만 수명이 짧은 편이며, 폭발 위험과 재료 고갈로 인한 조달 문제가 남아 있다.

모든 배터리들은 기온이 매우 낮은 곳에서는 제대로 동작하지 못한다는 공통점이 있으며, 참 안타깝지만 반영구적으로 쓸 수 있는 물건이 아니라는 공통점도 있다. 충전과 방전을 수백· 수천 회 반복하며 쓰다 보면 최대 충전 가능 용량이 조금씩 감소한다. 그래서 휴대전화나 노트북 PC의 배터리는 몇 년 주기로 교환해 줘야 된다. 화학 반응이 완전히 가역이 아니기라도 한가 보다.

옛날에는 총에 탄창을 교체하듯이 스마트폰의 뒷구멍(?)을 열어서 배터리를 통째로 교체하는 게 가능했는데, 요즘은 주 배터리는 탈착이 가능하지 않은 형태가 됐다. 그 대신 외장형 보조 배터리를 케이블을 통해 연결해야 한다. 이런 관행의 원조는 애플 진영의 아이폰이다. 쟤들은 컴퓨터고 뭐고 온통 일체형으로 만드는 걸 좋아해 왔기 때문이다. 모니터고 본체고 배터리고 몽땅 분리 불가능한 일체형..

이런 2차 전지, 일명 배터리들은 재충전 가능한 화학 전지를 말한다. 배터리와 비슷하면서 다른 물건으로는 다음과 같은 것들이 있다.

(1) 축전기(일명 콘덴서)
얘는 화학 반응 없이 찰나의 전기 에너지 자체를 찔끔 저장하고 있다가, 고전압의 전하 형태로 순식간에 찌릿 방출하는 물건이다. 극초소용량에 초고속 충전· 방전되는 배터리와 비슷하다. 그러니 전력을 축적하는 용도보다는 다른 전자 기기 내부의 부품으로 쓰이곤 한다.
스타크래프트에서 프로토스의 실드 배터리는.. 실드를 전기 에너지처럼 취급해서 마치 축전기처럼 보충하는 형태에서 모티브를 딴 듯하다.

(2) 건전지
2차 전지(배터리)의 반의어로서 충전 불가능한 1회용 1차 전지를 가리킬 때 '건전지'라는 용어가 쓰이는 것 같다. 하지만 이 단어 자체는 '습전지'의 반의어이기 때문에 충전 가능 여부가 함축되어 있지는 않다. 둘 다 똑같이 화학 전지인데, 자동차 배터리처럼 황산 용액이 출렁거리는 게 아니라 전해액을 종이 같은 데에 흡수시켜서 곧장 줄줄 흐르지 않게 했다는 뜻일 뿐이다.

망간-아연 전지가 대표적인 건전지요 1차 전지이긴 하다. 하지만 엄밀히 말하면 2차 전지 중에도 건전지 형태인 물건이 있다.
시계 같은 데에 들어가는 일명 '단추형 소형 건전지'라는 것도 있는데 얘들은 대체로 재충전 가능하지 않은 1차 전지이다. 옛날에는 수은 건전지가 많이 쓰였지만 요즘은 수은이 몸에 안 좋고 위험하다는 이유로 인해 온도계로도, 건전지로도 모두 퇴출된 지 오래다. 유연휘발유, 프레온 가스, 석면처럼 말이다.

건전지 얘기가 나왔으니 말인데, 난 개인적으로 건전지를 갈아 끼우면서 써야 하는 무선 마우스는 너무 불편하다. 왜 저런 걸 만들었는지 모르겠다고 느껴질 정도이다. 평소에 충전 가능하게 마우스 거치함이라도 만들어 놓든가 하지..

(3) 연료 전지
얘는 연료를 사용하여 전기를 만들어 내긴 하는데, 연료를 태워서 운동 에너지로 발전기를 '돌리는' 방식이 아니다. 그렇다고 화학 전지처럼 연료(?)의 화학적인 전위차를 이용해 축적돼 있던 전기를 뱉어 내는 것도 아니니 그 특성을 말하기가 좀 뭣하다.
현재로서는 산소와 수소를 이용해서 전기 분해의 정반대 메커니즘으로 물과 전기를 만들어 내는 게 가장 기본적인 형태라고 한다.

말 그대로 연료의 형태이므로 차에 기름 넣듯이 매우 빠르게 충전을 할 수 있고 자연 방전 걱정이 없다는 점, 시끄러운 엔진 가동 없이 전기를 얻을 수 있다는 점이 아주 매력적이다. 화학 전지 기반의 기존 배터리가 넘볼 수 없는 장점이 있지만 얘 역시 수소의 보관, 백금 촉매의 가격 등 여러 문제 때문에 압도적인 대안 역할은 아직까지 못 하고 있다.
더티한 탄소가 달라붙은 통상적인 탄화수소 계열이 아니라 수소 자체를 곧장 반응시킬 수만 있다면 참 깨끗한 무공해 에너지원 역할을 할 수 있겠지만.. 어려운 일이다.

국내에서 현대 자동차가 수소 연료 전지 차량의 연구 개발에 비상한 관심을 갖고 있다고 한다. 휘발유 엔진은 배기가스의 정화, 즉 후처리를 위해서 백금 촉매 변환 장치를 사용하는데, 수소 엔진은 산· 수소의 반응이라는 본업의 촉진을 위해서 백금 촉매를 사용하니 촉매의 비중이 더 클 것이다.

참고로 수소로 달리는 자동차는 수소 연료 전지 기반뿐만 아니라, 수소 자체를 연소시키는 내연기관 기반도 별개로 있다. 개념적으로 서로 다른 물건이다. 비록 반응의 부산물로 둘 다 물이 나오는 건 동일하지만 말이다. 수소는 로켓 엔진에도 이미 사용되고 있는데 그게 연료 전지 기반은 아닐 것이다.

그리고 말이 나왔으니 말인데, 연료를 태워서 발전기를 돌리는 방식도 다 같은 게 아니다. 교통수단들이나 다른 소형· 이동식 발전기들은 말 그대로 내연기관이 장착되어서 엔진의 회전력으로 발전기를 곧장 돌리지만, 거대한 화력 발전소에는 외연기관인 보일러와 증기 터빈이 있다. 화력 발전소는 석유보다도 석탄을 더 많이 활용하니 말이다.
과거의 증기 기관차는 석탄과 물을 주기적으로 보충해야 했던 반면, 화력 발전소에서는 한번 터빈을 통과했던 수증기를 수집· 냉각 후에 계속 재활용한다고 한다.

(4) 원자력 전지
원자력 발전소는 열의 근원이 석탄· 석유가 아니라 방사성 원소의 붕괴 에너지라는 차이가 있을 뿐, 물을 끓이고 터빈을 돌려서 전기를 생산한다는 점은 화력 발전과 동일하다. 그에 반해 원자력 전지는 열전 효과(Seebeck effect)를 이용해서 전기를 생산한다.

이렇게 자료를 모아 보니, 통상적인 화학 전지나 교류 발전기, 심지어 광전지 말고도 전기를 비축하거나 생산하는 방식은 다양하다는 걸 알 수 있다.
오늘날의 원자력 발전은 다 20세기 초· 중반에 발견되고 규명된 '핵 분열' 원리를 이용하며, 그것도 그 에너지 자체를 곧장 전기로 바꾸는 게 아니라 열로 물 끓여서 터빈을 돌리는 용도로 간접적으로만 사용한다.

핵 분열을 넘어 태양 같은 항성들의 동력원이기도 한 '핵 융합'을 인간이 직접 제어하고 활용할 수 있게 되면 훨씬 더 많은 에너지를 더 안전하게 얻을 수 있을 것으로 기대된다. e=mc^2의 형태 그대로 뽕을 뽑을 수 있게 된다. 핵 융합의 원료 자체는 그야말로 주변에 무한에 가깝기 때문이다. (예: 중수소는 바닷물..) 사실, 원자 폭탄과 수소 폭탄이 구조적인 차이도 핵 분열과 핵 융합이다.

하지만 핵 융합을 일으키기 위해 필요한 엄청난 고온 고압 환경이 아무나 쉽게 만들 수 있는 게 아니기 때문에 발목을 잡고 있다. 이건 뭐 초전도 상태를 만들기 위한 극저온과 반대편 극단의 영역이 아닌가 생각된다.
핵 융합, 무선 송전, 직류 고압 송전... 가능하다면 요 세 개가 아마 2020년대 인류의 생활을 바꿔 놓을 과학 기술 떡밥으로 남을 듯하다. 과거의 괴수 전기 공학자 테슬라는 무선 송전을 어느 정도 실현도 했던 것 같지만, 직류 고압 송전은 자기 관심 분야가 아니었지 싶다.

Posted by 사무엘

2018/09/17 08:35 2018/09/17 08:35
, , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1533

어휘 관련 여러 생각들

1. 빛과 색

본인은 기업 이미지 광고의 최고봉으로 2006년쯤, 동요풍의 한전 CM송 "빛으로 만드는 세상"을 꼽는다.

"빛이 있어 세상은 밝고 따뜻해~ 우리들 마음에도 빛이 가득해. 빛은 사랑 빛은 행복.."
정말 이걸 누가 작사· 작곡했는지 진지하게 궁금해진다. '유 재광'이라는 사람이 검색되지만, 더 자세한 프로필· 근황이나 다른 활동 내역이 알려진 건 없다. 노래가 딱히 상업적인 분위기가 아니니 초등학생용 동요로 실제로 불리기도 한다.

저 CF의 궁극적인 의도는 그 빛이라는 게 전기 에너지가 있으니까 1년 내내 존재 가능한 것이고, 그러니 전기를 공급하는 우리 한전이 최고... 라는 메시지일 것이다.
21세기를 사는 우리는 백열등과 형광등을 거쳐서 인류 역사상 가장 효율이 높은 전기 광원인 LED등까지 발명하는 지경에 다다랐다. LED 덕분에 그 자그마한 스마트폰에 달린 꼬마전구가 어지간한 휴대용 손전등 역할까지 할 수 있는 것이다.

그래도 굳이 그런 물리적인 빛에 국한시키지 않더라도 성경도 빛에다가는 거의 무조건적으로 긍정적인 심상을 부여하고, 반대로 어둠은 일관되게 나쁘다고 디스한다.
창 1:2에 나오는 어둠, 고후 4:6와 6:14에 나오는 빛과 어둠, 엡 5:8과 살전 5:5에 나오는 '빛의 자녀', 요한일서에서 시종일관 나오는 '빛'... 이루 셀 수 없이 많다. 그러니 "빛으로 만드는 세상" 가사가 신앙적으로도 뭔가 자연스럽게 받아들여진다.

그런데 1950년대에 만들어진 옛날 동요인 "우리들 마음에 빛이 있다면"은 어떨까?
얘도 가사와 곡이 매우 아름다우며 2005년부터 일본의 소학교 음악 교과서에도 실렸을 정도로 명곡이긴 하다만.. 이 곡의 가사는 딱히 광명과 암흑을 비교하는 내용이 아니다. 그냥 "여름엔 파랄 거예요, 겨울엔 하얄 거예요"이다.

저기서 '빛'은 그냥 '색'이라는 의미이다. 한국어는 green과 blue를 별로 구분하지 않고 '푸르다'라는 말을 썼듯이, 심지어 color와 light도 별로 구분하지 않고 '빛'이라는 말을 썼다. 그래서 한자도 光(빛 광)뿐만 아니라 色도 "빛 색"이라고 불렀고, 색깔뿐만 아니라 '빛깔'이라는 말도 있었던 것이다.

즉, 결론적으로 "파란 마음 하얀 마음"의 가사는 "빛으로 만드는 세상"이 아니라 포카혼타스 "Colors of the wind"(바람의 빛깔)와 더 비슷한 공감각적 심상이라고 보면 정확하겠다.
저 동요가 일본어로 번역될 때도 응당 光이 아니라 色이 쓰였다.

영어에 man 남자/사람, good 좋다/선하다, day 낮/날 같은 중의성이 있는 것처럼.. 한국어에도 저 정도 중의성은 감수해야 하는가 보다. 사전만 보고 무식하게 곧이곧대로 번역하다간 실수하기 쉽다.

내 모국어인 한국어는 한편으로 괴상망측해 보이면서도, 한편으로 ㅁ과 ㅂ 대응(어머니 아버지, 물 불, 맑다 밝다, 묽다 붉다)이라든가, 빛과 색의 중의적 관계,
내가 아는 다른 어떤 외국어에서도 발견하지 못한 딱 한 단어짜리 '모르다' 동사,
하필 흑백과 삼원색만 활용 가능한 용언 형태로 말이 존재하는 것을 보면 꽤 심오하다는 생각도 든다.
(잘 알다시피 영어는 '빛'이 '색'이 아니라 '가벼운'과 동음이의어 관계다.)

2. 긍정적인 심상과 부정적인 심상의 구분

'친히'는 화자 내지 주체가 더 높은 사람이라는 뉘앙스가 깔려 있는 걸까, 아니면 꼭 그런 의미 없이 단순히 '내가 직접'이라는 뜻만 있는 걸까? 쉽게 말해 "내가 친히 주님을 만나 보리라" 같은 찬송가 가사는 어법 격식에 어긋난 불경스러운 표현일까, 아닐까?
일단은 전자인 것 같지만 국립 국어원 코퍼스를 뒤져 보면 후자의 용례도 없는 건 아니다.

비슷한 예로 '기념'도 있다. 결혼 기념, 생일 기념, 완공 기념처럼 꼭 긍정적인 사건, 기쁜 소식만 기리는 걸까, 아니면 단순히 중요하고 의미 있고 잊지 말아야 할 일들은 모두 기념의 대상이 될 수 있는 걸까?
이런 인식에 대한 혼란 때문에 일각에서는 당장 '전쟁 기념관'이라는 박물관 명칭부터가 제대로 된 작명인지 이의를 제기하곤 한다. 하긴, 더 심한 예로 '2010년 국권 피탈 100주년 기념'이라고 하면 다소 어색해 보이긴 한다.

그런데 '기념'을 안 쓰면 딱히 다른 대안이 있어 보이지도 않으니 더 난감하다. 전몰자라면 '추모, 추도'라고 표현할 수도 있지만 war memorial은 기념이 아니면 도대체 뭐라고 번역하란 말인가?
사실 이렇게 꼭 긍정적인 뜻으로만 써야 한다, 부정적인 뜻으로만 써야 한다는 식의 제약과 구분은 세월이 흐르면서 문란해지고 없어지는 편이다. '너무'가 아주 대표적인 예이고, 또 '장이'와 '쟁이'의 구분도 비슷하게 슬금슬금 흔들리는 중이다.

3. '우리' (we, our)

한국이라는 나라의 민족 문화는 개인보다 집단, 서열을 좋아한다. 그래서 서구· 영어권에서는 I, my라고 표현할 것도 '우리'라고 표현하는 게 많다. 우리집, 우리나라처럼.. 그래도 영어로도 논문 쓸 때는 내 경험상 we를 의도적으로 썼던 듯하다. 한국어로는 주어가 '나'나 '우리'가 아니라 아예 '본 연구/본 논문' 같은 무생물이 됐을 상황이어서..

그런데, 이렇게 개인주의적인 영어로도 our을 당당히 쓰는 상황이 있으니 바로 '우리 은하'이다. 겨우 집이나 나라가 아니라 우주 차원이다. 인간 중에 이 은하, 아니 태양계조차 벗어나서 사는 개체는 전무하니, 이 정도 되면 단일 집단 의식과 소속감을 갖기에 충분할 듯하다. =_=;;

물론 오글거리는 Our Galaxy 말고 the Galaxy, the Milky Way 같은 말도 쓴다.
영어에서 정관사 the는 아까 언급되었던 그것을 가리키는(a cup -> the cup) 포인터라는 용법은 아주 명백한 반면, 한편으로 보통명사로만 이뤄진 '준' 고유명사를 가리킬 때도 쓰이고(the sun, the Great Wall), 그 명사에 속하는 집단을 가리킬 때도 쓰인다.

그런데 한편으로 완전히 생판 새로운 이름인 고유명사의 앞에는 관사가 붙지 않는다. 이거 무슨 국기에 대한 경례 앞에서만 충성 구호를 생략하는 것처럼 말이다. 한편으로는 정관사가 쓰이는 방식이 원칙이 없고 귀걸이 코걸이 같다는 생각이 들어서 어렵다.;;

4. 정확하게 알고 구분해서 써야 할 한자어들

(1) 전기세가 아니라 전기료가 맞다. 먼저 한전은 엄연히 정부 기관이 아닌 공기업인 관계로, 전기 요금은 세금(稅)이 아니다. 또한 전기는 무형의 에너지일 뿐, 무슨 부동산이나 고가의 장비처럼 임대 형태로(貰) 빌려 사용하는 물건도 아니다. 그러니 수도나 가스처럼 비(費)나 료(料)만 붙으면 된다.

(2) 교육부 노동부 법무부.. 이럴 때는 部를 쓰지만, 입법부 사법부 행정부.. 이럴 때는 府를 쓴다. 전자는 행정부를 구성하는 하위 조직들을 가리키고, 후자는 국가 권력을 지탱하는 세 축의 구성원이다. 뭔가 辭典과 事典의 차이를 보는 듯한 느낌이다.

(3) 이제는 완전히 폐지됐으니 역사 속의 유물이긴 하다만, 사법고시가 아니라 '사법 시험'이 정확한 명칭이다.
옛날에 행정· 기술· 외무 고시는 말 그대로 '고시'였다. 이 고시(高試)라는 말 자체가 무슨 재귀적인 영어 이니셜처럼(GNU is Not Unix ???) 저런 시험을 가리키는 '고등고시(考試)'의 준말이다. 사법 시험도 반세기도 전 옛날에는 고등고시의 사법과에 속했던 시절이 있었지만, 바뀐 게 무려 1963년의 일이다.

한편, 교사를 뽑는 시험도 공식 명칭은 '임용 시험'이다. 임고, 임용고시라고 부를 때도 考試이지, 고등고시의 준말인 高試는 아니다.

(4) 대장은 흔히 우리가 생각하는 집단의 우두머리, chief, leader라는 뜻으로는 한자로 隊長이라고 쓴다. 隊가 특공대, 구급대, 심지어 군대, 소대, 중대 등등의 그 '대'이기 때문이다.
포스타 대장은 大將이니 한자가 완전히 다르다. 여기서는 그냥 장군이 아니라 큰 장군이라는 뜻이다.
의외로 '큰 어른'(大長)이라는 직관적인 한자어는 딱히 안 쓰이는 것 같다. 큰창자를 나타내는 대장(大腸)은 당연히 논외로 하고..

(5) '전쟁/사건 발발' 이럴 때 사용하는 '발발'은 勃發이구나. 설마 發만 두 번 중첩시켜서 發發인가 했는데 그건 아니다. 勃은 한국어 한자어에서 다른 용례가 있긴 한가 모르겠다.

(6) 궤도(軌道)는 동일한 한자로 영어의 orbit과 railway를 모두 의미하기 때문에 주의할 필요가 있다. 천체의 공전 궤도와, 궤조-궤도-선로의 순으로 연결되는 철도 용어는 문맥이 완전히 달라 보이는데 말이다.

(7) 핵 분열(核分裂)도 한자는 동일하지만 '핵'이라는 게 생물학적인 의미도 있고 물리학적인 의미도 있기 때문에 nuclear division (세포)과 nuclear fission (원자 공학)을 모두 포함한다. 예전에 봤던 '고립어'(언어 유형 vs 계통)의 중의성을 보는 것 같다. 동일한 단위가 무게와 부피, 화폐 단위(톤, 달란트..)를 오락가락 하고 열량과 에너지(칼로리..)를 오락가락 하는 것과도 비슷하게 느껴진다.

(8) 배터리에다 전기 에너지를 보충하는 것도 충전이고 교통 카드에 돈을 보충하는 것도 충전인 게 개인적으로 좀 의아하게 느껴진다. 이 경우 한자는 물론 다르다. 후자는 혹시 돈 전(錢)을 쓰기라도 하느냐 하면 그렇지는 않다. 塡이라는 다른 생소한 한자가 쓰인다. 영어로는 전반적으로 charge, load, replenish 이런 뜻이다.

5. 나머지 생각들

(1) 귤과 오렌지, 회전 교차로와 로터리처럼.. 동일 개념에 대한 외래어와 순화어 관계인 게 아니라, 실제로는 가리키는 개념이 서로 미묘하게 다른 것들이 세상에 많다. 이런 예가 얼마나 더 있으려나 궁금하다.

(2) 교통사고 뉴스 보도를 시청하다 보면 "이 사고로 승용차는 형체를 알아볼 수 없을 정도로 완전히 찌그러졌으며..." 이런 표현을 자주 듣는다.
'형체를 알아볼 수 없을 정도로'라는 길고 긴 부사구를 좀 간결하게 표현할 수 없을까? 저 표현을 영작을 했다면 이렇게 장황하고 길지 않을 것 같다. ****ly 같은 미지의 한 단어로 간단하게 끝나지 않을까?
언론에서 '평당' 대신에 '3.3제곱미터당'이라고 말하는 게 참 바보 같고 부자연스럽고 불편해 보이는 것처럼 말이다.

(3) 알맹이는 '-맹이'인데 돌멩이는 '-멩이'인 게 문득 굉장히 이상하게 느껴지며, 서로 어떤 어원의 접미사가 붙은 것인지 진지하게 궁금해진다.
또한 어미 '-려고', '-러'도 정확한 용도 구분이 모호하게 느껴질 때가 있다. '-려고'가 그냥 '-려'로 줄어드는 게 가능하기 때문이다.

Posted by 사무엘

2018/09/14 08:33 2018/09/14 08:33
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1532

1. 파일 포맷 분석

얼마 전에 본인은 Windows용 MS 한글 IME가 내부적으로 사용하는 한자 사전 파일의 분석을 시도한 적이 있었다.
그 결과 파일의 내부 구획과 구조가 상당수 파악되었다. 해당 프로그램이 한글 독음으로부터 한자 정보를 어떻게 얻어 오고 한자로부터 독음, 부수, 획수 등의 정보를 어떻게 얻는지까지도 모두 알아 냈다.
정체를 알 수 없는 구조체들의 숫자들이 의미하는 것도 규칙성을 파악해서 과반은 해독했다. 데이터가 대놓고 압축이나 암호화가 돼 있지는 않은 덕분이었다.

하지만 제일 중요한 문자열 단어 단위로 저장된 정보들은 끝내 얻지 못했다.
이런 것들을 저장하는 용도로 동일한 포맷의 spell trie/tree 같은 게 여러 개 있는데, 이 중에서 가장 간단하고 작은 형태의 테이블을 얻었으며(노드 몇백 개짜리..) 이걸 풀이해 낸 레퍼런스 결과물까지도 역으로 얻었다.
다시 말해 이 작은 테이블로부터 저 결과물이 어떻게 나오는지 그 방식만 알아낼 수 있으면 나머지 진짜 해독해야 하는 더 방대한 테이블까지 사실상 몽땅 해독이 가능해진다.

여기까지 진행됐는데도 더 나아가는 건 도저히 무리였다. 그 이상부터는 각 노드와 노드가 어떻게 연결돼서 한자어나 한자어 훈이 나오는지.. 탐색을 어디부터 시작해야 할지, 단서를 어디서 얻을 수 있을지 추적이 되질 않았다.
지금까지 투입한 시간이 참 아깝기도 했지만 어쩔 수 없이 여기서 눈물을 머금고 포기하게 됐다. 이게 제일 중요한 정보였는데 말이다.

마소의 한국어 IME야 일본어 IME의 내부 구조의 영향을 받은 게 굉장히 많은데, 저 파일의 자료구조 역시 일본어 IME의 DB 내부 구조를 아는 사람에게는 절대로 낯선 형태가 아닐 것이라고 짐작만 해 본다.
답답한 마음에 MS 한글 IME의 내부를 디버깅까지 해 봤다. 그래 봤자 아무 디버깅 단서가 없는 복잡한 0과 1 기계어 천지 속에서 의미 있는 결과가 나오지는 못했고, 단지 쟤들이 DB 파일 전체를 memory mapped file로 걸어서 사용한다는 결론만을 얻을 수 있었다.

아, 내가 갑자기 이거 추적을 한 이유, 동기, 계기는 뭐냐 하면..
날개셋 한글 입력기에서 '조합 안에 조합 생성' 입력 도구를 사용해 봤는데, MS IME의 API를 사용하는 한글-한자 단어 변환 기능이 유난히 동작이 느리고 랙이 심한 걸 발견했기 때문이다. 실제로 테스트를 해 보니 MS IME API는 주어진 한글 단어로부터 한자어를 얻는 게 수십 ms 이상이 걸릴 정도로 느린 편이었다.

그래서 DB 파일 포맷을 알면 내가 저 파일로부터 한자어 리스트를 직접 더 빨리 얻을 수도 있지 않을까 하는 무모한 도전을 해 봤는데.. 뭐 소기의 목적을 다 이루지는 못했다. 파일의 전체 구조가 어떨지 궁금하다.
다만, 내 추측에 따르면 내부의 파일 구조가 검색에 그렇게 효율적인 형태는 아닌 것 같다. 짐작건대 수백~수천 회 이상의 선형 검색이 발생하기라도 하지 않나 싶다.

뭔가, 남이 짜 놓은 C/C++ 코드를 읽는 것뿐만 아니라 이렇게 복잡한 바이너리 파일 구조를 읽으면서 오프셋을 따라가고 추적하는 것..
메모리와 레지스터, 스택 상태를 살피면서 남이 짜 놓은 프로그램을 디버거로 분석하는 것은 프로그래머 내지 소프트웨어 엔지니어로서 필요한 또 다른 스킬인 것 같다.

2. 매크로/스크립트 기능

어느 정도 규모가 있는 업무용 프로그램에는 일괄 처리와 자동화를 위한 매크로 기능이 있다. 도스 시절에는 key 매크로가 많이 쓰였지만, 그건 요즘 같은 GUI 운영체제의 사정에는 잘 맞지 않기 때문에 스크립트 기반으로 가는 추세이다.
어떤 형태로든 이런 기능은 어느 프로그램에서나 어렵지만 강력한 고급 기능으로 취급받곤 한다.

헥사(바이너리) 에디터에 이런 프로그래밍 기능이 있어서 열어 놓은 파일 전체를 거대한 바이트 배열로 접근 가능하고 현재 cursor 위치가 인자로 주어진다면..
여기서부터 분석을 시작했을 때 구조체에 채워지는 값, 여기서 몇 오프셋에 있는 값만치 이동한 곳에 있는 다른 구조체의 값 등등... 을 출력하는 스크립트를 작성할 수 있고 이걸 이용하면 아까 같은 바이너리 파일 읽기나 역공학, 디버깅 같은 작업을 아주 수월하게 할 수 있을 것이다.

그래픽 에디터도 마찬가지다. 2차원 그래픽 툴은 디자이너가 보는 관점과 프로그래머가 보는 관점이 약간 차이가 있다.
프로그래머는 새로운 그림을 그린다기보다는 화면 캡처나 기존 그림을 보정하는 용도로 이런 프로그램을 사용한다.

그렇기 때문에 좌표 같은 걸 매번 마우스로 힘들게 지정하는 게 아니라.. '정확하게 이 구간의 화면 캡처를 몇 번 하라, 색깔이 이런 조건을 만족하는 구간의 테두리를 짤라내라' 이런 명령은 프로그래밍 가능한 체계가 있으면 매우 도움이 된다.
뭐, 거대한 2차원 캔바스에 공식만으로 기하학적인 그림을 그리는 프로그래밍은 덤이고 말이다.

또한 요즘 그래픽 데이터에는 픽셀이 RGB로만 구성된 게 아니라 알파 채널이란 게 있다. 이건 RGB처럼 색깔을 유일하게 구성하는 요소가 아니라 색깔에 추가적으로 붙는 정보이다.
이건 색깔 자체가 아니다 보니 편집하는 방식이 에디터마다 통일돼 있거나 일관성이 있지가 않다. 색깔은 전혀 안 건드리고 알파만 50%로 할지, 아니면 색깔도 건드리면서 알파도 건드릴지, 기존 알파값에다 상대적으로 알파를 더할지 같은 것 말이다.

이런 식으로 일정 구역이나 조건을 만족하는 픽셀에 대해 알파값을 일관되게 고치고 싶을 때 프로그래밍 기반 매크로가 있으면 굉장히 유용하다.
포토샵 같은 그래픽 에디터를 띄웠는데 화면 하단에 마치 옛날 QuickBasic의 immediate 윈도우처럼 그림을 명령어로 조작하는 입력란이 있다면.. 뭔가 그래픽 에디터답지 않은 공대감성이 느껴질 것 같다. =_=;;

3. 개체에 대한 드래그 좌표의 자동 보정

2차원 공간에서 사각형 형태의 여러 개체들을 만들고 배치하는 기능이 있는 프로그램을 생각해 보자. 벡터 드로잉 기능이 있는 파워포인트나 워드 프로세서 같은 프로그램들이 떠오를 것이다.
그리고 일반인이 쓸 일은 잘 없겠지만 개발툴에 내장돼 있는 대화상자/폼 디자이너도 좋은 예이다.

요즘은 그런 프로그램들이 워낙 똑똑해진지라, 개체를 하나 클릭해서 몸통을 마우스로 끌어 보면 개체가 그냥 곧이곧대로만 움직이지 않는다. 옆이나 위의 주변 컨트롤과 나란히, 가지런하게 배치되게 반경 n픽셀 이내의 대충 비슷한 위치를 방황하고 있으면 프로그램이 알아서 '요기?'라고 가이드라인을 제시해 준다.

그 상태에서 마우스 왼쪽 버튼에서 손을 떼면 프로그램이 제시한 정확한 위치에 개체가 달라붙는다. Shift나 Alt 같은 modifier key를 누른 상태로 마우스를 끌어야 그런 보정 위치가 아니라 곧이곧대로 마우스 포인터가 있는 위치에 개체가 자리잡게 된다. Ctrl은 드래그 하는 개체에 대해서 이동/복사 모드를 전환하는 key이니까..

Visual Basic/C# .NET이 제공하는 폼 편집기는 Visual C++이 제공하는 구닥다리 rc 파일 기반의 재래식 대화상자 편집기보다 훨씬 더 똑똑하기 때문에 주변 컨트롤의 위치들을 토대로 온갖 방식으로 자동 달라붙기를 시도해 준다.
xcode도 만만찮았던 걸로 기억한다.

개인적으로는 이런 부류의 기능이 비트맵 그래픽 에디터에도 있으면 좋겠다는 생각을 한다.
그림의 일부 영역을 select할 때.. 색깔이 급격하게 변하는 경계 근처에 가 있으면 정확하게 보정된 위치에 착 달라붙게 프로그램이 보정 위치를 자동으로 제시하는 것 말이다. 그래서 사용자가 불편하게 이미지를 확대해서 조심스럽게 다루지 않아도 되게 말이다.

물론 방대한 크기의 비트맵으로부터 그런 경계 패턴을 인식하는 것은 많아야 수십 개의 개체 좌표값만 계산하면 되는 벡터 드로잉이나 대화상자 폼 편집기보다 힘든 일일 것이다. 그리고 그래픽 에디터라는 게 프로그래머보다는 디자이너가 더 자주 다루는 물건이고, 디자이너는 컴퓨터스럽고(= 도트 노가다 지향적이며) 경계 구분이 분명하고 기하학적인 이미지보다는... 실물 사진을 더 많이 다룰 테니, 수지가 안 맞아서 저런 기능이 들어가지는 않을 것이다. =_=;;

4. 디버깅과 범죄 수사의 유사점

혼자 오랫동안 해 온 생각인데..
강력 범죄 수사랑 컴퓨터 프로그램 디버깅은 절차와 성격 면에서 서로 좀 비슷한 구석이 있어 보인다.
사건이 발생했다는 112 신고는 프로그램에서 무슨 문제가 발생했다는 버그 신고와 같다.
핏자국, 시신, 어지럽혀진 사건 현장 같은 건 프로그램이 뻗은 모습 내지 각종 디버그 로그와 메모리 덤프에 대응한다.

경찰이 사건을 재구성하고 원인을 추적하는 건 두 말할 나위 없이 프로그래머가 동일 상황을 재현해서 버그를 발견하려고 애쓰는 것과 같다.
버그를 잡는 건 당연히 범인 검거이다. 반대로 미제 상태로 공소시효가 끝나는 건 버그를 못 잡은 채로 해당 프로그램의 지원 내지 버전업이 끝나는 것과 같다.

예전에 본인은 법조인이 컴퓨터 프로그래밍과 비슷한 구석이 있다고 글을 쓴 적이 있는데..
형사가 범죄 현상에서 이상한 것 하나라도 놓치지 않고 실마리를 발견하여 사건을 해결하는 능력은 프로그래머의 디버깅 능력과 일맥상통하는 구석이 있어 보인다. 음, 그러고 보니 그걸 한 단어로 추리력이라고 부르는구나.

5. 롤러코스터

2008년 3월, 에버랜드에는 'T 익스프레스'라고 세계구급의 목재 롤러코스터가 개장했다.
그리고 그로부터 10년 뒤인 지난 2018년 5월, 경주월드에서는 낡은 기존 롤러코스터이던 '스페이스 2000'을 철거하고 '드라켄'이라는 더 높고 짜릿한 신기록급 롤러코스터를 개장했다.

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

선박이나 건물뿐만 아니라 롤러코스터를 봐도 목재와 철재의 차이를 알 수 있어 보인다.
목재인 T 익스프레스는 무슨 비행기도 아닌 것이 운행하는 데 날씨 제약을 많이 받으며 혹한기 동계 휴무도 있으며.. 또 결정적으로 빽빽한 지지대들을 설치하느라 층 위에 층을 놓을 수 없다. 롤러코스터 하면 생각나는 배배 꼬인 나선형 선로조차도 만들 수 없다.

항공 사진에서 복층으로 입체 교차하는 듯이 보이는 일부 구간은 거기에만 부득이하게 금속 기둥과 지지대가 예외적으로 조금 설치돼 있다.
그에 반해 드라켄은 얼마나 뻥 뚫린 황량한 형태인지..?? =_=;; 저런 걸 목재로는 구현할 수 없다.

층 위에 층을 만들 수 없는 게 프로그래머의 눈으로 보기엔 무슨 과거 Doom 엔진 기반의 맵 같다. 물론 Doom 엔진으로는 경사진 바닥도 표현할 수 없긴 하다만.. (오로지 평평한 바닥만)
3D 맵으로 뫼비우스의 띠나 클라인 항아리 같은 걸 편법으로라도 구현할 수 있으려나 모르겠다.. ^^

Posted by 사무엘

2018/09/11 08:34 2018/09/11 08:34
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1531

1. R-value 임시 객체를 일반 참조자 형태로 함수 인자로 전달하기

C/C++ 프로그래밍 요소 중에는 잘 알다시피 & 연산자를 이용해서 주소를 추출할 수 있으며 값 대입이 가능한 L-value라는 게 있고, 그렇지 않고 값 자체만을 나타내는 R-value라는 게 있다.
C언어 시절에는 R-value라는 게 함수의 리턴값이 아니면 프로그램 소스 코드 차원에서 리터럴 형태로 하드코딩되는 숫자· 문자열밖에 없었다. 하지만 C++로 와서는 생성자와 소멸자가 호출되는 클래스에 대한 임시 인스턴스 개체도 그런 범주에 속할 수 있게 되었다.

다른 변수에 딱히 대입되지 않은 함수의 리턴값 내지, 변수로 선언되지 않고 함수의 인자에다가 곧장 Class_name(constructor_arg) 이런 형태로 명시해 준 객체 선언은 모두 R-value이다.

R-value를 그 타입에 대한 포인터형으로 함수 인자로 전달하는 것이야 가능하지 않다. 주소를 얻을 수 없으니 말이다. C/C++에 &100 이런 문법 같은 건 존재하지 않는다.
하지만 참조자는 외형상 값으로 전달하는 것과 동일하기 때문에 저런 제약이 없다. 그런데 참조자가 내부적으로 하는 일은 포인터와 완전히 동일하다. 그럼 뭔가 모순/딜레마가 발생하지 않을까?

이런 오류를 막기 위해, R-value를 일반 참조자형으로 전달하는 것은 원래 금지되어 있다. 참조자 내지 포인터는 자신이 가리키는 대상이 당연히 대입 가능한 L-value라는 것을 전제로 깔기 때문이다.
임시 개체를 함수 인자로 전하려면..

  • 그냥 값으로 전달해야 한다. 이 방법은 객체의 크기가 크거나 복사 생성자에서 하는 일이 많다면, 성능 오버헤드가 우려된다.
  • 아니면 const 참조자형으로 전달해야 한다. R-value는 대입이고 변경이고 불가능한 놈이니 const 제약을 줘서 취급하는 것이 이치에 맞다.
  • 아니면 얘는 임시 R-value이지만 값이 보존되지 않아도 아무 상관 없다는 표식이 붙은, C++11의 R-value 참조자 &&를 써서 전달하면 된다.

사실, 정수 같은 아주 작고 간단한 타입이라면 모를까, 커다란 객체는 임시 객체라 해도 어차피 자신만의 주소를 갖고 있는 것이나 다름없다.
그래서 그런지 Visual C++은 200x 언제부턴가 R-value를 통째로 일반 참조자로 전달하는 것을 허용하기 시작했다. xcode에서는 에러가 나지만 Visual C++은 컴파일 된다. 이렇게 해 주는 게 특히 템플릿을 많이 쓸 때 더 편하긴 하다. VC++도 내 기억으로 6.0 시절에는 안 이랬다.

사실, 이걸 허용하나 안 하나.. &로 전달하나 &&로 전달하나 컴파일러 입장에서는 크게 달라지는 게 없다. 템플릿 인자로 들어간 타입이 객체가 아니라 정수라면 좀 문제가 되겠지만 어차피 C++은 서로 다른 템플릿 인자에 대해서 같은 템플릿을 매번 새로 컴파일 하면서 코드 생성과 최적화를 매번 새로 하는 불편한(?) 언어이다. 그러니 각 상황별로 따로 처리해 주면 된다.
물론 R-value 참조자가 C++에 좀 일찍 도입됐다면 Visual C++이 저런 편법을 구현하지 않아도 됐을 것 같아 보인다.

2. C++에서 함수 선언에다 리턴 타입 생략하기

엄청 옛날 유물 얘기이긴 하지만.. Visual C++이 2003 버전까지는 아래 코드가 컴파일이 됐었다는 걸 우연한 계기로 뒤늦게 알게 됐다. 바로 함수를 선언· 정의할 때 리턴 타입을 생략하는 것 말이다.

class foo {
public:
    bar(int x); //생성자나 소멸자가 아닌데 클래스 멤버 함수의 리턴 타입을 생략!! 여기서는 경고는 뜸
};

foo::bar(int x) //여기서도 생략했지만 그래도 int로 자동 간주됨
{
    return x*x;
}

main() { return 0; }

C++은 본격적인 클래스 다루는 거 말고 일상적인 코딩 분야에서 C와 달라지는 차이점이 몇 가지 있다. 그 차이점은 대부분 C보다 type-safety가 더 강화되고 엄격해진다는 것이다.

  • 임의의 type의 포인터에다가 void*를 대입하려면 형변환 연산자 필수. (경고이던 것이 에러로)
  • 함수도 prototype을 반드시 미리 선언해 놓고 사용해야 함. (경고이던 것이 에러로)
  • 그리고 함수의 선언이나 정의에서 리턴 타입을 생략할 수 없음. 한편, 인자 목록에서 ()은 그냥 임의의 함수가 아니라 인자가 아무것도 없는 함수, 즉 void 단독과 동치로 딱 정립됨.
  • 그 대신 C++은 지역 변수(+객체)를 굳이 {} 블록의 앞부분이 아니라 실행문 뒤에 아무 데서나 선언해도 된다.

이 개념이 어릴 적부터 머리에 완전히 박혀 있었는데, VC6도 아니고 2003의 컴파일러에는 C의 잔재가 아직 저렇게 남아 있었구나. 몰랐다.
cpp 소스에다가도 int main()대신 main()이라고 함수를 만들어도 되고, 심지어 클래스의 멤버 함수에다가도 리턴 타입을 생략할 수 있었다니... 완전 적응 안 된다.

물론 익명 함수(일명 람다)를 선언할 때는 꼭 리턴값 타입을 안 써 줘도 된다. void나 int 같은 간단한 것은 함수 내부의 return문을 통해서 컴파일러가 그럭저럭 유추해 주기 때문이다.
함수형이라는 완전히 다르고 새로운 패러다임이 C++에 한참 뒤에 추가되다 보니 일관성이 깨졌다면 깨진 듯이 보인다.

3. C/C++ 컴파일러 및 언어 문법 자체의 변화

내 경험상, 지난 2000년대에는 Visual C++ 컴파일러의 버전이 올라가면서 명칭의 scope 인식이 좀 더 유연해지곤 했다.
가령, 클래스 A의 내부에 선언된 구조체 B를 인자로 받는 멤버 함수 C의 경우, C의 몸체를 외부에다 정의할 때 프로토타입 부분에서 B를 꼭 A::B라고 써 줘야 됐지만, VC6 이후 버전부터는 그냥 B라고만 써도 되게 됐다.

람다가 최초로 지원되기 시작한 미래의 VC++ 2010에도 비슷한 한계가 있었다.
클래스 멤버 함수 내부에서 선언된 람다 안에서는 그 클래스가 자체적으로 정의해 놓은 타입이나 enum값에 곧장 접근이 안 됐다. A::value 이런 식으로 써 줘야 했는데.. 2012와 그 후대 버전부터는 곧바로 value라고만 써도 되게 바뀌었다. 2012부터 람다가 함수 포인터로 cast도 가능해졌고 말이다.

내 기억이 맞다면 템플릿 인자가 공급된 템플릿 함수가 함수 포인터로 곧장 연결되는 게 VC++ 2003쯤부터 가능해졌다. 상식적으로 당연히 가능해야 할 것 같지만 VC6 시절에는 가능하지 않았었다.
2000년대가 generic이라면 2010년대는 functional 프로그래밍이 도입된 셈이다.

아.. 또 무슨 얘기를 더 할 수 있을까?
C는 옛날에, 원래 처음에 1980년대까지는 K&R 문법인지 뭔지 해서 함수의 인자들의 타입을 다음과 같이 지정할 수도 있었다고 한다.

int foo(a, b) int a; float b; { return 0; }

같은 명칭을 이중으로 명시하고 체크하느라 괜히 분량 길어지고 파싱이 힘들어지고..
무슨 Ada나 Objective C처럼 함수를 호출할 때 foo(b=20, a=1)처럼 인자들 자체의 명칭을 지정하는 것도 아닌데..
저 문법이 도대체 무슨 의미가 있고 왜 저런 게 존재했는지 나로서는 좀 이해가 안 된다. C는 파이썬 같은 dynamic 타입 언어도 전혀 아닌데 말이다.

C 말고 C++도 1980년대까지는 문법이나 라이브러리가 제대로 표준화되지도 않았었고, 지금으로서는 상상하기 어려운 관행이 많았다고 한다. 유명한 예로는 소멸자가 존재하는 클래스 객체들의 배열을 delete 연산자로 제거할 때는 원소 개수를 수동으로 공급해 줘야 했다거나, static 멤버를 선언한 뒤에 굳이 몸체를 또 정의할 필요가 없었다거나 하는 것 말이다.

사실, 후자의 경우 또 정의할 필요가 없는 게 더 직관적이고 프로그래머의 입장에서 편하긴 하지만.. 컴파일러와 링커의 입장에서는 생성자 함수를 호출하는 실행문이 추가되는 부분이 따로 들어가는 게 직관적이니 불가피하게 생긴 변화이긴 하다.
이런 저런 변화가 많은데 C++은 표준화 이전의 격변의 초창기 시절에 대한 자료를 구하기가 어려워 보인다.

객체를 생성하는데 메모리 주소는 정해져 있고 거기에다 생성자 함수만 호출해 주고 싶을 때..
지금이야 placement new라는 연산자가 라이브러리의 일부 겸 사실상 언어의 일부 요소로 정착해서 new(ptr) C라고 쓰면 되지만, 옛날에는 ptr->C::C() 이런 표기가 유행이었다. . ->를 이용해서 생성자와 소멸자 함수를 직접 호출하는 건 지금도 금지되어 있지는 않지만.. 사용이 권장되는 형태는 아닌 듯하다.

4. macOS와 Windows의 관점 차이

macOS의 GUI API(Cocoa)와 Windows의 GUI API는 뭐 뿌리나 설계 철학에서 같은 구석을 찾을 수 없을 정도로 완전히 다르다.
좌표를 지정하는데 화면이 수학 좌표계처럼 y축이 값이 커질수록 위로 올라가며, NSRect는 Windows의 RECT와 달리 한쪽이 절대좌표가 아니라 상대좌표이다. 즉, 두 개의 POINT로 구성된 게 아니라 POINT와 SIZE로 구성된 셈이다.

또한 Windows의 사고방식으로는 도저히 상상할 수 없는 float 부동소수점을 남발하며, 처음부터 픽셀이라는 개념은 잊고 추상적인 좌표계를 쓴다. 얘들은 이 정도로 장치· 해상도 독립적으로 시스템을 설계했으니 high DPI 지원도 Windows보다 더 유연하게 할 수 있었겠다는 생각이 들었다.

그리고 대화상자나 메뉴 같은 리소스를 관리하는 방식도 둘은 서로 다르다.
Windows는 철저하게 volatile하다. 이런 것은 생성되는 시점에서 매번 리소스로부터 처음부터 load와 copy, 초기화 작업이 반복되며, 사용자가 해당 창을 닫은 순간 메모리에서 완전히 사라진다.

그 반면, 맥은 그런 것들이 사용자가 닫은 뒤에도 이전 상태가 계속 남아 있다.
내가 뭔가 설정을 잘못 건드렸는지는 모르겠지만, Windows로 치면 [X]에 해당하는 닫기 버튼을 눌러서 대화상자를 닫았는데도 호락호락 창이 사라지지 않고 DestroyWindow보다는 ShowWindow(SW_HIDE)가 된 듯한 느낌? 대화상자의 이전 상태가 계속 살아 있는 것 같다.

특히 메뉴의 경우 Windows는 내부 상태가 완전히 일회용이다. 메뉴가 화면에 짠 표시될 때가 되면(우클릭, Alt+단축키 등) 매번 리소스로부터 데이터가 로딩된 뒤, 체크 또는 흐리게 같은 다이나믹한 속성은 그때 그때 새로 부여된다.
그 반면 mac에서는 메뉴가 화면에 표시되지 않을 때에도 내부 상태가 쭉 관리되고 있는 게 무척 신기했다.

그러니 개발자는 시간과 여유만 된다면 프로그래밍 언어와 환경을 많이 알면 사고의 범위가 넓어질 수 있고 각각의 환경을 설계한 사람의 관점과 심정을 이해할 수도 있다.
하지만 뒤집어 말하면 프로그래머는 은퇴하는 마지막 순간까지도 공부하고 뒤따라가야 할 게 너무 많다.. -_-;; 이거 하나 적응했다 싶으면 그새 또 다른 새로운 게 튀어나와서 그거 스펙을 또 공부해야 된다.

Posted by 사무엘

2018/09/08 08:37 2018/09/08 08:37
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1530

1. 추억의 산소 드립

먼저 심각한 시사· 정치 분야가 아닌 재미있는 분야부터 생각해 보자.
2007년 12월, 디씨 미연시 갤러리에서 H2O가 뭐냐는 질문이 올라왔다.
미연시란 ‘미소녀 연애 시뮬레이션’이라는 게임 장르 명칭의 준말로, 이름에서 알 수 있듯 굉장히 하앍하앍 오타쿠스러운 명칭이다.

그리고 H2O는 사실 얼마 전인 2006년에 출시된 어느 미연시 게임의 이름이었다. 정확히는 H2O - Footprints in the sand이라고..
질문자가 의도한 정답은 저것이었다. 허나, 어느 눈치 없거나 장난기 발동한 네티즌이 ‘물이잖아?’이라고 동문서답 또는 개드립을 쳤다.. 거기까지는 괜찮았다.

그런데, 바로 그 와중에 어느 용자께서 너무 당당하게
“병시나 산소
문과 출신인 나도 알고 있음”

이라고 확인사살을 해 버렸다.
그냥 산소라고 평범하게 실수를 한 것도 아니고, “그것도 모르냐 이 ㅂㅅ아”라는 면박 뉘앙스를 팍팍 담아서, 자신의 학력과 전공을 당당히 인증까지 하면서..
자기 무덤 속으로, 물 안 담긴 풀장 아래로 장렬하게 자폭 다이빙을 해 버렸다..ㅠㅠㅠ

그럼 그렇지. 무슨 오비탈이 어떻고 공유결합 수소결합, 반 데르 발스 힘 이런 건 문과 출신이 알 수 없겠지만,
H2O가 무슨 물질인지쯤은 문과 출신도 당연히 알지~!!

사용자 삽입 이미지

당사자는 곧 실수를 깨닫고 몇 분 후 글을 황급히 지웠으나, 겨우 그 짧은 시간 동안 캡처 화면은 이미 전국으로 퍼졌다. 쌀은 쏟고 주워도 한번 내뱉은 말은 주워담을 수 없으며, 이런 댓글도 도로 거둬갈 수 없었다.

H2O 산소 드립은 그로부터 10여 년이 지난 지금까지도 종종 회자되고 있다. 저 당사자 분은 저 사건을 정말 일생일대의 흑역사로 치부하면서 “아 이제 제발 좀 그만..” 뭐 그런다고 들었다.
본인 역시 그 용자분을 비웃거나 명예 훼손할 생각은 추호도 없다. 나쁜짓 한 것도 아닌데 뭐..

사용자 삽입 이미지

단지 “병시나 산소” 덕분에 나도 이 각박한 세상에서 잠시나마 빵터질 수 있었고 심히 즐거울 수가 있었다. 오히려 이름도, 누군지도 모르는 그분에게 감사하고 싶다.

2. 잘못된 근자감

"난민들은 위험하지 않으며 그들이 오히려 위험에 처해 있어요~"라고 주장하면서 난민 인권 운동을 해 온 독일의 한 20대 여성(소피아 뢰슈)이 얼마 전 6월 21일, 역설적으로 무슬림 이민자에게 살해당하여 싸늘한 시신으로 발견됐다. (☞ 관련 링크)
이 사건 때문에 온 유럽이 충격에 빠졌다고 하는데.. 내가 보기에는 전혀 새삼스럽지 않은 일인데 뭐가 그렇게 충격적인지 모르겠다.

더 옛날에 스웨덴에 '엘린 크란츠'(Elin Krantz)라고 "우리는 다문화 다양성을 좋아해요", "제3세계 난민들이 우리나라와 북유럽 일대로 이민 오시는 거 쌍수 들고 환영해요 ♡" 이러는 운동을 하던 20대 아가씨가 있었다.
그러나 2010년 9월 26일, 그녀는 밤에 노면 전차(버스라는 말도 있음)에서 내려서 귀가하던 중, 음욕을 품고 같이 따라 내린 어느 에티오피아 난민 출신의 불량 청년에게 무참히 성폭행 당한 뒤 살해 당했다. (☞ 자세한 정보)

게다가 2008년경엔 이런 일도 있었다.
"인간은 착하다며 돈 한푼 없이 여행 떠난 여성의 최후" (☞ 자세한 정보)
Pippa Bacca라는.. 우리나라로 치면 좀 낸시 랭 같은 인상이 풀풀 풍기는 이탈리아 처자가 겁도 없이 치안 안 좋은 곳에서 혼자 히치하이킹을 시도하다가 결국은 쥐도 새도 모르게 성폭행+살해당했다.
(출처를 완전히 까먹어 버린 상태였는데, '여자 터키 살해'라고만 검색하니까 명예살인 관련 자료 다음으로 2순위로 곧장 걸려 나옴..! 구글 너무 대단하다 ㄷㄷ ㅠㅠ)

이런 사례들은 냉정하게 말하면 거의 다윈 상 좀 줘야 하지 않나 싶다.
분야만 다르지, 오토바이 헬멧 강제 착용 법규에 항의하려고 헬멧 없이 질주하다가 넘어져서 죽어 버린..-_-;; 미국의 2011년 다윈 상 수상자랑 다를 게 무엇인가?

인종· 민족에 대한 편견이란 게 큰 그림에서는 나쁜 것이다. 아니 더 정확히는 나쁘게 '변질되고 타락할 위험성'이 높다. 마치 정치에서 독재처럼 말이다. 악을 악으로 맞서는 방법론들이 지니고 있는 근본적인 한계이다.

구약 성경은 줄곧 "너희(이스라엘 백성)는 이집트에서 오랫동안 이방인 나그네였다. 그러니 너네 나라 세운 뒤에도 이방인· 나그네 취약 계층에게 자비와 아량을 베풀어 줘라"라고 명령한다.
그리고 영화 국제시장에서도.. 어린 학생들이 베트남이던가 노동자들 비하하며 수군거리자, 고집불통 아재 꼰대 영감쟁이인 주인공 덕수가.. "나도 옛날에 한때는 억만 리 타지에서 외국인 노동자였었는데(독일 사람 입장에서) 어딜 감히!" 이러면서 빡치는 장면이 나온다.

허나.. 그럼에도 불구하고 진짜 질 나쁜 종자들에 대해서는 편견이라는 게 마냥 아무 근거 없이 생기는 것도 아니다.
그걸 무시하고서 그냥 다양성, 아량? 그것도 중동 이슬람 애를 상대로?
원자력 발전 박살내고 있는 것만큼이나 나라를 그냥 고의로 말아먹겠다는 수작이다. 성경은 인간에 대해 성선설을 결코 지지하지 않으며 필요악을 적극 인정한다.

3. 호의를 권리로, 당연한 것으로 아는 어리석음

여름철에 물과 관련해서 한 20~25년쯤 전의 환경 여건을 회상해 보면 다음과 같다. 본인이 옛날 글에서 간간이 언급한 적이 있긴 했을 것이다.

(1) 1990년대 중반쯤에 한번 대차게 가뭄이 들었었다. 그러고 나서는 전국적으로 제한급수를 하네 마네 말이 많았다. 온통 "물을 아껴 씁시다" 캠페인을 했다.

특히 아직도 잊혀지지 않는 게, 이때 공중목욕탕의 샤워기들이 다 '절수형'으로 바뀌었다. 물이 한없이 계속해서 나오지 않고 중간에 멈추는 거. 한창 씻고 헹구고 있는데 물이 툭 끊어졌으며, 불편하게 버튼을 또 눌러 줘야 물이 나왔다.
절수형 샤워기가 몇 년 동안 쓰이다가 2000년대에 와서 언제부턴가 다시 역사 속으로 사라졌다.

(2) 1990년대 중반까지는 한번 장마나 태풍, 홍수가 지났다 하면 TV에서 뉴스 끝나고서 맨날 내보내던 게 이재민들이 발을 동동 구르는 모습과 전국 수재의연금 성금 모금 내역이었다.
수천만 단위로 제일 많이 낸 모 회장님은 영화 엔딩 credits에서 A급 주연 배우가 나오듯이 큰 글씨에 단독 화면으로 나왔다. 그 뒤로 천~만 단위로 낸 사람들은 이름만 목록으로 주욱 떴다.

그에 반해 요즘은? 모금 자체는 알음알음 하는 것 같지만 옛날처럼 대놓고 기부 독려와 홍보를 하지는 않는다.
요즘은 2~30년 전에 비해 기상이변 천재지변이 더 늘면 늘었지 날씨가 더 유순해졌을 리는 없을 것이고.. 그럼 남는 가능성은 하나다.
우리나라는 치수를 잘한 덕분에 알게 모르게 옛날보다 환경 여건이 굉장히 더 개선된 것이다.

신토불이 국산품 애용, 양담배 추방, 외화 유출하는 타이타닉 안 보기 운동 이러던 게 2~30년 전 일인데.. 지금은 외국 문물을 물 쓰듯이 이용해도 경제가 멀쩡히 돌아가는 것 역시 그냥 공짜로 된 일이 아닌 것처럼 말이다.
(솔직히 너무 흔해 빠져 넘치는 커피만 해도.. 커피가 무슨 쌀이나 담배처럼 국내 재배되는 작물이기라도 한 것 같다.. ㅠㅠ)

너무 당연한 듯이 풍부하게 풍요롭게 누려 왔던 것들..
지킬 수 있을 때 지키거나 유지하지 못하고 몽땅 빼앗기거나 비용이 폭등하고 나면, 그제서야 아쉬워하고 후회하게 될 것이다.

4. 말을 뱉어내는 입의 무서운 파괴력

이 글은 언뜻 보기엔 기독교/성경 카테고리에 들어갈 내용이지만, 마침 산소드립도 언급되고 했으니 그냥 여기에다 마저 적도록 하겠다.

"또한 배들을 보라. 그것들이 그렇게 커도 사나운 바람에 밀려가되 사공이 매우 작은 키 하나로 자기가 가고자 하는 대로 그것들을 돌리느니라."
Behold also the ships, which though they be so great, and are driven of fierce winds, yet are they turned about with a very small helm, whithersoever the governor listeth. (약 3:4)


성경에서 바다 냄새가 많이 나고 선박 항해가 나오는 걸로 손꼽히는 책은 요나서, 그리고 사도행전 후반부 정도이다.
그런데 야고보서에서도 배의 특성에 대해 설명하는 문장이 있다. 다만, 말조심을 해야 한다는 문맥에서다.

제아무리 엄청나게 많은 사람과 화물을 실은 거대한 배라 해도 조타수 한 명이 키를 어디로 돌리느냐에 따라서 가는 방향이 확 좌지우지된다.
타이타닉 호를 생각해 보라. 빙산을 뒤늦게 발견하고 조타를 잘못하는 바람에 빙산과 측면 충돌을 하고 침몰해 버려서 그야말로 상상을 초월하는 인명· 재산 피해가 나지 않았던가?

말을 쏟아내는 '입'이 사람이라는 배에서 조타 장치와도 같은.. 크리티컬한 존재라는 것이다. 성경은 어째 이렇게 비유를 할 생각을 했는지 참 경이로움이 느껴진다.
이걸 잘못 내뱉으면 산소드립이야 그냥 귀여운 병맛으로 유명해지는 정도이지만, 완전 패가망신하고 심지어 전쟁까지 날 수 있다.

한국어는 동물 말과 언어 말이 동음이의어이다.
그런데 약 3:2에서는 '말에서 실족하지 아니하면'(word)이 나오고, 바로 다음 3절에서는.. 동물 말을 통제하기 위해서 입에 재갈을 물리듯이 사람도 입을 자물쇠를 잘 채우고 잘 관리해야 된다고 말한다. 이 역시 절묘하다.

그리고 끝으로.. 내가 약 3:4의 영어 구절을 굳이 소개한 이유는.. 뒷부분 ... whithersoever the governor listeth라는 표현이 무척 친근하게 느껴져서이다.
저기서 list는 wish, desire과 비슷한 뜻의 고어이다. "원하는 대로 어디든 간다"라는 문맥에서 이 단어를 쓴 것은 요 3:8 "The wind bloweth where it listeth"와 짝을 이루는 것 같다.

Posted by 사무엘

2018/09/05 08:34 2018/09/05 08:34
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1529

더운 여름에 운동 삼아 가까운 산이나 강 중 어딜 좀 갈까 고민하던 중.. 예전에 한강 공원들에 대해 조사하다가 스쳐 지나갔던 '서울함 공원'이 문득 떠올랐다.
한강 공원에 웬 군함이라니..! 본인의 집에서 자전거로 가기에는 좀 먼 거리이지만 모처럼 근성을 발휘해서 달려갔다.

사용자 삽입 이미지

오옷.. 말로만 듣던 군함이 진짜로 보였다. 한강의 선형이 직선이 아니며 강에도 밤섬 같은 장애물이 있다 보니.. 군함은 서강대교· 양화대교를 넘어서 목적지에 거의 다 와서야 어렴풋이 보이기 시작했다.
본인의 퇴역 군함 답사는 평택 해군 기지, 그리고 강릉 통일 공원 이후로 세 번째이다. 각 답사 때 보고 온 것들은 다음과 같다.

  • 평택(2012): 초청해 주신 분이 직접 근무하고 계시던 포항급 초계함, 피격 침몰했다가 인양된 천안함, 그리고 제2 연평해전 당시에 침몰했다가 인양된 참수리 고속정[357].. 전국에서 제일 빡센 해군 기지이다 보니 제일 하드코어한 전시물이 많았다.
  • 강릉(2016): 구축함인 전북함[916](1972년 미군으로부터 인계, 1999년 퇴역), 강릉 무장공비들이 탔던 북한 잠수함, 어느 탈북자 팀이 타고 온 목선
  • 그리고 지금 서울: 호위함인 서울함[952](1984년 건조, 2015년 퇴역), 만기 퇴역한 다른 참수리급 고속정, 돌고래급 잠수함

정리하자면, 평택에서는 아예 현역인 군함 아니면 파괴된 군함을 봤으며, 강릉에는 북한에서 만들어진 배가 있다. 그에 반해 서울함 공원에는 정상적으로 만기 퇴역한 국내 군함만 있다.

사용자 삽입 이미지

물에 띄워져 있는 이 군함은 공원의 이름이기도 한 '서울함'이다. 제원을 검색해 보니 강릉의 전북함보다는 덩치가 약간 작다(길이 119m vs 104m). 그래도 서울함이 훨씬 더 나중에 만들어졌으며, 당시로서는 시설도 제일 좋았기 때문에 이름도 여느 지방이 아니라 수도인 '서울'이 당당히 붙었다고 한다.

퇴역한 뒤엔 경인 아라뱃길(운하)를 통해서 배를 한강으로 예인해 놨는데.. 꼭대기 부분이 너무 높아서 한강 교량 아래를 통과할 수 없는 부분은 별 수 없이 잘랐다가 재조립을 했다고 한다. 서울에 딱히 부산 영도대교 같은 도개교가 있지는 않으니까.. (해군 관계자 가이드의 설명)

사용자 삽입 이미지

자전거 도로 근처에는 서울함 공원 안내소 건물이 있었다. 이 안내소와 군함 내부에 입장하려면 입구에서 입장료(성인 3천원)를 내고 당일 유효한 종이 팔찌(?)를 차야 하더라.
그리고 안내소 안의 벽에는 이렇게 우리나라 해군과 한강의 역사, 그리고 전시된 군함들의 현역 활동 시절 사전이 전시되어 있었다.

사용자 삽입 이미지

퇴역 군함들 중에 (1) 잠수함은 덩치가 가장 작은 덕분에 아예 실내에 이렇게 같이 전시되어 있었다. 마침 가이드가 잠수함에 대해 설명하고 있었다.

사용자 삽입 이미지

그리고 (2) 참수리 고속정은 땅에 전시되었으며, 안내소 건물의 2층과 통로로 연결되어 있다.
현재 참수리급 고속정은 후속 모델인 '윤영하 급' 신형 고속정으로 대체되고 있는 중이다. 이 급에 속하는 동일한 형태의 고속정이 여러 척 제작되겠지만, 최초로 제작되는 배는 '윤영하함'이라는 이름이 붙을 거라고 한다.

프로그래밍 언어로 치면 급은 타입의 이름이요, 그 급으로 만들어진 각 배들의 이름은 그 타입으로 선언된 변수의 이름에 대응하는 셈이다. 천안함의 경우, '천안'은 변수의 이름이고 이 변수의 타입(급)은 '포항'이다.
선박은 타 교통수단과 달리 각각의 개체에 고유한 이름을 붙이는 게 관행으로 남아 있다. 거기에다 군함만 그런지는 모르겠다만, 번호까지.. 번호도 붙이는 체계가 있을 텐데, 더 자세한 건 잘 모르겠다.

사용자 삽입 이미지

참수리 고속정의 조타실이다. 영화 <연평해전>에서 한 상국 상사가 근무하다가 전사한 곳으로 기억이 생생하게 남아 있었다.

사용자 삽입 이미지

정장이 지휘를 내리는 곳인데, 윤 영하 소령도 바로 여기서 적탄을 맞아 치명상을 입고 전사했다고 한다.
평택에서도, 지금 여기서도 가이드를 하신 분은.. 그 당시 357호는 상대방이 절대로 공격하지 않을 거라 믿고 배 옆구리를 다 내주면서 방어 기동을 하다가 기습 공격을 당했다는 점을 강조했다.
북괴놈들이 비열한 건 훗날 박 왕자 씨 총격, 천안함, 연평도, 목함 지뢰에 이르기까지 전혀 변하지 않았다.

사용자 삽입 이미지

이렇게 참수리 고속정의 구경을 마쳤다.
다음으로 서울함도 안내소에서 저렇게 다리로 연결되어 있었다. 자전거 도로가 다리 아래를 지난다.

사용자 삽입 이미지

예전에도 군함을 여러 번 구경한 경험이 있으니 배의 안팎 분위기는 그럭저럭 익숙했다.
여행용으로 잠깐만 탄다면 모를까 이런 덥고 비좁은 배에서 며칠 묵으면서 남자들과 부대끼고 숙식을 해결해야 하고, 복잡한 기계류를 유지보수 관리하고 청소하고, 낮은 확률로 자기 목숨을 잃을 수도 있는 전투까지 벌어야 한다니..

선원과 군인은 둘 다 위험하고 힘든 일을 하는 사람인데 해군은 두 직종의 교집합이다.
해군은 타군에서 찾을 수 없는 세일러복, 특유의 흰색 정복, 그리고 육군과는 미묘하게 다른 용어들이 인상적이다.
일반인들은 이 순신 장군이라고 말하지만 해군 출신은 이 순신도 제독이라고 부른댄다. 글쎄, 라이벌(?)이라 일컬어지는 영국의 넬슨 다음에는 제독이라는 단어가 익숙한 반면, 동양의 이 순신은 내가 생각하기에도 딱히 제독이라고 부른 적이 없는 것 같다.

captain은 육· 공군에서는 대위이지만 해군에서는 훨씬 더 높은 계급인 대령이다.
ensign도 깃발을 나타내는 '엔싸인' 말고 2음절 모음을 생략한 '엔쓴'은 해군 소위라는 뜻이다.
미군은 과거의 일본군 같은 병맛스러운 육· 해군 대립은 없지만, 계급 용어가 서로 통일이 안 돼 있다.

육군에서 소대· 중대· 대대 같은 편제는 딱히 논리적인 개연성 없이 전적으로 편의상 집단을 분할해 놓은 것에 가깝다. 그러나 해군은 아무리 작은 놈이라도 배 한 척의 최고 책임자인 정장· 함장이 되는 것의 상징성이 매우 매우 크다. 그러니 고속정의 승조 인원은 육군 1개 중대의 인원과는 비교할 수 없이 적음에도 불구하고 정장이 육군 중대장에 준하는 대위 계급의 보직인 것이지 싶다.

뱃사람들의 전통에 따르면 함장석에는 함장보다 더 높은 사람이라도 앉을 수 없다는데.. 글쎄, 이건 마치 초병은 아무리 높은 사람에게라도 원칙대로라면 FM대로 반말로 검문 가능하다는 원론적인 사항처럼 들린다. (현실에서는 잘 안 지켜진다는 뜻)

사용자 삽입 이미지

배에서 서울함 공원 안내소와 그 주변을 본 모습은 이러하다. 서울에 이런 곳도 있으니 관심 있으신 분은 한번 가 볼 것을 권한다. 오후 2시 반부터 약 1시간 동안 가이드 설명이 있던데, 그 다음 가이드 시각이 오후 4시 언제던가.. 정확하게 기억이 안 난다. 여행 가다가 단순 교통사고로 침몰한 배보다야 훨씬 더 기억해야 하는 배는 이런 계열의 배들이다.

북한에서는 동해안에서 자기들이 먼 옛날 나포한 미국 푸에블로 호를 먼 공해 쪽으로 빙빙 돌아서 서해안으로 예인해 왔다. 그래서 대동강 강변에다가 전시해서 자기네 안보 교육(?)에 써먹고 있기도 하다.
남한도 수도 시내를 관통하는 강변에 비슷한 성격의 전시품이 생긴 셈이다.

Posted by 사무엘

2018/09/02 08:29 2018/09/02 08:29
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1528


블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2018/09   »
            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
30            

Site Stats

Total hits:
2681568
Today:
1529
Yesterday:
2123