« Previous : 1 : ... 99 : 100 : 101 : 102 : 103 : 104 : 105 : 106 : 107 : ... 221 : Next »

란체스터의 법칙

A와 B라는 두 집단이 서로 패싸움을 시작했다. A는 전투원이 5명이고 B는 4명이다. 그런데 양 진영의 모든 전투원들은 체력· 정신력· 무장 등등이 완전히 동일하며, 기습 가능성이라든가 지형적인 유불리, 엄폐물 같은 것도 없이 탁 트인 개활지에서 순수하게 힘과 힘만이 충돌하는 형태로 싸우게 됐다고 치자. 싸움은 둘 중 한 진영의 전투원들이 몽땅 죽거나 중상을 입어서 전투력을 상실할 때까지 계속된다. 그렇다면 이 싸움의 결과는 어찌 될까?

마오 쩌둥이던가 스탈린이던가.. 인권 쌈싸먹은 독재자답게 "전쟁 나서 1억 인구가 죽는 것쯤은 별 일 아니다. 사람이야 또 낳으면 되니까. 적군이 병력이 1억이면 우리는 1억에다 한 명만 더 붙여서 이기면 된다" 그런 요지의 무지막지한 말을 한 적이 있었다. 정확하게 누가 언제 한 말인지 출처 확인이 잘 안 되네, 분명 본 기억은 있는데..

그런데 저건 병신 같지만 묘하게 설득력이 있는 말이다. 외적인 요인이 차이가 전혀 없고 완전히 동일하다면 상식적으로 생각했을 때 쪽수가 한 명이라도 더 많은 집단이 필승하고 부족한 집단은 필패할 것이다.
위의 경우라면 B가 지고 A가 이기는 것 자체는 따 놓은 당상이다. 단지 문제는 A가 B를 얼마나 너끈히 이기느냐, 어느 정도의 피해를 입고 승리하느냐로 귀착된다.

그 답은 A와 B가 어떤 방식으로 싸우느냐에 따라 달라진다.
조폭들 패싸움처럼 기껏해야 일대일로 근접해서 냉병기를 사용하는 싸움이라든가, 총이라 해도 18세기 전열보병 전술처럼 비현실적일 정도로 너무 신사적으로 일대일 턴제로 싸우는 거라면 말 그대로 일대일로 상쇄하고 남은 병력만이 생존자가 된다. B는 전멸이요, A는 A-B에 해당하는 인원이 남는다. 고로 5:4의 싸움이라면 한 명만 남는 거다. 이것을 일명 란체스터 제1법칙이라고 한다.

그러나 점 vs 점이 아니라 면 vs 면 단위로 실시간으로 부딪치는 현실의 전투에서는 다구리가 더 대규모로 가능하며 병력의 작은 차이가 훨씬 더 큰 차이를 야기한다. 설정상 한 집단의 전투력은 병력에 비례해서 나오게 돼 있는데 그 전투력 자체가 병력의 손실로 인해서 차츰 감소한다. 두 변수가 같이 변화하면서 비선형적인 구도를 만든다는 뜻이다. 그래서 처음부터 병력과 전투력이 열세였던 집단은 그 감소폭이 더욱 커지면서 전멸에 이르지만, 우세 집단이 받는 대미지는 시간이 흐를수록 더욱 작아진다. 전투력도 부익부 빈익빈으로 치닫는다!

그래서 답부터 말하자면, 이런 현실의 싸움에서 A와 B가 붙으면 B가 전멸한 뒤 A는 한 명만 남는 게 아니라 이론적으로 3명이나 생존해 있게 된다. B는 자기 진영 4명이 전멸하는 동안 A를 2명밖에 못 죽인다는 것이다. 공식으로 표현하면 단순한 A-B가 아니라 sqrt(A^2 - B^2)이다.
마치 직각삼각형 세 변의 길이와 같은 구도가 된다. 그렇다면 5명 vs 4명이 아니라 13명 vs 12명이 붙으면, 12명 팀은 전멸하고 13명 팀은 8명만 죽어서 5명이 남는다.

이것은 란체스터 제2법칙이라고 명명되어 있다. 영국의 항공 공학 엔지니어가 1차 세계 대전의 양상에서 착안하여 고안했다.
스타크 같은 전략 시뮬 게임에서 드라군, 마린, 히드라 같은 원거리 공격 유닛들을 서로 마주보게 해서 어택 땅으로 싸움을 붙여 보면 이 법칙이 의외로 굉장히 잘 적중한다고 한다. 란체스터의 법칙에 대해 소개해 놓은 타 블로그 글들을 검색해 보면 전략 시뮬 게임으로 실험을 해 봤는데 높은 적중률을 보고 놀랐다는 말이 많이 나온다. 1억 명에다가 딱 한 명만 더 보태서 이기면 된다는 말이 그저 허세만은 아닌 셈이다.

란체스터 제2법칙이 어째서 성립하는지를 엄밀하게 논하려면 삼라만상의 변화량을 기술하는 끝판왕 도구인 미분방정식을 동원해야 한다.
시각 t에 대해서 A 진영의 병력을 나타내는 함수 f(t), B 진영의 병력을 나타내는 함수 g(t)를 정의하자.
위의 예에서는 전투 전의 초기 상태 t=0에 대해 f(0)=5, g(0)=4가 될 것이다. 뭐, 일반화해서 f(0)=a, g(0)=b라고 잡아도 된다.

전투의 진행으로 인해 f(t), g(t) 모두 병력이 감소할 것이다. 그런데 그 감소하는 변화량이 바로 상대방 함수의 함수값과 같다. d f(t) / dt = -g(t) 요, d g(t) / dt = -f(t)라는 뜻이다.
그렇다면 이 f와 g는 도대체 어떻게 생겨먹은 함수일까? 0보다 큰 t에 대해서 g(t)=0이 되고(B 진영의 전멸) 그 정의상 동시에 f'(t)=0도 되는 지점이 있을 것이다. 그 t가 얼마인지는 중요하지 않겠지만, 이때 f(t)의 값을 a와 b에 대해서 구하면 란체스터 제2법칙을 유도할 수 있을 것이다.

f의 도함수가 -g이고 g의 도함수가 또 -f라니.. 일단 얘는 미분을 짝수 번 반복하면 도함수가 자기 자신으로 돌아오는 뭔가 골때리는 함수 형태가 될 듯하다. 즉, 4배수 주기로 제자리로 돌아오는 삼각함수보다는.. cosh, sinh 같은 쌍곡선함수 형태가 될 것 같다. 걔들은 미분을 하면 cosh, sinh, cosh ... 이렇게 반복되는데, 문제의 저 함수는 f, -g, f, ... 이렇게 반복된다.

그래서 답을 구해 보면.. a>b여서 f가 더 우세한 진영을 나타낸다는 걸 염두에 뒀을 때
2*f(x) = (a+b)/e^x + (a-b)*e^x 요, 2*g(x) = (a+b)/e^x - (a-b)*e^x 가 된다. (2를 곱한 게 저런 것이므로 전체를 2로 나눠 줄 것)
e^x와 e^x의 역수를 절반씩 적절히 더하거나 빼는 cosh / sinh 함수를 상수배/평행이동만 한 형태인 걸 알 수 있다. f는 cosh에 대응하고 g는 그냥 sinh가 아니라 -sinh가 된다.

cosh는 현수선을 나타내는 함수이기도 하다. 그 말인즉슨 A와 B가 싸울 때 A의 피해 양상은 빨랫줄이나 쇠사슬이 아래로 축 늘어진 것과 비슷한 양상으로 스무스하게 감소할 거라는 뜻이다. 실제로 그런지 확인해 보자.


사용자 삽입 이미지

사용자 삽입 이미지
바로 이것이 5명과 4명, 또는 엄밀히 말해 5:4 비율의 병력이 맞붙었을 때 란체스터 제2법칙에 따라 예상되는 병력의 변화 양상이다!
g(x)=0이 되는 시점은 x= ln( (a+b)/(a-b) )/2 가 되며, (a=5, b=4일 때는 저 값은 대략 1.1)
이때 f(x)를 구해 보면 (a+b)/sqrt( (a+b)/(a-b) )가 나오고 식을 정리하면 진짜로 sqrt(a^2 - b^2)가 나온다.
임계점 이후부터는 g는 음수가 나오고 f는 감소가 아니라 오히려 증가하기 시작하지만, 이건 현실에서는 아무 의미 없는 추세일 테니 제끼면 된다.

더 직관적인 비유로 설명하자면.. 5:4가 붙어서 곧이곧대로 1명만 남는 싸움, 즉 란체스터 제1법칙은 y=1이라는 상수 그래프를 떠올리면 된다. 여기서 x가 4부터 0까지 가는(B진영) 동일 면적(= 정적분)을 5에서부터(A진영) 시작한다면 1에 도달한다.

그러나 란체스터 제2법칙은 y=1이 아니라 y=x라는 가변적인 그래프에 대응한다. 여기서 x가 4부터 0까지 가는 B진영의 면적 8(밑변과 높이가 모두 4인 삼각형)을 5에서부터 시작한다면.. 1이 아니라 3에서 멈추게 된다. 윗변 3, 아랫변 5, 높이 2인 사다리꼴의 넓이가 8이 되니까 말이다.
이를 일반화하면, 0부터 B까지 y=x를 정적분한 값은 sqrt(A^2-B^2)에서부터 A까지 정적분한 값과 같다. 이렇게 이해해도 된다.

전쟁이라는 건 여기저기 가성비를 따지면서 지킬 것과 버릴 것을 가리고 작전을 잘 짜야 이길 수 있다. 즉, 경제· 경영과도 밀접한 관계가 있다. 그렇기 때문에 오늘날 란체스터의 법칙은 군사학보다는 경제학 쪽에서도 기초 이론으로 더 중요하게 다뤄진다. 포병 장교에다 수학 박사 출신인 지 만원 박사 같은 분이 아마 이런 분야의 최고 전문가가 아닐까 싶다.
이 법칙은 스플래시 데미지나 사이오닉 스톰-_- 같은 변수가 있지 않은 한, 왜 일반적으로는 "뭉치면 살고 흩어지면 죽는다"가 성립하는지를 무식하게 시행착오 겪을 필요 없이 수식만으로도 잘 설명해 준다. 5:4로만 붙여도 저 그래프와 같은 처참한 결과가 나오지 않던가?

더 나아가서 어지간히 절체절명의 위급한 상황이 아닌 이상, 스타에서 유닛이 생성되는 족족 적진으로 찔끔찔끔 축차투입을 해서는 절대 안 되며 캐리어 같은 유닛도 반드시 일정 기수 이상 모아야 제 성능이 발휘된다는 것을 보여준다.
또한 전쟁이 나면 전투 직전에야 양 진영이 모두 사기 진작이 매우 중요하기 때문에 "마지막 하나까지 결사항전" 운운하지만.. 대세를 도저히 뒤집을 수 없을 정도로 승부가 너무 기울고 100% 개죽음밖에 선택의 여지가 없을 때는 불가피하게 꼬리 내리고 항복도 하는 것이다.

이상. 란체스터 법칙 하나 갖고 미분방정식에, 쌍곡선함수에 별 얘기가 다 나왔다.
다만, 현실의 전장에서는 수학 숫자놀음 나부랭이보다 예측할 수 없는 외부 변수가 훨씬 더 많이 존재하기 때문에 란체스터 법칙이 절대적인 만능 장땡인 건 아니다. 겉으로 드러나는 병력 열세를 극복하고 B가 A를 이긴 사례도 역사엔 얼마든지 존재한다는 것도 생각할 필요가 있다.
그러니 성경에서 하나님께서 기드온에게 병사 수를 32000명에서 거의 1% 수준인 300명으로 일부러 줄여 버리고도 오히려 전투를 승리로 이끄신 것이 대단한 이야기인 것이다(삿 7). 진짜 300의 원조는 무슨 영화에 나오는 스파르타 군대가 아니라 저 군대였던 셈이다.

Posted by 사무엘

2017/02/18 08:32 2017/02/18 08:32
, ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1328

0. 들어가는 말

<날개셋> 한글 입력기와 타자연습이 개발 17년째에도 변함없이 온갖 새로운 기능들로 무장하여 새 버전이 나왔다. 4개월 동안 정말 많은 기능들이 추가되고 개선되었다. 지금까지 올라온 개발 근황글 시리즈만 봐도 이번 버전은 뭔가 심상찮다는 것을 알 수 있을 것이다.

정상적인 개발 사이클이라면 지금보다 더 전에 새 버전이 나오고도 남았을 텐데 이번 버전만 이례적으로 중간 개발 근황글이 많아진 이유는..
8.8의 개발 완료 조건은 따로 있었는데 그게 너무 어려워서 오랫동안 충족되지 못하는 동안, 다른 분야에서 새 기능들이 잔뜩 추가되고 개선 사항이 생겼기 때문이다.

그것들이 새 버전 형태로 석방(release)되지 못한 채 장기간 갇혀 있었다. 지금 새 기능 리스트를 다시 읽어 보면 나로서는 "아니 이건 언젯적 작업 내역인데 8.6에서는 아직 반영이 안 된 상태였구나. 내 프로그램 사용자들은 작년 10월 이후로 시간이 정지해 있었구나!" 싶은 것들이 많다. 그걸 이제야 훌훌 털어내고 밖으로 내보내게 되어 참 기쁘다.

이 글에서는 이번 8.8 버전에서 궁극적으로 추가하려고 했고 시간적으로 제일 마지막에 구현된 '복합 낱자 입력 로직 생성기'에 대해서 소개하도록 하겠다. 이것은 <날개셋> 한글 입력기가 제공하는 '빠른설정' 중의 하나이다.

1. 빠른설정

빠른설정이란 어떤 입력 항목에 대해서 사용자가 선택한 옵션대로 입력 스키마와 문자 생성기를 곧바로 세팅 해 주는 보조 GUI의 총칭이다. 지금 이미 지정돼 있는 입력 설정을 보완· 변경할 수도 있고, 그건 싹 무시하고 완전히 새로운 입력 설정으로 덮어쓸 수도 있다.

요런 개념과 기능은 먼 옛날, <날개셋> 한글 입력기 3.0에서 처음으로 도입됐다. 그리고 역사상 최초로 도입된 빠른설정은 '기본 글자판 설정'이었다. 두벌식, 세벌식, 쿼티, 드보락처럼 사용자가 가장 자주 사용하는 한글과 영문 글자판을 묻지도 따지지도 않고 곧바로 맞춰 주는 중요한 역할을 한다. 한글의 경우 옛한글 사용 여부, bksp의 동작 단위 같은 옵션을 받기도 한다.

그러다 지난 2006년, 3.9 버전에서 빠른설정이 3개가 더 추가되어 4개가 되었으며, 빠른설정은 이렇게 4개가 거의 10여 년 동안 변경 없이 그대로 유지돼 왔다.
먼저, 한글 로마자 입력기. 얘는 기반 영문 글쇠배열(쿼티 or 드보락)과 로마자-한글 매핑 방법 같은 몇 가지 옵션을 받아서 로마자 입력 방식을 설정해 준다. 한글 로마자 입력 방식이라는 건 딱 한 가지만 존재하는 게 아니라 어떤 공통된 사상, 이념, 컨셉에 속하는 다양한 입력 방식들을 찍어 내는 '메타 입력 방식'에 가깝다. 그러니 이런 건 '빠른설정'이 커버하기에 적합하다.

한글 로마자 입력기는 한국어· 한글을 배우는 외국인에게 매우 유용하다. 그래서 <날개셋> 한글 입력기의 영문 페이지는 프로그램의 모든 기능을 영어로 소개하지는 못하는 대신, 입력 설정을 로마자 입력 방식으로 바꾸는 방법만을 간단히 안내해 놓았다.

나머지 빠른설정은 주어진 세벌식 글쇠배열을 표준 두벌식 배열과 합성해 주는 '복벌식 빠른설정', 그리고 한 글쇠에서 초성과 종성이 아니라 중성과 종성을 수식으로 구분해서 합성한 '신세벌식 빠른설정'이 있다. 이들 역시 두벌식과 세벌식을 절충하는 훌륭한 메타 입력 방식이므로 빠른설정 형태로 구현했다.
전자는 타자가 처음에 왼손으로 시작됐으면 두벌식, 오른손으로 시작됐으면 세벌식으로 인식해 준다. 후자는 도깨비불 현상이 없으면서 4단도 사용하지 않는 입력 방식이라는 의의가 있다.

'기본 글자판'과 '한글 로마자 입력기'는 완전히 새로운 입력 환경을 맞춰 주는 빠른설정이지만 복벌식과 신세벌식 빠른설정은 기존 입력 설정에다가 변형을 가하는 형태로 동작한다.
그러다가 제5의 빠른설정인 '복합 낱자 입력 로직 생성기'가 거의 10년 만에 또 추가되었다. 얘 역시 기존 입력 설정을 변형하는 형태로 동작한다. 단, 글쇠배열 같은 입력 스키마 설정은 직접 건드리지 않으며, 문자 생성기 계층의 설정을 건드린다. 뭐, 글쇠배열을 직접 고치지는 않더라도, 필요한 경우 요런 글쇠를 사용자가 직접 배당해서 쓰라고 안내를 해 주긴 한다.

이 로직 생성기는 단순한 편의 기능 이상으로 <날개셋> 한글 입력기의 아주 중요한 핵심 기능이다. 이거 하나만 코드의 양이 2천 줄을 넘어가며, 기존 4개 빠른설정들의 코드를 다 합한 것보다도 분량이 2배 이상 많다.

2. 본 기능 소개

복합 낱자 입력 로직 생성기가 하는 주된 일은.. 초중종성의 낱자 결합 규칙을 편의상 '대결합'과 '소결합'으로 또 나눠서 대결합을 소결합 노가다만으로 몽땅 자동 생성해 주는 것이다.

좀 formal하게 표현하자면, 기존 설정(소결합)과 우리 빠른설정 자체의 설정(대결합) 사이의 cartesian product를 구한다.
그리고 이와 연동해서 같이 움직이는 가상 낱자, 특수 도깨비불, 심지어 한글 치환 규칙을 다 자동으로 맞춰 주며, 대결합과 소결합 사이에 논리적으로 충돌이 있는 것도 감지해서 보여주고 회피해 준다.

PC용 한글 입력 방식이라면 낱자 결합 규칙을 굳이 대결합과 소결합으로 나눌 필요가 없다. 하지만 글쇠 수가 왕창 적은 모바일에서 옛한글 같은 복잡한 한글 입력 방식을 구현한다고 생각하면 저런 추가적인 추상화가 반드시 필요하다.

