1. conime가 conhost로

윈도우 NT 계열 운영체제에는 전통적으로 시스템 디렉터리에 conime.exe라는 자그마한 프로세스가 있었다.
이 프로그램의 타이틀은 Console IME로, 말 그대로 명령 프롬프트(콘솔이라고 불리는)라는 특수한 환경에서 한글이나 일본어의 입력을 지원하기 위해 운영체제와 명령 프롬프트 사이의 통신을 담당하는 듯하다.

conime는 명령 프롬프트를 여러 개 연다고 여러 인스턴스가 중복 실행되지는 않는다. 하지만 한번 실행되고 나면 나중에 명령 프롬프트를 모두 닫아도 종료되지 않고 남아 있는다. 그래서 명령 프롬프트에서 <날개셋> 한글 입력기를 사용하다가 나중에 <날개셋>을 버전업/제거한다거나 하면 conime 프로세스를 강제 종료시켜야 한다고 설치 프로그램이 징징대는 걸 볼 수 있다.

뭐, 작업 관리자로 이 프로세스를 강제 종료시키더라도 운영체제에 악영향은 (전혀) 없다. 나중에 명령 프롬프트를 열면 운영체제가 그걸 알아서 또 실행해 준다.

그런데 윈도우 7에서는 시스템 프로세스 중에 conime.exe가 사라졌다는 걸 본인은 아주 뒤늦게 확인했다. 명령 프롬프트에다 IME 기반 문자 입력을 제공하는 계층이 다른 걸로 바뀌었다는 뜻인데, 어쩌면 이런 변화 때문에 콘솔에서 조합 중인 한글이 덧나는 버그('다다.' 같은)도 덩달아 들어간 게 아닌가 하는 추측도 할 수 있을 것 같다.

관찰해 보니, 윈도우 7에서 콘솔과 관련하여 대신 등장한 프로세스는 conhost.exe이다. 콘솔에서 <날개셋> 한글 입력기를 사용하고 있는 채로 해당 프로그램을 제거하거나 변경하려고 시도하면 conhost 때문에 안 된다는 경고가 뜬다.

그럼 conhost는 cmd.exe 자체와 일대일 대응하는 자매 프로세스냐 하면 꼭 그렇지는 않다.
명령 프롬프트에서 또 cmd라고 치면 그 동일한 창 안에서 명령 프롬프트가 또 구동되는데(exit를 치면 종료 가능한), 이때는 conhost가 또 생기지는 않는다. start cmd라고 쳐서 독립된 콘솔 창이 생성되어야 conhost도 중첩 생성된다. 관계가 이해되시겠는가?

conime와는 달리, 이놈은 명령 프롬프트 창의 인스턴스와 일대일 대응하고, 창이 닫히면 이 프로세스도 종료되어서 IME 프로그램 파일에 걸렸던 lock이 풀린다. 예전에는 콘솔 디버깅 후에는 conime를 강제로 죽여 줘야 했는데 윈7에서는 그럴 필요가 없어진 건 편해진 점이다.

2. 윈도우 7의 kernel32.dll 리모델링

이뿐만이 아니라, 윈도우 운영체제의 시스템 프로그래밍 내지 파일 해킹에 관심이 많은 분이라면 윈도우 7의 under the hood에서 일어난 흥미로운 변화를 하나 알고 있을 것이다.
운영체제의 근간을 이루는 시스템 DLL 중 하나인 kernel32.dll이 내부적으로 여러 분야로 리모델링을 거치기 시작했다는 점이다.

시스템 디렉터리에 가 보면 api-ms-win-core-*.dll이라는 수십여 개의 DLL들이 보일 것이다.
이것들은 kernel32.dll이 제공하는 1000개가 넘는 윈도우 API를 스레드, 힙 메모리, 동기화 오브젝트, 파이프 등으로 세부 분류한 껍데기들이다.

전통적으로 kernel32.dll은 윈도우 9x 계열의 것은 100% 순수 자체 코드로만 이뤄져서 그런지 외부 DLL에 의존하는 게 아무것도 없었다.
NT 계열의 것은 운영체제 커널보다 먼저 로딩되는 ntdll.dll에만 의존도가 있었다. 그리고 그 ntdll이 외부 DLL에 전혀 의존하지 않는 원초 프로그램이었다.

영원무궁토록 변하지 않을 것 같은 kernel32.dll의 내부 구조가 윈도우 7에서 이렇게 바뀐 걸 처음 봤을 땐 무척 흥미로움을 느꼈다.
지금은 그냥 뭔가 더 큰 변화를 위한 준비 수준일 뿐인 것 같은데, 윈도우 8에서는 변화가 얼마나 더 진행될지가 궁금하다.

3. 콘솔의 시각 테마 적용

윈도우 7로 넘어가면서 콘솔에 미묘하게 생긴 재미있는 변화가 또 있다.
전통적으로 명령 프롬프트 창은 윈도우 XP에서부터 도입된 '시각 스타일', 혹은 시각 테마가 적용되지 않는 딱딱한 창으로 처리되었다.

물론, 공용 컨트롤 6.0 매니페스트가 명시되어 있지 않은 구형 프로그램은 각종 컨트롤이나 child window의 테두리가 구닥다리 고전 테마로 나오긴 했지만, 그래도 프로그램의 제목 표시줄 같은 non-client 영역은 모서리가 둥글게 다듬어지기도 하고 최소한의 시각 테마가 자동으로 적용되었다.

그런데 명령 프롬프트는 그런 게 전혀 없이 완전 사각형 모양에 제목도 여전히 윈도우 98/2000식의 그러데이션이고 100% 고전 테마 스타일로 나왔다.
이렇게 100% 구닥다리로 뜨는 프로그램은 (1) 명령 프롬프트, (2) ntvdm 밑에서 돌아가는 16비트 윈도우 프로그램, 그리고 (3) 사용자가 호환성 옵션에서 '시각 테마 사용 안 함' 옵션을 명시한 프로그램 이렇게 세 종류로 한정되곤 했다.

윈도우 비스타/7의 Aero를 사용하면 100% 구닥다리 프로그램도 제목 표시줄이나 창 프레임 자체는 다른 창과 똑같은 형태로 나오기 때문에 이를 구분하기가 쉽지 않다. 고전 테마 말고 Basic 테마를 고르면 한눈에 구분이 가능해진다. 이게 과거의 윈도우 XP Luna와 기술 수준이 동일한 테마이기 때문이다.

그랬는데 윈도우 7부터는 (1) 명령 프롬프트 창도 시각 테마가 적용되는 창으로 바뀌었다. (2)에 해당하는 16비트 윈도우 프로그램은 64비트 운영체제에서는 아예 존재하지도 않으니, 남은 건 이제 (3)뿐이다.

윈도우 비스타/7이 제공하는 한국어/일본어 입력기는 그렇게 시각 테마 열외 프로그램 밑에서 동작하면 가/A, 漢 같은 아이콘이 흰색이 아닌 검은색으로 표시된다. 고전 테마가 아니라 Basic이나 Aero 같은 일반 테마에서 동작할 때 말이다.
본인은 한글 IME의 개발자로서 그 차이를 눈여겨보고 있었고, 그냥 얘네들이 명령 프롬프트에서 동작할 때만 아이콘 글자색을 검게 처리하는가 보다 하고 넘어갔었다.

그랬는데 윈도우 7에서는 명령 프롬프트에서도 글자색이 변하지 않았고, 이에 의문을 느껴 좀 더 관찰을 해 보니 차이를 만드는 요인은 '시각 테마'의 적용 여부라는 사실을 발견하게 되었다.
왜 일부러 그런 차이를 만들었는지는 나로서는 알 길이 없다. 문자 입력기가 응용 프로그램의 시각 테마 적용 여부에 따라 달리 동작해야 할 요인이 있을 리도 없을 텐데 말이다.

자, 다음 그림은 Basic 테마일 때 윈도우 비스타의 명령 프롬프트 화면과 7의 명령 프롬프트 화면이다. 창 프레임의 모양과 입력기 도구모음줄 아이콘의 색깔에 차이를 주목하시길. 내가 지금까지 설명한 것들이 이해가 될 것이다.

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

4. 도스에서 명령 프롬프트로의 변화

윈도우 9x 계열이야 전용 명령 프롬프트 터미널이라는 게 없이 도스창이 명령 프롬프트의 역할도 겸해 왔다. 그리고 거기서는 아예 도스용 한글 바이오스 프로그램이 따로 쓰이니 conime 같은 컴포넌트는 필요하지 않다.

사실, 16비트 윈도우 시절에 운영체제가 쓰던 전용 실행 파일 포맷(New Executable)은 GUI 환경 전용이었지, 콘솔용은 있지도 않았다. 어차피 똑같은 16비트 기반이고 윈도우 운영체제 자체가 파일 접근 같은 요청은 여전히 도스에다 요청을 해서 처리를 하고 있었으니, 콘솔용 실행 파일을 따로 만드는 건 아무 의미가 없고 필요하지도 않았다.

사실, 매킨토시와는 달리 윈도우 계열 OS에만 존재하는 독특한 ANSI/OEM 인코딩, 코드 페이지 같은 개념은 그 기원을 도스의 명령 프롬프트에서 찾을 수 있을 것이다. 걔네들은 원래 철저하게 1바이트 기반 인코딩을 썼었기 때문이다. 그에 반해 매킨토시는 시작부터가 명령 프롬프트가 전혀 없는 GUI였으니 그런 잔재가 없는 셈일 테고.

5. 윈도우 운영체제의 문자 입력 관련 보조 프로세스

처음에 얘기가 나왔던 conime.exe처럼, Windows에서 문자 입력 프로그램과 관계가 있는 시스템 프로세스를 더 나열하자면...
과거에 윈도우 95~2000/ME까지는 internat.exe라는 프로그램이 있었다. 시스템 트레이에다 현재 선택되어 있는 입력기의 언어와 종류를 띄워 주는 역할을 했다.

그러다가 2001년에 윈도우 XP와 함께 COM 인터페이스 기반의 고급 텍스트 서비스(TSF)가 도입되면서 그 역할은 ctfmon.exe가 대체하게 되었고 그게 오늘날의 비스타/7까지 변함없이 내려오는 중이다. internat이나 ctfmon은 언제나 상주해 있으며, 운영체제를 업데이트하지 않는 한 사용자가 강제 종료할 일도 없는 프로그램이다.

하지만 TSF의 도입 초기이던 오피스/윈도우 XP 시절에는 그게 운영체제의 안정성을 떨어뜨리기도 했기 때문에, 딱히 고급 문자 입력 기능에 관심이 없던 사용자 사이에는 운영체제의 버그를 고친답시고 TSF 기능을 완전히 끄고, 심지어 ctfmon 프로그램을 죽여서 문제를 해결하는 방법이 운영체제 팁으로 공유될 정도였다.

6. MS IME가 등록해 놓는 정체 불명의 유틸리티

MS가 제공하는 한중일 IME는 시작 프로그램에다가 정체를 알 수 없는 이상한 migration 유틸리티 같은 걸 등록하여, 운영체제가 시작될 때 매번 그게 실행되게 해 놓곤 했다. HKLM\Software\Microsoft\Windows\CurrentVersion\Run 아래에 말이다.

사용자 삽입 이미지

일본어나 중국어도 아니고 한국어 IME는 무슨 사용자 데이터를 관리하는 것도 아닌데 도대체 이게 하는 일이 무엇이며 왜 이런 과정이 필요한지는 본인으로서는 알 길이 없다. 그냥 일본어 IME 따라 관례적으로 이런 것도 따라 한 것이기라도 할까?

Posted by 사무엘

2012/08/30 08:37 2012/08/30 08:37
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/726

Trackback URL : http://moogi.new21.org/tc/trackback/726

Leave a comment

오랜만에 <날개셋> 한글 입력기의 새 버전 소식을 전하게 된 것을 기쁘게 생각한다.
6.51 다음으로 6.7! 나의 대학원 석사 졸업 기념작이다.
나의 대학 학부 졸업 기념작은 까마득한 옛날인 2005년 여름에 나온 3.41이고,
4년 전 여름에 나온 5.0은 병특 만료 기념작이다.
작년에 6.2가 나온 뒤 거의 정확히 1년 만에 버전이 0.5만치 올라가게 되었다.