ㅎ 같은 기본 자모를 "ㅇ+가획"(나랏글) 내지 "ㅅ+ㅅ"(천지인)의 합성으로 입력하는 건 소결합이다. 그러나 ㄴ+ㅎ으로 ㄶ을 입력하고 ㄹ+ㅎ으로 ㅀ을 입력하는 건 대결합이며 어느 입력 방식이든 동일하다. 그러면 이 로직 생성기는 소결합과 대결합을 토대로 ㄶ과 ㅀ을 입력할 때 필요한 중간 상태인 ㄴㅇ, ㄹㅇ도 날개셋의 기존 기능으로 다 표현해 준다는 것이다.

이런 예가 옛한글로 가면 얼마나 많겠는가? 게다가 두벌식의 경우는 한 낱자를 다 입력한 뒤에도 아직 안심할 수 있는 상황이 아니다. 나랏글 기준으로 ㄽ이라는 겹받침을 입력한 뒤에도 ㄹㅈ, ㄹㅉ, ㄹㅊ 같은 임시 낱자를 고려해 줘야 ㄹ 다음에 ㅈ 계열 자음들을 연속 입력을 할 수 있다.

요런 식의 자동화를 종성에 한해서 찔끔 간단하게 구현해 준 것이 바로 6.x 버전 시절에서 추가된 '초-종성 공용 낱자 결합'이었다. 하지만 임시 낱자들의 처리는 여전히 사용자가 해야 하고 한계가 많았다. 그러다가 복합 낱자 입력 로직 생성기가 추가됨으로써 <날개셋> 한글 입력기는 한글 엔지니어링의 영역을 한 단계 넓혔다.

3. 예제

사용자 삽입 이미지

위의 그림은 천지인 입력 방식을 설정한 뒤, 대결합과 소결합 사이의 관계 분석을 통해 종성-초성 사이에 연속 입력이 안 되는 pair들을 프로그램이 찾아 준 것이다. 천지인은 모든 종성에 대해서 연속 입력이 안 되는 초성이 적어도 하나 이상 존재한다. 그 반면, Google 단모음 입력기라면 ㄱ, ㅅ뿐만 아니라 쌍자음이 존재하는 ㄺ, ㄽ, ㅄ 같은 일부 자음만이 이런 조건에 걸린다.

'글자판 입력을 문자열로' 텍스트 필터에는 사용자가 입력한 문자열에 대해서 연속 입력 가능 여부를 판별하는 기능이 있는데, 이 빠른설정은 아예 구조적으로 연속 입력이 불가능한 모든 경우의 수를 찾아 준다는 차이가 있다.

사용자 삽입 이미지

천지인과는 달리 나랏글은 구조적인 모호성이 없기 때문에 로직 생성 결과가 깔끔하다. 나랏글은 소결합을 담당하는 글쇠(가획, 쌍자음)와 대결합을 만드는 타 한글 자모 글쇠가 완전히 분리되어 있기 때문이다. 다만, 생성되는 임시 낱자 수는 나랏글이 천지인보다 더 많다.

중성을 보면 나랏글에서 ㅝ를 입력하기 위해 중간에 거치는 ㅜ+ㅏ를 이 프로그램이 자동으로 처리해 줬다는 말이 뜬다. 사용자가 일일이 대결합에 등록하지 않았더라도 말이다. 그리고 이 경우, ㅜ+ㅏ까지만 입력해도 화면에는 절차를 단축해서 자동으로 ㅝ를 띄워 준다. (대결합의 마지막 단계가 확정되어 다른 선택의 여지가 없을 때)
또한 중성에는 쌍자음(501) 글쇠가 결합용으로 전혀 쓰이지 않았다는 것도 알려 준다.

사용자 삽입 이미지

이건 좀 더 엄청난 장면이다. 천지인의 모음 입력 방식을 옛한글에다가도 적용했을 때 입력 순서가 동일해져서 충돌이 발생하는 쌍을 모두 찾은 것이다. 천지인의 경우 음절 경계에만 모호성이 있는 게 아니라 한 성분 내부에서도 ㅡㆍㆍㅡ를 ㅝ(2:2)로 보느냐 ㆌ (3:1)로 보느냐 같은 문제가 존재하기 때문이다. 단, 이건 세벌식이라도 구조적으로 얼마든지 존재할 수 있는 모호성이다.

인위적인 모호성 보정이 없다면 이 프로그램은 언제나 대결합보다 소결합을 우선시하기 때문에 2:2(ㅝ)가 아닌 3:1(ㆌ)이 채택된다. 이때 모호성은 2가지 방법 중 하나로 회피할 수 있는데, (1) 먼저 사전 구분이다. 2타까지 치고 'ㅜ+보정'을 누르면 이 ㅜ는 ㅠ로 넘어가는 ㅜ가 아니라 ㅜ+ㆍ, ㅜ+ㅓ 등 대결합 경계가 바뀌는 임시 낱자 ㅜ로 바뀐다. 즉, 임시 낱자도 입력을 위한 것과 모호성 보정을 위한 것 두 종류로 나뉜다.

(2) 그리고 사후 변환을 할 수 있다. 이미 ㅠ 또는 ㆌ가 된 상태에서 이 변환을 누르면 ㅜㆍ 또는 ㅝ를 왔다갔다 할 수 있다.
이 프로그램은 입력 순서가 동일한 낱자들에 대해 일정 시점에서 구분자를 넣어서 상태를 분기하는 것을 일종의 binary tree 형태로 표현해서 관리하는데, 사전 구분은 그렇게 가지를 뻗는 것이고 사후 변환은 자신의 가장 가까운 sibling을 왔다갔다 하는 것으로 정의한다.

(1) 또는 (2), 그리고 (1)과 (2)를 모두 사용하는 것도 가능하다. 이 프로그램은 마치 나랏글의 가획/쌍자음처럼 저런 사전/사후 보정용 낱자를 초중종성 공용으로 하나 설정한 뒤, 수식을 생성해서 사용자에게 다음과 같이 안내도 해 준다.

입력 중에 낱자 결합 모호성을 해소하려면 다음 수식을 글쇠배열에 배당하여 사용하십시오.
- 사전 구분:
  F ? H2|0x25800000000 : E ? H2|0x2580000 : D ? H2|0x258 : 0
- 사후 변환:
  F ? H2|0x25900000000 : E ? H2|0x2590000 : D ? H2|0x259 : 0


또한 사후에라도 대결합 적용 방식이 바뀌는 것조차 처리해 준다. 현대 한글에서는 굳이 저렇게 보정을 하지 않아도 ㅠ 다음에 ㅣ가 입력됐을 때 ㅝ로 바로 넘어가게 할 수 있다. ㆌ가 쓰이지 않으므로 모호성이 없기 때문이다.
옛한글의 경우 위의 스크린샷에서 보다시피 소결합 단독으로 처리되던 ㅖ에서 옛한글 ㅕㅑ로 자동으로 넘어가는 것, ㅜㅡ에서 ㅡㅗ로 자동으로 넘어가는 것 등 그런 예가 더 많다.

한글 입력 방식의 고안자는 소결합 수준에서 기본 한글 자모를 입력하는 방법만 생각하면 된다. 이로부터 복합 자모를 입력하고 오류를 찾는 온갖 복잡한 노가다는 이제 컴퓨터 프로그램이 알아서 해 준다!

비록 한글 타자는 마치 알파벳 풀어쓰기처럼 sequential하게 이뤄지지만 한글은 구조적으로 ㄱㄱ과 ㄲ이 동일하지 않고 초성 ㄱ과 종성 ㄱ이 같지 않은 문자이다. 자체적으로 낱자 경계가 있고 음절 경계가 있는데 이것 구분을 한글 입력 오토마타가 implicit하게 자동 처리하게 된다. 이와 관련해서 생각할 수 있는 거의 모든 자동화 절차를 이 빠른설정이 담당해 준다.

작년에 본인이 부산 학회에 가서 발표한 논문(한글 및 한국어 정보 처리 학술대회)이 바로 이런 시스템의 구현에 관한 것이었다. 본인은 박사 졸업 이수요건 충족을 위해 중간에 이렇게 한글 자체에 지극히 특화된 연구를 해서 논문을 투고하고 발표하게 된 것에 자부심을 느낀다.

4. 옵션 대화상자

'복합 낱자 입력 로직 생성기'는 이례적으로 마치 설치 프로그램처럼 단계가 휙휙 진행되는 마법사 형태로 UI가 구현되었다. 1단계는 대결합을 지정하는 단계이며, 마지막 3단계는 지금까지 봐 온 결과 로그 화면이다.
운영체제가 제공하는 마법사 UI는 대화상자의 크기 조절을 지원하지 않기 때문에 마법사 UI를 불가피하게 자체 구현했다. 로그가 분량이 상당할 수도 있기 때문에 크기 조절 기능이 없으면 안 된다. 그리고 마법사 UI는 자체 구현하는 것도 그리 어려운 일은 아니니..

사용자 삽입 이미지

그리고 위의 그림은 바로 중간의 2단계인 옵션 지정 화면이다. 복합 낱자 입력 로직과 관련하여 이 옵션들을 생각해 내고 구현하는 게 지금까지 정말 머리 쥐어 뜯도록 힘든 일이었고, 개념을 도움말에다 설명하는 것도 어려웠다. 내가 누구만치만 머리가 빨리빨리 잘 돌아가기만 했어도..;; 단지 나보다 똑똑한 사람들은 이런 프로그램을 만들 생각 자체를 안 하겠지..

'글쇠배열 종류'를 두벌식이 아닌 세벌식으로 지정하면 음절 경계 체크라든가, ㅂㅉ, ㅂㅊ처럼 종성 연속 입력을 위한 임시 낱자 생성이 생략된다. 세벌식에서는 그런 걸 고려할 필요가 없으니까.

그리고 '옛한글 자모 사용' 옵션을 '끄면', ㄸㅃㅉ 같은 건 종성에 등장이 허용되지 않고 자동으로 다음 글자 초성으로 넘어간다. 이런 지저분 자질구레한 처리까지 가상 낱자와 한글 출력 치환을 이용해서 이 빠른설정이 알아서 다 세팅해 준다.
옛한글을 사용하더라도 정치· 치두음 같은 건 어차피 초성 전용이니 그런 게 종성에 등장하지 않게 처리된다.

'미리 분리' 옵션은 "(갇) ↔ (가ㄸ)" 왕복을 하느냐 "(갇) → 가(ㄸ) ↔ 가(ㄷ)" 왕복을 하느냐 차이를 결정한다. 이런 자음들을 그냥 다음 글자로 보내 버리면 종성에 생성되는 임시 낱자의 개수가 상당수 줄어든다. 세벌식에서는 초성 전용 자음을 처리할 때를 빼고는 이런 옵션이 필요하지 않다.

또한 세벌식에서는 아까 나랏글 중성 ㅜㅏ → ㅝ 단축처럼 종성도 ㄴㅇ까지만 입력하더라도 ㄶ으로 자동으로 단축이 가능하다. 단지 두벌식에서는 허용되지 않을 뿐이다. 진짜 받침 ㄴ + 초성 ㅇ을 의도한 것일 수도 있기 때문이다. 이런 세밀한 처리까지 다 고려해서 동작한다.

로직을 생성해 보니 결합 모호성이 존재하는데도 '모호성 해소 방식' 두 옵션 중 적어도 하나 이상이 선택돼 있지 않으면 일부 낱자는 모호성 때문에 입력할 수 없을 거라고 경고문이 끝에 나온다.
단, "짧은 소결합으로 연장 결합 지원" 옵션을 켜면 일부 낱자는 입력 가능해질 수도 있다. 아까 ㅠ에서 ㅝ로 자동으로 넘어가는 것처럼 말이다.

옵션들에 대한 더 자세한 설명은 대화상자에서 F1을 누르면 볼 수 있다.
8.8의 다음 버전은 올해 6월쯤에 나올 9.0 정도로 잡고 있다. 9.0에서는 이 빠른설정에 '허용 한글 범위' 제한 기능과 연계하는 새로운 기능이 더 추가될 예정이다.

* 마지막 썰: 프로그램 관련 문의는 둘 중 한 곳으로

'복합 낱자 입력 로직 생성기'는 이번 버전의 워낙 독보적인 끝판왕이다 보니 이거 하나만 간략하게만 소개했는데도 글 분량이 벌써 이만치가 됐다. -_-;;
기능 자랑은 이 정도로 하고, 이제 프로그램 관련 공익 광고(?)를 덧붙이며 글을 맺고자 한다.
본인은 여건상 개발자와 사용자 사이의 소통을 위해서 딱히 <날개셋> 한글 입력기 공식 게시판이나 카페 같은 걸 운영하고 있지는 않다. 프로그램 관련 문의는

  1. 공개적으로 하려면 프로그램의 다운로드 페이지에 있는 페이스북 플러그 인
  2. 비공개로 몰래 하려면 본인의 개인 메일(gmail)

둘 중 한 곳으로 하는 것을 가장 권장한다.

블로그에 올라오는 날개셋 한글 입력기 새 버전 공지글의 댓글로는 가능한 한 새 버전에 대한 의견만을 가장 권장한다. 하지만 이전 버전부터 보편적으로 있던 기능에 대한 문의가 올라오는 걸 명시적으로 금지할 것도 없기 때문에 받아들일 뿐이다.

다음으로 블로그 방명록이 있다. 여기도 프로그램 문의 게시판은 아니다. 그렇기 때문에 거기엔 내 블로그 방문 소감이나 안부 인사만 권하지 프로그램 문의는 원하지 않는다. 뭐, 문의글이라고 해서 무슨 스팸 광고글 쓰레기는 아니니, 게시판의 원래 성격에 맞지 않은 글이라고 해서 내가 매정하게 무시 또는 삭제한다거나 하지는 않는다. 답변을 하긴 하지만 그래도 원래 취지와 권고 사항은 저렇다는 거다.

페이스북 플러그 인을 열면서 동시에 내 페이스북 계정도 노출되었는데.. 요 몇 년 간 지켜보니 페이스북 쪽지로 프로그램 문의를 하는 분도 있었다. 하지만 쪽지로는 보내지 마시기 바란다.
페친이 아닌 모르는 사람이 보낸 쪽지는 페이스북이 알림창으로 안내를 하지 않기 때문이다. 그래서 쪽지가 왔다는 것을 내가 즉시 알아채기가 거의 불가능하다. 거의 몇 달 뒤에야 뒤늦게 발견해서 답변을 허겁지겁 했거나 아니면 그 사이에 질문자가 계정을 삭제하여 답변을 못 하게 된 일이 몇 번 있었다.

아무튼, 이 점을 염두에 두고 프로그램 관련 문의는 페이스북 플러그 인 또는 메일 중 한 곳을 이용해서 하셨으면 한다.

Posted by 사무엘

2017/02/15 08:28 2017/02/15 08:28
Response
No Trackback , 17 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1327

서울의 중부에서 동쪽 북부까지 늘어선 산들을 살펴보면 북악산 - 북한산 - 도봉산의 순이다. 지금으로부터 1~2년 전쯤만 해도 본인은 북악산과 북한산의 차이도 몰랐는데 등산 많이 하면서 서울 지리 지식이 참 많이 늘었다. 북한산과 도봉산의 사이에 있는 것이 '우이령 고갯길'이며 본인은 거기도 갔다 와 봤다.

북한산은 서울 주변의 여러 산들과 비교했을 때 워낙 거대하고 등산로가 많은 산이다. 그래서 이번에는 지난번에 갔던 정릉-백운대-우이동보다 더 서쪽으로 가서 형제봉· 문수봉 일대를 오른 뒤, 평창· 구기동 일대로 하산하는 경로를 짜서 북한산을 올랐다.

본인은 예전에 북악산을 북동쪽으로 종단해서 국민 대학교 방면으로 하산한 적이 있었다. 계속해서 북한산을 오르는 등산로가 근처에 존재한다는 것까지는 그 당시 확인했지만, 시간과 체력 문제 때문에 더 진행하지 않고 귀가했었다.
그때 더 가지 못했던 길을 이제야 다시 찾아가서 개척하게 됐다. 지하철 길음 역에서 내려서 버스를 타고 국민 대학교로 러쉬를 갔다.

사용자 삽입 이미지

국민대가 대중적으로는 홍대만큼이나 미대가 유명한 걸로 본인은 알고 있다. 뭐, 주변에 애들 놀 곳이 차고 넘치는 홍대에 비해, 북악산과 북한산 사이의 산기슭에 자리잡은 국민대는 위치와 분위기 차이가 많이 나긴 한다. 국민대는 놀기 좋은 위치가 아니라 등산 가기 참 좋은 위치에 있다.

그리고 본인 개인에게 국민대의 인지도는 강 승식 교수가 대부분을 차지한다고 해도 과언이 아니다. 한국어 형태소 분석기를 연구· 개발하고 있는 컴퓨터공학과 교수여서 말이다. 아, 그렇다고 개인적으로 만나 보고 아는 사이는 아님.
2010년대부터는 U-tagger라는 걸출한 작품 때문에 울산대가 국어 정보처리 경진대회에서 상을 연달아 휩쓸기도 하면서 이 바닥의 막강한 경쟁자로 등극해 있긴 하다. 거기는 주 개발자인 박사 출신 학생은 들어 봤지만 교수님은 누군지 잘 모르겠다.

이런 잡생각을 하다가 다시 본론으로 돌아온다. 국민대 정문을 지나서 더 북쪽으로 가면 사진과 같은 터널이 보이며, 사진 기준 오른쪽에 공터와 함께 등산로가 나온다.

사용자 삽입 이미지

예전에도 몇 차례 언급했듯, 북한산은 평범한 산이 아니라 국립공원이다. 그래서 입구에 이런 간단한 초소가 있고 밤에 '통금'도 존재한다. 하지만 저 초소는 안이 잠겨 있고 근무자는 없었다.

국민대 근처에 있는 등산로 출입구의 명칭은 '북악공원 지킴터'이다. 여느 등산로 입구처럼 '탐방 지원 센터'라는 이름이 붙어 있지는 않다. 아마 '탐방 지원 센터'보다는 더 간소화된(?) 시설이 아닌가 싶다.
그리고 바로 옆에 대학교가 있다 보니..;; 네임드급 산의 등산로 출입구라고 해서 식당과 등산용품 매점이 즐비하다거나 하지는 않은 것도 이색적이었다.

아, 등산 당시의 개인 근황과 관련된 중요한 사실을 지금까지 얘기를 안 했구나.
본인은 지금까지 거의 모든 등산을 꼭두새벽이나 그에 준하는 매우 이른 아침에 해 왔다. 조금이라도 더위를 피하기 위해서다.
하지만 이 등산은 점심 시간이 지난 오후 2시 무렵에 시작했다. 그 이유는 이 등산은 평범한 정규 스케줄에 근거해서 진행한 게 아니었기 때문이다.