이번 버전은 비주얼 C++ 2010으로 개발된 첫 버전이다. 5.5부터 지난 6.51까지는 약 3년 동안 2008로 개발됐다.
더 옛날의 2.5부터 5.31까지는 거의 6년 동안 2003을 썼고 말이다. 그에 반해 VC++ 2005는 처음에 64비트 에디션을 빌드할 때만 잠깐 썼고 그다지 즐겨 사용되지 않았다.

버전 번호에 7이라는 숫자가 들어가는 것은 지난 12년간의 <날개셋> 한글 입력기의 개발 역사상 최초이다. 물론 6.x를 졸업하고 아예 메이저 버전이 7로 진입할 날도 얼마 안 남았고 말이다.
6.7은 여느 역대 버전들과 마찬가지로 다방면의 기능 추가와 개선을 거쳤다. 하지만 이번에도 시간과 여유의 부족으로 인해 원하는 기능, 넣고 싶었던 기능들을 모두 충분히 넣지 못했다. 그렇기 때문에 6.7까지는 안 하고 6.65, 심지어 6.66-_-으로 번호를 정하는 것도 이론적으로 충분히 가능하나, 국민 정서를 감안하여 그러지는 않았다.

한동안 <날개셋> 한글 입력기의 API에 큰 변화가 없었기 때문에 타자연습 3.3은 입력기 6.2부터 6.51까지 API 호환이 지켜졌으나, 이번 6.7에서는 클래스 가상 함수 한 군데의 프로토타입이 바뀌는 바람에 정말 어쩔 수 없이 API 호환이 깨지게 되었다.

타자연습은 1년 전이나 지금이나 바뀐 건 없고, 입력기 6.7의 API를 기준으로 재빌드한 프로그램만 다시 올렸다.
물론, 이제는 API 호환이 안 되는 버전의 <날개셋> 입력기 외부 모듈과 타자연습이 서로 같이 실행되어도 충돌이 없기 때문에, 굳이 타자연습에서 입력기 6.7에 새로 추가된 기능을 꼭 써서 타자 연습을 해야 할 분이 아니라면, 이미 설치된 타자연습 3.3을 또 재설치해야 할 필요는 없다.

이번 6.7에서 내세울 만한 변화는 다음과 같다.

1. 편집기의 에디팅 엔진 최적화

비록 눈에 당장 차이가 느껴지지는 않는 변화이긴 하나, 새 버전에서는 에디팅 엔진의 최적화가 최후 종결자 지점에 이르렀다.
텍스트의 여러 군데가 동시다발적으로 바뀌어서 구간별로 어디는 다시 그려져야 하고, 어디는 단순히 위로 몇 줄 스크롤하면 되고, 더 아랫부분은 반대로 아래로 스크롤되어야 할 때... O(n^2) 복잡도까지 감수하면서 구간별로 모든 가짓수를 100% 정확하게 파악하여 동작하게 했다. (물론, n이 너무 커지면 골치 아프게 그런 것 따질 필요 없이 그냥 화면 전체를 다시 그려 버리면 된다)

예전에는 그냥 최악의 상황을 가정하고 무조건 화면을 다시 그리게 하던 것이 지난 6.2 버전이던가 그때쯤에 크게 개선되었다. 그러나 그것도 동작이 지금 정도로 정교하지는 못했으며, 나중에 다시 생각해 보니 논리 자체에도 원천적으로 결함이 있어서 아주 특수한 상황에서는 여전히 화면 잔상이 남는 버그까지 있었다.

그 점이 찝찝했었는데 이번 버전에서는 드디어 작정하고 매달린 끝에 완전히 끝장을 내고 말았다. 만세! 새로운 기능 구현도, 단순 리팩터링도 아니고 최적화 작업을 끝냈을 때의 홀가분한 기분은 직접 구현해 본 사람만이 느낄 수 있을 것이다. 역시 좋은 프로그래머란, 모든 경우의 수를 논리적으로 잘 따지는 사람임을 느꼈다.

텍스트 에디터를 만들면서 이런 식으로 구간과 구간 사이의 여러 변화들을 한데 합성하는 알고리즘을 구현하는 게 굉장히 힘들었다. <날개셋> 편집기는 한글에만 초점을 맞추려고 complex script는커녕 글씨 크기 변경도 안 되고 가변폭 글꼴조차 지원 안 하는 아주 제한된 에디팅 엔진을 의도적으로 고수하고 있지만, 그 정도를 만드는 데도 지금까지 의외로 복잡하고 어려운 알고리즘이 제법 들어갔다. undo/redo를 관리하는 것도 그렇고.

2. 한글 입력 오토마타 차원에서의 기능 추가

이 달 초에 블로그 글을 통해 먼저 소개한 바 있는 종성 지향 두벌식은, 예전에는 없던 완전히 새로운 개념이 추가된 것이다. 같은 두벌식이라도 음절 경계에서 자음을 초성으로 볼 것인가, 종성으로 볼 것인가 하는 것을 이제 사용자가 직접 지정하는 것은, 한글 입력 전문 프로그램으로서 매우 중요한 기능이 아닐 수 없다.
종성 지향 두벌식과 맞물려 돌아가는 BKSP 옵션, 특수 키, 타수 복원 알고리즘 등등도 다 일관성 있게 동작하도록 로직의 수정과 보강이 이뤄졌음은 두 말할 나위가 없다.

그리고 오토마타에서는 현재 입력된 날개셋문자가 두벌식인지(종성 지향 포함) 세벌식인지를 나타내는 변수를 추가하여, 한 오토마타가 벌식에 따라 다르게 동작할 수도 있게 했다.

사실 이 두 기능은 내 학위 논문에도 들어가야 했을 아이디어인데 논문 학기가 다 끝난 뒤에야 생각이 나고 구현된 것이 좀 아쉽다. ^^;;

3. 단어 단위 한자 변환

<날개셋> 한글 입력기의 아주 오랜 숙원이 이번 버전에서 드디어 부분적으로나마 성취되었다. 만세!
드디어 '대한민국'에서 '국'을 조합 중이거나 '국'의 뒤에다 커서를 두고 한자 키를 누르면 단어를 한꺼번에 大韓民國로 바꿀 수 있다. 그리고 한자를 한글로 바꾸는 것도 최대 12글자까지 한꺼번에 할 수 있다.

사용자 삽입 이미지

이렇게 하기 위해서는 제어판의 '편집기 계층'에서 '단어 단위 한자 변환' 옵션을 켜 주면 된다. 그리고 이 기능은 아무데서나 쓸 수 있는 건 아니고, 자체 편집기나 TSF A급 프로그램(워드패드, MS 워드 등 몇몇)에서만 가능하다.

단, 이것은 아주 초보적인 수준으로만 구현된 것이기 때문에 한계도 적지 않다.
커서 바로 앞까지 끝나는 범위의 단어만 한자로 바꿀 수 있으며, 글자가 아닌 단어 영역에 대해서 블록 같은 시각적인 피드백이 없다.

그리고 이 단어 사전은 <날개셋> 한글 입력기가 자체적으로 갖추고 있는 게 아니다. MS 한글 IME의 한자 사전을 빌려다 써서 동작한다. 그래서 내 프로그램으로 단어 단위 한자 변환을 하려면 윈도우 비스타/7의 한글 IME가 설치되어야 있어야 한다. 자체 사전이 아니므로 사용자 사전 등록 기능 같은 것도 없다.

이번 버전은 그냥 최소한의 노력으로 <날개셋> 한글 입력기도 이제 제한적으로나마 단어 단위 한자 변환이 가능하다는 걸 맛만 보여 준다는 데 의미가 있다. 그러나 이렇게만 해도 정말 신기하기 그지없다.

4. 그 밖의 사소한 변화들

- <날개셋> 한글 입력기의 외부 모듈은 설치하여 구동하고 나면 language bar에 예닐곱 개의 아이콘들이 주렁주렁 달리는 편이었는데, 이번 버전부터는 잉여력이 꽤 강한 전/반각 모드, 텍스트 필터(극소수의 TSF A급 프로그램에서만 사용 가능), 문자표는 제외하고 기본적으로 4개의 아이콘(한/영, 한자, 제어판, 보조 입력 도구)만 표시되게 바꿨다. 나머지 아이콘들은 별도의 명령을 내려서 사용자가 표시하도록 해야 표시된다.

이렇게 하니까 훨~씬 깔끔하고 좋다. 외부 모듈이 개발된 지도 벌써 7~8년째인데 왜 지금까지 이렇게 정리를 할 생각을 안 했나 모르겠다.

- 그리고 <날개셋> 편집기에서 외부 모듈을 사용하면서 편집기의 도구-옵션 명령으로 프로그램의 GUI 언어를 변경한 경우, 외부 모듈의 도구모음줄 아이콘의 툴팁이나 명칭도 해당 언어로 바뀌게 했다. 크게 의미 있는 변화는 아니지만 프로그램간의 일체성을 향상시킨 조치이다.

- 외부 모듈의 한자 변환 후보 선택 중에 Ctrl+C를 누르면 선택된 한자를 클립보드에다 복사가 되게 했고, Shift+엔터/번호를 누르면 한(韓) 형태로, 그리고 Ctrl+엔터/번호를 누르면 韓(한) 형태로 삽입이 되게 했다. 저 기능도 언젠가 넣어야 할 필요를 느끼고 있었는데 이렇게 하는 게 제일 좋을 것 같다.
필요는 발명을 낳는 법. 단어 단위 한자 변환과 연계하면 더욱 편리해진다. '대한민국(大韓民國)' 같은 문구를 한번에 바로 삽입할 수 있으니 말이다.

- '한글을 소리 나는 대로' 필터가 받침 ㄷ계열(ㄷ, ㅅ, ㅌ 등)+ㄹ을 지금까지 ㄹㄹ로 동화시키고 있었는데 이를 ㄴㄴ 계열로 수정했다. 그런데 한국어에서 저렇게 동화가 일어나는 경우가 전혀에 가깝게 없기 때문에 <날개셋> 3.0 이래로 이에 대한 문제를 제기할 일이 없었다.

- '한글 낱자 종류 변환' 필터에 호환용 한글 자모 4개 나열로부터 표준 한글 자모나 한글 글자마디를 만드는 변환 기능을 추가했다. 이것은 우리나라 표준 문자 코드에 명시되어 있는 스펙이기 때문에 도입했다. (거의 사문 전락 수준이 아닌가 의심되긴 하지만.)

- 굳이 나열하기에도 구차한 여러 버그 수정들은 덤. 사용자는 거의 접할 일이 없겠지만.
- 그리고 이번 버전부터 후원 안내문이 프로그램 설치 화면과 도움말 구석에 추가되었다.

5. 제공 자료들

새로 추가된 한글 입력 기능을 활용하여 두벌/세벌 판별 변수를 활용한 복벌식용 모아치기 오토마타, 그리고 맥 OS의 세벌식 자판이 예제로 추가되었다. 종성 지향 두벌식을 사용하여 고증을 100% 살린 MS 두벌식도 예제로 제공된다.
그리고 6.7의 새로운 기능으로만 가능한 건 아니지만, 아래아한글 97이 과거에 제공하던 세벌식 semi-모아치기 오토마타도 예제로 추가했다.

아래아한글 97을 기억하시는가? 아래아한글 2.0 기반의 에디팅 엔진과 3.0 기반의 파일 포맷, 그리고 한컴 2바이트 코드를 사용하던 마지막 버전임과 동시에, 당대로서는 가장 완성도가 높았고 1990년대 말과 2000년대 중반까지 전국적인 사랑을 받았던 명작 워드 프로세서이다.

아래아한글 97은 세벌식 글자판에서 우리나라의 소프트웨어 역사상 전무후무한 한글 입력 로직을 갖고 있었다.
초성만 가장 먼저 입력한 뒤엔, 그 후의 중성과 종성은 아무 순서대로나 입력하면 된다. 아래아한글 97의 오토마타를 <날개셋> 식으로 기술해 보면 다음과 같은데...

0 → A ? 1 : B|C ? 2 : 0
1 → A ? 1 : B|C ? 2 : 0
2 → B|C ? 2 : 0

수식이 정말 심하게 단순하다!
<날개셋>의 표준 모아치기 오토마타는 초성을 나중에 뒤늦게 입력하는 경우를 고려하는 것도 있기 때문에 0부터 3까지 4상태이다. 그러나 아래아한글은 초성 아니면 중성/종성으로만 딱 칼같이 나눠서 겨우 3상태이고 수식도 더 간결하다.
거기에다가 아래아한글의 전통인 조건부 / 키만(초성 입력 직후에만 ㅗ, 나머지 상황엔 / 그대로) 수식으로 넣어 주면 100% 정확한 아래아한글 스타일 세벌식이 완성된다.