하루는 4년 반이 넘게 아무 탈 없이 잘 썼던 맥북이 아무 징후도 없다가 하드디스크 케이블의 노후화로 인한 인식 + 부팅 불가라는 중대한 기능 고장을 최초로 일으켰다. 교체 부품을 주문해서 받아야 하기 때문에 당일 즉시 수리는 안 되었으며, 컴을 얄짤없이 며칠 맡겨야 했다.
당연한 말이지만 애플 공인 서비스센터는 무슨 삼성이나 LG전자 서비스센터처럼 곳곳에 많이 있지 않다. 회사와 가까운 분당 소재의 센터들은 아이폰만 취급하지 컴퓨터의 수리는 되지 않아서 서울 센터들밖에 선택의 여지가 없었다.

이제 며칠간 날개셋 코딩은 어차피 못 할 텐데, 맥북 없이 할 수 있는 다른 일들을 그 동안 몰아서 미리 처리하는 쪽으로 개인 스케줄을 재조정했다. 그래서 오전에 서비스센터를 들렀던 당일의 오후에 등산을 급히 가게 된 것이다. 본인은 노트북 PC의 고장에 대비해서 이런 식으로 시간 손실을 최소화하는 Plan B 전략을 보유하고 있다.

또한 이 날은 낮 기온도 10도가 안 될 정도로 매우 추웠던 덕분에 한낮에도 무더위 걱정 없이 높은 산의 등산이 가능했다. 단지, 낮이 매우 짧아져 있어서 등산 시간에 제약이 심했던 게 아쉽다. 오후 2시도 정말 아슬아슬했다.

사용자 삽입 이미지

'북악공원 지킴터'의 등산로는 이런 모양으로 시작되었다. 오르막이 계속됐다. 시기가 시기이다 보니 마지막으로 등산을 갔을 때보다 단풍은 더욱 진행돼 있었다.
나중에 갈림길이 몇 번 나왔는데, 길을 잘못 들어서 북악산이나 정릉 탐방 지원 센터 방면으로 빠지지 않게 주의했다. 나의 목표는 '형제봉 + 대성문'이었다. 그러기 위해서는 초기에는 심곡사· 영불사라는 절을 찾아가면 됐다.

사용자 삽입 이미지

국립공원 특유의 울타리 쳐진 흙길과 문명화(?)의 흔적은 영불사까지가 끝이었다. 그 뒤부터는 여느 산처럼 숲이 우거지고 비좁고 가파른 산길 산행이 시작됐다. 해발 287m에, 대성문까지 약 2.5km가 남았다는 이정표를 지난 지 얼마 안 됐다.

여기서 능선에 도달할 때까지는 별다른 볼거리가 없었다. 전망대나 계곡이나 특이한 자연· 인공물 같은 거 없고, 묵묵히 산을 오르는 것 말고는 할 게 없었다. 중간에 형제봉에 근접했으며 거기로 가는 갈림길도 있었지만 본인이 못 보고 그냥 지나친 것 같다.

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

드디어 일말의 전망대 비슷한 바위가 나왔다. 여기서는 전망이 훤히 다 보였다.

사용자 삽입 이미지

그리고 다시 울타리 쳐진 흙길이 나왔다. 여기는 벤치 하나 없고 전망대가 있는 것도 아닌데 공간이 굉장히 넓다.

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

한참을 더 올라간 뒤에야.. 드디어 첫 목적지인 북한산성 대성문에 잘 도달했다.
예전에 정릉에서 북한산을 올랐을 때는 보국문에 도달한 뒤 동쪽의 대동문 쪽으로 갔다. 이번에는 보국문의 서쪽인 대성문에 도달한 뒤, 또 서쪽의 대남문으로 갔다. 여기 고도는 이미 620m쯤 된다.

사용자 삽입 이미지

보국-대동과는 달리 대성-대남은 거리가 무척 짧은 편이다. 사진에서 보는 것처럼 잠시 하강만 하면 곧 대남문이며, 성곽 전방의 저 봉우리는 그 이름도 유명한 문수봉 정상이다.
허나, 등산을 너무 늦게 시작했다는 시간상의 한계(이미 오후 3시가 다 돼 감), 그리고 어차피 성곽을 따라 그대로 오르지도 못한다는 이유(안전상의 문제로 우회 등산로 이용) 때문에 본인은 문수봉은 가지 않았다. 그냥 이 사진만으로 만족한 뒤, 대남문에서 하산을 선택했다. 결과적으로는 그게 바람직한 선택이었다.

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

여기가 대남문이다. 벌써부터 태양의 고도가 극도로 낮아지는(= 날이 저묾) 게 티가 난다. 이러면 찍은 사진의 색감과 명도· 채도도 별로 안 좋고 특히 역광은 감당할 수가 없어서 풍경 사진 남기는 데는 큰 악재가 된다.

사용자 삽입 이미지

대남문에서 구기동 방면으로 하산을 시작했다. 저기까지도 대략 2.5km 정도라고 한다. 처음에는 통나무 계단이 있었지만 그게 끝난 뒤부터는 흙길이 아니라 돌길이 굉장히 길게 지겹도록 이어졌다.

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

돌길은 언제부턴가 계곡으로 바뀌었다(구기 계곡). 산 중턱에는 계곡을 건너는 다리도 몇 개 있었지만 물은 바짝 말랐거나 고인 웅덩이 형태로만 있었다. 하지만 아래로 계속 내려가자 그래도 나름 흐르는 맑은 물이 몇 군데 있었다.
해수욕장뿐만 아니라 이런 계곡에서 물놀이 하는 것도 좋다. 물론 국립공원들은 계곡이 죄다 민간인 출입 금지이기 때문에 저것들은 그림의 떡일 뿐이다.

추워서 콧물이 나고 손이 시려운 지경인데도 본인은 물놀이 생각을 하면서 산을 내려갔다. 몸은 별로 안 추운데 손가락 같은 말단은 어쩔 수 없이 추위의 영향을 받고 있었다.

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

구기 탐방 지원 센터를 지나서 드디어 하산을 마쳤다. 서울 종로구 산기슭 그린벨트 지대에 이렇게 땅밟기를 하게 됐다. 여기엔 정치인들이 많이 산다는데...

버스가 다닐 정도의 큰길에 도달하니 '현대'라는 이름이 붙은 아파트도 아니고 3층짜리 벽돌 빌라가 있었다. 이건 물론 고도 제한 때문에 건물을 저렇게 지은 것이지 싶다.
지도를 보니 지금까지 말로만 듣던 '이북 5도청'이 여기서 불과 몇백 m, 버스 한두 정거장 남짓한 그리 멀지 않은 거리에 있었다. 그러나 5km가 넘는 산길을 다니고 와서 다리에 근육통을 호소하는 상태에서 선뜻 걸어서 갈 수 있는 거리는 아니었다. 또한 여기저기 돌아다니면서 풍경 사진을 찍기에는 이미 날이 많이 춥고 어두워져 있었다.

결국 선택의 여지가 없이 귀가했다. 이북 5도청을 일부러 안 찾아가고 하산길에 자연스럽게 구경하려면 구기보다 더 서쪽의 비봉 탐방 지원 센터 방면으로 하산했어야 했다.
그러고 보니 여기는 구기 터널과도 꽤 가까이 있었다. 거기를 지나면 이미 지하철 3호선과 6호선이 나오는 은평구가 나온다.

이북 5도청을 구경하지는 못했지만 그 대신 지금까지 말로만 듣던 한국 고전 번역원은 버스 차창 밖으로 잠시 구경했다. 조선 왕조 실록은 전산화와 번역이 완료됐지만 그보다 분량이 더 방대하고 디테일한 승정원 일기는 여전히 완역이 요원한 상태라고 한다.
한편, 북한산은 비록 서울 북부의 확장을 가로막는 지형 장애물이긴 하지만, 역설적으로 그 덕분에 나름 군사· 안보상의 의미를 지니고 있고 또 시민들에게 굉장히 좋은 휴식처 역할도 한다는 게 느껴졌다.

북악산, 인왕산, 남산 (, 그리고 낙산)에 있던 성곽은 한양도성이다. 그러나 북한산에 있는 성곽은 북한산성이며 성남 쪽의 산엔 잘 알다시피 남한산성도 있다.
남한산성 일대는 6· 25 때 부산이 그랬고 고려 시대 때 강화도가 그랬던 것처럼 유사시에 임시 수도 역할을 할 수 있게 행궁이 있다. 저긴 워낙 천혜의 요새이기 때문에... 실제로 병자호란이 치러졌으며 지금은 도로가 닦여서 안에 자동차가 들어갈 수 있고 심지어 마을버스까지 다닌다.

그 반면 북한산성은 발로 힘들게 등산을 하지 않으면 접근할 방법이 없으며, 군사 목적으로 건축했음에도 불구하고 이후에 여기서 전쟁을 치른 내력이 없다.
그러니 북한산성은 접근성이 좋은 한양도성과, 역사 내력과 유적이 풍부한 남한산성에 밀려서 상대적으로 존재감이 없는 것 같다. 남한산성과 비교했을 때 마치 북극과 남극, 그리고 지구형 행성과 가스형 행성의 차이를 보는 것 같다.

또한, 남한산성은 거기 유적지 일대만 도립공원인 반면, 북한산성은 그냥 산 전체가 통째로 국립공원이니 격이 차이가 있다. 뭐, 유적지 때문이 아니라 자연 환경 때문에 그렇게 된 것이긴 하지만 말이다.

Posted by 사무엘

2017/02/12 08:36 2017/02/12 08:36
, ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1326

다음 버전 개발 근황 3

<날개셋> 한글 입력기의 다음 버전 8.8은 이례적으로 개발 근황글만 무려 3차분까지 올라오게 됐다.
개발 완료 조건은 "원래 생각하고 있던 굉장히 어려운 기능을 다 구현하는 것"인데.. 원래 목표는 달성되지 못한 상태에서 온갖 자잘한 다른 개발 작업만 애드립으로 엄청나게 쌓이고 쌓였기 때문이다.
이것만 감안해도 8.8을 넘어 8.85나 8.9로 가야 하지 않나 고민될 지경이 됐다.

※ 외부 모듈 분야

1. "조합을 자체 처리하는 프로그램에서만 동작" 옵션

<날개셋> 한글 입력기가 외부 모듈이 개발된 이래로 왜 이런 걸 지금까지 생각 못 했을까 싶은 기능이 사용자의 기능 제안 메일과 갑자기 떠오른 아이디어, 발상의 전환을 토대로 하나 추가되었다.
외부 모듈 제어판의 "시스템 계층 - 고급 시스템 옵션" 탭에 있는 "조합을 자체 처리하는 프로그램에서만 동작" 옵션이다.

IME들은 글쇠 입력을 가로채서 한글 같은 조합을 생성 후, 그 결과를 응용 프로그램으로 보낸다. 워드 프로세서나 에디트 컨트롤은 텍스트 입력을 전문적으로 처리하는 프로그램이니, IME가 보낸 문자열을 즉각 본문에다 삽입하여 화면에 직접 표시한다. 그러나 그런 처리를 하지 않는 프로그램에서는 운영체제 또는 IME가 자체적으로 자그마한 창을 꺼내서 조합 중인 문자열을 표시해 준다.

기술적으로 이런 동작의 차이를 IME-awareness라고 표현한다.
그런데 IME가 자체적인 조합 창을 꺼내야 하는(IME-aware하지 않음) 프로그램이라면 십중팔구 한글을 입력할 일이 없고 한글 모드가 존재할 필요가 없는 상황이다. 문자 입력을 받는 상황이 아니며, 각각의 알파벳 글쇠들이 어떤 기능을 수행하는 단축글쇠인 경우가 대부분이다.

저 옵션이 켜져 있으면.. 먼저 조합을 보내 봤는데 프로그램이 조합 문자열을 제대로 표시하지 않고 IME로 되돌려보내는 경우, 조합을 없애고 원래 글쇠를 응용 프로그램으로 다시 보내 준다~!
가령, 그래픽 툴의 경우 B는 브러시, F는 채우기, X는 텍스트, S는 영역 선택인데, 한글 모드라 하더라도 해당 글쇠를 누르면 쓸데없이 ㄹ, ㄴ 같은 조합 창이 생기는 게 아니라 기능 모드가 바뀐다. 그러면서 텍스트 입력은 곧장 한글 모드로 할 수 있게 된다.

물론, 아주 옛날에 만들어져서 국제화 관념 따위 없고 유니코드조차 지원하지 않을 정도인 구닥다리 외국산 프로그램 중에는 무려 텍스트를 입력받는데도 IME-aware하지 않은 경우가 있다. 옛날에 Visual C++ 6의 IDE조차 그러했다. 그런 프로그램에서 한글을 입력하려면 저 옵션을 켜서는 안 된다. 그러나 저 옵션은 요즘 같은 시대엔 거의 모든 상황에서 사용자의 번거로움을 해소해 주는 매우 편리한 기능이 될 것이다.

그리고 반가운 소식이 이것만 있는 게 아니다.
저렇게 조합이 도로 튕겨서 돌아오는지 감시하기 위해서는 약간의 성능 부하가 필요한데, 이걸 해결하는 과정에서 Google Chrome + 하드웨어 가속에서 조합 덧나는 문제도 같이 해결하게 되었다. 외부에 의해서 조합이 강제 중단되는 상황을 감지하는 방법을 추가적으로 알아냈기 때문이다.

물론, 마소 IME가 날개셋과 동일한 방법을 써서 해결한 것 같지는 않기 때문에 이 역시 완전히 근본적이고 원초적인 문제 해결이라고 여기기는 어렵다. 하지만 "조합을 자체 처리하는..." 옵션을 켜면 일단 Google Chrome 문제도 덤으로 해결되긴 한다는 것을 밝힌다.
이렇듯, '고급 시스템 옵션'에는 구현체들 중 오직 외부 모듈에만 적용되는 온갖 기상천외한 옵션들이 들어있다.

2. 긴 조합이 튕기는 문제 자체 보정

TSF B급 프로그램에서 2글자 이상 길이의 조합을 시작했을 때 조합이 끊기는 골치 아픈 문제 말이다.
단순히 이런 문제가 존재한다고 알려 주기만 하고 "운영체제의 이상한 동작이어서 더 어쩔 수 없음. 사용자가 알아서 조심하시고 조합 시작은 언제나 1글자 단위로 시작하게 노력해 보세요"라고 대응하고 끝내던 것이 이번 버전에서 개선되었다.

처음에 2글자 이상 조합을 덥석 만드는 것만이 문제이지, 처음엔 가상의 1글자 조합을 만든 뒤에 곧바로 원래 길이의 긴 조합으로 대체하는 것은 괜찮다는 특성을 이용하여 내부적으로 일종의 회피, 보정 옵션을 구현했기 때문이다.
이제 두벌식 옛한글 입력기에서 '한' 다음에 곧바로 '하 + ㄴ아래아' 같은 글자를 도깨비불 현상으로 만드는 것도 아무 걱정 없이 할 수 있게 됐다.
비록 조합 중인 문자 자체는 한 글자밖에 안 보이고 그거 제어하는 건 애초에 IME의 영역도 아니기 때문에 어쩔 수 없지만, 최소한 조합이 끊어지고 엉뚱한 동작을 하는 문제는 사라졌다.

세상에 이런 간단한 아이디어를 구현할 생각을 왜 지금까지 안 하고 있었나 모르겠다.
사용자가 굳이 이 옵션을 켜지 않더라도 조합이 끊어졌다 싶으면 프로그램이 알아서 이 옵션을 켜며, 켰다는 사실을 사용자에게 알려 준다.

혹시나 해서 다시 말하는데, 이렇게 2글자 이상의 조합 시작을 막는 건 Windows 운영체제가 거의 일부러 저러는 것이다.
한글 IME는 전통적으로 중국어· 일본어 IME와는 달리, 조합 문자열을 밑줄 대신 깜빡이는 네모 cursor로 표시하는 등 내부적으로 처리가 다르게 돼 왔다. 자체 한글을 구현한 도스용 프로그램들의 관행을 마소에서 벤치마킹 해서 현지화에 반영한 것이다.

그런데 그 대신 한글 IME는 중국어· 일본어 IME와는 달리 조합은 언제나 딱 한 글자 단위로만 만들 거라는 assumption도 들어가게 되었고 그게 한동안은 별 문제가 없다가 유니코드 시대에 옛한글을 구현할 때가 되자 문제가 된 것이다. 옛한글은 내부적으로 여러 개의 글자로 구성되니까.
조합이 한 글자뿐이라는 전제조건이 만족되지 않을 경우 제대로 동작하지 않는 프로그램이 있어서 호환성+방어 차원에서 운영체제가 저런 동작을 하는 것이지 싶다.

3. 한영 상태 동기화 기능의 알고리즘 개선

Windows에서 IME는 dll인 관계로 프로그램들(정확히는 스레드)별로 내부 한영 상태가 다~ 따로 노는 형태이다. 그래서 지난 7.7 버전에서 <날개셋> 한글 입력기의 인스턴스들 간에 사용 중인 입력 설정을 한데 동기화해 주는 옵션이 추가되었다. 한 프로그램에서 ‘세벌식 최종’을 선택하면 다른 프로그램에 가도 세벌식 최종이 자동으로 지정되는 식이다. 그 기능이 이번 8.8 버전에서는 동작이 더 개선되었다. 예전에 별 생각 없이, 혹은 시간이 부족해서 대충 구현했던 기능들을 엄밀하게 다듬었다.

첫째, 이미 실행된 프로그램을 전환할 때뿐만 아니라 갓 새로 실행된 프로그램에 대해서도 아까 전까지 설정되어 있는 글자판을 곧장 따라가게 했다. 이 기능은 지금까지 저게 지원되지 않아서 사실상 반쪽짜리 기능에 불과했다. 새로 실행된 프로그램은 기존 설정을 무시할 뿐만 아니라 자기 설정을 덮어쓰기까지 하기 때문에 동기화 상태를 망가뜨리곤 했다.

둘째, 제어판을 ‘확인’을 눌러서 종료해서 설정을 파일로 저장하고 공통 설정을 확인하는 인스턴스들에 대해서만 글자판이 동기화되고, ‘미저장 확인’을 눌러서 자기 혼자만 독자적인 입력 설정을 쓰는 인스턴스에 대해서는 글자판이 동기화되지 않게 했다. 공통 설정을 쓰는 곳에서 글자판을 바꾼 것이 거기로 가지 않을 뿐만 아니라, 저렇게 고립된 곳에서 글자판을 바꾼 것이 밖으로 나가지도 않는다. 이건 프로그램의 논리 구조상 진작에 당연히 취했어야 할 조치이다.