Mac OS의 세벌식에 이어 아래아한글 97의 세벌식 입력 오토마타를 구현해 보니 스스로 생각해 봐도 재미있다. 다 똑같은 한글 입력 방식 같아도 실제로는 100% 똑같지가 않다.

내가 예전 글에서 썼듯이, <날개셋> 한글 입력기는 그야말로 한글 덕후들의 지적 욕구를 충족할 수 있는 프로그램, 한글 덕후의 마음의 고향 같은 프로그램을 표방하며 개발되고 있다. 그리고 이번 6.7은 그 이상향에 더욱 근접했다고 볼 수 있으며, 글을 다 써 놓고 보니까 마음이 바뀌는 듯. 이 정도면 6.51에서 6.7로 충분히 버전을 올릴 만도 하다는 생각이 든다. ^^

Posted by 사무엘

2012/08/27 08:20 2012/08/27 08:20
, ,
Response
No Trackback , 13 Comments
RSS :
http://moogi.new21.org/tc/rss/response/725

Trackback URL : http://moogi.new21.org/tc/trackback/725

Comments List

  1. 사샤나즈 2012/08/27 17:58 # M/D Reply Permalink

    잘 읽었습니다.
    이전 종성 지향 두벌식 글과 함께 읽고, 자음을 두 번 누르면 쌍자음으로 조합되도록 조합 규칙을 수정한 두벌식의 자판을 바꾸어 적용해 보았는데,

    1. 'ㅅㅅㅡㄹ' 의 순서로 '쓸' 을 입력하려 하면 'ㅅ슬' 이 입력됩니다. 기존 H2 타입에서 종성 위치에 자음이 있을 때 모음을 입력하면 나오는 결과와 같습니다만 해결법이 있나요?

    2. 자음이 표시되기는 초성 위치에 표시되더라도 실제 코드는 종성 코드기 때문에 오토마타에서 'D'로 초성 위치에 자음이 있는지 확인할 수가 없는 듯합니다. 해결책이 있을까요?

    또한 이번 윈도우8에서는 특정 가이드라인을 만족시키지 않는 입력기는 메트로 모드에서 쓸 수 없도록 했는데, 이 가이드라인에 날개셋 입력기를 대응시킬 계획을 갖고 계신가요? 또 현재는 윈도우8에서 language bar(태스크바와 완전히 통합되어 따로 떼는 옵션이 보이지 않네요)에 날개셋 로고 포함 아무 아이콘도 표시되지 않아 수정은 필요할 듯합니다.

    마지막으로, 좋은 입력기를 계속 개발해 주셔서 감사합니다. ^-^

    1. 사무엘 2012/08/27 22:23 # M/D Permalink

      안녕하세요?
      한글 입력기의 동작에 대한 질문은 막연한 문장만으로는 제가 상황을 짐작하기 어렵습니다. 제가 추측을 바탕으로 제시한 다음 답변들만으로 문제가 해결되지 않는다면, 현재의 입력 설정을 파일로 첨부하여 제게 메일을 보내 주시기 바랍니다.

      1. H2와 H2J 타입은 그런 동작 방식을 구분해 주는 개념이 아닙니다. 혹시 이번 버전에서 추가된 ‘MS 두벌식’ 설정을 고치신 것이라면, “ㅅ+ㅅ=ㅆ” 결합은 종성이 아니라 초성에다 추가해야 합니다. 그래야 ‘ㅅ슬’이 되지 않고 ‘쓸’로, ㅆ이 다음 글자의 초성으로 한꺼번에 넘어갑니다. 종성 결합은, 종성에서 결합은 되지만 도깨비불 현상이 일어날 때 “ㄱ+ㅅ=ㄳ”처럼 종성과 초성으로 갈라지는 규칙의 집합이거든요.

      왜 이렇게 동작하는가 하면, 이 입력 설정은 ‘초-종성 공유 낱자 결합 규칙’을 사용하기 때문입니다. 자세한 것은 프로그램 도움말에서 ‘초 종성 공유 낱자 결합 규칙’에 대한 설명을 참고하세요. 이 용어는 색인에도 바로 등록되어 있습니다.

      여담이지만 두벌식은 쌍자음은 원래 반드시 Shift+한 타로만 입력하는 것이 맞습니다. 종성 지향 두벌식은 진짜 초성과 종성의 문맥 구분이 없는 진정한 두벌식인데, “ㅅ+ㅅ=ㅆ”을 해 버리면 진짜 종성 ㅅ+초성 ㅅ을 연달아 입력할 수가 없어지기 때문입니다. 천지인 입력 방식이 ‘국가’와 ‘구카’를 구분할 수 없어서 어느 하나는 조합 종료 타이머를 쓰는 것처럼 말입니다.

      2. 예, 맞습니다. 종성 지향 두벌식으로 입력한 첫 자음은 누가 봐도 명백하게 종성이기 때문에 오토마타의 D 변수에 표시되지는 않습니다. 그리고 오토마타의 내부 상태 번호도 초성이 아닌 종성 상태입니다.

      그런 명목상의 자음은 오토마타 수식에서는 (!D && F && O&2)라는 조건으로 식별해야 할 것 같네요. “조합 중인 한글에 초성이 없고 종성만 있는데, 그 글자가 두벌식 한글인가?”라는 뜻입니다. O 변수는 이번 6.7 버전에서 추가된 유용한 플래그이고요. (자세한 것은 역시 도움말 참고)

      하지만 오토마타는 아주 특수한 녀석을 디자인하는 게 아니라면 가능하면 조합 중인 낱자를 끌어들이지 않고, 입력으로 주어진 낱자인 A~C만으로 동작하게 만드는 게 깔끔하고 좋습니다.

      끝으로, 윈도우 8의 지원을 위한 별도의 연구와 조치는 현재로서는 아직 계획된 바가 없습니다. 얼리어답터 분들께는 좀 아쉽겠지만, 개인 사정상, <날개셋> 한글 입력기의 윈도우 8 대처가 윈도우 8의 정발보다 더 이를 가능성은 높지 않습니다.

      입력기의 내부 메커니즘에 대해서 어려운 설명이 많이 나왔는데, 잘 이해가 되셨나 모르겠네요. ^^
      감사합니다.

  2. 까막눈 2012/08/28 10:30 # M/D Reply Permalink

    너무 좋은 프로그래 만들어주셔서 감사합니다. 며칠전에 다운받아서 설치하고 연습중인데요,
    편집기에서 세벌식 390을 추가해본 후에 자판을 보니, / 자리에 원래 ㅗ가 있어야 하는것 아닌가요??
    그냥 / 자리에 / 가 있네요??? 버그인것인지?? 그렇다면 어떻게 수정하면 되나요
    감사합니다.

    1. 사무엘 2012/08/28 11:22 # M/D Permalink

      반갑습니다.
      ‘왼’, ‘과’ 같은 글자를 입력하면서 /를 눌러 보시면 ㅗ가 정상적으로 입력될 겁니다. 이 글 본문에도 이미 언급돼 있듯이, 이것이 원래 세벌식 글자판의 스펙이며, 고증에 충실한 것입니다. 특히 아래아한글은 세벌식 390 글자판을 만드신 분이 관여하고 있는 제품이기도 하니까요.

  3. 까막눈 2012/08/28 11:48 # M/D Reply Permalink

    390에서 초성없이 그냥 / 키를 누르면 / 가 찍히는데, 초성이 있는 상태에서 누르면 ㅗ가 나오는군요!
    그래서 화면에서 키배치에서는 / 가 찍혔군요.. 경우에 따라서 다른게 행동하네요.. 하지만 9위의 'ㅜ'는 안그렇네요..
    몰랐습니다... 좋은 프로그램 만들어주셔서 감사합니다.

  4. 까막눈 2012/08/28 11:53 # M/D Reply Permalink

    최종에서는 그렇지 않고 ㅗ가 무조건 찍히는데 반해, 390에서는 조건부로 달라지네요??
    좋은것 같습니다.. 근데 이렇게하면 shift-G 로 누르는 / 는 불필요한 키배정같은데요..흠
    이건 좋은 아이디어 같은데, 그럼 390이 먼저나온걸로 아는데 최종(391)에서는 왜 그런 행동이
    없어졌는지 모르겠네요.. 뭐 딱히 질문은 아니고, 궁금해서 적어봅니다..
    무척 세심하게 만들어주신 프로그램, 정말 훌륭합니다.
    감사드리고 또 감사드립니다..
    건강하세요!

    1. 사무엘 2012/08/28 17:29 # M/D Permalink

      네, 맞습니다. 다른 이유는 없고요, 제 프로그램은 390에만 조건부 /를 적용해 주고 있습니다. Shift+G를 누를 일이 크게 줄어드는 것도 사실이죠.
      최종 같은 여타 세벌식에서도 /의 수식을 "T&&!E ? H3|O_ : 0x2F"로 수동으로 넣어 주면 조건부 /를 쓸 수 있습니다. 그리고 ㅜ가 들어있는 9는 어떤 경우건 조건부 글쇠의 대상이 아닙니다.

      그에 반해 아래아한글은 최종 같은 공 병우 세벌식에 모두 조건부 /가 가장 엄격히 적용되고 있고요.
      이중모음 정석은 아시지요? V, B 의 ㅗ,ㅜ로는 이중모음이 안 되고 9, /로만 되는 것?

      이것도 원래 세벌식 FM이라면 지켜 주는 게 마땅하고 도스 시절엔 그걸 지키는 에디터도 있긴 했는데, DOS 시절이 끝나면서 거의 구분이 없이 사문화한 규정이 됐습니다.
      세벌식 안에서도 이런 식으로 배리에이션이 제법 있습니다. 이런 것들을 수용하려는 목적으로 <날개셋> 한글 입력기가 개발되었는데 버전이 올라가면서 세벌식 뿐 아니라 두벌식 쪽 지원도 늘고 있지요.

      이는 뒤집어 말하면, 글쇠와 한글 자소 사이에 왜곡이 존재하는 두벌식이 처리 난이도가 더욱 높기 때문에 미래의 후대 버전에서야 지원이 제대로 되기 시작했다는 뜻으로도 풀이할 수 있겠습니다.
      프로그램을 유용하게 사용하시기 바랍니다. ^^

  5. 주의사신 2012/08/28 15:17 # M/D Reply Permalink

    여기에 지혜가 있으니 지각이 있는 자는 그 프로그램의 수를 세어 볼지니라. 그것은 프로그램의 역사에서 비롯된 수니, 그것의 수는 육점육십육이니라. (계 13 : 18 패러디)

    위 구절을 쓸 수 있을 뻔 했은데, 일부러 피해 가신듯 하군요. 그리스도인이 만든 프로그램에 붙이기에는 조금 난감한 숫자가 아닌가 하는 생각도 조금 듭니다.

    1. 사무엘 2012/08/28 17:30 # M/D Permalink

      악은 모양이라도 피하고 싶어서 말이지요.
      프로그램의 역사에서 비롯된 수라니... 센스가 쩌십니다. ㅋㅋㅋ
      이번 버전이 마음만 먹으면 6.66을 붙일 수 있는 초유의 기회였죠.

      이번 버전은 역대 버전들 중 커널인 ngs3.dll 크기와 설치 배포 패키지의 크기가 가장 커졌습니다.
      과거에는 기능 때문에 커널 크기가 커지다가도 리팩터링, 기능 분할 등으로 인해 크기가 종종 감소하기도 했거든요.
      그러다가 이제는 다시 최고점을 찍었고요. 게다가 VC 2010이 같은 소스 코드도 좀 더 크게 컴파일하기도 해서..
      msi 파일도 과거에 거대한 msvcr71.dll과 mfc71.dll을 직접 내장하고 있었던 3.1 이래로 최고 크기를 경신했습니다.

      단일 프로그램을 혼자서 1.0부터 6.7까지 만들었다니.. 덜덜~

  6. 다물 2012/08/28 20:12 # M/D Reply Permalink

    혹시 윈도우 8을 지원하는 제품인가요?

    1. 사무엘 2012/08/28 22:21 # M/D Permalink

      아니요, 위의 댓글에도 언급돼 있듯, 이번 버전은 아직 윈도우 8 지원과 관련된 작업은 진행된 것이 없습니다.
      그러고 보니 날개셋뿐만 아니라 파워업도 분명 8에서는 또 제대로 동작을 안 할 가능성이 높아 보이는데, 테스트를 해야겠군요.

  7. Lyn 2012/08/30 10:11 # M/D Reply Permalink

    석사 완전히 끝나신거군요. 축하드립니다

    1. 사무엘 2012/08/30 11:43 # M/D Permalink

      감사합니다. 내일 학위 수여식이 있답니다. ^^