하지만 어느 곳에서든 제어판을 ‘확인’을 눌러서 종료하고 나면 지금까지 고립되어 있던 인스턴스들까지도 전부 입력 설정들이 한데 동기화된다. 이 논리를 이 기회에 완전히 정립했다.
이거 뭐 양파도 아니고, 2017년이 다 되도록 <날개셋> 한글 입력기는 까도 까도 개선할 게 계속 나와서 내가 심히 힘들다. ㅠ.ㅠ 처음부터 이렇게 엄밀하게 만들어 놓으면 좋았을 것을.

※ 제어판 분야

4. 빠른설정과 유형 파일(*.ist) 열기 기능에 Ctrl+클릭 '복사' 추가

<날개셋> 한글 입력기의 제어판에는 빠른설정이라는 게 있어서 특정 입력 항목(입력 스키마+문자 생성기)에 대해 특정 입력 설정을 곧바로 맞추거나 변형하는 기능이 있다. 다시 말해, 이건 현재 선택돼 있는 입력 항목을 변형해서 A로부터 A'를 만드는 기능이다. 뭐, A를 전혀 참조하지 않고 완전히 새로운 B로 바꾸는 것도 가능하다.

그런데, 빠른설정이 제공하는 대화상자를 Ctrl을 누른 채 '확인'을 눌러서 닫으면..
A로부터 A'를 만들되 기존 A는 그대로 두고 A'를 뒤에다 새로 추가하도록, 다시 말해 새로운 입력 항목을 생성하는 동작을 추가했다.
그러니 '기본 글자판 설정'으로부터 세벌식, 두벌식, 쿼티, 드보락 등등을 계속 추가해 넣고 싶으면 매번 번거롭게 '복사본 생성'을 누를 필요 없이 저 빠른설정을 계속 띄워서 확인 버튼을 Ctrl+클릭만 하면 된다.

ist 파일을 여는 기능도 마찬가지다. 그냥 열면 지금 선택된 입력 항목이 파일의 내용으로 바뀌지만, Ctrl+클릭을 하면 파일로부터 생성된 항목이 지금 항목의 뒤에 추가된다. '복사본 생성' 말고도 새 입력 항목을 간편하게 생성하는 방법이 더 생겼다.

자그마한 개선 사항이지만 넣고 보니 굉장히 편하다.
문자표, 낱자 결합 규칙, 사용자 정의 후보 등에 겉으로 티는 안 나지만 Ctrl+클릭 기능이 지금까지 은근히 많이 들어갔다.
버튼에다 자그맣게 * 표시라도 넣든지 해서 일반 클릭과 차이점이 있다는 시각적인 피드백이 있으면 좋겠는데 아직 그것까지는 신경 쓰지 못했다.

5. 입력 항목의 예전 설정 가져오기 기능 개선

지난 7.7버전부터는 제어판의 어떤 입력 항목에 대해서 스키마나 문자 생성기를 변경(기본 ↔ 고급 사이)한 뒤에도 이전의 입력 설정을 최대한 가져와서 유지시키는 기능이 추가되었다. 하지만 이건 지금까지 미세한 버그가 있었다.
한 입력 항목 A에서 입력 스키마를 먼저 변경한 뒤, 다른 입력 항목 B에서 문자 생성기만 변경하고서 '예전 설정 가져오기'를 시키면..
B가 문자 생성기만 예전 것으로 동기화되는 게 아니라 입력 스키마까지 엉뚱한 A의 것으로 바뀌곤 했다. 이 버그를 고쳤다.

한 입력 항목에서 스키마나 문자 생성기를 변경한 것은 일단 내부 버퍼에 저장되며 이건 다른 입력 항목에서 스키마나 문자 생성기를 또 변경하는 순간 정확하게 사라지게 했다. 이건 위에서 열거했던 아이템들보다는 상대적으로 존재감이 덜한 개선 사항이다.

※ 편집기 분야

6. <날개셋> 편집기 창의 이전 위치와 편집 문서 복원은 첫 인스턴스에 한해서만 적용

본인은 평소엔 <날개셋> 편집기에서 '프로그램의 중복 실행 허용' 옵션을 끄고 지낸다. 하지만 편집기는 구닥다리 MDI 프로그램이며, 창 하나만으로는 멀티모니터를 제대로 활용할 수 없다. Visual Studio 201x의 IDE처럼 문서 창을 도구상자의 도킹 기능처럼 프로그램 창 안팎으로 마음대로 붙이고 떼는 기능이 있으면 좋겠지만, 그런 건 내 프로그램의 관심사가 아니다. 그래서 평소에 프로그램의 중복 실행을 허용하는 걸 염두에 두고 편집기의 동작 방식을 살짝 변경했다.

내 프로그램은 기본적으로 예전의 창 위치와 크기를 기억하며, 옵션을 지정할 경우 예전에 편집하던 문서 목록도 기억하고 다음에 다시 불러들여 준다. 그런데 이 기능은 최초로 실행되는 첫 인스턴스일 때만 동작하고, 그렇지 않은 중복 인스턴스일 때는 무시하게 했다. 둘째 이후의 인스턴스에서는 언제나 임의의 위치에 빈 문서창 하나만 달랑 생긴다.

지금까지는 프로그램의 둘째/셋째 인스턴스도 첫 인스턴스와 완전히 동일한 위치에 생기고(첫 인스턴스의 창의 위치와 크기를 일부러 변경하지 않았다면) 문서도 똑같이 다시 로딩되었기 때문에 프로그램이 중복 실행되었다는 것을 알기 어려웠다. 동일 파일을 서로 다른 인스턴스에서 수정하여 수정 내역이 꼬일 위험도 있었다.

그러나 이제는 편집기가 중복 실행되더라도 창이 서로 겹치지 않으며 이미 열어 놓은 문서가 또 열리지는 않는 게 보장되기 때문에 더 부담없이 중복 실행이 가능하다. 이런 간단하고 유용한 조치를 왜 지금까지 취하지 않았었나 자괴감이 들 지경이다.

7. 기존 창의 활성화 방식 개선

사용자가 어떤 대화상자나 창을 열라는 지시를 내렸는데, 이전에 동일한 창을 열어 놓은 게 존재하고 여러 인스턴스를 생성할 필요가 없는 상황이라면 프로그램은 당연히 기존 창을 활성화시켜서 보여준다. 앞의 6번에서처럼 프로그램을 중복 실행하지 않는다거나, 아니면 날개셋 제어판 같은 modeless 대화상자를 열 때 말이다.

그런데, 그 창이 자체적으로 또 modal 대화상자를 열어 놓은 상황이라면 어떨까?
<날개셋> 한글 입력기의 경우 지금까지 이런 경우에 대한 대비가 돼 있지 않았다. (뭐, 입력기라고 썼는데 주 적용 대상은 사실상 편집기밖에 없긴 하다)
그러던 것이 이번 버전에서 드디어 개선됐다. 제어판에서 빠른설정이나 열기 대화상자를 열어 놓은 상태에서 백그라운드로 갔다가 다시 제어판으로 돌아갈 때..

혹은, 편집 화면 설정에서 색상 대화상자를 추가로 열어 놓은 상태에서 본문 편집 화면으로 갔다가 다시 편집 화면 대화상자로 돌아가라는 명령을 내렸을 때.
이제 <날개셋> 편집기는 해당 대화상자에서 제일 겉에 열어 놓은 modal 대화상자로 알아서 복귀한다. 이런 세밀한 UI까지도 싹 개선됐다.

※ 기타

8. 새로운 한글 입력 예제 데이터

비한글뿐만 아니라 한글 분야의 예제 입력 설정 데이터도 보충했다. (1) 먼저, 예전에 코노 노보루(河野 登) 님이 고안하신 "모음 연타 순아래 두벌식"이 참신함이 인정되어 예제로 들어갔다. 초성 쌍자음은 초성 다음에 중성의 2연타로 입력하는 게 매우 기발하다. 중성의 첫 타는 도깨비불 현상을 일으키니 자연스럽게 종성을 초성으로 분리하고, 그 뒤 2타가 초성을 쌍자음으로 바꾸는 것이다.

한 글쇠가 초성과 중성 경계를 오가기 때문에 이런 입력 방식은 내 프로그램에서 타순 분석 같은 게 제대로 안 될 것이다. 그리고 그 특성상 모음은 동일 글쇠 연타로 결합을 할 수 없기 때문에 ㅒㅖ 같은 것은 ㅐㅐ ㅔㅔ 연타가 아니라 반드시 ㅑㅣ/ㅕㅣ로 입력되게 해야 한다. 그래도 이건 Shift를 안 누르면서 딱히 다른 모호성도 없는 두벌식을 만드는 방법 중 하나로 충분히 고려할 만하겠다.

(2) 그 다음으로 타임스페이스 시스템이라는 회사에서 지금으로부터 10몇 년 전에 고안한 '가림토'라는 입력 방식을 예제로 넣었다. 이것은 모음뿐만 아니라 자음에 대해서도 천지인 스타일의 필획 분해를 시도한 것이다. ㄱ은 가로+세로, ㅂ은 세로+세로+가로+가로 같은 식. 모음은 알다시피 ㅡㅣㆍ 세 요소로 분해되는데 자음은 ㅡㅣ 다음으로 ㅅㅇ 이렇게 네 요소로 분해된다.

한글이 꼬부랑 획이 별로 없고 기하학적으로 굉장히 단순하다 보니 이것도 굉장히 참신하긴 하다. 그러나 빨리 치기 좋은 능률적인 입력 방식이라고 볼 수는 없으며 딱히 실용화되지는 못했다. 더구나 자음을 세벌식도 아닌 두벌식으로 만들면 경계의 모호성을 감당할 수가 없게 되며, 실제로 저 방식은 10키 환경 기준으로 ㅇ만 두벌식으로 두고 세벌식으로 만들어졌다. 뭐, 내 예제에서는 어차피 컴퓨터 키보드로 갖고 노는 거니 ㅇ도 초· 종성 구분하여 세벌식으로 집어넣긴 했다만.

얘는 자음의 입력이 처음 시작돼서 아직 가로줄 세로줄 같은 것밖에 없는 초기 상태가 있다. 이런 미완성 낱자는 가상 낱자+낱자 치환을 이용해 표시한다.
또한, 모든 겹모음과 겹받침을 입력 가능한 상태가 아니라 초성과 중성의 기본 낱자만 입력 가능하며, 나머지는 이번 버전에서 들어갈 핵심 중의 핵심 기능인 '복합 낱자 입력 로직 생성기'를 이용해서 합성해서 생성하면 된다. 이런 입력 방식을 분석하면 얼마나 복잡한 규칙이 파생돼 나오고 모호성이 얼마나 발생하는지를 직접 확인할 수 있다.

Posted by 사무엘

2017/02/09 08:37 2017/02/09 08:37
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1325

1. WNDCLASS와 HCURSOR

GUI 환경에서 키보드로 글자 입력을 받기 위해 캐럿(caret, 혹은 cursor)이라는 깜빡이는 세로줄이 나타난다면, 마우스의 입력을 받기 위해서는 마우스 포인터라는 게 떠 있다. 키보드 문자 입력과 마우스는 상호 배타적인 관계이다 보니, 문자 입력이 시작되면 마우스 포인터는 화면을 가리지 말라고 쏙 사라지곤 한다. 그 반면, 키보드 단축키와 마우스는 전혀 배타적이지 않고 상호 보완적이므로 이 경우는 마우스 포인터가 사라질 필요가 없다. 간단히 말해 스타를 하는 경우를 생각하면 된다.

Windows 운영체제 내부에서 생성되는 모든 창(window)들은 마우스 포인터가 자기 영역을 지날 때 어떤 모양의 포인터를 표시할지를 자유롭게 지정할 수 있다. 가장 static하고 간단한 방법으로는 윈도우 클래스를 등록할 때 WNDCLASS의 hCursor 멤버에다가 지정해 주면 된다.

HCURSOR라는 타입은 마우스 포인터의 모양을 나타내는 자료구조의 포인터이다. 마우스 포인터는 아이콘(HICON)과 거의 동급으로 취급되며, 아이콘에다가 중심 위치(hot spot) 정보만이 추가되었을 뿐이다. 화살표 그림의 경우 화살표가 가리키는 뾰족한 지점이 바로 hot spot의 위치가 되는 것이다.

그리고 그 아이콘이라는 것은 개념적으로 AND 연산용 비트맵(마스크)과 XOR 연산용 비트맵(그리기)이 추가된 정사각형 비트맵(HBITMAP) 쌍이다.
마우스 포인터 자체를 프로그램 코드를 통해 동적으로 생성하고자 한다면 이런 관계에 대해서도 이해할 필요가 있다. 이런 구조 덕분에 배경색을 반전시키는 마우스 포인터도 만들 수 있다. 또한, Windows에서 아이콘과 마우스 포인터가 매우 유사하게 취급된다는 것은 GetIconInfo 함수나 ICONINFO 구조체의 스펙을 보면 금방 수긍할 수 있다.

색깔 중에 system color가 있고 DC 오브젝트들(브러시· 펜 따위) 중에도 stock object가 있으며, 클립보드 포맷 중에 표준 포맷(CF_TEXT ...)이 있는 것처럼.. 마우스 포인터 중에도 용도가 고정되었고 운영체제 차원에서 모양을 공통으로 관리하는 것이 몇 종류 있다. 이런 공용 포인터의 예로는 일반 화살표, 모래시계, 입력란용 I-beam 등 우리에게 친숙한 것이 있으며, 이들은 제어판을 통해 그 모양을 바꿀 수 있다. 응용 프로그램에서는 LoadCursor(NULL, IDC_*)를 호출해서 이들의 HCURSOR 값을 얻을 수 있으며 이를 응당 클래스 등록 시에 사용하면 된다.

그래픽 에디터라든가 게임 급으로 정말 아주 튀는 GUI를 제공하는 프로그램을 만드는 게 아니라면, 공용 포인터 말고 다른 독자적인 포인터를 쓸 일은 잘 없을 것이다. 하지만 튀지 않는 일반 업무용 프로그램에서도 custom 포인터가 필요한 경우가 가끔은 있다.

  • 워드 프로세서의 경우, IDC_IBEAM의 변형이 필요할 때가 있다. 이탤릭체 글자에서는 포인터의 모양도 살짝 기울어지며, 세로쓰기 모드에서는 포인터의 모양 역시 90도 돌아간다.
  • drag & drop 상태를 표시하기 위해, 화살표 밑에 사각형 테두리와 [+] 마크가 붙은 포인터가 필요할 때가 있다. 이것도 의외로 공용 포인터에는 존재하지 않으며, ole32.dll 내부에 있는 비공식 리소스를 몰래 뽑아 와서 쓰는 경우가 많다.
  • 먼 옛날, IDC_HAND가 존재하지 않던 Windows 95/NT4에서는 winhlp32.exe의 내부에 있는 손가락 링크 모양 비공식 리소스를 몰래 뽑아 와서 하이퍼링크를 구현할 때 쓰기도 했다.

LoadCursor는 원래 모듈(EXE/DLL)의 리소스로부터 마우스 포인터 그림을 추출하는 함수이다.
CreateCursor 함수는 HBITMAP을 받는 게 아니라 쌩짜 AND/XOR 비트맵 배열만을 입력받아서 포인터를 생성해 주는데, 그 말인즉슨 얘는 애초에 모노크롬 포인터밖에 못 만든다는 뜻이다. 컬러를 지원하지 않는다.

그러고 보니 마우스 포인터는 마치 GIF처럼 애니메이션 가능한 버전도 생겨서 단순 아이콘과 차별화가 이뤄지긴 했다. ico 파일에는 크기와 화질이 다른 여러 아이콘들이 있을 수 있다면, ani에는 동일 아이콘의 여러 프레임이 들어갈 수 있게 된 것이다. 교집합인 정보가 있지만 서로 완전히 호환되지는 않는 미묘한 관계가 됐다.

2. WM_SETCURSOR와 SetCursor 함수

윈도우 클래스를 등록할 때 hCursor 멤버에다가 NULL을 지정하면 그 윈도우는 마우스 포인터가 기본적인 화살표로 지정된다거나, 아니면 말 그대로 아무것도 없는 올투명 이미지가 지정되어서 포인터가 사라진다거나 하지 않는다.
어찌 되는가 하면, 이 윈도우 영역으로 들어오기 직전에 유지되었던 마우스 포인터가 변경 없이 그대로 유지된다..! 마치 C언어에서 초기화되지 않은 변수처럼 undefined 상태가 되는 것이다.

이런 동작을 원하는 프로그래머나 기대하는 사용자는 전무할 것이다. 그러므로 클래스 차원에서 지정된 기본 포인터가 없는 윈도우는 자신의 윈도우 프로시저 내부에서 매번 실시간으로 마우스 포인터를 지정해 줘야 한다. 어떻게? WM_SETCURSOR라는 메시지가 왔을 때 SetCursor라는 함수를 호출해서 하면 된다.
아니 사실은 클래스 포인터가 이미 지정돼 있는 창이라도 필요하다면 이렇게 마우스 포인터를 실행 중에 얼마든지 변경할 수 있다. 동일한 웹브라우저 창이라도 포인터가 링크 위를 가리키고 있을 때는 조건부로 손가락 모양으로 바뀌어야 할 테니까 말이다.

윈도우 안에서 마우스 포인터가 움직이면 WM_MOUSEMOVE만 오는 게 아니라 그 전에 WM_SETCURSOR부터 날아온다. 그에 반해 SetCursor는 굳이 WM_SETCURSOR 메시지 타이밍이 아니어도 아무 때나 언제든지 호출 가능하다. 이 함수 자체는 지금 포인터가 나 자신이(스레드 단위) 생성한 윈도우에만 있으면 위치 불문하고 포인터 모양을 즉시 바꿔 준다. WM_PAINT 타이밍 때에만 사용 가능한 BeginPaint/EndPaint처럼 특정 메시지에 매여 있는 게 아니라는 뜻이다.

그럼 왜 굳이 WM_SETCURSOR라는 메시지가 따로 있는 것일까? 그 이유는 저렇게 일상적으로 마우스 포인터가 움직였을 때 빼고는 얘는 WM_MOUSEMOVE와는 설계 철학과 생성 조건이 매우 다르기 때문이다.

  • 윈도우가 disable됐을 때는 그 윈도우로 마우스가 움직이더라도 통상적인 WM_MOUSEMOVE가 오지 않는다. 그러나 이때에도 WM_SETCURSOR는 전달하는 상황 정보(hit-test code)만 달라진 채 언제나 온다.
  • hit-test code가 같이 온다는 점에서 유추할 수 있듯, WM_SETCURSOR는 클라이언트와 논클라이언트를 가리지 않고 온다. 그에 반해 WM_MOUSEMOVE는 클라이언트 영역 전용이고 WM_NCMOUSEMOVE가 따로 있다.
  • 마우스가 capture된 뒤부터는 마우스가 움직이면 반대로 WM_MOUSEMOVE만 오지 WM_SETCURSOR는 오지 않는다. 마우스의 포커스가 포인터 위치와 무관하게 이 윈도우에 집중되었기 때문에 포인터의 모양도 잠시 고정된다.
  • 그리고 결정적으로.. WM_MOUSEMOVE는 지금 화면을 대면하고 있는 최하위 child 윈도우에 직통으로 전달되는 반면, WM_SETCURSOR는 최상위 parent 윈도우에 먼저 전달되어서 얘들이 처리를 포기/거부했을 때에만 child로 내려간다.