Leave a comment

옛날에 나의 기억 속에 남아 있는 매킨토시는 가히 꿈의 컴퓨터였다. 여기서 옛날이라 함은 대략 1990년대를 말한다.

그때 우리의 IBM 호환 PC는 아키텍처가 다 공개되어 있기도 했으니 ‘행정 전산망용’ 내지 ‘교육용’이라는 타이틀을 달고 국내 대기업이 로컬라이즈까지 해서(일본의 로컬라이즈 방식을 따라한 것이겠지만) 보급되고 있었다. 그러니 맥에 비해 희귀하다는 느낌이 덜했다. 그리고 이 기계는 그래픽 성능이 맥보다 훨씬 시원찮았다.

그에 비해 매킨토시는 희귀함과 화려함 그 자체였다. IBM PC가 겨우 도스 명령 프롬프트에서 16색, 256색 VGA를 논하는 동안 매킨토시 화면에서는 화려한 GUI 운영체제에다 천연색 사진 그래픽과 각종 전자 출판물 편집 장면이 나오고 있었다. 듣자 하니 매킨토시 컴퓨터에는 텍스트 모드라는 게 아예 없다는데? (물론, PC에서도 텍스트 모드는 컴퓨터 켠 직후에나 잠깐 보이는 과거 유물 잉여가 된 지 오래이지만.)

사용자 삽입 이미지
이미지 출처는 모 블로그.

기계의 모양을 봐도 모니터와 본체 일체형에, 하드웨어와 소프트웨어도 다 무조건 자기네 순정만 쓰이는 게 고급스러움과 간지 그 자체였고, 웬지 지구인이 만든 물건 같지가 않은 티가 역력했다. 엘렉스 컴퓨터가 총판을 맡던 시절에, 매킨토시는 가격도 억소리 나게 크고 아름다웠기 때문에 딱히 전자출판· 그래픽 분야 종사자나 유학파 얼리어답터들이 아니면 쓸 엄두를 내기 어려웠다.

(물론, 그때 컴퓨터 덕질을 안 하고 그 돈 더 모아서 서울 강남에다 집을 사 놨으면, 지금쯤 떼부자가 됐을 거라고 자조 섞인 말투로 회상하는 얼리어답터도 있다고 카더라)

매킨토시 진영은 서비스 구리고 하위 호환성에 자비심 없는 것으로도 잘 알려져 있다. ‘윈텔’ 진영과는 성향이 달라도 너무 다르다. MS 윈도우야 API의 하위 호환성은 정말 경악스러울 정도이고, x86 아키텍처 자체도 호환성에 목숨 거느라 그 지저분함이 말도 못 할 수준이지 않던가.

그런데, 그 간지 최강 귀족 컴퓨터에서 돌아가는 맥 OS도, X 이전의 클래식 버전은 사실 선점형 멀티스레딩도 없이 기술적으로는 윈도우 95보다도 뒤쳐진 물건이었다고 한다.
하긴, 어렸을 땐 난 시커먼 도스 프롬프트에서 그 허접한 윈도우 3.1이 시동되는 모습만 보고도, 화려한 그래픽에 동심이 매료되고 가슴이 두근거렸는데 하물며 매킨토시는 어땠을까?

그로부터 세월이 흘러 매킨토시 진영의 역사상 있었던 대단히 큰 사건들을 요약해 보자면 다음과 같다. 200x년대에 굵직한 일들이 많았다.

1. 엘렉스 대신 애플 코리아가 직접 한국으로 진출 (1999)
2. 맥 OS X 출시 (2001)
3. 인텔 아키텍처 기반으로 전향 (2005-2006)
4. 아이폰의 흥행 대성공(과 국내에 드디어 시판) (2007, 2009)
(5. 그리고 아마, 잡느님의 사망. 2011)

매킨토시가 옛날에 비해서는 정말 가격도 많이 떨어지고 보급도 많이 된 건 사실이지만, 서비스의 품질은 오히려 엘렉스 시절보다도 못한 면모도 있다는 성토가 여전히 나돈다.
또한 최강의 장사꾼 기질로 한글화를 꼬박꼬박 친절하게 하는 MS 윈도우 진영과는 달리, 맥 진영은 소프트웨어의 한글화도 좀 투박한 구석이 있다. 기본 제공되는 한글 서체의 품질이 저질이라고 폭풍처럼 까여 온 것 역시 그런 맥락일 테고.

맥은 하드웨어 배경이 완전히 다르다 보니 640KB 메모리 제한이라든가 16비트/32비트 썽킹 같은 흑역사는 없다.
다만, PowerPC에서 x86으로 갈아탄 것은 워낙 여파가 너무 큰 변화이기 때문에 제작사인 애플에서도 어떤 형태로든 호환 레이어를 제공하지 않을 수가 없었다. 그래서 CPU 에뮬레이터인 '로제타'를 만들고, 그리고 한 프로그램 바이너리에 아예 x86 코드와 PowerPC 기계어가 같이 들어있는 Universal binary라는 포맷도 제정했다.

물론 지금은 시간이 충분히 지났기 때문에 Snow Leopard던가 Lion이던가 버전부터는 PowerPC 지원은 완전히 끊겼다. 그리고 Universal binary는 PowerPC/x86이 아니라 같은 x86 계열 안에서 32비트와 64비트 코드를 동시에 내장하기 위한 용도로 쓰이고 있다. 앞으로는 ARM과 x86(-64) 사이의 동시 지원이 필요해질 듯.

가만히 생각해 보면 이게 옛날에 MS가 윈도우 NT 시절에 제정한 Portable Executable과 일맥상통하는 개념이 아닌가 여겨진다. 당시에 윈도우 NT는 x86, PowerPC 등 다양한 CPU를 target으로 개발되고 있었기 때문에, 비록 기계어 코드는 공유를 못 하더라도 동일한 헤더로 실행 파일 바이너리들을 식별하고 관리 가능하게 할 필요는 있었다. 하지만 정작 PE는 한 바이너리에 다양한 아키텍처의 기계어 코드를 한꺼번에 담는 건 지원하지 않는다.

세월이 흘러 지금이야 PC의 역량도 충분히 매우 발전하여, 매킨토시를 사실상 다 따라잡은 지가 오래이다. (그런 비주얼 쪽의 발전을 주도한 건 다 게임이라 해도 과언이 아닐 듯.) 기계어까지 가상 바이트코드로 대체하려는 발칙한 시도가 가능해졌을 정도이니 컴퓨터가 얼마나 성능이 좋아진 셈인가?

그랬는데, 지금 나는 그 시절의 매킨토시보다 훨씬 더 성능이 좋은 매킨토시 노트북 PC를 아무렇지도 않게 갖고 다니며 쓰고 있고, 사실 그 기계로 맥OS보다 윈도우를 여전히 훨씬 더 많이 쓰고 지낸다. 격세지감이 아닐 수 없다!

사용자 삽입 이미지
(폭풍간지 사과 무늬...ㅋㅋ)

Posted by 사무엘

2012/08/24 19:37 2012/08/24 19:37
, , , ,
Response
No Trackback , 7 Comments
RSS :
http://moogi.new21.org/tc/rss/response/724

Trackback URL : http://moogi.new21.org/tc/trackback/724

Comments List

  1. Lyn 2012/08/24 21:50 # M/D Reply Permalink

    원래 맥은 콘솔이 딱히 없었지만....

    고 잡스옹이 복귀한 이후론 콘솔이 가장 막강한 플랫폼이 되엇죠...(베이스가 BSD 라 =_=;)


    근데 막상 쓸일이 (...)

  2. Lyn 2012/08/24 22:04 # M/D Reply Permalink

    8Mhz T.T

    계산기냐?

    1. 사무엘 2012/08/25 07:43 # M/D Permalink

      지금의 컴과 비교하면 도대체 저걸로 뭘 할 수 있겠나 싶을 정도의 말도 안 되는 구닥다리 사양인데, 가격이 20년 전 가격으로 150~200만원이면 도대체 얼마인 걸까요? (덜덜~) ^^

      그래서 오늘날은 소프트웨어들이 너무 bloat되고 컴의 자원을 활용하는 효율이 떨어졌다는 비판도 있지요.
      일리가 있는 면도 있지만, 요즘은 같은 정보를 처리해도 문자 집합의 확장으로 인해 메모리 소모가 근본적으로 늘어나기도 했고, 각종 GUI 아이콘들의 덩치도 몇 배 이상 더 커졌고, 메모리를 관리하기 위한 메모리가 많이 들기도 하기 때문에 덩치의 차이를 그냥 단순 비교만 하기는 곤란한 면이 있습니다.

  3. 주의사신 2012/08/25 09:44 # M/D Reply Permalink

    친구가 타 학과에서 받은 맥북을 들고 다닌 적이 있었는데, 그거 보다가 "뭐야, 사과에 불도 들어와?"라고 이야기했던 기억이 아직도 납니다.

    1. 사무엘 2012/08/25 22:01 # M/D Permalink

      남의 맥북을 구경할 때는 완전 신기함 그 자체였는데,
      제가 큰맘 먹고 실제로 맥북을 늘 쓰기 시작하니 지금은 아무렇지도 않고, 내 노트북 PC가 원래 그랬으려니 하는 생각이 들더군요.
      역시 사람의 감정이라는 건 똥 누러 갈 적 마음 다르고, 똥 누고 올 적 마음 다르듯이 정말 상대적인 것 같습니다.

  4. Lyn 2012/08/25 13:46 # M/D Reply Permalink

    이미지 차이도 컷죠...

    흑백 시절엔 1비트로 한 픽셀을 표현할수 있었지만 지금은 무려 32배가 증가한 4바이트 .. 해상도도 수십배 이상 늘었구 ...

    1. 사무엘 2012/08/25 22:01 # M/D Permalink

      그래서 이제는 아이콘도 트루컬러에서는 압축을 안 하면 용량이 너무 커지기 때문에 png 이미지의 컨테이너 역할이 추가되었지요.
      그런 것 하나하나가 운영체제나 소프트웨어의 시스템 요구사항을 크게 늘렸습니다.
      1비트에서 32비트가 되고 화면 해상도까지 올라갔으니 요즘 소프트웨어들은 같은 일을 해도 과거보다 수십/수백 배의 메모리가 더 필요한 것이죠.

Leave a comment

지난 2012년 6월 30일엔 수인선 복선 전철 1차 구간이 개통했다. 그리고 그 이튿날에는 서울 수도권에서의 첫 경전철인 의정부 경전철이 개통했다. 그런데 그와 비슷한 시기인 6월 27일에는 철덕들이 기릴 만한 아주 의미심장한 사건이 또 있었다. 바로 우리나라에서 딱 한 군데 존재하던 영동선 스위치백이 역사 속으로 사라진 것이다.

문제의 장소는 태백선과 영동선이 합류하는 강원도 태백시와 삼척시 사이의 지점이다. 아래의 그림을 보기 바란다. (바탕 그림의 출처: 네이버 지도)

사용자 삽입 이미지

동백산 역 이북으로 올라가는 영동선은 험준한 산을 오르느라 몹시 고달프다.
자, 무엇부터 설명하는 게 좋을까?
이번에 새로 개통한 노선은 연화산을 빙 도는 연보라색의 둥근 똬리굴(1)과 한 치의 곡선도 없이 북쪽으로 정면돌파하는 분홍색 선(2)이다. 이것이 기존의 초록색 선과 파란색 선을 대체하게 되었다.

지금으로부터 거의 반세기 가까이 전에는 영동선에 인클라인이 있었다는 것을 철덕이라면 알 것이다. 거기는 철길이긴 하지만 경사가 지나치게 급해서 열차가 자기 힘으로 올라갈 수가 없었다. “설렁탕을 사 왔는데 왜 먹지를 못하니?”가 아니라, “레일을 깔아 놓았는데 왜 달리지를 못하니?”였다.
그래서 이 구간만 기관차와 객차를 한 량씩 크레인으로 끌어당기고, 승객들은 내려서 옆에서 언덕을 걸어 올라가야 했다.