마지막 항목이 중요하다. 이런 메커니즘의 차이로 인해 두 메시지는 서로 호환성이 전혀 없으며 별도의 메시지로 분리되어야만 한다. 이 메시지가 그냥 이 시점에서 표시할 HCURSOR 값만 곱게 얻는 게 목적이라면 WM_SETCURSOR 메시지는 SET이 아니라 GET이라는 동사가 붙어서 WM_GETCURSOR, WM_QUERYCURSOR처럼 명명됐을 수도 있다. 대화상자의 WM_GETDLGCODE 메시지처럼 그냥 return (LRESULT)LoadCursor(...)의 형태.
그런데 그게 아니기 때문에 자기가 직접 마우스 포인터를 재지정할 의향이 있다면 WM_SETCURSOR가 올 때마다 SetCursor를 수동으로 매번 호출도 해야 하고, 그러면서 리턴값도 0이 아닌 값으로 되돌려야 한다. 특히 DefWindowProc를 호출해서는 안 된다.

DefWindowProc가 WM_SETCURSOR 때 하는 일 중에는 논클라이언트 영역에서 포인터를 화살표 내지 창의 크기 조절 손잡이 모양으로 바꾸는 것이 포함돼 있다.
하지만 클라이언트 영역에서 DefWindowProc은 "난 마우스 포인터 모양을 자체적으로 처리할 의향이 없으니, (1) 내 부모 윈도우에서 이의 없으면 (2) 최종 처리를 내 자식 윈도우에 맡기겠소"라는 의미가 된다. Def..없이 return 0은 (2)만을 담당한다.

참고로, SetCursor(NULL)을 하면 클래스 WNDCLASS::hCursor = NULL과는 달리 비로소 마우스 포인터가 화면에서 사라진다. 이것은 HideCursor / ShowCursor 함수와 비슷한 효과를 낸다. 이들 함수는 포인터의 레퍼런스 카운터를 1 증가나 감소시켜서 카운터가 양수이면 포인터를 계속 표시시키고, 그렇지 않으면 계속 감추고 있는다. 캐럿을 표시하거나 감추는 ShowCaret / HideCaret과 비슷한 원리로 동작한다.
그에 반해 SetCursor(NULL)은 효과가 일시적이므로 해당 윈도우가 WM_SETCURSOR에서 계속해서 SetCursor(NULL)을 해 줘야만 포인터가 없는 상태가 유지된다.

사소한 사항이다만, WM_MOUSEMOVE는 메시지 큐에 post 형태로 전해지는 반면, WM_SETCURSOR는 리턴값을 꼼꼼히 확인해야 하기 때문에 언제나 sent된다는 차이도 있다. 마우스 메시지 훅킹 같은 걸 한다면 요런 차이가 민감하게 와 닿을 것이다.

3. 대기 상태 표현하기

프로그램이 파일을 읽고 쓰고 복잡한 계산을 시작해서 대략 0.n초 정도 짤막하게 사용자의 응답(더 정확히는 운영체제 메시지)에 반응을 하지 않게 됐다면, 이에 대해 가장 간단하게 피드백을 주는 방법은 SetCursor(LoadCursor(NULL, IDC_WAIT))를 해서 마우스 포인터를 그 악명 높은 모래시계 모양으로 바꾸는 것이다.

물론 처리가 끝났다면 포인터 모양을 원상복구 해야 한다. 이것은 SetCursor의 리턴값을 보관하고 있다가 도로 전달하는 것으로 쉽게 구현 가능하며, 이렇게 시작과 끝을 생성자와 소멸자에다 넣어서 간단한 C++ 클래스를 구현할 수도 있다. MFC에 있는 CWaitCursor가 그 예이다.
모래시계로 변해 있던 동안 마우스 포인터가 조금이라도 다른 곳으로 이동했거나, 위치가 안 바뀌었더라도 그 사이에 포인터 아래의 윈도우가 바뀌었다면.. 프로그램이 의식을 회복(?)했을 때 WM_MOUSEMOVE와 그에 상응하는 WM_SETCURSOR도 오기 때문에 포인터 모양이 자동으로 갱신되긴 한다. 그러나 그런 외부적인 변화가 전혀 없었더라도 포인터 모양이 원상복귀 되어야 하니까 말이다.

마우스 포인터의 움직임은 일종의 하드웨어 인터럽트 형태로 발생하며, 응용 프로그램이 WM_SETCURSOR 메시지에 응답하지 않고 있더라도 포인터가 움직인 것에 대한 반응은 해야 한다. 그렇기 때문에 프로그램이 처리를 열심히 하고 있는 동안에는 좀 전에 지정된 모래시계 모양이 유지된다. 물론, 포인터가 정상적으로 응답 중인 다른 프로그램 창 위에 놓여 있으면 거기 모양으로 바뀌며, 한 프로그램이 수 초 이상 너무 오랫동안 응답을 안 하고 있으면 그건 그것대로 문제가 된다. 내 프로그램 창이 고스트 윈도우로 바뀌는 일은 없어야 한다.

시간이 굉장히 오래 걸리는 작업을 한다면 프로그램의 디자인 형태가 바뀐다. 작업은 백그라운드 스레드에다 담당시키고 프로그램은 현재 진행 상황을 출력하면서 UI 메시지 반응도 평소처럼 한다. progress 컨트롤이 장착된 대화상자가 이 역할을 하며, 사실 Windows Vista부터는 task dialog로 이걸 간단하게 띄울 수도 있게 됐다.
동영상 인코더처럼 input 데이터를 직접 생성하고 작성하는 기능은 없고, 이미 있는 데이터를 변환하는 일이 전부인 프로그램이라면 별도의 대화상자 없이 자기 main frame window 자체가 통째로 진행 상황을 표시하는 용도로 쓰이기도 한다. <날개셋> 변환기도 이런 형태의 프로그램이다.

이를 좀 더 일반화해서 생각하면 이렇다. 어떤 윈도우가 하는 역할이 자신과 별개이고 독립적인 타 작업의 진행 상황을 관찰하면서 표시하는 게 전부라면, 보통은 그 윈도우 내부의 마우스 포인터를 굳이 별도로 모래시계 모양으로 바꾸지 않는다. 설치 프로그램들이 그 예이다. 다만, Windows Installer 엔진의 경우 본격적으로 설치/제거를 수행하는 마법사가 뜨기 전에 준비 작업을 하느라 자그마한 대화상자가 떴을 때는 마우스 포인터를 거기로 가져가면 모래시계로 바뀐다.

사용자 삽입 이미지

요런 게 대화상자 윈도우에서 WM_SETCURSOR를 처리함으로써 구현 가능하다. 이 메시지는 부모-자식 top-to-bottom 형태로 내려가기 때문에, 부모에서 메시지를 가로채 버리면 자식 윈도우의 의도와 상관없이 마우스 포인터를 모래시계 모양으로 바꿀 수 있다. 밑에 지금 무슨 윈도우가 있는지 핸들도 wParam으로 친절하게 전달된다. 여기서 SetCursor 호출만 하고 리턴값으로 nonzero를 지정하지 않으면, 대화상자 배경들만 포인터가 바뀌고 버튼 같은 각종 컨트롤들은 바뀌지 않게 된다. (위의 스크린샷처럼)

이와 대조적으로, 키보드 메시지는 포커스를 잡고 있는 최하위 윈도우에 직통으로 전달되니(bottm-to-top), 그 위에서 공통 단축키 같은 걸 처리하려면 message loop 차원에서의 pre-processing이 필요한 것이다.

<날개셋> 변환기의 경우 변환하는 파일이 적으면 스레드 없이 그냥 비응답 상태로 빠진 채로 변환을 수행한다. 그러나 수십 개, 수MB 이상 분량 파일을 요청하면 대화상자의 모든 컨트롤들을 disable시키고 progress 컨트롤을 출력하고, 대화상자 내부의 마우스 포인터를 모래시계로 바꾼 뒤 변환을 수행한다. 이때는 어차피 대화상자의 다른 기능들을 전혀 사용할 수 없고 ESC나 [X]를 눌러 중간 취소만 가능하기 때문이다.

그리고 하나 더 생각할 만한 상황은.. 딴 작업이 아니라 대화상자 자기 내부에다 출력할 데이터들을 준비하고 초기화하는 작업이 시간이 좀 오래 걸릴 때이다. <날개셋> 한글 입력기 제어판의 대화상자에도 그런 경우가 몇 가지 있다.
이때는 문제의 콤보나 리스트박스가 빈 채로 먼저 대화상자를 출력한 뒤, 스레드를 만들고 마우스 포인터를 IDC_WAIT가 아니라 IDC_APPSTARTING 모양으로 바꿨다. 대화상자가 출력은 됐지만 아직 초기화가 덜 돼서 백그라운드에서 작업 중임을 이렇게 나타낸다.

요렇게 백그라운드의 스레드 작업이 끝난 뒤에는 마우스 포인터를 어떻게 원상복구 할지가 문제가 된다.
아까처럼 스레드 없던 시절에는 작업하던 사이에 포인터 위치가 바뀌었으면 WM_SETCURSOR와 WM_MOUSEMOVE가 자동으로 생겼다. 그러나 지금은 그렇지 않다. 작업이 수행되던 중에 포인터 이동에 대한 처리는 이미 다 이뤄졌기 때문이다.

마우스 포인터의 이동 없이 아래의 창에다가 WM_SETCURSOR를 인위적으로 생성해서 포인터 모양을 원래 것으로 갱신할 수 있어야 하는데.. 이것만 어떻게 하는지 잘 모르겠다.
일단 본인이 사용하는 방법은 GetCursorPos로 현재 포인터 위치를 얻은 뒤, 그거 그대로 SetCursorPos를 하는 것이다. 위치가 바뀐 게 없음에도 불구하고 이렇게 하면 WM_SETCURSOR와 WM_MOUSEMOVE가 생성되기는 하는 것 같더라.
이 정도면 Windows 프로그래밍에서 마우스 포인터 제어와 관련해서 어지간한 문제는 다 다룬 것 같다.

Posted by 사무엘

2017/02/06 08:35 2017/02/06 08:35
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1324

교도소 이야기

요즘은 사회 전반에 비밀이라는 게 갈수록 없어지고 내부가 개방되고 있다. 어떤 폐쇄적인 집단에 대해서 직접 소속된 당사자가 아니고서는 알 수 없던 내부 사정이 인터넷을 통해 널리 알려진다. 이로 인한 부작용이 전혀 없는 건 아니지만, 그 과정에서 내부의 오랜 비리나 부조리가 폭로되고 시정되기도 한다. 그러니 비밀이 없어지고 투명해지는 것 자체는 대체로 긍정적인 현상으로 보인다.

굳이 북한 주민 인권 같은 거창하고 정치적인 얘기까지 가지 않아도 된다. 폐쇄적인 조직 중 대표적인 예인 군대를 예로 들면.. 2000년대 중후반에 연재되었던 주 호민 씨의 웹툰 <짬>이 미필자나 여성을 상대로 군대의 내부 사정을 대중적으로 잘 알렸다. 그저 긍정적인 면만 부각시키는 관제언론인 국방일보 같은 것 말고 말이다.
그 뒤로 2010년대에는 군대 안에서도 더욱 희소한 병과를 소재로 한 <DP 개의 날> 같은 웹툰까지 발표되었다. <짬>의 주인공이 평범한 육군 운전병인 반면, 저건 주인공이 탈영병 체포조 소속인 헌병이다.

이런 식으로 사회 복지 음지, 소록도, 무슨 특수부대, 극한 직업, 원양어선, 국정원 내부, 대성동 주민 등등..
이 좁은 대한민국 땅에 저렇게 사는 사람도 있나 싶은 이야기들에 본인은 개인적으로 관심이 많다.
그래서 그런지 요즘은 군대 체험으로도 모자라서 교도소 내지 그에 준하는 피의자· 피고인 신분 체험기까지 인터넷에 종종 올라와서 유명세를 탄 게 있다. 직접 범죄를 저질러 보지 않고서는 도저히 경험할 수 없고, 유경험자는 부끄러워서라도 공유를 꺼리니 대중적으로 알려질 일이 극히 드문 아이템인데도 말이다.

예전에 '마사토끼'라는 웹툰 작가가 "마사토끼 아청법에 걸리다"라고.. 기소되어 재판을 거쳐 벌금형을 받기까지의 실화 각색 만화를 공개한 적이 있었다. 이분에 대해서 다른 만화 작품은 모르겠고 "물은 답을 알고 있다"를 풍자하여 탐정 만화를 그린 걸 개인적으로 아주 재미있게 봤었다. (그러고 보니 <빵점동맹>에서는 그림 말고 스토리 작가이기도 했구나.)
그랬는데 자신이 피고인 신분으로 법원에 출두하고 벌금형을 받은 체험기까지도 선뜻 웹툰 소재로 선택해서 공개했다니, 대단하다는 생각이 들었다.

아무 스펙 없던 어떤 지방대 문과 계열 졸업생이 노량진에서 죽어라고 공부한 끝에 영어, 국어, 국사 등의 맥을 차례로 잡고 국가직· 지방직 공무원 시험 합격 3관왕을 달성했다. 누군지 기억은 안 나지만 그 사람은 전문 웹툰 작가가 아님에도 불구하고 꽤 준수한 그림 실력으로 자신의 시험 준비와 시간 관리 요령을 만화로 그려서 연재했으며, 본인은 이걸 본 적이 있다. 이런 성공 자랑 스토리에 비해 법원 다녀 온 이야기는 다시 떠올리고 싶은 유쾌한 경험도 아니었을 텐데 말이다.

그런데 마사토끼보다 더 수위가 센 만화도 나왔다. 바로 "교도소 일기"로, '엄격 진지 근엄' 짤방의 근원지이기도 하다.

사용자 삽입 이미지

위의 그림은 교도소 내부에서 군기를 잡는 헌병뻘 되는 교정직 공무원을 묘사한 것이다. 무슨 나치 시절 SS 요원처럼 검은색 제복 차림이다.

주인공은 제목과는 달리 교도소에서 실형을 산 건 아니고, 구치소에만 있다가 집행유예를 받고 풀려났다. 하지만 일반인들은 그걸 크게 구분하지 않으며, 구치소와 교도소 무슨 용어를 선택하건 만화가 말하고자 하는 주제가 달라질 건 없으니(이런 데에 절대 와서는 안 된다. 범죄 저지르지 말고 착하게 살아야 한다)... 제목을 편의상 교도소 일기라고 뽑았다고 한다. 미결수들은 관대한 처분을 받기 위해 일과 시간에 판사에게 '앙망문'ㅠㅠ을 많이 써서 보낸댄다.

저기를 전근대 용어로는 '감옥'이라고 하고 '형무소'는 일본 본토에서는 지금도 쓰이는 일본식 한자어다. 오늘날 우리말의 공식 명칭은 '교도소'. 죄인을 가둬서 벌을 준다는 의미 대신 얘들을 바르게 교화한다는.. 뭔가 긍정적인 뉘앙스를 넣어서 말을 다시 만든 것이다. 가격을 인상하는 게 아니라 합리화, 재조정하듯이 말이다. -_-;;
영어로는 prison 또는 jail이라고 하는데, 한국어 같은 유치장-구치소-교도소를 영어로 정확하게 어떻게 구분하는지는 잘 모르겠다. jail은 prison보다 동사로 활용도 더 잘 되는 것 같다. "I could have jailed you for doing/saying that!"처럼.

요즘 워낙 교도소의 사정이 좋아지고 공권력의 위상도 땅에 떨어진 덕분에 그냥 차라리 "깜빵이나 갈래요" 심정으로 범죄 저지르는 간 큰 사람까지 등장할 정도라지만..
근본적으로 개인 사생활과 자유가 없는 곳은 아무리 생물학적인 생존이 보장되는 곳이라 해도 사람이 갈 곳이 못 된다.
화장실 이용이 저 따위로 극도로 불편한 거 하나만 봐도 오금이 저릴 것 같다. 저기가 진짜로 국립 호텔이라고 생각하는 건 큰 오산이다.

군대에서 짬밥을 먹는다면 교도소에서는 콩밥을 먹는다. (여담이다만, 왜 '짬밥'만 사이시옷/사잇소리가 적용되어 '짬빱'이 되고 '콩밥'은 그렇지 않은지는 모르겠다. '볶음밥'과 '비빔밥', '물고기'와 '불고기'의 차이처럼 말이다. 이건 국어학계에서도 "그냥 케바케. 정말 원칙이 없다"로 귀착되고 있는 문제이다.)

경찰서 유치장은 무슨 입소대대요, 구치소는 훈련소나 보충대, 진짜 형이 확정되어 가는 교도소는 자대뻘 되려나 모르겠다.
군대에 대한 비하 발언으로 군대가 교도소와 다를 바 없네 하는 말이 있다. 군대와 교도소는 개인의 자유가 없거나 지극히 제한된다는 공통점이 있는 건 사실이다. 하지만 존재 목적이 서로 매우 다르기 때문에 다음과 같은 큰 차이도 있다.

  • 군대에서는 휴대와 관리 효율을 위해서 식당에서 포크 겸용 숟가락 하나만 쓰는 반면, 교도소에서는 끝이 아주 뭉툭한 플라스틱제 숟가락과 젓가락이 쓰인다. (자해 내지 탈옥 도구로 활용 못 하게. 죄수들에게 금속류를 줘서는 위험하다)
  • 군대에서는 병사들의 체력 단련을 강조하고 권장하지만, 교도소에서는 실내에서 신체 운동이 절대 금지다. 하다가 걸리면 징계 받는다. (가혹행위 못 하게)
  • 전투복은 야외 활동 능률을 위해 상의와 하의 곳곳에 주머니가 많다. 그러나 죄수복은 정반대로 주머니 같은 거 없다. 신발에도 명백한 이유로 인해 전투화와는 달리 끈이 일체 없다.
  • 군대에서는 병사들의 선거권이 보장되지만 교도소 수감자들은 그렇지 않다.
  • 군대는 비록 몰래 목 매달아 자살하는 사람도 나올지언정, 영창 화장실이 아닌 이상 화장실 안만큼은 사용 중 완전한 폐쇄를 보장해 준다.
  • 그나마 교도소는 불침번 같은 건 없구나. 일과 시간이 끝나면 다같이 푹 자는 게 보장된다. 다만, 밤중에 화장실 이용은 여전히 편하게 못 한다.