여기서 오해하지 말아야 할 점은, 크레인의 힘이 부족해서 승객이 내려야 한 건 아니라는 사실이다.
객차에 승객과 짐이 꽉 차 있어 봤자 기관차 한 량보다 더 무거울 리는 없잖은가.
승객들을 부득이 다 하차시킨 것은 그냥 안전 문제 때문이었을 거라는 게 내 생각이다. 사람들이 뒤에서 같이 객차를 밀어야 했던 건 더욱 아니다.

자, 그 인클라인이 있던 곳이 바로 지금은 폐역하고 없는 통리 역과 심포리 역 사이였고, 지도에서는 대략 '빨간색 선'에 해당한다. 이 1km 남짓 되는 인클라인을 8배가 넘는 거리와 그 대신 1/8 이하의 경사로 우회 대체시킨 것이 옆의 초록색 선이다.

그 뒤 그 이름도 유명한 스위치백은 N자 모양의 파란색 선이다. 초록색 선 정도의 회전 반경을 낼 공간마저 부족했던 관계로 부득이 열차를 정지시키고 후진을 하게 만든 것이다.

스위치백은 관광객에게는 흥미로운 체험 수단이지만 원시적이고 운전하기 까다로우며 열차의 원활한 운행에는 방해가 되는 존재였다. 게다가 구불구불한 기존 초록색-파란색 선로는 지반도 그리 좋지 않아서 위험했다고 하니, 궁극적으로는 이들을 대체할 깔끔한 선로가 필요했다.

그래서 다른 지대인 연화산 기슭을 한 바퀴 빙 돌면서 언덕을 오르는 대체 똬리굴이 개통했다. 평지가 아니라 터널이다. 똬리굴 자체는 우리나라에 이미 중앙선을 비롯해 몇 군데 있지만 이번에 개통한 건 국내 최대 규모이다. 이 터널의 이름은 '솔안 터널'이고, 터널 자체는 이미 2006년에 관통식까지 끝나고 완공되었다.

솔안 터널은 스위치백뿐만 아니라 과거의 인클라인 대체 우회 선로까지 훌륭히 대체했으며, 전체 거리는 기존의 우회 선로보다 더 단축시키고 열차의 운행 시간도 10분이 넘게 더욱 단축시켰다.
어떤 철도의 선형이 하루아침에 이 정도로 급격하게 바뀌고 지도까지 덩달아 바뀌는 일은 앞으로도 매우 드물 것이기 때문에 이는 국내 철도사에 길이 남을 큰 사건으로 기억될 것이다.

재래식 스위치백 선로의 폐선을 며칠 앞두고 코레일에서는 평소에는 정차하지 않던 스위치백 구간의 간이역에도 영동선 여객 열차를 정차시켜 줬었다. 거기서는 당연히 철덕들의 향연이 펼쳐지곤 했다.

그리고 좀 옛날 소식이긴 하다만, 지난 6월 초엔 웬 KTX 산천 한 편성이 강릉으로 디젤 기관차의 견인을 받아 끌려가서 스위치백까지 넘는 사상 초유의 이벤트가 벌어졌었다. 평창 동계 올림픽도 열리는데 앞으로는 강원도에도 고속신선이 깔리고 고속철이 들어갈 거라는 홍보 행사를 위해 현역 고속철 한 편성이 얼굴마담 자격으로 끌려간 듯하다.

발상 자체는 좀 병맛 같기도 하지만 어쨌든 KTX 산천이 강원도에 들어와서 스위치백 고개를 넘는다니, 게다가 한 달 남짓 뒤면 역사 속으로 사라질 그 스위치백을 말이다. 이 소식은 전국의, 아니 듣자하니 심지어 일본의 일부 철덕들의 시선까지 사로잡았다. 이 KTX는 미리 대기하고 있던 철덕들의 카메라 플래시 세례를 집중적으로 받았으며, 자가용을 굴리는 철덕은 아예 도로를 나란히 달리면서 열차를 따라가며 사진을 찍었다.

사용자 삽입 이미지

이런 열정을 가진 사람들이 있기에 세상은 비록 죄악도 있으나 일말의 아름다움도 갖추고 있다. 비록 본인은 교회크리와 논문크리 때문에 그 당시에 이런 사람들과 함께하지 못했으나, 마음만은 그들과 함께하며 그들을 응원한다.

Posted by 사무엘

2012/08/22 08:46 2012/08/22 08:46
, , , ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/723

Trackback URL : http://moogi.new21.org/tc/trackback/723

Comments List

  1. Lyn 2012/08/22 10:27 # M/D Reply Permalink

    저런 신기한 모양의 길이 있었군요 ㅋ; 전 철도는 다 직선으로 까는줄 알았는데

    1. 사무엘 2012/08/22 11:24 # M/D Permalink

      무겁고 등판능력이 부족한 열차가 지나는 길이기 때문에 이런 신기한 모양이 존재하게 되지요.
      하지만 철도는 다른 장애 요인만 없다면 무조건 최대한 곧게 만듭니다. 자동차 도로는 그렇지 않거든요.
      (운전자의 졸음이나 과속을 막기 위해 법에 규정된 일정 간격으로 일부러 커브를 만들기도 합니다.)

  2. Paul Sohn 2012/08/22 19:19 # M/D Reply Permalink

    철덕의 기상!
    철덕의 위엄!

    1. 사무엘 2012/08/23 05:39 # M/D Permalink

      파이팅~!

Leave a comment

프로그래밍 언어가 제공하는 기본 라이브러리에는 단순히 자주 쓰이는 자료 구조나 알고리즘 외에도, 운영체제에다 요청을 해야 지원받을 수 있는 기능이 일부 있다. 메모리를 할당하거나 파일을 읽고 쓰는 작업이 대표적인 예이다. C/C++ 라이브러리라 해도 그런 기능은 궁극적으로 Windows API 같은 저수준 API를 호출함으로써 제공하는 셈이다.

그러니 프로그래머로서는 굳이 이식성을 염두에 두고 작성하는 코드가 아니라면, 언어가 제공하는 API보다 운영체제가 제공하는 API를 직통으로 쓰는 게 성능면에서 낫지 않나 하는 생각을 하게 된다.
이게 완전히 잘못된 생각은 아니다. 그러나 그렇지 않은 경우도 있으므로 주의해야 한다.

예를 들어, 윈도우 API에 있는 ReadFile/WriteFile과, C 라이브러리에 있는 fread와 fwrite를 생각해 보자.
C 라이브러리의 소스를 보신 분은 있겠지만, 일례로 fwrite는 내부적으로 _write 함수를 호출하는 형태이고, 두 함수만 해도 소스 코드가 수백 줄에 달한다. 뭔가 추상화 계층을 거치는 게 있고 복잡하다. 그러면서 _write 함수의 한쪽 구석에 결국은 WriteFile 함수를 호출하는 부분이 있다. fwrie가 WriteFile 직통보다 빠를래야 빠를 수가 없어 보인다.

그런데 윈도우 환경에서 프로그래밍을 오래 해 본 분은 경험적으로 아시겠지만, 몇 바이트짜리 소량의 I/O를 수백, 수천 번씩 반복해서 시켜 보면 fread/fwrite가 ReadFile/WriteFile보다 훨씬 더 빠르게 수행된다.
그렇다. C 함수는 내부적으로 버퍼링? 캐싱?을 해서 소량의 I/O는 뭉쳤다가 몰아서 한꺼번에 하는 반면, 운영체제 API는 곧이곧대로 매번 오버헤드를 감수하면서 I/O를 직통으로 하기 때문이다.

물론, 요즘은 운영체제가 자체적으로 디스크 캐싱을 다 하는 게 대세이지만, C 함수는 더 상위 계층에서도 캐싱을 하는 걸로 보인다. 이게 성능 차이가 굉장히 많이 난다.
<날개셋> 한글 입력기에서 1년 전쯤에 공개된 지난 6.2 버전의 README를 보면, 편집기의 파일 저장 및 변환기의 변환 속도가 훨씬 더 빨라졌다고 적혀 있다. 이것의 비결이 바로 저 특성을 이용해서 파일 I/O 속도를 향상시킨 것이었다.

메모리 할당도 마찬가지이다.
운영체제는 프로세스마다 heap이라는 가상 메모리를 둬서 프로그램이 다수의 작은 메모리 덩어리를 동적으로 요청할 때 빨리 빨리 반응할 수 있게 하고 있다. 연결 리스트나 트리 같은 자료구조는 메모리 할당이 잽싸게 안 되면 성능이 크게 떨어질 테니 말이다.
(이때 heap은 자료 구조 heap하고는 전혀 관계 없는 개념이므로 혼동하지 말 것.) 그래서 윈도우 운영체제에서 C 라이브러리의 malloc 계열 함수는 HeapAlloc이라는 API 함수를 호출하는 상위 계층이다.

내 경험상으로는 요즘의 NT 커널 윈도우는 HeapAlloc와 malloc, 그리고 HeapFree와 free가 성능 차이가 거의 느껴지지 않는다. 그러나 과거의 윈도우 9x 시절에는 그렇지 않았다.
“윈도우 9x에서는 이 함수는 진짜로 작은 메모리 블록에만 최적화되어 있기 때문에, 이걸로 수 MB에 달하는 메모리를 한꺼번에 여러 번 할당하면 성능이 크게 떨어지고 프로그램이 느려짐. 그 경우엔 다른 메모리 할당 함수를 쓰기 바람.”이라는 경고문이 MSDN에 명시되어 있었다.

내부적으로 그 함수가 어떻게 구현되어 있는지는 잘 모르겠지만, 내가 테스트 해 보니 진짜 그랬다. 9x에서는 프로그램이 뻗은 게 아닌가 싶을 정도로 도저히 견딜 수 없이 느려졌다.
이때에도 윈도우 API가 아닌 C 라이브러리의 malloc 함수는 랙 없이 잘 동작했다. 대용량 메모리 할당 요청이 왔을 때 가상 메모리 주소를 다시 잡는 등 대비가 되어 있어서 그런 것 같다.

원론적으로야 추상화 계층이 있는 언어 API보다는 운영체제 API 직통이 더 빠를 수밖에 없는 게 맞다. 사실, Windows API로도 모자라서 NTDLL처럼 아예 문서화되어 있지도 않은 곳에 있는 native API를 사용하는 프로그램이 있기도 하고 말이다.

그러나 프로그램의 이식성까지 희생하면서 굳이 직통 API를 쓰고자 한다면, 위에서 예를 들었듯이, 그 API의 특성을 잘 알고 쓰는 게 무엇보다도 중요하다고 하겠다. C++ 라이브러리야 객체지향 구현을 위해서 bloat되는 게 불가피하다고 쳐도, 그보다는 더 단순한 C 라이브러리의 추상화 계층은 그저 불필요한 잉여밖에 없는 건 아닐 것이기 때문이다.

Posted by 사무엘

2012/08/20 08:25 2012/08/20 08:25
, ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/722

Trackback URL : http://moogi.new21.org/tc/trackback/722

Comments List

  1. 주의사신 2012/08/20 08:55 # M/D Reply Permalink

    "프로그램은 사람이 느낄 수 있는 것보다 빠르기만 하면 된다"는 스타일로 개발할 때가 많아서 많이 관심 없게 지나간 분야인데, 그런 차이도 있을 수 있음을 처음 알았네요.

    1. 사무엘 2012/08/20 09:57 # M/D Permalink

      저도 우연한 계기로 이런 차이를 발견하게 됐는데 그게 장난이 아닌 수준이더군요. (파일 I/O)
      이를 안 순간 <날개셋> 변환기부터 코드를 당장 뜯어고쳤답니다.

  2. Lyn 2012/08/20 11:17 # M/D Reply Permalink

    4K 단위로 IO를 하면 차이가 없습니다 ~_~ 디스크가 그 단위라

    물론 fread/fwrite는 그걸 대신 해주는거지만

    1. 사무엘 2012/08/20 17:54 # M/D Permalink

      4K는 디스크의 클러스터 단위이기도 하고 x86 CPU에서는 운영체제가 사용하는 메모리 페이지의 크기 단위이기도 하니 매우 중요한 숫자이군요.

Leave a comment

내가 예전에 교통수단의 동력 메커니즘에 대해서 글을 쓴 적이 있듯, 자동차는 내연기관으로 피스톤을 움직이고 그 힘으로 바퀴를 굴린다. 차체는 지면과의 구름 마찰력을 이용해서 나아간다. 엔진이 차체의 하중(과 그로 인한 정지 마찰력)을 직접 상대하는 부담을 덜려면 변속기가 반드시 필요하다. 그리고 세부적으로는 가솔린 엔진과 디젤 엔진이 모두 쓰인다.