수저조차 흉기가 될 수 있기 때문에 사실은 교도소뿐만 아니라 비행기에서 기내식을 줄 때도 비슷한 조치가 취해지고 있음을 생각해 보자. 실제로 9· 11 테러 때 테러범들은 스테이크 써는 용도의 플라스틱 나이프만 갖고도 승객과 조종사들을 제압했다고 하니까. 그 뒤 미국에서 운용되는 여객기들은 액체 반입 제한에다 스테이크는 미리 다 썰어 놓은 채로 주는 등, 별별 보안 제약이 더 생겼다.

다음으로, 집단 내 서열에 대해서 생각해 보자.
군대에서 훈련소는 같은 날 들어와서 같은 날 나가는 동기들만으로 구성돼 있어서 형태가 제일 단순하다. 자대부터는 병들이 들어온 날이 제각각이어서 짬과 서열과 계급 차이가 존재하지만, 기본적으로 복무 기간은 다들 동일하다. 또한 장교인 소대장 아래로 병 중에서도 완장 찬 분대장이 있어서 후임들을 통제한다.

그에 반해 교도소는 한 방의 수감자들이 들어온 날과 나가는 날에 아무 개연성이 없다. 연령대도 전혀 비슷하지 않다. 그러니 동기는 전혀 아니지만 그렇다고 신참과 말년 서열도 공식적으로는 존재하지 않으며 존재해서도 절대 안 된다. 감방 내부에서 죄수들끼리 군대놀이가 행해지고 일진 같은 조직과 '짱'이 존재하고 간수 끄나풀이 존재하는데 그걸 간수들마저 죄수 관리의 편의라는 미명 하에 묵인· 동조· 방치한다면 교도소가 얼마나 개판이 되겠는가?

물론, 아예 사형수나 극도의 흉악범 또는 죄질과 별개로 멘탈에 문제가 있는 위험 죄수는 독방에 따로 수용되거나 더 엄한(= 햇빛 구경하기가 더욱 어려운) 교도소로 옮겨지긴 한다.
군대에 소규모 징계 시설인 영창이 있듯이, 교도소도 그런 목적으로 독방이 있다. 보는 눈이 없이 혼자 지내는 게 좋을 것 같지만 하루 종일 아무 행동도 못 하고 벽만 쳐다보고 지내야 하니 그건 그것대로 고문이라고 한다. 독방이 무슨 왕중왕도 아니고 교도소 안의 교도소 역할을 한다.

병역 의무가 있는 나라에서 누구든지 가능한 한 군대에 안 가려고 애쓰는 것은 인지상정이다. 허나, 질이 지나치게 안 좋아서 통제가 안 되는 단점이 신체 능력이 뛰어난 장점보다 더 큰 사람은 군대에서도 아무리 사람이 부족해서 난리라 한들 받아들이지 않는다.

만만한 게 죄수들이니까 얘들을 삼청교육대 식으로 인간흉기로 개조시켜서 공작원으로 투입하거나 선원으로 부려먹는 건 인권 문제를 차치하고라도 부려먹는 갑의 입장에서도 영화· 소설에서 보는 것만치 쉽게 가능한 일이 아니다. 언제 딴마음 품고 사고 칠지 모르는 사람을 어떻게 믿고 덥석 위험한 무기나 도구를 쥐어 주고 일을 시킬 수 있겠는가? 일례로, 박통 시절에 실미도에서 몰래 양성되었던 북파 공작원들도 사형수· 죄수 출신이 아니었다.

오죽했으면 일제 강점기 때도 조선인을 상대로 징병제는 갈 데까지 다 간 말기인 1938년이나 돼서야 시작됐다는 점을 기억할 필요가 있다.
군대 안 가려고 장애인으로도 모자라서 전과자가 되는 것까지 불사할 정도로 극단적인 선택을 하는 사람은 요즘 같은 평시에야 많지 않다. 하지만 옛날에 정말 나라가 전쟁에 휘말려서 위태롭고 병사들의 사망률이 높던 시절에는 "군대 가느니 차라리 감옥 가고 만다, 배째!"도 당연히 있었다.

사람이란 살면서 병원에 갈 일이 없어야 하듯이 법원이나 경찰서 같은 곳에도 정말 갈 일 없고 마주칠 일이 없는 게 제일 좋을 것이다. 피해 신고자나 증인 신분으로 가는 거면 최소한 자기 마음은 부끄러울 것 없고 떳떳하겠지만, 그래도 골치 아픈 일에 엮인 상태인 건 변함없지 않은가?

군인과 민간 공무원의 하이브리드인 군무원이라는 직종이 있듯이, 군대와 교도소의 하이브리드인 '국군 교도소'도 있다. 군인 신분으로서 영창보다는 크고(빨간 줄 그이고), 그렇다고 군번 즉각 말소에 민간인 싸제 교도소로 옮겨질 정도까지는 아닌 규모의 죄를 지은 사람이 가는 곳인데.. 이곳 역시 가서 좋을 건 전혀 없는 곳이다.

반대로 그런 업종에 종사하는 사람들은 그에 비례해서 고소득 전문직이다. 남의 인생을 좌지우지하는 스트레스와 책임감이 크고 재미없는 일을 하니까. 영적으로 보자면 저런 직업은 인간의 죄의 결과를 수습하는 직종에 속하기 때문에 저건 인류가 존재하는 한 수요가 절대 없어질 수가 없다. 옛날에 그 고상한 청교도들이 신대륙으로 건너가서 미국을 세운 뒤에도 교도소는 거의 곧장 필요해졌다지 않는가?

가령, 검사라 하면 얼마나 머리가 비상하고 공부 많이 한 사람일 텐데, 그 좋은 머리로 맨날 하는 일이 뭔가 기술을 연구 개발하는 게 아니라 남을 일단 의심하고 나쁘게 보고 기소하고 형량을 판사에게 청구하는 일이다. 정신 건강에 좋은 일은 아니어 보인다. 저것만 하다가 맛이 가 버려서 인격 파탄 막장 싸이코 검사가 나오는 것도 본인은 이해는 할 것 같다. (피의자에게 막말, 가혹행위..;; )

우리나라에 10월 28일은 '교정의 날'이라고 법정 기념일이다. 저건 9월 18일 철도의 날만큼이나 교정 분야의 궂은일에 종사하는 사람들의 노고를 치하하는 날이다. 우리나라가 민간 싸제 교도소가 막 발달한 나라는 아니니, 이 바닥 종사자들은 사실상 다 공무원이라고 봐야 할 것이다.

공무원뿐만 아니라 교도소만 찾아 다니면서 포교· 선교 활동을 하는 종교인들도 있다. 군대보다도 저런 곳이 복음이 더 절실히 들어가야 하는 곳이기도 하니까. 개인 활동을 못 하는 곳에 있으면서 성경이라도 제대로 읽고, 인생과 죄 문제와 죽음 이후 세계에 대해서 진지하게 생각을 해 보라는 것이다.

사람이란 게 꿈에도 생각을 전혀 안 하고 있다가 불의의 교통사고로 덜컥 장애인이 될 수도 있고, 비슷한 이치로 욱 하다가 정말 사소한 실수 때문에 은팔찌 득템에 경찰서 정모를 할 수도 있다. 굳이 우리가 생각하는 그런 흉악한 범죄를 저지르지 않더라도 말이다. 사람이 죽는 급의 큰 교통사고를 내거나 경제 사범으로 몰리는 바람에 철창 신세를 질 수도 있다.
그런 일이 애초에 절대로 일어나지 않기를 바라야겠지만 세상엔 이런 바닥도 있다는 걸 미리 염두에 둔다면 나중에 예상치 못한 비극이 찾아왔을 때 좀 덜 당황할 수 있을 것으로 보인다.

Posted by 사무엘

2017/02/03 08:34 2017/02/03 08:34
, , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1323

1. 임진왜란과 관련된 조선 기생들

임진왜란 때 활동한 기생이라 하면, 경남의 진주성 촉석루에서 적장을 껴안고 장렬히 산화한 논개가 유명하다. 오죽했으면 승부 게임을 할 때 나의 가장 약한 말을 상대방의 가장 강한 말과 자폭시켜서 유리한 상황을 만드는 전술을 '논개 전술'이라고 한다.

그런데 3· 1 운동 때 수원의 유 관순이라고 불리는 다른 여성 열사(이 선경)도 있었듯이, 임진왜란 때도 평양의 논개라고 불리는 '계월향'이라는 다른 기생이 있었다. 일본군 장수에게 겁탈당하자 이왕 버린 몸인데 그를 꾀어서 신임을 얻고, 아군 군사를 몰래 잠입시켜서 그 적장을 참수하는 데 성공했다. 하지만 거사를 치른 뒤 두 사람이 다같이 탈출은 할 수 없어지자.. 전해지는 일화에 따르면 그 아군에게 "나는 어차피 더럽혀진 처지이니 날 죽이고 가 주세요. 님 혼자라도 살아서 나라를 구해야죠" 이렇게 부탁하고 최후를 맞이했다고 한다.

진주, 평양 다음으로는 강원도 고성에 월이(WALL-E? 개드립 -_-;;;)라는 기생이 있었는데.. 얘는 전쟁 중은 아니고 전쟁 전에 염탐을 위해 미리 침투했던 일본의 어느 첩자와 정분이 났다. 그리고 첩자가 그려 놓은 지도를 몰래 엉뚱하게 바꿔 놔서 훗날 왜군을 대거 엿먹이는 데 성공했다고 한다.

이건 딱 봐도 현실성이 낮으며 공로를 검증하기가 대단히 어렵다. 그러니 실존 인물이 아니라 마치 윌리엄 텔 같은 주작 구전 설화일 뿐이라고 반박해도 할 말은 없을 듯하다. 하지만 설화도 아무 근거 없이 무작정 생긴 건 아닐 텐데 그 시절에 고성에서 진짜 무슨 일이 있었나 싶은 생각이 들기도 한다.
일제가 임진왜란에 앞서서, 그리고 한일 병합 전에 경부선 철도 부설을 위해서 자국 첩자를 보내서 한반도를 무단으로 막 측량해 갔다는 건 사실이다. 그런 분위기에 편승해서 조선 자국의 지리 연구가인 김 정호에 대해서는 옥사설을 꾸민 것도 충분히 이해된다.

2. 벨기에의 폭군

세계사에 악명을 떨친 인간 백정 학살자로는 김 일성, 이디 아민, 폴 포트, 마오 쩌둥, 히틀러, 스탈린 같은 유명한 인물이 있다. 그런데 딱 한 명 벨기에 국왕 레오폴드 2세(저기서 4위)는 악행에 비해 상대적으로 매우 생소하다. 본인은 최근에야 알게 됐다.

골수 근본주의 이슬람 국가에서.. 도둑질 하다 걸린 사람의 손목을 자른다는 얘기는 들어 봤다만,
이 미친놈은 피식민지 아프리카(콩고) 흑인들에게 가혹한 노동을 시켜서.. 고무 생산 할당량을 못 채우면 멀쩡한 사람 손목을 잘랐다.
다음에도 못 채우면 팔을 통째로 자르고, 3차 미달 때는 사형.

무슨 내전 지대에서 지뢰 밟아서 다리를 잃은 사람들도 아니고, 저렇게 손목· 팔이 잘린 흑인들 사진이 지금까지도 전해진다. ㅠㅠㅠ

사진 보기 (약혐 주의)

아니, 그냥 평범한 채찍질이나 태형으로 벌 주는 것도 아니고, 손· 팔을 잘라 버리면 로동을 할 수가 없어지는데 그럼 1차 미달 이후부터는 바로 죽으라는 소리였나 싶은 의문이 들기도..

지금 북한에서 사람들이 지위를 막론하고 탈북하는 이유도 뭔가?
저렇게 미치도록 일해서 채워야 하는 할당량을 생각하니 답이 안 나와서 목숨 걸고 탈출하는 거다. 저렇게 목숨을 저당잡힌 채 노예로 사는 사람들이 얼마나 불쌍한가? 그저 한숨만..;
그 당시 영국도 식민지 착취와 아프리카 로동자 인권 유린으로 치면 딱히 할 말 없는 처지였음에도 불구하고 다른 제국주의 가해국들이 보기에도 벨기에는 너무 막장이어서 진상 조사를 벌이고 인권 개선을 촉구할 정도였다고 한다.

이렇게 식민지 지배를 처음 해 보는 후발주자 나라들이.. 경험과 노하우도 없고 그저 피지배자들 기선제압을 하는 걸 목표로 극악무도한 공포 폭력 통치를 시행하곤 했다. 우리나라 일제 강점기도 괜히 무단 통치로 시작한 게 아니었다.
그리고 말이 나왔으니 말인데, 일제의 입장에서.. 조선은.. 그렇게도 악랄하게 수탈 착취한 것에 비해서 솔까말 그리 막 가성비 맞는 식민지도 아니었다. 한반도가 무슨 산유국도 아니고 저렇게 땅 넓고 식량이나 지하자원 넘쳐나는 곳도 아니잖아.. 뭔 뽕을 뽑겠냐? 걍 만만하게 합병해서 덩치 키우고, 특히 대륙 침략의 발판으로 삼기 좋으니까 정한론이 나왔던 거다.

그나저나.. 매국노 이 완용이 1909년에 뜬금없이 바로 저 레오폴드 2세의 서거(?) 추도식에 참석하러 명동 성당에 가 있다가 이 재명 의사에게서 칼빵을 맞았다. 우리나라와는 이렇게도 인연이 연결된다.

3. 이 승만 대통령이 내린 칭호들

우리나라의 초대 대통령 이 승만이 후세에게 남긴 행적은 대한민국이라는 나라 자체뿐만 아니라 각종 이름에서도 은근히 많이 확인할 수 있다. "우리의 이 박사 대통령 각하께서 XXX라는 이름을 하사해 주시였습니다~~"

  • 무궁화호: 지금 같은 완행 간선 열차 말고 1960년 2월에 등장한 디젤 기관차 기반의 경부선 특급 열차였는데, 그 시절에 서울-부산을 6시간 40분 만에 달리는 호화 열차는 지금으로 치면 KTX나 다름없는 포스를 자랑했다. 이 열차의 이름을 대통령이 직접 지어서 붙인 거라고 대한뉴스가 인증했다. 열차 이름 다음으로는 아무래도 군사 분야의 명칭이 많다.
  • 연무대: 논산 육군 훈련소의 별칭. 1952년에 역시 대통령 각하가 붙인 이름이다. 광주의 '상무대'는 어떤가 모르겠다.
  • 을지: 양구에 있는 을지 전망대 내지 을지 대대. '을지문덕' 장군에서 착안해서 대통령이 붙였다. 하긴, 서울에는 '을지로'라는 길이 있는데 그건 이 대통령의 전부터 존재했던 명칭이다. 강원도 여행을 갔다 오면서 알게 됐다.
  • 파로호: 출처는 역시 동일한 강원도 여행이다. 북괴 멧도적 '오랑캐를 격파하다'라는 뜻으로 대통령이 붙인 이름이다.

한때는 이 승만 아래의 어느 아부꾼 부하가 서울특별시의 이름까지 각하의 호를 딴 '우남시'로 하는 게 어떻겠냐고 제안했다고 한다. 알다시피 저 할배는 대통령 이상으로 왕처럼 행세하는 걸 좋아했으며, 커다란 자기 동상과 자기 얼굴 들어간 지폐까지도 만들긴 했다. 하지만 "우남시"는 스스로 생각하기에도 너무 오글거렸는지 제안을 받아들이지 않고 "야 그럼 내가 북괴 김 일성이랑 뭐가 다르게 되냐"라는 식으로 반문했다고 한다. =_=;;;

그 대신 "우남로"라는 도로명은 전쟁 후 1950년대 중반에 닦인 성남시 한 구석의 어느 도로에 붙어 있다.
저 할배는 과시욕이 없는 사람은 아니었다. 큼직한 자기 동상을 세우고, 자기 생일을 국경일 급으로 기념하고, 지폐에다가 자기 얼굴 사진을 그려 넣었다. 그런 부심은 있었지만 그래도 독실한 기독교 신자로서 도를 넘어서는 수준의 개인 우상화와 숭배 강요 같은 짓은 하지 않았다. 오히려 건국 거의 직후부터 성탄절을 빨간날로 지정했으며, 군대에 군종 병과를 별도로 꼭꼭 챙겨서 장병들의 신앙의 자유를 보장했다. (황군을 표방하는 일본군엔 그런 거 당연히 전무했음)

저런 이름들과는 달리, 대통령의 관저의 명칭이 경무대이다가 이 승만 이후에 지금의 '청와대'로 바뀌었는데, 이건 박 정희가 아니라 그 전인 윤 보선 때 그렇게 된 거다. 그리고 박 정희는 이름을 지은 것보다는 현판이나 돌에다 글씨를 쓴 게 더 많이 전해지는 것 같다. 숙정문 현판, 옛 광화문 현판, 국기태권도, "내 일생 조국과 민족을 위하여" 등.

4. 영예로운 유물과 그렇지 않은 유물

우리나라에는 현충원만 있는 게 아니라 파주 적성면에 적군 묘지가 있다. 남한 영토에서 제대로 수습되지 않은 북한군 및 중공군의 유해들을 최소한의 예우만 해서 매장해 놓은 것이다.
조선의 임금 중에 세종대왕 영릉은 멀리 여주의 최고의 명당에 거대한 규모로 조성돼 있다. 성군이 죽으면 무덤을 가장 으리으리하게 꾸며 주는 건 동서고금을 막론한 전통이며, 성경에도 나온다(대하 32:33).

그에 반해 연산군은 조/종 칭호를 못 받았으며 무덤도 '능(릉)'이 아닌 그냥 '묘'가 서울 북부 한구석에 초라하게 놓인 게 전부이다. 사람이 유한한 일생 동안 남긴 행적을 바탕으로 후세들로부터의 평판이 영원히 달라지는 건 내세· 종교관과 관련해서도 우리에게 시사하는 바가 커 보인다.

예전에도 한번 얘기했듯이 6· 25 전쟁 중에 우리 국군이 이룬 최초의 승전은 대한해협 해전이다. 육군이 아닌 해군의 몫이다. 그 전투의 주역이었던 백두산함 자체는 진작에 퇴역했지만 그 군함의 돛대는 해군 사관학교던가 어디에 고이 보존돼 있다. 역사적인 유물이니까 말이다.