비행기는 제트엔진으로 움직인다. 연료를 공기와 혼합시킨 후 압축· 폭발시키고 내뿜어서 그 반동으로 나아간다. (작용· 반작용의 법칙) 가스 폭발 사고 하나만 나도 주변이 엄청난 파괴력에 얼마나 박살이 나는지를 생각해 보면, 그 힘을 제어하여 자동차와 비행기를 굴리는 걸 상상하기란 어렵지 않을 것이다. 단, 로켓은 아래로 내뿜어서 그 추력 자체로 위로 뜨는 반면, 여타 항공기는 뒤로 내뿜어서 전진만 하고 하늘로 뜨는 건 날개의 양력을 이용한다는 차이가 있을 뿐이다.

항공기의 엔진은 당연한 말이지만 자동차 엔진보다 연료 소모가 많고 후폭풍과 소음도 막대하다. 하지만 결국 엔진이 밀어내는 건 공기일 뿐이기 때문에, 항공기의 엔진은 출력만 높으면 되지 자동차와는 달리 특별히 높은 토크나 동력비 변환 같은 걸 생각할 필요는 없다.

물론 이륙할 때가 비행기에 특별히 힘이 많이 필요하며 순항 중일 때보다 연료가 훨씬 더 많이 소모되는 건 사실이다. 그러나 비행기가 이륙을 위해 활주로를 달릴 때 파일럿이 무슨 1단, 2단 변속을 한다거나 비행기 엔진음이 단계별로 오르내린다거나 하지는 않는다. ^^

항공기의 엔진에 경유-중유 같은 디젤 연료가 쓰이지 않는 이유가 여기에 있다. 항공유는 휘발유와 등유 사이의 등급에 속하며, 액체 연료 로켓에 들어가는 연료도 마찬가지이다. 또한 단순히 뭔가를 돌리기만 하면 되는 게 아니라 연료를 폭발시킨 배기가스 자체를 내뿜어야 하기 때문에, 비행기만은 여타 교통수단과는 달리 '전기 동력화'를 전혀 할 수 없다. (배는 전력 공급 문제 때문에 기름으로 달리지만, 그래도 아예 원자로를 내장하고 전기로 움직이는 원자력 잠수함이 있기도 하다~!)

그렇다면 배가 나아가는 원리를 자동차와 비교해 보면 어떨까? 좀 특수한 상황인 것 같다.
무거운 바닷물 속에서 거대한 스크루를 회전시켜서 추진력을 만들려면 배의 엔진에는 역시 높은 회전수보다는 낮은 회전수에 높은 토크가 필요할 것이고, 이런 상황에는 디젤 엔진이 매우 적합하다. 유원지 가서 보트에서 노를 젓거나 페달 밟아서 오리배라도 몰아 본 분은 아시겠지만, 물에서 배를 움직이는 건 굉장히 힘든 일이다.

그러니 배의 엔진은 자동차 엔진의 확장판이라고 볼 수 있다. 그렇다고 배에 철도처럼 디젤-전기 기관이 쓰이기도 하는지는 난 잘 모르겠다.

다만, 배는 자동차와는 역학적 여건이 다른 점도 분명히 존재한다. 구름 마찰력에 의해 나아가는 게 아니며(스크루는 바퀴가 아니다!), 엔진에 배의 하중이 그대로 걸리는 형태가 아니다. 무게를 직접 받는다면 최하 수백~수만 톤에 달하는 거대한 배는 도저히 나아갈 수 없을 것이기 때문이다.

즉, 배는 구동축이 수중에 있기 때문에 공기보다야 엔진에 기본적으로 걸리는 부담이 훨씬 더 크겠지만, 갓 출발할 때이든 순항 중일 때이든 그 부담이 크게 차이가 나지는 않는다. 그렇기 때문에 기본적인 동력비 변환 외에 자동차 같은 다이나믹한 변속이 필요하지는 않을 것이다. 나중에 배를 탈 일이 있으면 엔진 소리가 어떻게 변하는지를 좀 더 주의 깊게 들어 봐야겠다.

자동차도 제트 엔진을 장착한 초음속 자동차가 사막에서 시운전을 하는데 배에도 굳이 내연기관이 아니라 제트엔진을 장착해서 가게 할 수도 있다. 어차피 망망대해에서는 뒤로 공기를 뿜으며 후폭풍을 일으켜도 위험할 게 없기도 하고 말이다. 물론 이 경우 배는 무척 빨리 움직일 수는 있지만 연비도 크게 감소하는 게 불가피하다. 군함 중에는 경제성과 기동성을 겸비하기 위해 내연기관과 제트 엔진이 모두 달린 배가 있다고 한다.

끝으로, 배가 제동은 어떻게 하겠는지를 생각해 보자. 자동차처럼 브레이크를 밟아서 구동축만 붙잡고 있는다고 서는 게 아니며, 주변은 온통 물뿐인데 땅을 붙잡아서 마찰을 일으켜서 설 수도 없다.
배가 제동을 걸려면 정말 엔진의 동력을 뒤로 향하게 하는 역추진을 하는 수밖에 없다. 사실, 초대형 선박은 그 상상을 초월하는 무게 때문에 속도를 바꾸기가 대형 트레일러나 열차보다도 훨씬 더 힘들 거라고 예상할 수 있다.

다음은 관련 추가 잡설들이다.

1. 대형 선박은 자동차처럼 키 꽂고 START만 돌린다고 해서 바로 시동이 걸리는 게 아니며, 시동 걸어서 초기화하는 데만 30분~1시간이 넘게 걸린다고 한다. 무슨 예열 과정이라도 있는지는 모르겠다.  엔진이 얼마나 거대하면 컴퓨터 운영체제의 부팅도 아니고 기동하는 데 그렇게 오래 걸릴 수 있을까?
참고로 디젤 기관차의 시동을 거는 장면은 류 기윤 님 같은 철덕 기관사가 올린 UCC를 통해 본인은 접할 수 있었다. 일반인이 평소에 듣을 수 없는 웽~ 소리가 난다.

2. 전세계의 항구들은 주변 지형과 시설 구조가 완전 제각각이다. 그에 반해 전세계를 누비는 배들은 덩치가 몹시 크고 가감속이 더디다. 그렇기 때문에 이런 배가 항구의 원하는 위치에 제대로 들어오도록 인도하는 일은 매우 몹시 중요하며, 이 일을 하는 사람을 도선사라고 한다.
교통덕이라면 이미 알고 있겠지만 도선사는 교통· 운수업에서는 비행기 조종사에 필적할 정도로 어렵고 중요한 일을 하는 전문직이기 때문에 종사자의 수도 적고 고령이며, 그 업종에서는 가히 최강의 연봉을 받는다. 게다가 도선사는 영어로는 조종사와 동일한 파일럿(pilot)이라고 불린다.

3. 군사 목적으로 수륙 양용차라는 게 있다. 그리고 철도계에서는 도로와 레일 위를 동시에 달릴 수 있는 특수 자동차도 있다. 흠, 이들을 통합하면 물과 육지는 전천후로 달릴 수 있는 교통수단이 나올 수 있을 듯.
다만, 비행기와의 통합은 현실적으로 힘들 것이다. 엔진 구조와 사용 연료가 근본적으로 다르고 날개를 접었다 꺼내는 설비도 필요할 테고... 굳이 무리해서 만든다고 해도 고정익보다는 헬리콥터 같은 회전익 겸용차가 더 승산이 있을지도 모르겠다.

4. 자전거를 타고 평지에서 정지 상태에서 처음으로 전진할 때는, 페달을 밟는 것보다 땅을 발로 뒤로 차는 게 힘이 덜 들 때가 있다. 그렇게 한 다음에는 페달 밟는 부담이 훨씬 줄어들기 때문이다.
배가 물을 박차고 나아가는 것에도 이와 비슷한 차원의 역학이 적용되는 게 있는지 궁금하다.

Posted by 사무엘

2012/08/18 08:18 2012/08/18 08:18
, , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/721

Trackback URL : http://moogi.new21.org/tc/trackback/721

Leave a comment

복종

복종
남들이 자유를 사랑한다지마는
나는 복종을 좋아하여요.
자유를 모르는 것은 아니지만
당신에게는 복종만 하고 싶어요.
복종하고 싶은데 복종하는 것은
아름다운 자유보다도 달콤합니다.
그것이 나의 행복입니다.
그러나 당신이 나더러
다른 사람을 복종하라면
그것만은 복종을 할 수가 없습니다.
다른 사람을 복종하려면
당신에게 복종할 수 없는 까닭입니다.


이 시는 잘 알다시피 그리스도인이 전혀 아닌 사람의 작품이다. 그러나 윤동주의 <십자가> 만만찮게 상당한 영적 통찰력이 엿보이는 것 같다.
시의 각 행에 내가 검색해 낸 관련 성구를 덧붙여 보면 이렇다.

* 복종

남들이 자유를 사랑한다지마는 / 나는 복종을 좋아하여요. (갈 5:13, 벧전 2:16)

자유를 모르는 것은 아니지만 / 당신에게는 복종만 하고 싶어요. (출 21:5-6, 엡 6:5)

복종하고 싶은데 복종하는 것은 / 아름다운 자유보다도 달콤합니다.
그것이 나의 행복입니다.
(몬 21)

그러나 당신이 나더러 / 다른 사람을 복종하라면
그것만은 복종을 할 수가 없습니다.
(출 20:3-6)

다른 사람을 복종하려면 / 당신에게 복종할 수 없는 까닭입니다. (마 6:24, 눅 16:13)

(성구들 직접 다 찾아 보시기 바란다.)
구원받은 크리스천이라면, 특히 KJV라는 당당한 최종 권위까지 있는 크리스천이라면, 저 '당신'이 기꺼이 예수 그리스도, 그리고 당신이 섬기는 교회가 될 수 있겠는가?

KJV 독립 침례 교회들은 바른 지식이 없이 성도들에게 열심과 헌신만 강요하면서 기형적으로 성장한 기성 교회들의 부작용과 폐단을 경험한 사람들로 구성된 경우가 많다. 그래서 성도들을 너무 닥달하지 않고 그리스도 안에서의 '자유', '자율'을 내세우는 경향이 있다.

그런데, 그랬더니 이번에는 반대로 그 자유를 무질서와 방종, 영적 태만을 합리화하는 데 써먹는 사람들이 있다는 소식이 들린다. 비록 사실이 아니길 최대한 기대해 보지만 이는 사역자와 여타 성도들을 힘 빠지게 하고 우울하게 만들 수밖에 없다.
십일조가 신약 교회의 교리가 아니라는 가르침이 성도가 헌금을 안 해도 된다는 가르침으로 와전된다거나,
목사고 교사고 다 필요 없고 아무도 너희를 가르칠 필요가 없다는 이상한 교리가 나온다거나 말이다.

너 혼자 구원받고 너 혼자 성경이고 교리고 다 알긴 하지만, 그게 남에게 끼칠 간증의 영향력을 상실했다면 당신은 영적 전투에서 이미 마귀에게 진 것이다.
구원이 이제 예수님을 닮아 가는 성화로 이어져야 하고 그게 자연스럽듯, 바른 성경에 대한 지식은 바른 교회를 세우고 유지시키는 헌신으로 이어져야 한다.

본인은 이런 영적 진리를 나누고자 이 주제와 관련하여 문득 떠오른 시를 인용했을 뿐이다. 타 종교에도 '구원의 길'이 있고 다같이 화합하는 게 좋다는 식의 주장을 할 의도는 전혀 없으므로 오해 없으시기 바란다.

끝으로, 시의 저자인 만해 한 용운(1879-1944)에 대해 살펴볼 점이 있다. 그는 시는 저렇게 '해요체' 위주의 아주 여리고 부드러운 여성적인 문체로 썼지만, 평소 언행과 성격은 그와 정반대로 독설과 기행이 가득한 열혈 과격파였던 걸로 잘 알려져 있다.

3· 1 운동 후 투옥된 민족 대표 33인 중 일부가 사형이나 무기징역을 선고받을까봐 통곡하고 두려워하자 그는 격분하여 감방 안의 똥통을 뒤엎어 그들에게 뿌리고는 “이 비겁한 인간들아, 울기는 왜 우느냐! 나라 잃고 죽는 것이 무엇이 슬프냐? 이것이 소위 독립 선언서에 서명을 했다는 민족 대표의 모습이냐? 그 따위 추태를 부리려거든 당장 때려치워라!” 하고 호통을 쳤다.

또한 전국의 주지 스님들을 모아 놓고 강연을 할 때는 교계의 부정부패를 비판하면서 “세상에서 가장 더러운 것은 똥이다. 그리고 똥보다 더 더러운 건 썩어 가는 시체이다. 그런데 시체보다도 더 더러운 것은 바로 염불에는 관심이 없고 잿밥에만 관심이 있는 너희 중놈들의 심보이다!”라고 일갈하고 단상을 내려온 일화는 아주 유명하다.

한 용운이 마 23:27-28과 렘 17:9를 알았는지는 난 모르겠다. 그러나 그 과격은 그가 비인격적이고 몰상식해서가 아니라 진짜 국가와 민족과 나름 자기 종교에 애정이 있기 때문에 표출된 과격일 것이다. 또한 딴 사람도 아니고 민족 대표자 정도나 되는 사람들이 비실비실하니까 저렇게 강한 책망을 했고, 일반 민초들이 아니라 주지 스님들 앞에서 당당히 쓴소리를 했다.

예수님도 마찬가지이다. 종교 지도자들 앞에서야 “뱀들아, 독사의 세대여!”라고 한 치의 두려움 없이 호통을 치셨지, 간음하다 붙잡힌 여인은 오히려 용서하고 다독여 주셨다. 그리고 “주여 믿나이다, 나의 믿음 없음을 도와 주소서”라고 애원하는 사람에게는 기적을 통해 믿음을 북돋워 주셨다.
정반대의 “오 믿음이 없고 비뚤어진 세대여, 내가 언제까지 너희와 함께 있으리요? 언제까지 너희를 용납하리요?” 같은 과격한 책망은(마 17:17) 받은 게 충분한데도 아직 성숙을 못 해서 정말로 책망을 받아야 마땅한 제자들에게나 하셨다!

이렇게 온유와 과격, 단호함을 잘 조절하여 때에 적절한 언행이 나오게끔 나의 행실도 돌아봐야 하겠다는 걸 <복종>이라는 시와 저자를 생각해 보면서 느끼게 되었다.

Posted by 사무엘

2012/08/15 19:17 2012/08/15 19:17
, , ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/720

Trackback URL : http://moogi.new21.org/tc/trackback/720

Comments List

  1. 주의사신 2012/08/16 09:47 # M/D Reply Permalink

    청 카페에 처음 가입했을 때, 꽤 긴 시간 자기 소개 없이 글을 읽으며 지냈습니다. 가끔은 정말 이래도 되는건가 싶을 수준의 표현들도 있어서, 아군은 맞는 것 같은데, 참 이상하다 싶었습니다. 그래서 있어도 되겠다 싶을 때까지 우선은 그냥 조용히 있었습니다.

    그런데 계속 읽어보면서 정리되는 것이 과격한 표현은 이상할 정도로 빗나가는 단체들에게만 해당하는 표현임을 깨달았습니다. 나머지는 괜찮았습니다. 그래서 그냥 있기도 결정을 내리고 가입 인사를 하고 오늘까지 오게 되었답니다.

    1. 사무엘 2012/08/16 12:03 # M/D Permalink

      청카페가 좀 범상치 않은 분위기와 성향을 지니고 있는 건 사실이지만, 성경적으로 문제가 될 정도의 심각한 저속함이나 무례함은 결코 아니라 여겨집니다.
      청카페와는 거의 정반대 분위기로 운영되고 있는 다른 이웃집 커뮤니티도 있지요. 거기는 청카페 같은 표현상의 과격함(?)이 없다고 해서 누구에게나 유들유들 부드럽고 온유한 것도 아니거든요. 저는 양 측의 운영 방침을 존중하고 따릅니다만, 어느 한 쪽만이 최선이나 능사라고 생각하여 편들지는 않는답니다.

      다만, 과격을 구사했다면 그 과격에 상응하는 사랑과 책임이 뒤따라야 한다는 건 확실합니다. 청카페가 여기서 어긋나는 일이 없으면 좋겠습니다. ^^

Leave a comment

우리나라의 고속도로 통행료 과금 체계는 크게 폐쇄식 아니면 구간식이라는 둘 중 하나로 나뉜다고 본인은 예전의 글에서 정리한 바 있다.

  • 폐쇄식: 톨게이트는 고속도로의 각 진출입로(나들목)마다 다 있으며(그리고 폐쇄식이 시작되거나 끝나는 양 말단 지점에도), 고속도로를 주행하는 모든 차들은 통행권을 받고 들어간다.
  • 구간식: 톨게이트는 본선 내부에 일정 간격으로 놓여 있고, 각 게이트마다 고정된 액수의 통행료만을 징수한다. 통행료를 내면 영수증만을 줄 뿐, 통행권 같은 걸 따로 발급하지는 않는다.

두 방식은 운영 방식이 서로 완전히 다르고 배타적이다. 그러나 예전보다 고속도로의 수가 많아지고 특히 민자 고속도로라는 게 생기면서, 요즘은 통행료의 과금 방식에도 일종의 ‘짬뽕’이 느는 추세이다. 쉽게 말해서 복잡해지고 있다는 뜻 되겠다.

단적인 예로, 논산-천안이나 부산-대구 같은 민자 고속도로는 여전히 진출입로별로 거리 비례 폐쇄식으로 통행료를 부과함에도 불구하고, 민자 구간의 시작과 끝 지점에 톨게이트가 또 있다.
이때는 기존 표준(?) 통행권을 반납하고 새로운 통행권을 발급받는지, 아니면 기존 통행권에다 추가 정보를 넣어서 요금을 정산하는지, 아니면 그냥 고정된 액수의 통행료를 추가로 징수하는지, 무엇을 하는지 내가 직접 운전해 보지 않아서 잘 모르겠다.

그리고 반대로, 수도권의 구간식 통행료 구간에도 일부 나들목에는 또 폐쇄식 같은 진출입 톨게이트가 추가로 존재한다. 물론, 이곳은 통행권 같은 건 없는 상태이기 때문에 고정된 통행료만 징수한다.
중부 고속도로에는 동서울 톨게이트 이북의 하남 IC,
경부 고속도로에는 서울 톨게이트 이북의 판교 IC가 그 예이다.

하남과 판교는 폐쇄식 통행료 징수 체계가 끝나고 구간식 관할이다. 수도권이 워낙 거대하기 때문에 아직 폐쇄식이 시작되지는 않았지만, 그래도 서울에서 해당 지역 사이를 드나들 때도 적게나마 통행료를 구태여 걷기 위해서 이런 꼼수가 도입된 것이다.

서울이 아니라 부산/대전 방면에서 해당 지역 나들목을 드나드는 경로에는 톨게이트가 있지 않다. 어차피 그런 차들은 서울이나 동서울 톨게이트에서 통행료를 한번 냈거나, 아니면 조만간 통행권을 받고 장거리 운행을 시작할 것이기 때문이다.

다만, 문제가 되는 건 인근의 외곽 순환 고속도로에서 판교를 드나드는 차들이다. 이들은 그렇잖아도 인근의 청계나 성남 톨게이트에서 통행료를 한번 냈는데 판교에서 또 통행료를 내는 것은 형평성에 맞지 않기 때문이다.

그래서 판교 IC는 외곽 순환 고속도로의 톨게이트를 통과한 영수증을 제시한 차에 대해서는 통행료를 면제해 준다. 순수하게 경부나 중부 고속도로만 이용해서 서울과 해당 위성/신도시 사이를 오가는 사람만이 납부 대상이다.

이렇게 되면 일이 생각보다 복잡하다는 걸 알 수 있다. 물론, 하이패스만 달려 있으면 복잡한 통행료 계산은 이런 것까지 다 알아서 자동으로 처리가 된다. 마치 대중교통에서 티머니 교통 카드가 있으면 환승 할인까지 자동으로 처리가 되듯이 말이다.

외곽 순환 고속도로는 구간식이기 때문에 그 많은 나들목마다 일일이 톨게이트가 있지는 않다. 그러나 북쪽의 퇴계원-일산 사이의 민자 구간은 그렇지 않아서 민자 구간의 시작과 끝 지점에도 톨게이트가 있고, 그 내부에 있는 모든 나들목들에도 톨게이트가 있다.

물론 이들은 고정액 징수이다. 본선을 통해서든 나들목을 통해서든 민자 구간은 일단 들어갈 때 반드시 돈을 내는 형태이다. 내 기억이 맞다면, 본선 톨게이트에는 들어가는 차와 나가는 차가 모두 돈을 내지만, 나들목 톨게이트에는 진입하는 차만 돈을 내는 구조가 아닌가 싶다. 통행권을 반납하는 것도 아닌데 드나드는 차를 모두 막을 필요는 없다.

이렇듯, 고속도로의 폐쇄식 구간에서 본선 톨게이트가 중복으로 존재하거나 구간식 구간에서 나들목 톨게이트가 있는 식으로 변칙적인 통행료 징수 체계가 부분적으로 등장한 이유는, 독자적인 통행료 징수 체계를 쓰는 민자 구간이 존재하거나 예외적인 광역 교통 수요로부터 통행료 수입을 거두기 위해서라는 두 가지 이유로 요약된다.

24시간 언제나 통행료를 걷는 고속도로와는 달리, 남산 터널(2는 제외하고 제1, 제3)의 입구에서 걷는 혼잡 통행료는 건설비 회수가 아니라 순전히 불필요한 교통의 억제를 위해서 페널티 차원에서 부과한다. 그래서 심야나 새벽 시간대에는 무료이며, 주말에도 무료. 그리고 승용차라도 3명 이상만 합승해 있으면 통행료를 면제해 주니 기준이 관대하다. 다만, 통행료를 걷는 주체가 다르기 때문에 아직까지 하이패스가 통용되지는 않는다고 한다.

Posted by 사무엘

2012/08/13 19:15 2012/08/13 19:15
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/719

Trackback URL : http://moogi.new21.org/tc/trackback/719

Leave a comment

지난 2000년 5월경에 방영된 <현장 르포 제3지대> -- 지하철에 미친 아이들 편

현재까지 공중파 방송에서 철덕들의 행동과 심리에 대해 가장 흥미진진하게 잘 보여준 TV 프로가 아닌가 싶다. 철덕들의 열정과 낭만이 느껴지더라. 난 무척 감명깊게 봤다!
이제는 완전히 자취를 감춘 노랑-초록 도색의 코레일 전동차와, 리모델링 전의 용산 역 승강장의 모습이 덤으로 인상적이다.

역시 겨우 나 정도의 철덕력으로는 저런 사람들에게 명함도 못 내밀 것이다.
저 TV에 나온 이 재원 씨는 MEIS의 운영자이고 지하철역에서 공익 요원으로 병역을 마친 뒤, 현재는 어엿한 서울 도시철도 공사 직원이 되었다. (그리고 다른 국내 유명 철덕이신 '영동선 511' 운영자분도 도철 입사..;;)

“전동차 출발 구동음을 녹음해서 차량별로 어떤 차이가 있는지 알아보고 있어요. 차량 제작사마다 소리가 제각각이거든요.” (38:50 ~ 39:40 구간)

사용자 삽입 이미지

일본 철도 덕후들이 한국 사람보다 한국 철도 차량에 대해 이미 더 잘 알고 더 면밀히 분석해서 일본어로 책을 만들어 놨다. 게다가 그런 책이 일본에서 아주 잘 팔린다고.. “이건 한국인으로서 부끄러운 일이 아닐 수 없습니다.” (41:10 ~ 41:50 구간)

사용자 삽입 이미지

상록수 역 - 한대앞 - 수인선 선로 답사도 난 2005년에 완전히 똑같이 한 적이 있으니 완전 공감이다. 물론 저 TV 프로를 모르던 상태에서.
상록수 역 어원을 찾다가 최 용신 선생의 일대기 공부를 한 것까지도 똑같다. (42:50 ~ 45:30)

사용자 삽입 이미지

Posted by 사무엘

2012/08/11 08:40 2012/08/11 08:40
,
Response
No Trackback , 3 Comments
RSS :
http://moogi.new21.org/tc/rss/response/718

Trackback URL : http://moogi.new21.org/tc/trackback/718