그에 반해 천안의 독립 기념관에는 honor가 아닌 dishonor와 관련된 유물이 기념관 한구석에 실외 전시돼 있다. 바로 조선총독부 청사를 철거하면서 남은 일부 건물 잔해들로, 특별히 첨탑도 여기에 놓였다.

사용자 삽입 이미지

전시는 하되, 별다른 설명도 없고 울타리 같은 보호 장비도 전혀 안 두른 채로 내팽개쳐 놨다. 땡볕과 눈비를 고스란히 맞을 뿐만 아니라 관람객이 침 뱉고 심지어 오줌을 싸건 상관 없게 방치했다. 첨탑은 공터의 중앙의 제일 "낮은" 구덩이 비슷한 곳에다가 놔 뒀다. 참 의미심장한 방식으로 전시해 놨다. 일부러 깨 부수고 파괴할 필요는 없지만, 애지중지 고이 모셔 두지도 않은 것이다.

이 사실을 알고 나니 독립 기념관에 언제 직접 찾아가서 저걸 구경하고 싶은 생각이 들었다. 백두산함의 마스트와 조선총독부 청사 첨탑은 이렇게 후세로부터 극과극 정반대 대접을 받고 있는 것이다.
나중에 북괴 정권이 붕괴하고 통일 대한민국이 세워지고 나면 북한 관련, 김돼지 우상화 유물들도 99% 이상은 흔적도 없이 폐기하고 극소수 상징적인 유물만 이렇게 놔둬서 기록 겸 반공 교육 자료로 활용해야 하지 않나 싶다.

5. 탈북자가 북한의 실상을 알리는 방식

탈북자들 중에는 강 철환, 주 성하 기자처럼 현직 언론에 종사하면서 북한 쪽 소식통을 모니터링하고 북한의 실상을 알리는 사람이 있다. 최근에는 신문뿐만 아니라 박 진희 씨처럼 TV에 얼굴이 노출되는 방송사 기자도 등장했다.
언론 기자 입장에서 북한 내부 소식은 너무 극단적이고 엄청난 일이 많은데 검증은 어렵고 제보자의 신변도 보장할 수 없는지라, 취급하기 굉장히 꺼려지는 분야라고 한다.

그런데 이들처럼 제도권 언론에서 활동하는 게 아니라 혼자 강연을 뛰고 책을 쓰고 기자회견을 열면서 상대적으로 음지에서 북한의 실상을 폭로하는 탈북자도 있다. 이런 사람들은 몸을 덜 사리면서 개인적인 탈북 과정이나 수용소 경험담 같은 참혹한 얘기를 막 거론하는 편이다. 남자만 있는 게 아니라 영어 공부해서 TED에까지 강연을 한 걸로 유명해진 이 현서, 그리고 박 연미 같은 젊은 여성도 등장했다. 이렇게 public형과 private형 두 그룹을 나눠서 생각할 수 있는 듯하다.

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

기본적으로 북한의 인권 사정은 매우 참혹하며 탈북자는 인도적으로 대해야 하긴 한다. 그러나 이들 중에도 위장 탈북자, 안보 장사 사기꾼이 있다. 심지어 탈북자 커뮤니티를 이간질하기 위해 북괴가 의도적으로 제3국을 거쳐 보낸 간첩도 있다. 그러니 탈북자의 증언을 교차검증하여 팩트를 걸러 내는 문제가 쉽지 않다. 당장 검증이 안 되는 주장도 마냥 무시하고 버릴 수만도 없기 때문이다.

Posted by 사무엘

2017/01/31 08:23 2017/01/31 08:23
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1322

이 글에서는 1994년에 발매되었던 국산 패키지 게임을 하나 소개하고자 한다. '리크니스'라고 그림체나 게임 진행 방식이 슈퍼마리오와 비슷한 형태인 아케이드 게임이다.
본인은 그 시절에 얘 실물을 해 보거나 구경한 적이 없다. 단지 초딩 말년이던 시절, PC월드 한국어판 1994년 8월호 기사를 통해 소개된 것을 읽은 기억만이 남아 있다. 그리고 그 기억이 최근에 오랜만에 되살아나서 다시 회고를 하게 된 것이다.

1990년대 중반에는 그 날이 오면, 못말리는 탈옥범, 낚시광 같은 여러 국산 게임들이 있었다.
이 시절에 게임은 하드웨어 제어가 용이한 도스용으로 개발되었다. DirectX나 3D 셰이더 언어, 언리얼/유니티 엔진 같은 건 존재하지 않았다. 그 대신 어셈블리를 이용한 교묘한 하드웨어 테크닉이 고급 기술로 취급되었다. 그래픽 모드를 바꾸고, 비디오 메모리를 직접 조작해서 화면이 Doom처럼 쫙 흐르듯이 갈라지고, 사각형이 아닌 형형색색 모양의 2D 스프라이트로 애니메이션을 구현하고..

IBM PC는 게임 전용 하드웨어가 아니다 보니 3차원 그래픽은 고사하고 부드러운 2차원 화면 스크롤을 구현하는 것조차도 보통일이 아니었던 것 같다. Windows API로 치면 ScrollDC 내지 ScrollWindowEx를 구현하는 거 말이다.
스크롤 기술이 더 발전하면 '다중 스크롤'이 된다. 먼 배경은 천천히 스크롤하고, 가까운 기물은 많이 스크롤해서 반쯤 원근감과 입체감을 내는 것 말이다.

저 리크니스도 그렇고, 더 옛날에 id에서 Doom 이전에 개발했던 커맨더 킨을 보면 자기들의 독자 노하우를 동원해서 게임기를 방불케 하는 빠르고 부드러운 스크롤을 구현했다고 자랑을 했다. 스크롤을 못 하면 페르시아의 왕자 같은 페이지 단위 스크롤밖에 구현할 수 없을 것이고 그건 단조롭다. Titus에서 만들었던 고인돌(Prehistorik) 1편과 2편의 스크롤의 차이도 생각해 보시라.

게임용 그래픽 아티스트들도 포토샵이나 MAX, Maya가 아니라 딜럭스 페인트가 생계 도구였다. 트루컬러 같은 건 없고, 256색에서 팔레트 배분을 잘하고 도트 노가다를 열나게 하는 게 일이었다.
320*200이 지금으로서는 상상하기 힘든 워낙 저해상도이니, 막 크고 화질 높은 그림을 그릴 필요가 없는 건 다행이었다. 그러나 스프라이트 말고 고정된 그림은 가장자리 안티앨리어싱을 잘해서 저해상도에서도 최대한 부드럽게 보이게 해야 했다.

1990년대에 그런 불모지 영역을 개척했던 1세대 게임 개발자들이 김 동건· 이 은석(85되었수다/삭제되었수다), 정 재성(그 날이 오면) 같은 분들이다. 그리고 같은 연배의 개발자로 김 학규라는 분이 있으며, 이분이 옛날에 소프트맥스의 아트크래프트 스튜디오에 소속되어서 만들었던 게임이 리크니스이다.

(이 게임을 심층 분석한 블로그 링크)

사용자 삽입 이미지

리크니스는 만화풍 + 파스텔톤의 그래픽을 추구했는데 개인적으로 색감이 참 예쁘고 마음에 든다.
저런 게임 스토리 연출과 각종 그래픽들을 그 시절에 어떻게 다 생각해 내고 만들었는지 경이로울 따름이다. 하드웨어 장비도 열악하고 지금 같은 인터넷도 없던 시절에!

스토리 화면에서 리크니스(남캐)와 아이리스(여캐)가 눈을 마주친 뒤, 새들이 푸드득 날아가면서 시작 메뉴 화면이 뜬다.
링크하는 블로그 글에서도 지적하지만, 주인공을 선택했을 때의 반응이 참 익살스럽다.
블루스 형제(Titus 작)와는 달리, 이 게임에서는 선택받은 주인공이 기뻐하는 게 아니라 "뭐? 또 나야?" 같은 뻘쭘하고 당황한 표정을 짓는다. 특히 아이리스 아가씨는 마시던 물을 뿜기까지 한다.

(전체 플레이 동영상)

플레이 장면을 보니 진짜 슈퍼마리오 스타일 같다.
여러 블로그들의 평을 보면.. 리크니스는 왕창 어렵다는 게 중론이다. 특히 카지노 슬롯 같은 걸 돌려서 공격하는 최종 보스전은 메모리를 강제 조작해서 보스의 HP를 너프시킨 뒤에야 겨우 깼다는 얘기까지 있다.
그럼 나 같은 사람한텐 더욱 어렵겠다. <그 날이 오면>도 그렇고 게임들이 전반적으로 어려웠다. ^^

끝판을 깬 뒤 엔딩은 생각보다 허무하고 별로 볼 게 없었다. 개발팀의 사진 같은 게 나오는 것도 아니고.

사용자 삽입 이미지

본인이 리크니스를 재주목하게 된 이유는 개인적인 경험과 관련하여 또 있다.
먼 옛날에 하이텔 게임 제작 동호회에서 딱 두 번인가 게임 공모전을 한 적이 있었다. 이 얘기 자체는 <삭제되었수다>를 소개하면서 예전에 한 적이 있다. 그때 저 게임이 1등을 했기 때문에.

그런데, 그 당시에 본인이 개인적으로 알고 지내던 프로그래밍 동호회 친구도 거기에 게임을 출품했으며, 공개된 그 게임을 나도 해 봤다.
그 게임에 쓰였던 BGM들 중 일부가 바로 리크니스 게임의 BGM을 빌린 것이었다는 걸 알게 된 게 그로부터 거의 20년 뒤의 일이니 감회가 새로울 수밖에... 일부 스테이지의 음악이 귀에 아주 익숙했다.

1990년대에 20대 초반의 나이로 이미 저렇게 날고 기었던 김 학규 씨는 그 뒤로 대학까지 중퇴하고서 게임 개발 학원 강사로 뛰기도 했고, 수제자들과 함께 그라비티를 설립해서 걸출한 온라인 게임을 계속해서 개발했다. 1990년대 이후에는 플랫폼도 Windows로 넘어가고 3D 기술 + 네트워크 기술까지 게임 개발 방법론이 그냥 싹 갈아엎어진 거나 마찬가지 아니던가? 그걸 일일이 다 공부하면서 어떻게 따라갔는지가 그저 대단할 따름이다. 하지만 개발 능력 대비 경영 수완이 부족해서 자기가 세웠던 회사에서 물러나기도 하고 인생에 우여곡절이 많았던 모양이다.

나도 학창 시절에는 프로그래밍에 빠져서 제도권 교육에서는 완전히 이탈해 버렸지만.. 그렇다고 실력이야 쨉도 안 되고 저렇게 현업에서 당장 돈 되는 물건을 만들 능력도 없다 보니 학교를 때려칠 배짱은 없었다. 저런 사람들의 꿈과 열정이야 참 대단하긴 한데 요즘 우리나라는 게임 업계가 사정이 너무 안 좋긴 하다. 정부로부터의 온갖 규제, 사용자의 불법복제, 끊임없이 치고 들어오는 외산 게임들.. 업계에서는 또 공밀레에 야근 야근..;;

그런데 이렇게 열악함에도 불구하고 코딩으로 먹고 살자니 그나마 SI 품팔이 같은 진짜 지옥 말고 스스로 수익을 내고 할 만한 데가 미우나 고우나 게임밖에 없다. 국내의 걸출한 소프트웨어 개발자 프로그래머들을 제일 많이 볼 수 있는 데가 모르긴 몰라도 넥슨, NC 같은 게임 개발사들이다. 에구, 이건 나의 적성· 전공과도 관계가 있는 문제인데 이 바닥이 앞으로 어떻게 변화할지 찬찬히 살펴봐야 할 것 같다.

Posted by 사무엘

2017/01/28 19:35 2017/01/28 19:35
,
Response
No Trackback , 3 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1321

등산 답사기: 도봉산

지금까지 서울 북부의 산행은 지난번의 북한산, 그리고 더 과거로 거슬러 올라가면 수락산· 불암산 정도가 전부였던 것 같다. 북악산은 북부라고 치기에는 생각보다 '덜' 북쪽이고.
수락산은 지하철 접근성이 좋으며 나름 두 번이나 다녀온 적이 있지만(각각 수락산, 당고개에서 출발), 그때는 산들의 특성 내지 등산 계획 수립 요령에 대해 지금 같은 지식과 노하우를 갖추지 못한 초창기였다. 그래서 정상까지는 안/못 가고 모두 중턱에서 내려왔다. 그때는 둘레길과 등산로의 차이도 모르던 정말 초짜 시절이었다.

가을은 날씨가 안 덥고 산이 단풍으로 물들어 가는 시기이니 가히 등산의 계절이라 할 만하다. 매니아들 중엔 아예 날 잡아서 멀리 지리산, 설악산 등으로 원정 가는 사람도 있다. 등산이 마냥 중장년 아재들의 전유물 취미이기만 한 것도 아니어서 가끔 보면 내 또래의 젊은 사람, 심지어 여자분도 있다.
이런 와중에 본인은 삼성산 다음으로는 지금까지 의외의 미개척 상태였던 도봉산을 다녀왔다.

도봉산은 북한산의 이웃에 있는 별도의 산이지만, 여기도 여전히 북한산 국립공원의 일부이다. 그래서 북한산처럼 시설이 잘 돼 있으며 경치도 매우 아름답다. 그 대신 입산 시간대가 제한되며, 쓰레기를 무단으로 버리거나 허용 등산로를 이탈해서 다니다 걸리면 과태료가 부과된다. 이런 점에서 도봉산은 건너편의 수락산과는 급이 좀 다르다.

도봉산이 같은 국립공원인 북한산과 다른 점으로는 성곽이나 무덤 같은 건 없고 사찰이 더 많이 있으며, 전철 접근성이 훨씬 더 좋다는 점을 들 수 있다. 여기는 지리적으로 서울의 북쪽 끝인 관계로 근처에 근처에 시내버스 차고지가 있음과 동시에 지하철도 잘 알다시피 7호선의 종점과 도봉 차량 기지가 있다.
도봉산 역은 강릉의 정동진과 위도가 거의 같은 걸로도 잘 알려져 있다. 지상 철도 2개가 평행하게 만나는 관계로 이 역은 그냥 1호선 역과 7호선 역 두 채가 나란히 놓인 형태이다.

철덕으로서 지하철 답사를 위해서가 아니라 등산을 위해서 도봉산 역을 방문한 것은 이번이 처음이었다.
이 역의 동쪽에는 '서울 창포원'이라는 야외 식물원이 있다. 반대로 국도 3호선을 횡단하여 서쪽으로 1km 남짓 걸어가면 국립공원 출입구가 나오고 등산로가 시작된다.
처음에 '도봉 탐방 지원 센터'가 나오고 그 다음 '북한산 국립공원 도봉 분소'에서 길이 본격적으로 갈린다. 북한산 둘레길도 있고 도봉산 등산로도 두 군데가 존재하는데, 본인은 은석암 방면으로 등산해서 도봉 대피소+도봉 계곡 방면으로 하산했다.

사용자 삽입 이미지

오르는 길은 여느 산과 다를 바 없었다. 이렇게 한참 산을 오르다가 커다란 바위가 나오기도 하고, 하늘이 간간이 보였다. 나중에 알고 보니 여기 말고 하산길이 국립공원답게 훨씬 더 잘 닦여 있었다.
은석암은 말 그대로 암반이기 때문에 손으로 줄을 잡고 바위를 올라야 했다.

사용자 삽입 이미지

중턱쯤에 도달하자 시야가 탁 트이고 산 아래가 그럭저럭 보이기 시작했다. 도봉산 전철역이 보이고, 저 멀리 도봉 차량 기지도 보였다. 주변의 외곽 순환 고속도로와 이웃의 수락산은 두 말할 필요가 없음.

사용자 삽입 이미지

망월사는 아닐 테고 아마 천축사가 아닌가 추정되는데.. 산 속 저 높은 곳에 저렇게 절이 하나 떡 놓여 있는 게 굉장히 인상적이었다. 눈에 들어온 풍경이 가히 장관이었다. 그에 반해 여백이 부족한 건.. 아니고 카메라가 시야각과 색감이 부족하다.
본인은 뺑 돌아서 한참을 더 걸은 끝에 저 절이 있는 봉우리까지 가게 됐다.

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

드디어 커다란 봉우리 등장~! 그 뒤 등산 난이도도 덩달아 올라갔다.
장갑을 안 가져갔는데 로프를 잡은 손 내지 발을 딛고 있는 신발 바닥이 미끄러지면 어떡하나 겁이 나는 상황이 몇 번 있었다. 실제로 도봉산은 가까운 과거에 인명 사고가 발생한 적도 있는 산이다.

사용자 삽입 이미지

아침에서 낮으로 시간이 흐르면서 인제 하늘이 좀 파래졌다.

사용자 삽입 이미지

도봉산은 여러 개의 바위 봉우리들이 제각각 정상을 구성하고 있으며, 다른 산들과는 달리 봉우리 위에 딱히 정상 표지석이나 국기 같은 건 없었다. 최고봉을 등반 가능한 건 아니며, 등산객이 접근 가능한 가장 높은 봉우리는 신선대였다. 군사 시설 때문이 아니라 그냥 안전 때문에 최고봉에 못 가는 산이다.

사용자 삽입 이미지

신선대의 바로 옆에도 이런 돌무더기가 있었는데.. 크기를 짐작케 할 만한 레퍼런스가 없다시피하구나. 옆의 나무들을 보고 짐작하시기 바란다.

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

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

그리고 주변에도 온통 높은 산과 봉우리들이 가득했다.

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

나의 당초 계획은 오봉도 가까이에서 구경하고 양주나 못해도 송추· 의정부 방면으로, 산을 횡단하여 서울에서 더 먼 쪽으로 내려가는 것이었다. 그러나 삼성산에서도 그랬던 것처럼 정작 정상에 도달하고 나니 지도의 묘사와 지금 위치가 씽크가 되질 않았다. 도저히 길을 찾을 수 없어서 길이 있는 곳으로만 내려가니까 결국은 서울 방면으로 되돌아가게 됐다.

단풍으로 물든 숲은 경치가 매우 아름다웠다. 여기가 내가 올랐던 길보다 단풍이 더 든 것 같았다. 그리고 산 기슭보다 중턱이 붉은색이 더 짙어져 있었다.

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

북한산에서 봤던 계곡이 여기에도 있었으며 맑은 물이 흐르고 있었다. 시간이 정오에 근접하자 이제야 이쪽으로 산을 오르는 등산객들이 많이 보였다.