Comments List

  1. Lyn 2012/08/11 20:28 # M/D Reply Permalink

    철덕의 귀감 + 덕업일치를 성공하신 분이군요 : )

    아... 그러고보면 나도 덕업일치는 성공한건가?

    1. 사무엘 2012/08/11 23:26 # M/D Permalink

      자기가 좋아하는 분야의 프로그램을 개발하면서 그걸로 돈도 벌고 있다면.. 덕업일치죠~~
      구체적으로 어느 분야인지가 궁금하네요.

    2. Lyn 2012/08/13 10:27 # M/D Permalink

      게임입니다 `-`

      서버지만

Leave a comment

<날개셋> 한글 입력기를 오래 써 본 분들은 아미 아시겠지만, 이 프로그램에서 두벌식 글자판의 자음 글쇠는 내부적으로 다음과 같은 수식으로 표현된다.

T<=1 ? 초성: 종성

그래서 ㄱ을 예로 들면,

T<=1 ? H2|G_: H2|_G

그 반면, 세벌식 글쇠는 간단하게 해당 자모 하나로 끝이다.

H3|G_ (초성 ㄱ) 아니면
H3|_G (종성 ㄱ)

H3은 세벌식 자모를, 그리고 H2는 두벌식 자모를 뜻하는 날개셋문자 접두사이다. G는 ㄱ을 뜻한다. 다만 알파벳 한 글자만 있으면 변수와 구분이 되지 않기 때문에 부득이 뒤에 _가 추가되었다.

종성은 앞에 _를 추가하는 것으로 초성 명칭과 구분한다. 그리고 이렇게 하는 것만으로 명칭의 길이가 두 글자를 넘어섰으므로 뒤에 별도로 또 _를 추가하지는 않는다. <날개셋> 한글 입력기의 헤비 유저라면 이 정도 수식은 이미 다 익숙할 것이다.

두벌식에서 번거롭게 수식이 추가된 이유는 한 글쇠가 상황에 따라 초성 역할도 하고 종성 역할도 해야 하기 때문이다. 오토마타에서 1번 상태는 통상 초성을 첫 입력받은 상태이기 때문에 그때까지는 ㄱ을 초성으로 내보내고, 중성이나 종성이 입력된 뒤부터는 종성으로 내보내라는 뜻이다. 한 마디로 말해 두벌식 타자기에 존재하던 ‘받침’ 글쇠를 이 수식이 담당한다고 생각하면 된다.

세벌식이 아닌 두벌식 자모는 종성을 처리할 때 세벌식 자모에 비해 다음과 같은 두 가지 추가 작업이 행해진다. 두벌식 글자판에서 한글이 입력되는 과정을 생각해 보면 자명한 것들이다.

첫째, 두벌식 종성 다음에 두벌식 중성이 이어지면, 잘 알다시피 도깨비불 현상이 일어난다. 직전에 입력되었던 마지막 종성 한 타가 다음 글자의 ‘초성’이 되고, 그 글자와 중성이 한데 결합한다.

둘째, 두벌식 종성이 계속 입력되었는데 기존 종성과 새 종성이 결합이 불가능하면 새 종성은 다음 글자의 종성이 아니라 ‘초성’으로 넘어간다.


두벌식을 세벌식에다가 추가적인 처리를 덤으로 하는 관점에서 한글 입력기를 설계하면 대체로 이런 식의 구현체가 나온다. <날개셋> 한글 입력기도 그렇고 아래아한글도 그렇고, 심지어 맥 OS의 한글 입력기도 그러하다.

특히 맥 OS는 두벌식과 세벌식의 낱자 결합 규칙이 완전히 동일하다. 초성은 쌍자음을 원시 자음의 연타로 입력할 수 있는 반면 종성(ㄲ, ㅆ)은 그렇게 할 수 없는 것이 둘 모두 똑같다. 초성의 결합 규칙과 종성의 결합 규칙이 분명히 구분되어 있으며, 두벌식에서 다음 음절로 이어진 첫 자음도 응당 초성으로 간주된다.

그런데 ‘초성’이 아닌 ‘종성’ 관점의 두벌식 한글 입력 방식도 생각할 수 있으며, 사실 이것이 초성과 종성의 구분이 없는 진정한 두벌식다운 두벌식이라 할 수 있다. 이 사상이 반영된 구현체는 마이크로소프트 Windows의 한글 IME가 유일하다.

MS IME의 두벌식은 초성과 종성의 구분이 없고 자음 입력은 어떤 경우에든 종성 문맥으로 간주된다. 그렇기 때문에 모음 없이 자음을 바로 입력할 때도 ㄳ, ㄻ 같은 겹자음을 만들 수 있다. 심지어 그 상태에서 ‘ㄱ (ㅏ) 가 (bksp) ㄱ (ㅅ) ㄳ (ㅗ) ㄱ소’ 같은 자유로운 입력도 가능하다.

이것은 <날개셋> 한글 입력기에서는 지금까지 가능하지 않았다. 수식 없이 H2|_G 같은 기존 두벌식을 종성만 배당하면, 모음 없이 당장 겹자음을 만드는 것을 비슷하게 흉내는 낼 수 있다. 그러나 완전히 똑같게는 못 한다. 계속해서 다음 음절로 입력되는 자음은 어차피 종성이 아니라 초성이 되어 버리고, 종성의 낱자 결합 규칙이 적용되지 않기 때문이다.

또한 두벌식 종성으로 자음, 그 다음으로 모음을 입력한 뒤 Bksp를 눌러 보면, 첫 타에 해당하는 자음은 종성이 아니라 초성으로 바뀌어 있는 것도 볼 수 있다. 내부적으로 두벌식 종성과 두벌식 중성 사이에는 도깨비불 현상이 한번 일어나서 종성이 초성으로 넘어간 걸로 간주되기 때문이다.

이 문제를 해결하고 종성 위주 두벌식을 도입하기 위해, 본인은 <날개셋> 한글 입력기의 어느 부분을 개량하면 좋을지 굉장히 많이 고민했다. 기존 패러다임과 새 패러다임을 어떻게 조화시킬까?
어느 구조체를 확장할까, 어느 API에다 옵션 플래그를 추가할까, 아예 날개셋문자에다가 새로운 타입을 추가할까..? 이런 결정을 내려야 할 때가 정말 내가 엔지니어로서 현역이고 살아 있음을 느낀다.

API 호환성을 깨뜨리지 않고 가장 후폭풍이 적은 방법을 며칠간 고민하던 중, 결국은 날개셋문자에다 타입을 추가하는 게 가장 바람직하겠다는 결론을 도출하였다. 그래서 H2에 이어 일명 H2J라는 타입이 도입되었다. 일명 ‘두벌식 종성’ 타입. <날개셋> 한글 입력기 다음 버전인 6.7에서 바로 볼 수 있을 예정이다.

현재 한글 입력과 관련된 날개셋문자 타입은 H3과 H2 말고도 H3의 자매격에 해당하는 다중 자모가 둘 더 있다. <날개셋> 한글 입력기는 기존 H3만으로도 ‘ㅏ+종성ㄴ’ 같은 다중 자모를 배당할 수 있다. 초성 ㄱ을 입력 중에 저걸 누르면 곧바로 ‘간’이 되고, ‘오’를 입력하던 중에 저걸 누르면 곧바로 ‘완’이 된다. 다중 자모는 동시치기 같은 것과는 전혀 다른 개념이므로 그런 것과는 절대로 혼동하지 말라.

그런데 디폴트인 H3은 ‘초-중-종’을 순서대로 적용하는 반면, 여타 다중 자모는 ‘중-종’만 적용 후 음절을 끊고 다음 글자 초성을 또 입력시키거나 ‘종’만 적용 후 ‘초-중’은 다음 글자로 넘긴다. 세벌식은 음절 경계와 관련된 변칙적인 처리가 없으니 이런 다중 자모까지도 생각할 수 있는 반면, 두벌식은 다중 자모까지는 갈 수 없고 음절 경계 처리에만 치중한 파생 타입만을 생각할 수 있는 셈이다.

‘두벌식 종성’ 타입으로 입력된 종성은 도깨비불 현상이나 결합 실패로 인해 다음 글자로 넘어갈 때 초성으로 바뀌는 게 아니라 종성이 그대로 유지된다. 그리고 그 상태에서 중성을 입력하더라도 종성은 초성으로 바뀌지 않고 종성 상태로 그대로 보존된다.

이 타입을 쓰면 두벌식으로도 자음을 배당할 때, 골치 아픈 수식을 쓸 필요 없이 언제나 마치 세벌식처럼 H2J|_G라고 언제나 종성 형태만 넘겨 주면 끝이다. 다만, <날개셋> 편집기처럼 초-중-종성의 형태를 완벽하게 보존하는 한글 글꼴 체계에서는 처음에 초성을 입력했는데 초성이 아니라 종성이 나타나기 때문에 마치 도깨비불 현상만큼이나 보기가 어색할 것이다.

이 어색함은 표준 한글 자모를 호환용 한글 자모로 치환해서 표시해야 덜해진다. 즉, 애초에 초성과 종성의 구분이 없는 글자판은 역시나 초성과 종성의 구분이 없는 글자 코드와 글꼴을 동반해야 자연스럽다는 뜻. 실제로는 한글의 구성 원리를 어기고 전혀 자연스럽지 않은 처리가 추가로 행해지는 셈이다. 오버헤드는 ‘세벌식 < 기존 세벌식 관점에서 추가로 구현된 두벌식 < 새로 도입된 종성 지향 두벌식’의 순으로 많아진다.

H2J 타입을 쓰면 <날개셋> 한글 입력기로도 MS IME의 두벌식과 완전히 동일하게 동작하는 입력 방식을 구현할 수 있다. 사실 내 프로그램은 세벌식 자판과 관련된 응용 기능들은 거의 1.x 시절부터 제공해 온 반면, 두벌식을 두벌식답게 지원하는 편의 기능들은 훨씬 나중에 도입되어 왔다. 특수 도깨비불 규칙(3.9부터)이라든가, 초-종성 공유 낱자 결합 규칙(6.0)에 이어, 종성 지향 두벌식(6.7)의 순이다.

알면 별로 어려울 것 없는 내용인데 이 글 내용을 제대로 이해한 분이 얼마나 되려나 모르겠다. <날개셋> 한글 입력기는 올해로 개발 12주년이고 무려 7.0을 바라보는 시점인데 아직도 한글 입력의 본질과 관련된 새로운 기능이 추가되고 향상된 게 있다는 게 내게는 무척 흥미롭고 의미심장하게 느껴진다.

Posted by 사무엘

2012/08/08 08:20 2012/08/08 08:20
, , , ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/717

Trackback URL : http://moogi.new21.org/tc/trackback/717

Comments List

  1. Lyn 2012/08/08 11:32 # M/D Reply Permalink

    우왕 ...

    1. 사무엘 2012/08/08 14:30 # M/D Permalink

      지금 C++이 단순히 객체지향뿐만이 아니라 메타프로그래밍, 함수형-_- 등 갖가지 패러다임이 짬뽕으로 들어간 프로그래밍 언어인 것처럼,
      <날개셋> 한글 입력기도 한글 입력에 관한 한 짬뽕 복합 패러다임을 지향하고 있습니다. 한글 입력과 관련된 아이디어는 무한정 구현할 수 있게..;;
      세벌식이 이런 독특한 방향으로 발전했다면, 두벌식은 저런 방향으로 기술할 수 있다는... 그런 예를 보이는 것이죠.

      특수 도깨비불 현상으로 할 수 있는 일의 일부를 결국 초-종성 공유 낱자 결합 규칙으로 간략화할 수 있고,
      두벌식 종성 날개셋문자를 쓰면 그냥 공유 결합 규칙을 쓸 필요도 없이 그냥 종성 결합만 쓰면 되기 때문에
      한 기능이 다른 기능의 역할을 겸임하는 것도 있습니다. 하지만 이들 개념들이 다 동등한 것은 아니지요.

  2. Lyn 2012/08/10 10:18 # M/D Reply Permalink

    열정이 부럽습니다

    1. 사무엘 2012/08/10 16:36 # M/D Permalink

      열정이 뭔가 물리적인 보상으로 돌아올 수 있어야 이 일에만 더 열심히 전념할 수 있을 텐데요.. ^^;;

Leave a comment

블로그 이미지

철도를 명절 때에나 떠오르는 4대 교통수단 중 하나로만 아는 것은, 예수님을 사대성인· 성인군자 중 하나로만 아는 것과 같다.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2012/08   »
      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:
162786
Today:
128
Yesterday:
153