도봉산에 대한 종합적인 평을 하자면 등산 시설을 제외한 인공물이 매우 드물고, 북한산과 비슷하면서도 미묘하게 다른 산 같다. 북한산은 어느 등산로든 지하철만으로 접근하기는 어려워서 버스가 필요한 반면, 도봉산은 국립공원으로서는 나름 역세권이기까지 한 게 좋다. 수락산, 청량산, 아차산 등 지하철 역세권인 산들 중에서는 가히 최고의 퀄리티가 아닌가 싶다. 등산기 두 편을 글 한 편에다 묶으려고 했는데 도봉산은 분량이 길어져서 또 단독 게재를 하게 됐다.

* 여담: 국립공원 이야기

자연 보호를 목적으로 근대적인 국가 제도 하에서 도입된 세계 최초의 국립공원은 미국의 옐로우 스톤 국립공원이라고 한다. 요세미티인 줄 알았는데 그건 아니구나. 어쨌든 미국이 최초이긴 하다. 'national park'라는 제도가 우리나라에 첫 도입된 건 1967년이어서 올해로서 딱 반세기가 지났다고 한다.
영예의 제1호는 지리산이며, 그 뒤로 국립공원은 대부분 네임드급 산들의 독식무대였다. 설악산, 한라산, 속리산, 주왕산, 계룡산, 오대산 등.
그렇기 때문에 이쪽 사정은 산악인들이 더 잘 알 것이다. 서울의 북한산은 1983년에 비교적 '늦게' 지정된 거라고 한다.

하지만 산만 있는 건 아니어서 남해의 한려해상 국립공원도 있으며 충남 태안 역시 해안이 국립공원으로 지정돼 있다.
그리고 경북 경주시는 건물 지으려고 땅만 팠다 하면 문화재가 도깨비 방망이 두들기듯이 출토되는 특수성이 감안되어, 토함산, 남산과 일대 시가지 약 137제곱km가 국립공원으로 그것도 무려 1968년부터 지정됐다.
도시형 국립공원이란 건 경주가 전국적으로 유일무이한 사례이다. 여기에 사는 경주 시민은 법적으로는 국립공원에서 사는 셈이다. 경부 고속도로에서도 경주 근처에 '경주 국립공원' 운운하는 표지판이 있었던 걸로 기억한다.

허나, 국립공원에서 산다고 실생활에서 별로 좋을 건 없다. 오히려 문화재 보호와 도시 미관 유지 명목으로 개발 제한에 고도 제한 같은 규제가 어지간한 그린벨트 이상급으로 걸리는 게 더 많기 때문이다. 지주의 입장에서는 재산권 행사에 애로사항이 꽃핀다.
미국의 워싱턴 D.C.에서는 모든 건물이 백악관보다 낮은 층수로만 지어져야 한다던데 그런 게 고도 제한이다. 그리고 작년에 지진 피해를 많이 입었던 황남동 일대는 전통 보존 운운하면서 주택은 반드시 기와집으로 올려야 한다는 게 법으로 규정돼 있었다. 그런 식이다.;;

Posted by 사무엘

2017/01/25 19:39 2017/01/25 19:39
, , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1320

11. 급발진

지난번 글에 이어서  이번에는 운전 중에 발생하는 위험 돌발 상황에 대해 좀 생각해 보겠다. 대표적으로 급발진이 있다.
난 안 겪어 봐서 모르겠지만 엔진이 폭주하고 브레이크가 말을 안 듣는다면 기어를 N으로 바꾸면 큰 불은 끌 수 있지 않나? 그게 안 되면 시동이라도 끄거나 아니면 도로 옆 벽면을 긁으면서 세우는 걸로 개인적으로 매뉴얼을 구축하고 있다. 점점 더 강력하고 차의 엔진 내지 외형을 파괴하는 방법이라도 동원해서 차를 세운다. 머릿속 운전 프로그램이 try 블록 안에서 돌다가 catch(SUAException e)으로 침착하게 잘 분기해 줄지는 별개의 문제이겠지만 말이다. (Sudden Unintended Acceleration)

시동을 끄는 것에 대해서는 핸들과 브레이크가 잠겨 버리기 때문에 더 위험하다는 말도 있다. 하지만 당장 전방에 장애물이 있지는 않아서 몇백 m 정도는 더 나아갈 수 있고(특히 충돌을 피하려고 당장 비어 있는 중앙선을 넘어간 직후), 어떻게든 차가 속도가 붙는 것만을 막고 싶으면 상황에 따라서는 시동을 끄는 게 꼭 자충수만은 아닐 수도 있겠다는 생각이 든다.

어쨌든 이 상황에서 중요한 건 더 큰 위험을 방지하기 위해 조금 위험한 방법이라도 감수해야 한다는 것이다. 당장 앞의 장애물을 어설프게 요리조리 피하면서 차가 속도가 붙는 걸 방치했다간... 도저히 더 피할 수 없는 상황이 됐을 때 더 끔찍한 꼴 나기 때문이다. 그때는 local maximum만 그리디 알고리즘으로 쫓아가서는 안 된다. 정말 극단적인 상황이라면 하다못해 핸들을 확 꺾어서 차를 전복이라도 시켜서 바퀴를 지면에서 떼어 놓는 것도 불사해야 하리라 여겨진다.

급발진을 규명하려고 애쓰는 사람들이 있는 걸 보면 마치 UFO를 연구하는 사람과 비슷한 처지인 것 같다. UFO와 급발진은 모두 기존 업계나 학계, 정부 기관에서는 공식적으로 존재를 인정하지 않고 극구 부인하고 있다는 공통점이 있기 때문이다. 급발진은 다 페달을 반대로 잘못 밟은 운전자의 과실일 뿐이고 UFO는 다 당사자들이 헛것을 본 것으로 몰아간다는 것이다.

하지만 반대편에 선 사람들은 현대의 과학과 기술로 규명은 할 수 없지만 어쨌든 초자연적인(?) 현상이 존재한다고 주장한다. 그런데 이거 무슨 예수님의 부활의 증인도 아니고 UFO의 증인, 급발진의 증인이라니 참 느낌이 므흣하다..;;
현직 택시 기사 중에 자기 생업과 관련된 개인 블로그를 운영하는 독특한 분이 있어서 좀 소개하도록 하겠다.

닉: 꿈돌이/택시불만제로/택시독립 (!)

택시 이용과 관련된 유익한 정보, 그리고 현업 택시 기사들의 고충 같은 글이 있어서 그럭저럭 볼 만하다. "고갱님들은 불법 승차거부에 절대로 호락호락 당하지 마세요. 승차거부를 안 하는 대다수의 선량한 택시 기사들을 생각해서라도 승객 여러분들이 신고를 불사하면서 강하게 대처해 주셔야 불법 행위가 근절될 수 있습니다." 이런 것들은 새겨들을 만하다.

가끔은 미스터리한 교통사고의 원인에 대해서도 개인적인 추리와 평론을 하는데, 이분은 놀랍게도 여느 운전자들과는 달리 차량 급발진 같은 건 절대 없다는 게 일관된 지론이다. 옛날 글들 검색해 보시길. "처녀가 애를 낳았습니다 / 선풍기 틀고 자면 죽습니다"와 "멀쩡하던 택시가 갑자기 급발진 폭주를 일으켰습니다"를 동급으로 칠 정도이다. 너무 당당하고 단호하고 강경하게 주장하니 그런 글에는 "무슨 개소리를.. 너 혹시 현기차 알바냐" 이런 부류의 익명 악플들이 잔뜩 달려 있다. -_-;;

지난 2009년 5월에 발생한 한티 역 택시 역주행 사고에 대해서도 급발진은 택도 없는 소리라고 일축했다. 택시가 갑자기 오르막을 시속 100이 넘는 속도로 폭주하다가 결국 장애물과 충돌하여 차체가 두 동강 나고, 탑승자인 기사+여성 승객2 세 명이 모두 즉사한 끔찍한 사고 말이다.

이에 대해 저분은 운전자가 1차 사고의 측면 충돌로 인해 머리에 큰 충격을 받고 졸도했으며, 겁에 질린 조수석 승객이 핸들만 요리조리 돌리면서 고속 주행을 하다가 사고가 난 것일 거라고 추리를 늘어놓았다. 다만, 내가 보기에도 그럼 기사가 어떻게 액셀을 꾸욱 밟고 있는 채로 의식을 잃을 수 있는지 이해가 되지 않는다. 전쟁터에서 기관총 사수가 방아쇠를 당기고 있는 채로 전사하기라도 한 것처럼 말이다.

잊을 만하면 발생하는 급발진 추정 교통사고 문제는 도대체 어떻게 해결해야 하려나 모르겠다.
엔진 작동 내역과 관련된 결정적인 데이터를 갖고 있긴 하면서도(급발진이 순수하게 복불복 운빨 미스터리의 영역이 아닐 거라는 뜻) 영업 기밀 운운하면서 급발진에 대한 원인 규명을 제대로 하지 않고 다 운전자의 과실로만 떠넘기고 있는 자동차 제조사들이 미심쩍고 괘씸한 건 사실이다.
하지만 자기가 잘못해서 사고 내 놓고는 걸핏하면 급발진 핑계 대는 비양심 진상 운전자도 안타깝지만 있다. 진실은 과연 어느 극단 중에 있을지?

사무직 종사자들은 책상에 앉아서 하루 종일 컴퓨터와 씨름하는 게 일일 것이며 본인 같은 프로그래머도 이 범주에 속한다.
그러나 택시· 버스· 트럭 운전사들은 근무 방식이 완전히 다르다. 하루 종일 운전석에 앉아서 핸들을 잡고 차를 굴리는 게 일이다. 근무 중에 각종 정보 통신 장비 같은 걸 들여다볼 여유는 없다. 영상 기술이 눈부시게 발달한 이 시대에도 이런 업종 때문에 라디오 방송이 안 망하고 버틴다고 해도 과언이 아니다.

택시 운전을 은퇴 후 용돈벌이 취미로 하는 게 아니라 full time 생계로 하는 거라면 그걸 하면서 블로그질까지 하기란 쉽지 않을 텐데.. 아무튼 저분은 최근까지도 블로그를 잘 운영하시는 듯하다. 뭐, 교통사고 분석에 대한 판단은 독자 여러분에게 맡긴다.

12. 피시테일

고속 주행 중에 전방에 갑자기 장애물이 나타났을 때, 혹은 갑자기 끼어드는 차가 있을 때... 보호본능으로 핸들을 확 꺾어서 피하는 것만이 능사는 아닐 때가 있다.
특히 비접촉 뺑소니 사고 블랙박스 영상들을 보면 더욱 안타까움이 느껴진다. 가해 차량은 아무 탈 없이 유유히 사라져 버렸는데 자기만 놀라서 휘청거리다가 가로수를 들이받거나 전도· 전복되거나 심하면 옆의 비탈길로 추락하거나 한 거.

갑자기 옆에서 끼어드는 차량 정도면 "배째. 접촉사고 나 봐야 니 과실 100%야" 상황이었다면 차라리 같이 부딪치는 게 나았을 것이다. 피하다가 혼자만 더 큰 사고를 당하고 덤탱이 쓸 바에야 말이다.
길바닥에 갑자기 튀어나온 장애물, 불법주차 차량, 무단횡단자, 심지어 야생동물을 피하느라 안타까운 사고가 나곤 한다. 핸들을 꺾더라도 차량의 제어가 가능하고 수습 가능한 한도 내에서 꺾어야 한다. 옆에 피할 자리가 있는지, 혹시 뒷차가 추돌하지 않겠는지도 총체적으로 따지고 말이다.

결국은 "위험을 감수하고라도 피하는 것 vs 차라리 부딪치는 것"의 가성비를 잘 따져야 할 텐데 물론 이런 요령과 경험도 운전자에게 금방 생기지는 않는 것 같다.
뭐, 저런 게 아니라 아예 정면에서 집채만 한 버스나 트럭이 역주행으로 폭주하고 있기라도 하면 그건.. 워낙 극단적인 상황이니 묻지도 따지지도 말고 닥치고 피하긴 해야겠다.

이렇게 급발진이 '가속으로 인한 위험'이라면, 반대로 '회피나 제동 기동으로 인한 위험'으로 피시테일 현상이 있다.
급핸들이나 급브레이크 조작을 한 뒤에 차가 갑자기 좌우로 요동치면서 비틀거리더니 전복· 전도되는 경우가 많다. 난 저런 상황까지 겪은 적은 없어서 "왜 저렇게 될까? 중심 잡기가 그렇게 힘든가? 핸들과 브레이크가 말을 안 듣나? 딱히 타이어가 터지거나 한 것도 아니고 빗길이나 빙판길도 아닌데?" 이런 의문을 품곤 했다. 하긴, 핸들과 브레이크가 평소처럼 말을 듣질 않으니까 사고가 나는 거겠지.

고속 주행 중인 자동차가 무거운 엔진이 장착된 앞은 그럭저럭 중심을 잡았지만 상대적으로 가벼운 뒷부분이 중심을 잃고 출렁출렁 요동치는 것을 fish tail 현상이라고 한다. 전륜구동 FF 차량에서 발생하기 쉽다고 하지만 문제의 직접적인 원인이 구동축의 방향은 아닌 관계로, 다른 형태의 차량에서도 수틀리면 발생할 수 있다.

요즘은 차들이 ABS에 VDC(자세 제어 장치)까지 장착돼 있어서 고속 주행 중에도 묵직하고 안정성이 많이 향상됐다. 차체가 떠 버리지 않게 뒷부분에 스포일러를 장착하는 것도 피시테일을 예방하는 데 도움이 된다고 한다.
피시테일 현상이 발생하면 침착하게 차가 쏠리는 쪽의 반대쪽으로 조향을 반복하면서 중심을 잡긴 해야 하는데, 이때 브레이크는 절대 밟아서는 안 된다고 그런다. 그건 차가 한데 쏠리는 현상을 더욱 악화시킨다고.. 제동은 중심부터 잡은 뒤에 시도해야 한다.

13. 양발운전

이번엔 또 다른 현직 택시 기사의 블로그를 소개하겠다.

닉: 두발로

이번 주인공은 자기 애마를 번호판도 안 가리고 버젓이 인증샷 찍어서 올렸을 정도인 분인데, 앞의 분보다 더 독특한 주장을 하고 있다. 다름아닌... "차는 발을 옮겨 가면서 운전을 해서는 절대로 안 됩니다."이다.
이분은 왼발로 브레이크를 밟는 양발운전의 신봉자이다. 블로그는 온통 양발운전의 유용성을 인정하지 않는 자동차 제조사와 자동차 공학 교수들에 대한 비판과 성토의 글로 가득하다. 글을 자주 올리지는 않지만 그래도 최근까지 정말 꾸준히 올리고는 있다.

본인은 예전에 밝혔듯이 한동안 양발 운전을 했다. 1종 보통 면허를 따긴 했지만 장롱 기간이 너무 길어지면서 수동을 몰던 감을 다 잊어버렸다. 그 뒤 자연스럽게(?) 왼발로 브레이크를 밟아 오다가 양발 운전에 대한 대외 이미지가 생각보다 좋지 않다는 걸 깨닫고 자가교정을 해서 요즘은 일반적인 주행 상황에서는 언제나 한발 운전으로 습관을 고쳤다.

하지만 이건 운전 능률이나 안전 같은 실질적인 이유 때문이 아니라 그냥 대외 평판 때문에 고친 것이다. 오르막에서 출발할 때나(밀림 방지), 전/후진을 반복하며 주차할 때(잦은 페달 조작)는 지금도 종종 옛날 버릇이 살아나서 예외적으로 왼발 브레이크를 쓴다. 요컨대 본인은 두 운전 방식을 모두 경험하고 있는 사람이다.

자동차의 페달이 지금처럼 배치된 건 가장 근본적으로는 클러치 페달이 존재하던 수동 변속 차량과의 역사적 호환성 때문일 것이다. 그리고 액셀과 브레이크는 서로 동시에 밟을 일이 전혀 없는 페달이니 꼭 별도의 발을 배당할 필요도 없고 기존 관행을 굳이 꼭 바꿀 필요가 없다. 비행기와 철도 차량 역시 가속과 감속은 한 손으로 조작하는 레버 하나로 간단히 끝내고 있지 않던가? 최소한 저 블로그에서 까는 것처럼 "사고 많이 내서 차 많이 팔아먹으려고 일부러 왼발 브레이크를 채택하지 않았다, 이것은 치밀한 음모이다"까지는 아닐 것이다.

다만, 그런 수동 변속기 같은 legacy를 전혀 고려할 필요가 없다면 처음부터 액셀 오른발, 브레이크 왼발로 만드는 것도 직관적이고 나쁘지는 않았을 것 같다. 삐딱한 자세야 브레이크가 클러치처럼 왼발로 밟기 딱 좋은 위치에 달려 있으면 해결되는 문제이니 본질적인 문제가 아니다. 한발로 두 페달을 모두 밟는 지금 체계에서도 액셀과 브레이크를 헷갈려서 잘못 밟는 운전 미숙 사고는 얼마든지 난다. 그러니 왼발 브레이크만 유달리 혼동 위험이 있는 것 같지는 않다. 그 대신 발을 옮기는 딜레이 없이 거의 곧장 브레이크와 액셀을 교대로 밟는 장점은 꽤 크다고 여겨진다.

요컨대 본인은 왼발 브레이크는, 수동+클러치를 전혀 고려할 필요가 없다는 전제 하에서, 마치 숟가락을 집고 글씨를 쓰는 손의 방향이 왼손인 것만큼이나 취존 가능한 영역이 아닌가 생각한다. 막연하게, 별 근거 없이 왼발 브레이크가 무작정, 떼빙(대열 운행)이나 우측 차로 추월만치 위험하다는 식으로는 생각하지 않는다. 다만, 오른발 위치에 맞게 맞춰진 페달을 왼발로 무리해서 밟느라 운전 자세가 이상해지는 건 문제라고 본다. 평소에 언제나 왼발로 밟을 거면 편하게 밟을 수 있게 세팅이라도 해 놓고 써야 한다.

그러니 혼자 특이한 주장을 하면서 기득권 세력과 꿋꿋이 싸우는(?) 저분의 심정을 이해 못 하는 건 아닌데, 난 안 그래도 세벌식에 킹 제임스 성경 등 지금도 이미 마이너한 것들에 너무 많이 몰입해 있으니 가성비가 그리 안 맞는 마이너의 길을 굳이 더 가고 싶지는 않다. 한 발로 액셀과 브레이크를 모두 밟는 건 무슨 두벌식이고, 브레이크에다 별도의 발을 배당한 건 세벌식이기라도 하다고까지 생각하지는 않는다. =_=;;

Posted by 사무엘

2017/01/23 08:39 2017/01/23 08:39
, , , , ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1319

« Previous : 1 : ... 99 : 100 : 101 : 102 : 103 : 104 : 105 : 106 : 107 : ... 221 : Next »

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/12   »
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 31        

Site Stats

Total hits:
3053390
Today:
1697
Yesterday:
2713