1. 멀티스레드

지난 날개셋 한글 입력기 9.9에서는 어쩌다 보니 스레드와 관련된 작업이 좀 있었다. 각종 대화상자에서 스레드 작업이 행해지던 것을 중단시켰을 때 프로그램이 멎던 문제를 해결했으며, 반대로 사용자의 타이핑에 실시간으로 반응하며 동작하는 일부 입력 도구에다가는 랙 없이 깔끔하게 동작하기 위해 스레드를 사용하게 하는 옵션을 추가했다. 뭐, 요즘 컴퓨터에서 랙을 걱정할 지경은 아니긴 하지만 말이다.

오랜만에 멀티스레드를 다루다 보니 지금까지 이론으로만 알고 있던 동기화라는 것도 구현해야 했다. worker 스레드는 입력 데이터를 지지고 볶고 열심히 건드리고 있는데, 그걸 표시하는 UI 스레드도 아무 통제 없이 같이 돌아가게 놔 두면 프로그램은 당연히 메모리 에러가 나고 뻗는다.

Critical section을 생성하고 소멸하는 부분은 클래스의 생성자와 소멸자에다 담당시켰는데, 이걸 이용해서 실제로 락을 걸고 푸는 것까지 또 다른 클래스의 생성자와 소멸자로.. 그렇다고 기존 오브젝트의 포인터를 명시적으로 지정하지 않고 자동 구현하는 것은 C++에서 안 되는가 보다. Inner class에서 바깥 class의 non-static 멤버에 접근 가능하지 않으니까..

임계 구간을 잘 설정해야 crash를 막을 수 있다. 하지만 그렇다고 개나 소나 마구 락을 걸어 버리면 성능만 떨어지는 게 아니라 반대로 deadlock이라는 부작용이 발생해서 프로그램의 응답이 멎어 버릴 수 있다. Crash는 사람이 다쳐서 의식을 잃는 것이고, deadlock은 사람이 수술 후 마취에서 못 깨어나는 것과 비슷하다..;;

주로 어떤 상황이냐 하면, UI 스레드가 worker 스레드의 실행이 끝날 때까지 기다리게 됐는데 worker 스레드는 데이터를 고친 뒤 UI 스레드의 응답이 필요한 요청을 해 버릴 때 이렇게 된다. 특히 윈도우에다가 메시지를 보내고 응답을 기다리는 API 함수를 호출하는 것 말이다.

이런 주의 사항을 염두에 두면서 프로그램의 주요 구간에 스레드 동기화를 시켜 놓았다.
당연한 말이지만 한 critical section 오브젝트는 단일 구간이 아니라 코드의 여러 구간에다가도 배치해서 이들 모든 구간을 통틀어서 한 순간엔 한 스레드만이 접근 가능하게 제약을 걸 수 있다. 이게 강력한 면모인 것 같다.

그러고 보니 Windows 프로그래밍 헤더에 들어있는 구조체들 중에는 내부 구조가 딱히 공개돼 있지 않은 것이 좀 있다.
가령, PAINTSTRUCT 내부에 있는 rgbReserved 같은 멤버, STARTUPINFO 내부에 있는 cbReserved2, 그리고 CRITICAL_SECTION도 어쩌면 CPU 아키텍처별로 크기와 내부 멤버가 제각각 다를 가능성이 높은 비공개 구조체이다.
이런 예가 무엇이 더 있을 텐데 궁금하다. 당장은 떠오르지 않는다.

2. C 라이브러리와 스레드 생성 함수

Windows에서 스레드를 생성하는 제일 저수준 API는 잘 알다시피 CreateThread 함수이다.
요즘이야 C++도 C++11부터 언어 라이브러리 차원에서 플랫폼· 운영체제를 불문하고 멀티스레드 기능을 std::thread, std::mutex 같은 클래스로 제공하고 있지만, 이들도 내부적으로는 물론 Windows API 같은 운영체제 API를 호출하는 형태로 구현된다. 심지어 native handle값을 되돌리는 멤버 함수도 제공한다.

(그러고 보니 C++ 라이브러리는 C 라이브러리와 달리 라이브러리의 소스가 공개돼 있지 않은 듯하다.. 소스가 어쩔 수 없이 공개되는 템플릿 쪽은 도저히 알아볼 수 없는 난독화 급으로 작성돼 있고, 내부적으로 호출하는 함수 같은 것은 구현체 소스가 딱히 보이지 않는다.)

C++11 이전에는 Visual C++의 경우, 언어 확장 명목으로 CreateThread (와 ExitThread)를 얇게 감싼 _beginthread[ex] (+ _endthread[ex]) 함수를 독자적으로 제공해 왔다.
얘는 Windows SDK의 헤더와 라이브러리를 끌어들이지 않고도 스레드를 사용할 수 있게 해 주는 동시에.. C 라이브러리가 자체적으로 스레드별로 사용하는 메모리를 제때 할당하고 제때 해제하는 역할도 담당했다.
그렇기 때문에 C/C++ 함수도 사용하면서 Windows용 프로그램을 개발한다면 일반적으로는 운영체제 직통 함수 대신 이런 상위 함수를 사용해서 스레드를 생성해야 한다.

C 라이브러리가 스레드별로 무슨 메모리를 사용하는가 하면.. 전역변수로 단순하게 구현되었지만 지금 관점에서 보면 스레드별로 값이 제각기 보존되어야 하는 정보들 말이다. errno라든가, strtok 함수의 내부 state 및 context.. 비록 이런 것에 의존하는 함수가 그리 많은 건 아니지만 어쨌든 그런 예가 있다.

C 라이브러리에서 제공하는 begin/end 함수는 ex가 붙은 놈과 그렇지 않은 단순한 놈으로 나뉜다. ex는 받아들이는 인자가 Windows API의 그것과 완전히 동일하다. 그에 비해 단순한 놈은 평소에 잘 쓰이지 않는 인자들을 과감히 생략했기 때문에 사용하기가 더 쉽다.

예를 들어 begin 버전은 SECURITY_ATTRIBUTES 정보를 입력받는 부분이 생략됐고, 거의까지는 아니어도 잘 쓰이지 않는 thread ID를 받아들이는 부분도 생략됐다. 또한, 프로세스도 아니고 스레드의 실행 후 리턴값은 거의 쓰이지 않는다는 점을 감안하여 end 버전은 리턴값을 지정하는 부분도 생략되고 그냥 0으로 고정됐다.

참고로 Windows NT의 경우 ReadFile/WriteFile에서 실제로 읽거나 쓰는 데 성공한 양을 받는 DWORD 포인터, 그리고 CreateThread에서 생성된 스레드의 ID를 받는 DWORD 포인터를 생략하고 NULL을 줄 수 있다. 굳이 그 정보들이 필요하지 않다면 말이다. 하지만 과거의 Windows 9x는 저들 함수의 인자에서 NULL을 줄 수 없으며, 그냥 잉여 변수라도 하나 반드시 선언해서 넘겨줘야 한다는 차이가 있었다(NULL 주면 실행 실패).

뭐 그렇긴 한데.. C 라이브러리의 간편 버전은 사용법을 간소화하기 위해 여러 인자들을 생략했을 뿐만 아니라, 스레드 핸들을 CloseHandle로 닫는 것까지 임의로 자동으로 해 버린다. 스레드가 아주 잠깐 동안만 실행됐다가 종료돼 버리는 경우, _beginthread 함수의 리턴값이 나중의 시점에서 유효하다는 보장을 할 수 없다.

이건 사족에 가까운 간소화 조치로 여겨지며, 이 때문에 _beginthread는 사용이 그리 권장되지 않고 있다. 아니면 정말 뒷감당 할 필요 없고 한번 생성된 뒤에 “나는 책임 안 지니 니가 알아서 모든 뒷정리 하고 곱게 사라져라” 급인 스레드를 간편하게 생성하는 용도로나 적합하다. 그게 아니면 번거롭지만 결국은 _ex 함수를 쓰고 핸들은 내가 수동으로 닫아 줘야 한다.

3. 실행 주체들의 종료 리턴값

프로세스와 스레드는 종료될 때 정수를 하나 되돌릴 수 있는데, 아무 일 없이 잘 끝났으면 간단히 0을 되돌리는 게 관행이다. 옛날에 도스에서는 프로세스의 종료 코드를 ERROR_LEVEL이라는 독특한 명칭으로 불렀었다.

프로세스의 종료값은 그럭저럭 고유한 용도가 있으며, 여러 프로그램들을 순차적으로 실행하는 배치 파일이나 스크립트 같은 데서 많이 쓰인다. 종료되고 없는 먼젓번 프로그램의 실행이 성공했는지 여부를 밖에서 알 필요가 있기 때문이다.

하지만 앞에서 잠시 언급한 바와 같이.. 스레드의 종료값은 내 경험상 거의 쓰이지 않는다. 스레드의 종료값을 읽고 판단할 수 있는 코드 자체가 동일 프로세스 안의 다른 스레드밖에 없고.. 한 프로세스 안에서는 굳이 종료값 말고도 스레드의 실행 결과를 알 수 있는 방법이 매우 많기 때문이다. 애초에 같은 메모리 주소 안이니..

또한 스레드는 애초에 여러 작업을 동시에 수행하라고 만들어지지, 배치 파일처럼 여러 스레드를 순차적으로 실행하면서 실행 결과를 확인하는 식으로 운용되지도 않는다. 그럴 거면 그냥 한 스레드에서 순차 실행을 구현하고 말지.. 프로세스와는 여러 모로 사용 여건이 다르다.

그 와중에 Windows에서는 259라는 값이 STILL_ACTIVE라는 의미로 예약돼 있는지라.. 프로세스나 스레드의 종료 리턴값으로 쟤를 돌려주는 것이 금지되어 있다. 자기는 종료되어서 없는데 GetExitCodeProcess/Thread 함수가 저 값을 되돌리고 있으면 다른 프로세스나 스레드는.. 없는 프/스의 실행이 끝날 때까지 기다리면서 데드락 같은 상태에 빠지기 때문이다.

4. 타 프로세스에다 내 스레드 생성하기: CreateRemoteThread

Windows API 중에는 기본적인 기능을 제공하는 함수가 있고, 거기에 덧붙여 어느 프로세스 문맥에서 그 기능을 수행할 것인지를 지정하는 인자가 추가로 붙은 Ex버전이 또 존재하는 경우가 있다.
예를 들어 ExitProcess(현재 프로세스만)의 상위 호환인 TerminateProcess, 그리고 VirtualAlloc에다가 HANDLE hProcess가 추가된 VirtualAllocEx처럼 말이다.

그것처럼 스레드를 생성하는 CreateThread에 대해서도 target 프로세스를 지정할 수 있는 CreateRemoteThread 함수라는 게 있다.
이런 함수들은 내부적으로 구현도 하위 함수를 호출하면 상위 함수에다가 GetCurrentProcess()의 리턴값을 붙여서 호출하는 형태로 돼 있다.

그런데 남의 프로세스 주소 공간에다가 스레드를 생성한다니??
이건 물론 디버거나 보안 솔루션 같은 특수한 프로그램에서나 필요하지 자기 일만 하는 일반적인 프로그램에서 쓰일 일은 없는 기능이다.
그리고 이 함수는 각종 명령 인자들을 준비하는 게 몹시 까다롭기 때문에 타 프로세스에서는 매우 제한된 형태로밖에 활용을 할 수 없다.

제일 근본적으로는.. 실행되어야 할 스레드 함수 코드와 실행에 필요한 데이터들이 몽땅 그 target 프로세스의 메모리에 마련돼 있어야 하며 주소값 또한 걔네들의 문맥으로 줘야 하기 때문이다. 잘못되면? 요청을 한 우리가 아니라 멀쩡히 돌아가던 저 프로세스가 뻑나게 된다.
global hook 프로시저를 지정할 때처럼 DLL에다가만 분리해서 구현해 놓으면 그 DLL이 알아서 거기로 주입.. 그런 것도 없다.

다만, CreateRemoteThread를 이용해서 타 프로세스에다 내 코드를 주입하려면 어차피 DLL을 만들기는 해야 한다. 그 이유는 이렇다.
CreateRemoteThread로 할 수 있는 게 사실상.. 스레드 callback 함수로 LoadLibrary를 지정하는 것밖에 없기 때문이다.

이게 가능한 이유는 (1) LoadLibrary(+ FreeLibrary도)가 machine word 하나를 받아서 word 하나를 되돌린다는.. 스레드 callback 함수와 prototype이 일치하기 때문이며, 그리고 (2) LoadLibrary가 소속된 kernel32.dll은 어느 프로세스에서도 메모리에 load된 주소가 동일 고정이기 때문이다. 즉, LoadLibraryA/W 함수의 주소도 고정이며 예측 가능하다. 요게 핵심이다. 요즘 보안을 위한 대세인 ASLR에서 열외된 영역인 듯..

물론 LoadLibrary에다가 주는 인자는 평범한 숫자가 아니라 포인터이므로 넘겨줄 때 조심해야 한다.
VirtualAllocEx를 이용해서 그 프로세스 문맥에서의 메모리와 포인터 주소를 얻은 뒤, 문자열을 그쪽으로 써 넣을 때도 WriteProcessMemory를 호출해서 하면 된다. 얘는 그야말로 memcpy를 fwrite처럼 구현한 상위 호환 버전이라고 생각하면 되겠다.

LoadLibrary에다가 넘겨주는 문자열 인자로 바로 상대방의 프로세스에서 수행할 작업(뭔가 엿보기, 훅킹하기 등등)이 구현된 내 DLL의 주소를 넣으면 된다. DllMain 함수에서 돌아가는 것이니 몸 사리면서 조심해서 실행돼야 한다.
혹시 내 DLL을 실행하면서 다른 DLL을 읽어 놓아야 한다면 내 DLL을 주입한 것과 동일한 테크닉으로 그런 dependency DLL들을 미리 읽어 놓는 게 좋을 것이다. LoadLibrary를 수행하던 스레드가 실행이 끝났다고 해서 그 DLL들이 해제되는 건 아니기 때문이다.

주입되었던 내 DLL을 빼내는 것도.. 간단하다.
스레드 함수에다가 FreeLibrary를 주고, 인자로는 저 target 프로세스에서 되돌려진 내 DLL의 핸들값을 주면 된다.
target 프로세스에서 되돌려진 핸들값이야 내 DLL의 DllMain 함수의 인자로 들어왔을 테니 모를 수가 없을 테고, 그걸 호스트에다가 전하는 건 어려운 일이 아닐 것이다.

이런 식으로 저 함수에다가 LoadLibrary 대신 ExitProcess를 주면 그 프로세스가 알아서 자기 자신을 강제 종료하게 되니, 사실상 TerminateProcess와 같은 효과도 낼 수 있다.

16비트 시절에는 단일 address 공간에서 시스템 전체에 영향을 끼치는 프로그램을 만드는 게 용이했기 때문에 그에 상응하는 점프/복귀 주소 변조, x86 어셈블리어 삽입 같은 꼼수 테크닉이 유행했었다. 그러나 32비트 이후부터는 방법론이 이렇게 더 고차원적으로 확 바뀌었다.;;

Posted by 사무엘

2020/06/28 08:36 2020/06/28 08:36
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1767

4색 정리, 정사각형 분할 문제

일명 “4색 정리, 4색 문제”는 개념 자체는 마치 페르마의 마지막 정리처럼 초등학생도 이해할 수 있을 정도로 아주 단순하다. 하지만 엄밀한 증명은 20세기의 현대 수학자조차도 감당하지 못할 정도로 난해했던지라, 1976년이 돼서야 컴퓨터의 brute-force 계산 능력의 도움을 받아 간신히 증명됐다.

사용자 삽입 이미지

요즘으로 치면 무슨 머신 러닝을 돌리듯이 당대의 슈퍼컴 두 대를 장정 50일을 돌리면서 가능한 모든 지도 모델에서 증명이 성립함을 확인했다고 한다.
물론 저건 오늘날의 머신 러닝에 비할 바는 못 된다. 내 기억이 맞다면, 1970년대 중반의 크레이 슈퍼컴퓨터는 20여 년 뒤에 등장하여 클럭 속도가 GHz급에 도달한 펜티엄 3~4급 PC와 얼추 비슷한 성능이었다. 요즘 PC라면 GPU 세팅만 잘 하면 하루는커녕 길어야 수십 분~몇 시간이면 시뮬레이션이 끝나지 싶다. 그만치 세상이 많이 변했다.

하지만 1976년은 지금으로부터 무려 45년 가까이 전의 과거이다. 증명할 지도 모델을 설계하고 계산량을 그 시절 컴퓨터로 감당 가능하게 최소화한 것만으로도 독창적인 학술 공로이며, 대학교 수학과 교수 급의 전문가가 아니면 할 수 없는 일이었다.
또한 극도로 비싸고 귀하신 몸이던 슈퍼컴을 당장 실용적으로 필요하던 일기예보나 모의 핵실험, 탄도 예측(?)이 아닌 학술 연구용으로 끌어들여 온 것 역시 해당 연구자의 행정력과 근성과 로비 덕분이었던 셈이다.

한편, 정사각형을 크기가 서로 다른 작은 정사각형들로 분할하는 문제(lowest-order perfect squared squares)도 굉장히 난해하지만 답이 존재는 하는 굉장히 기묘한 문제인데.. 4색 정리와 비슷하다면 비슷한 시기인 1978년에 길이 112짜리 사각형을 21개로 분할하는 해법이 발견됐다. 이 역시 컴퓨터를 동원하여 찾아낸 것이었다.

사용자 삽입 이미지

또한, 저 정사각형들도 최대 4개의 색만으로 서로 경계를 구분하여 칠할 수 있을 테니, 이것도 4색 문제하고 관계가 있다고 볼 수 있겠다. =_=;;
1982년에는 동일 연구자의 후속 연구를 통해 저게 이론적으로 존재 가능한 optimal 내지 lower bound라는 것도 증명됐다. 즉, 20개 이하의 서로 다른 정사각형으로 큰 정사각형을 꽉 채우는 방법은 존재하지 않는다는 것이다.

다만, 가장 작은 정사각형 분할의 하한은 112가 아니라 110이라고 한다. 분할 개수는 21개보다 딱 1개 더 많은 22개이다. 참으로 신기한 노릇이다.

사용자 삽입 이미지

그 전에 컴퓨터의 도움 없이 사람이 찾아낸 가장 단순한 정사각형 분할은 175를 24개로 분할하는 것이었다. (81, 55, 39, …) 1946년에 데오필루스 윌콕스(1912-2014)라는 영국 사람이 발견했다.

사용자 삽입 이미지

정사각형을 서로 다른 정사각형으로 분할하는 방법 자체는 다양한 크기별로 무한히 존재하기라도 하는지? 이게 증명돼 있기라도 한지는 모르겠다. (자명한 닮은꼴은 물론 제외. 작은 정사각형의 크기값들이 모두 서로 소인 것으로 한정)

단지 2차원이 아니라 3차원에서 정육면체를 서로 크기가 다른 정육면체로 꽉 맞게 채운다거나 그 이상의 차원에서 같은 방법으로 hypercube를 채우는 방법은 아예 존재하지 않는다고 한다.
직관적으로 생각해도 명확한 것이... 3차원만 생각해 봐도 그런 정육면체가 있다면 여섯 면이 다 제각기 크기가 서로 다른 정사각형으로 거대한 정사각형을 이룬 모습을 기본적으로 하고 있어야 할 것이다. 하지만 정육면체만으로 그렇게 되는 것은 불가능하기 때문이다.

벡터의 외적이 딱 3차원 벡터에 맞게 존재하는 이항연산이듯이, a^n+b^n=c^n의 정수해가 존재하는 n의 상한이 딱 2인 것처럼.. 정사각형 분할은 딱 2차원 평면에서 존재 가능한 절묘한 문제인 것 같다.

Posted by 사무엘

2020/06/25 19:38 2020/06/25 19:38
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1766

1. 고속도로 톨비

우리가 고속도로를 주행할 때 늘 지불하는 통행료, 일명 톨비라는 건 생각보다 다양한 변수를 감안해서 복잡한 방식으로 산출된다.
가장 간단하게는 “기본 요금 + 주행 거리 * 임률”이며, 임률이 경차 포함 6종의 차종별로 차이가 있는 것까지는 다들 아실 것이다. 민자 고속도로는 여기에 부가세가 추가되어서 살짝 더 비싸진다.

그런데 이 표준 임률은 4차로(편도 2차로)짜리 고속도로 기준이다. 2차로 고속도로에서는 임률이 절반(50%)으로 할인되고, 반대로 6차로 이상의 넓은 고속도로에서는 20% 할증이 붙는다. 이런 제도도 있었다니.. 과거에 열악하던 88 올림픽 고속도로가 통행료를 반값만 받았던 건 단순 예외적인 특례가 아니라 매뉴얼 상의 규정이었다.

물론 오늘날은 2차로 고속도로는 모두들 확장되고 개량되어 사실상 전멸했으며, 1992년 이래로 국내에 새로 건설하는 고속도로는 무조건 4차로 이상의 규모로 만들고 있다.
그러니 2차로 고속도로의 50% 할인 규정은 마치 삼륜차 운전 면허처럼 비현실적인 사문이 됐다. 오늘날 실질적으로 50% 할인을 받고 있는 건 경차이다. 6종 경차의 임률은 1종 소형차의 절반이기 때문이다.

톨비는 여기에다가..

  1. 1~3종 차량(초대형 차량만 아니면 다~)에 한해서 출퇴근 시간대 할인,
  2. 사업용 화물차는 반대로 심야 시간대 할인이 적용된다. 대형 트럭 기사들이 톨비를 할인받으려고 무리해서 밤 시간대를 골라서 다니는 게 이 때문이다.
  3. 소형차는 주말과 공휴일에는 또 반대로 소폭이나마 할증되기도 한다.
  4. 끝으로, 차량이 아니라 사람을 근거로 할인해 주는 장애인 및 국가유공자 할인도 있다. 이 분야로 등급이 높으면 톨비가 아예 완전히 면제되기도 한다.

지난 2014년인가 15년부터는 설과 추석 연휴 3일 동안은 아예 전국의 모든 고속도로에서 모든 운전자를 대상으로 톨비가 면제되기 시작했다. 그 전에 무슨 임시 공휴일 때도 잠깐 면제된 적이 있었지만 그건 일회성 이벤트였고, 명절 면제는 관행이 됐다.

생각보다 변수가 굉장히 많지 않은가?
아 참, 폐쇄식 말고 개방식 구간도 있다는 걸 깜빡했다. 개방식은 차들의 실제 주행 구간을 알 수가 없는데 그럼 전국의 모든 개방식 고속도로 톨게이트는 차종별로 고정된 액수의 통행료를 징수하는지?
자동차 내비에서 경로 계산과 동시에 예상 톨비를 정확하게 계산하는 건 매우 까다로우며, 도로 공사로부터 공인 API/SDK 같은 거라도 받아야 하지 않을까 싶다.

지하철의 운임이 비현실적으로 환승을 자주 하더라도 이론적으로 가능한 최단 거리를 가정하고 산정되듯, 고속도로 톨비도 출발 IC와 도착 IC 사이에 여러 경로가 존재 가능하다면 이론적으로 가능한 가장 저렴한 구간을 가정하고 톨비가 산정될 것이다.

2. 수도권 대중교통 통합 요금제

오늘날 서울과 수도권에서 시외버스 아래 등급의 버스들, 그리고 일반열차 아래 등급의 광역전철과 지하철들은 통합 환승 할인 요금제를 적용받고 있다. 승객은 이용한 교통수단들 중 가장 비싼 것의 기본요금(마을버스 < 시내버스 < 지하철 < 좌석버스 < 광역버스..)부터 시작해서 나머지 추가 요금을 내게 되는데, 추가 요금은 이용한 거리에 비례한다.

대부분의 경우 10km 거리까지가 기본 요금이고, 그 뒤 5km당 100원씩 올라가는 게 원칙이다. 그런데 전철에는 버스에 없는 다음과 같은 바리에이션이 존재한다.

  • 총 이용거리가 50km (기본 10km + 40km, 800원 추가)를 초과하면 이후 거리부터는 8km당 100원으로 임률이 저렴해진다.
  • 단, 서울· 인천· 경기도 구간과 그 바깥 구간을 연속해서 이용하는 경우, 전자의 구간에 대해서만 위의 임률이 적용된다. 충청도(경부선 천안..)나 강원도(경춘선 춘천..) 구간은 무조건 4km당 100원으로 비싸게 계산된다.
  • 공항 철도는 역시 영종대교를 건너는 구간이 제일 비싸다. 10km까지는 900원 고정이지만 그 뒤부터는 1km당 130원으로 폭증한다.
  • 용인과 의정부에 있는 경전철들은 기본요금이 2, 300원 남짓 추가되는 것 말고 임률이 바뀌는 건 없다. 추가 요금이 발생하는 방식이 기존 기본요금 + alpha인지, 아니면 max(기존 기본요금, 경전철 기본요금)인지는 잘 모르겠다.
  • 신분당선은 1차 개통 구간인 강남-정자, 2차 개통 구간인 정자-광교로 구분해서 둘중 한 구간만 이용하면 기본요금 1000원 추가, 모두 이용하면 1300원 추가이다. 물론 거리비례 요금은 별도로.. 2차 구간이 개통했던 직후에는 요금 계산 방식이 더 복잡했고 서울-경기도 경계 구분을 했었지 싶은데.. 저건 그나마 간소화된 형태이다.
  • 경춘선 ITX 청춘, 공항철도 직통열차는 동일 승강장에서 운임 체계가 다른 별도의 좌석형 일반열차를 굴리는 예이다. 누리로는 동일 승강장까지는 아니기 때문에 좀 애매하고..

고속도로와 철도 모두 민자 구간이 등장하면서 요금을 따로 정산할 필요가 생겨서 시스템이 이렇게 복잡해져 있다.

  • 버스/전철 공통 적용: 조조할인
  • 버스: 아무리 장거리여도 추가요금이 기본요금보다 더 많이 발생하지는 않게 보정, 1회 비환승은 기본요금으로만(서울 한정), 다인승
  • 전철: 최단거리 이용 추정 원칙, 운영구간별 요금 정산, 노인 무임

3. 제한 시간

고속도로는 통행료만 지불한다고 다가 아니고.. 회당 체류 시간이 제한돼 있다.
서울 지하철이 5시간 제한이 있듯이 우리나라 고속도로의 제한 시간은 24시간이다. 즉, 진입한 지 하루 안으로는 출구 IC로 나가 줘야 한다. 시간이 경과되면 고속도로에서 도대체 뭘 했는지를 의심받을 수 있고 추가 요금을 내게 된다.

솔직히 이 좁은 땅에서 한쪽 끝에서 반대편 끝까지 이동한다 해도 자동차로 24시간이 넘게 걸릴 일은 없다. 하지만 문제가 되는 건 차로 여러 사람들이 휴게소에서 모인 뒤, 자기 차를 거기에 두고 한두 차량에만 다 모여서 타고 놀러 가서는 며칠 있다가 돌아오는 상황이다. 그러면 그 차들은 고속도로 내부에서 24시간이 넘게 세워져 있게 된다.

글쎄, 이렇게 세워진 차들이 많다면 휴게소에 장기 주차된 차들 때문에 다른 차들이 못 들어와서 문제가 될 수 있다. 그러니 장기 주차가 가능하다고 정식으로 지정된 휴게소에서 추가 요금이라도 내는 조건으로 이런 걸 허용한다면 운전자와 도로 공사들이 모두 윈윈 하는 전략이 나오지 않을까 싶다. 요즘은 화장실과 편의점 정도만 달랑 있는 '주차장' 휴게소도 있으니 말이다. (졸음 쉼터보다 크고 정규 휴게소보다는 작은..)

쉽게 말해 이런 식으로 장기 주차를 양성화 합법화하는 것이다. 주차 요금이 그 차들이 모두 움직일 때 드는 기름값과 톨비와 타지의 주차 비용보다 더 비쌀 리는 절대 없을 테니..
안 그래도 요즘은 하이패스 기술이 발전하고 휴게소도 중간 회차를 굳이 금지하지 않는 형태로 만들어지는 추세이지 않은가? 휴게소에다가 차를 장기 주차했다가 중간 회차하는 것은 마치 휴게소를 고속버스 중간 환승지로 이용하는 것만큼이나 새로운 활용 방안이 될 것으로 보인다.

Posted by 사무엘

2020/06/23 08:36 2020/06/23 08:36
, , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1765

Windows 운영체제에서 GUI 요소로서 화면에 표시되는 윈도우들은 독자적으로 고유한 위치와 크기를 갖는 popup 및 overlapped 윈도우, 아니면 다른 창의 내부에 부속으로 딸려 있는 child 윈도우라는 두 형태로 나뉜다. 전자는 독립 윈도우이고 후자는 종속 윈도우라고 생각해도 될 것 같다.

그리고 전자는 운영체제가 자동으로 표시해 주는 제목 표시줄, 시스템 메뉴, 최소화/최대화 버튼 같은 걸 가질 수 있고 메뉴도 가질 수 있다. 물론 갖지 않는 것도 자유이며 해당 창의 재량이다.
그럼 반대로 후자는 사정이 어떨까? 차일드 윈도우가 자기가 속한 부모 윈도우 내부에서 또 제목 표시줄과 시스템 메뉴, 최소화/최대화 버튼 따위를 가질 수 있을까?

이에 대해서 결론부터, 답부터 말하자면 다음과 같다.
"외형만 그렇게 나오도록 할 수는 있다. 하지만 운영체제는 child 윈도우를 대상으로는 여느 popup/overlapped 윈도우에서 수행하는 기본 처리를 자동으로 해 주지는 않는다. 그렇기 때문에 창을 그렇게 만들어 놓은 뒤에 우리가 원하는 자연스러운 동작을 구현할 수는 없다. 이건 운영체제에서 의도한 보편적인(?) 방식대로 창을 만들고 활용하는 게 아니기 때문이다."

본인은 마소에서 보편적이지 않은 동작이 존재하는 프로그램을 만든 것을 지난 20여 년에 달하는 세월 동안 딱 하나 발견했다.
바로 HTML 도움말 파일을 생성해 주는 HTML Help Workshop이라는 툴에 내장된 그래픽 에디터이다.

도움말을 띄우면 HTML 도움말 창이 별도의 독립된 창으로 뜨는 게 아니라 자신의 도킹 패널 내부에.. child 형태로 뜬다! 시스템 메뉴와 캡션, 최소/최대화 버튼까지 있는 당당한 독립 윈도우가 무슨 MDI child 윈도우처럼 다른 윈도우 내부에 이상하게 끼여 있는 게 심히 기괴하다. 이런 것도 Windows API를 사용해서 이론적으로 만들 수 있다는 것이다.

사용자 삽입 이미지

그래서 본인도 간단히 실험을 해 봤다.
다음은 껍데기 overlapped 윈도우와 "동일한" 클래스 이름으로 자기 안에 child 윈도우를 또 만들어 돌린 모습이다. 윈도우를 생성할 때 WS_CHILD에다가 WS_CAPTION| WS_SYSMENU| WS_MINIMIZEBOX| WS_MAXIMIZEBOX| WS_THICKFRAME만 주면 됐다.

사용자 삽입 이미지

얘는 언뜻 보기에 그냥 평범한 클래식 MDI 앱처럼 생겼지만 실제로는 그렇지 않다.
자신이 껍데기일 때는 클라이언트 영역을 회색 GetSysColor(COLOR_APPWORKSPACE)로 칠하고, 차일드일 때는 흰색 COLOR_WINDOW로 칠하면 된다. 껍데기와 차일드 둘 다 동일 윈도우 프로시저가 수행한 결과물이다. 자기 창이 껍데기인지 차일드인지의 여부는 WS_CHILD 스타일의 존재 여부만으로 간단히 판별할 수 있다.

그럼 제목 표시줄이 달린 차일드 윈도우들을 저렇게 만들어 놓으면 부모 윈도우라는 틀 안에 종속된 overlapped/popup 윈도우처럼 매끄럽게 동작하는가?
안타깝지만 답은 "전혀 그렇지 않다"이다. 저 상태에서 창들을 마우스로 단 몇 분 동안만 조작해 봐도 이상한 점이 잔뜩 발견될 것이다.

마우스로 child 윈도우를 클릭하면 지금 화면의 제일 겉에 드러난 창이 아니라 엉뚱한 창이 인식된다. 윈도우를 드래그 해 보면 화면에 잔상이 생긴다.
WM_LBUTTONDOWN 메시지를 받은 child 윈도우에다가 SetFocus를 해도 제목 표시줄이 활성화/비활성화 처리가 되지도 않는다.
child 윈도우를 최대화한 모습은 꽤 어정쩡하며, 그 상태로 프로그램 창의 크기를 키워도 child 윈도우는 크기가 갱신되지 않는다.

이런 문제가 발생하는 이유는.. Windows라는 운영체제는 근본적으로 child 윈도우에 대해서는 이들이 서로 겹쳐져 있고 포개져 있을 때의 Z-order 처리를 overlapped/popup 윈도우처럼 정교하게 해 주지 않기 때문이다.
child 윈도우라는 건 저렇게 제목 표시줄과 시스템 메뉴가 있는 윈도우가 아니라.. 그냥 리스트 컨트롤, 에디트 컨트롤, 버튼 같은 물건들이다. 에디트 컨트롤이나 버튼 같은 게 서로 겹쳐질 일이 있고 포커스를 받았을 때 Z-order가 바뀌어야 할 일이 도무지 있는가? 그렇지 않다는 것이다.

사용자 삽입 이미지

더구나 child 윈도우의 제목 표시줄은 Windows 8/10에서도 옛날 Windows Vista/7의 기본 테마 모양 그대로이며 업데이트도 안 돼 있다. 푸르스름하고 모서리가 둥근 그 시절 디자인 말이다. 그만큼 이쪽 외형은 마소에서도 관심이 없으며 더 지원을 안 하고 손을 놨다는 뜻이다.

저 상황에서 화면 잔상이 발생하는 걸 조금이라도 줄이려면 이 윈도우의 클래스에다가는 화면 refresh를 적극적으로 하라고 CS_HREDRAW|CS_VREDRAW 스타일을 줘야 하더라.
그리고 마우스 메시지를 받았을 때 SetWindowPos를 호출해서 이 창의 Z-order를.. HWND_BOTTOM으로 지정해야 하더라. 왜 top이 아니라 bottom인지는 모르겠다.

저것만 한다고 해서 모든 문제가 해결되는 건 아니다. 이런 시행착오를 겪어 보면.. MDI 프로그램에서 일개 child 윈도우인 문서창들이 나름 MDI client 영역 내부에서 껍데기 독립 윈도우인 것처럼 유연하게 처리되는 게, 절대로 그냥 저절로 되는 일이 아님을 짐작할 수 있다. 운영체제 API 차원에서 추가적인/예외적인 보정을 굉장히 많이 해 주는 덕분이지 싶다.

실제로 MDI를 구현하기 위해 사용되는 윈도우 프로시저는 DefFrameProc와 DefMDIChildProc로 감싸져 있으며, 키보드 전처리도 TranslateMDISysAccel로 따로 있다. 대화상자에 고유한 윈도우 프로시저와 키보드 전처리(IsDialogMessage)가 있는 것과 비슷한 맥락이다.

MDI 문서창들은 WS_EX_MDICHILD라는 extended 스타일이 지정돼 있다. 물론 우리야 CreateMDIWindow 함수나 WM_MDICREATE 메시지로 생성 요청만 하기 때문에 저 스타일을 직접 지정할 일은 없다.
내부적으로 뭔가 큰 의미를 갖는 스타일이지 싶은데.. 진짜 MDI 문서창이 아닌 임의의 child 윈도우를 생성할 때 저 스타일을 일부러 줘 보면 CreateWindowEx 함수의 실행이 실패한다. 그러니 쟤는 비록 헤더 파일에 선언은 돼 있지만 사용법과 의미가 제대로 문서화되지 않은 내부 API나 마찬가지이다.

그 밖에 WS_CLIPCHILDREN이라든가 WS_CLIPSIBLINGS, WS_EX_TRANSPARENT는 child 윈도우가 영역이 여럿 겹쳐 있을 때 창들을 refresh 하는 방식이나 성능을 좌우하는 옵션일 텐데 본인은 구체적인 의미나 차이를 잘 모르겠다. 평소에는 몰라도 전혀 상관 없지만 child 윈도우들을 MDI 문서창처럼 정교하게 다루기 위해서는 알아야 할 기능이지 싶다.
이런 창을 마우스로 클릭하면 WM_CHILDACTIVATE라는 메시지도 온다는데 본인은 태어나서 지금까지 한 번도 안 써 봤다. 저런 메시지가 있다는 사실도 처음 알게 됐다.

오늘 이야기의 결론은 MDI 형태의 프로그램을 밑바닥부터 직접 구현하는 건 대단히 어렵고 삽질스럽다는 것이다.. =_=;; child 윈도우를 popup/overlapped 윈도우처럼 다뤄 줘야 하기 때문이다.
그런 데다가 한 프로그램 창 안에서 여러 문서창을 다루는 것은 오늘날 같은 멀티 모니터 환경하고도 그리 어울리지 않는다.

그러니 마소 프로그램들의 경우, Word는 거의 20년 전부터 문서창을 프로그램 창처럼 따로 따로 생성하는 형태로 바뀌었으며 Visual Studio IDE도 문서창을 새 탭 아니면 새 창으로 자유자재로 만들 수 있게 바뀌었다.
그래도 그 정도보다는 규모가 작은 아담한 프로그램에게는 여전히 MDI만 한 대안이 없으니 클래식 레거시 MDI 기능도 오늘날까지 완전히 멸종하지는 않고 명맥을 유지하고 있다.

Posted by 사무엘

2020/06/20 08:35 2020/06/20 08:35
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1764

5. 항공모함

군대라는 게 작전 방식의 특수성과 차이로 인해 육해공 3군으로 나뉘곤 한다. 하지만 타 영역을 살짝 걸치는 병과도 조금씩 존재한다.
가령, 해병대는 육군과 해군의 조합처럼 보인다. 법적으로는 해군에 소속돼 있고 병도 지원자만 받지만.. 병의 의무 복무 기간은 육군과 동일하다. (우리나라 기준)
그리고 육군에서도 헬기 정도는 육군 항공대 명목으로 운용한다.

사용자 삽입 이미지

그런 것처럼 항공모함은 바다 위의 공군 기지이니 해군과 공군의 조합 같다. 항공모함은 1차 세계 대전이 끝나고 192~30년대 전간기 때 강대국들을 중심으로 존재 가능성과 필요성이 논의되었으며.. 덕분에 2차 대전의 태평양 전쟁에서 제대로 활약하게 되었다.

항공모함은 그 특성상 덩치가 정말 거대하며, 건조 비용이 억소리 나게 비싸고 운영하는 비용도 나라 등골 브레이커 수준이다. 하지만 이게 있으면 망망대해에서 전투기를 출격시켜서 억만 리 타지에서 깜짝 타격을 가할 수 있다. 잠수함이 몰래 쏘는 어뢰하고는 다른 차원으로 전투력의 레벨이 올라간다는 것이다.

옛날에 타이타닉 여객선은 내부에 별 시설이 다 있는 그냥 작은 도시, 작은 사회나 마찬가지였는데.. 오늘날은 대형 항공모함이 그러하다. 천조국의 기상이 깃든 니미츠 급을 예로 들면, 수천 명이 먼 바다에 나가서 오랫동안 근무하는 곳이니 안에 수영장도 있고 극장도 있고.. 내부에 별도의 번지수 주소가 있고 우편번호가 할당돼 있다. 항공모함 안에서 길을 잃는 건 말할 것도 없고, 그 안에서 잘 짱박혀서 탈영하는 것조차도 가능할 정도라고 한다.

작은 도시 안에 작은 원자력 발전소도 없으란 법이 없으니.. 이런 거대한 항공모함은 무식한 디젤 엔진 대신 원자력으로 움직인다.
다만, 항공모함은 배로서는 그렇게 거대함에도 불구하고 그래도 지상 공항에 비할 바는 못 되니.. 활주로의 길이가 부족하고 환경이 열악한 관계로 아무 군용기나 다 띄우지는 못한다. 그 항공모함의 규격에 맞게 제작된 함재기만이 이· 착함 가능하다. 이함할 때는 양력을 얻는 데 도움이 되라고 모선도 전속력으로 같이 전진해 주곤 한다.

그럼에도 불구하고 함재기가 항공모함의 활주로를 벗어나서 뜨는 걸 보면, 잠시 배 밑으로 추락하는 듯하다가 아슬아슬하게 다시 붕~ 뜨는 게 다반사이고.. 아예 못 뜨고 바다에 떨어지는 사고도 종종 난다. 배의 앞부분의 수면에 추락한 함재기는 같이 전진하던 모선과 부딪혀서 으스러진다.

함재기가 임무를 마치고 착함하는 것도 위험하긴 마찬가지이다. 아니, 착함이 더 어렵다.
한 직후에도 활주로를 오버런해서 도로 바다로 빠지지 않으려면 정신 똑바로 차리고 배와 함재기가 힘을 합쳐서 필사적으로 감속을 해야 한다. 이 정도면 공군과는 약간 다른 방식의 노하우가 필요해 보인다.

글쎄, 소말리아 해적이나 알 카에다, ISIL 같은 조무래기(?)들을 토벌하는 데 딱히 항공모함이 투입된 것 같지는 않은데 앞으로 태평양 전쟁 시즌 2 같은 사건이 벌어질 일이 있을지는 모르겠다.
사실, 그 옛날의 2차 대전 중에도 선진국들의 군 수뇌부와 군수업체에서는 선박이 아니라 잠수함이나 타 수송기를 기반으로 하는 항공모함(?)까지 구상한 적이 있다고 한다.

물론 그건 너무 무리수이니 실현되지는 않았다. 오늘날 기준으로는 잠수함에서 그냥 미사일만 쏘면 되지 굳이 인터셉터를 날릴 필요는 없을 것이다. 자동차 캐리어도 아니고 비행기 캐리어는.. 아직은 스타크래프트 캐리어에서나 가능한 일이다.
프로토스는 우주 항공모함을 굴리고, 테란은 우주 전함을 굴린다니.. 흥미롭다.

6. 아이스크림

천조국은 무려 1940년대 2차 세계대전 당시에...
저 멀리 태평양 전장에 가 있는 병사들한테까지 아이스크림을 보급으로 챙겨 줄 수 있던 유일한 나라였다. 아이스크림 제조 공장선을 운영했기 때문이다..;;
그 시절에 시원하고 달콤한 아이스크림은 병사들의 사기에 아주 긍정적인 영향을 줬으며, 다른 유럽군에서도 이걸 부러워했다고 한다.

사용자 삽입 이미지

전투기와 전함을 팍팍 찍어내고 원자폭탄 만들어 내고 적군의 암호를 몽땅 해독했다는 얘기뿐만 아니라 저런 소소한 병사 복지마저도.. 정~~말 대단하고 경악스럽지다. 천조국은 다른 나라들보다 몇십 년 더 앞서 갔다.

7. 인종 차별

1941년 말의 진주만 공습 때 '도리스 밀러'(1919-1943)라는 한 흑인 병사는.. 기습을 당해 죽거나 다친 사수들을 대신하여 즉석에서 전함에 비치된 대공용 중기관총을 조종하며 용감하게 응사했다. 심지어 일본 적기를 격추시키기까지 했다.

이게 대단한 이유는.. 저 사람은 취사병이었고, 지금까지 총 쏘는 훈련을 제대로 받은 적이 없었는데도 저 정도의 무공을 세웠기 때문이다. 마이클 베이의 "진주만"(2001) 영화에도 이 장면이 괜히 들어간 게 아니다.
마치 <15소년 표류기> 소설에서 흑인 견습 선원인 모코가 요리사 일을 하고 있다가 끝부분에서 침입자 악당을 대포 한 방에 때려잡는 장면과 비슷한 느낌이 든다.

병사들에게 아이스크림까지 나눠 주던 천하의 천조국도 1940년대에는 아직 인종 차별이 지금보다 훨씬 더 심하게 존재했다. 군대에서 흑인과 백인은 훈련을 따로 받았으며, 흑인 병사는 감히 전함의 기관총 사수 같은 보직을 받을 수 없었다.
그랬는데 도리스 밀러와 같은 사례가 생기면서 그런 유리천장은 차츰 없어지게 됐다. 그는 명예 훈장까지는 아니지만 해군 십자장을 받았고.. 올해 초엔 미국에서 새로 취역한 핵 항공모함에 이름도 붙었다.

6· 25 사변을 거친 뒤 베트남전 타이밍이 되자, 미군에서는 흑인이 백인 신병을 가르치는 훈련소 교관도 맡으며(검프! 입대한 동기가 무엇인가!! 네놈 IQ는 160은 되는가 보다!).. 풀 메탈 자켓에서는 교관이 대놓고 "나는 검둥이건 유대인이건 집시건 아무 차별 안 한다. 여기서는 네놈들은 다 똑같이 쓸모없기 때문이지!"라고 능력 위주의 평등을 표방한다. 그 정도로 분위기와 방침이 바뀌었다.

1970년대 말에 중국에서는 마오 쩌둥이 '흑묘백묘' 운운하면서 "고양이는 색깔 불문하고 쥐만 잘 잡으면 된다"라는 논리를 펴는 지경이 되었다. 이건 공산주의건 자본주의건 경제만 살릴 수 있다면 체제를 가리지 않겠다는 실용주의를 표방한 말이었다.
미국은 체제는 이미 건전하니까 걱정할 필요 없고, 인종에 대해서 '흑묘백묘'가 아니라 아예 '흑인백인 인종무관' 실용주의가 나중에 등장하게 된 듯하다. "흰둥이건 검둥이건 적군만 잘 잡으면 된다"라고..

8. 대테러부대

경찰과 군대에는 정규전(경찰은 일반적인 시위 진압이나 범죄자 검거. 군인은 일반적인 야전 전투)을 수행하는 대다수의 일반적인 경력· 병력이 있는 한편으로, 뭔가 마이너하고 특수한 임무를 수행하는 부서도 있다.
가령, 일반 경찰이 담당하기에는 어려운 규모의 무장 테러리스트를 잡는 부대 말이다. 이런 애들을 잡기 위해서 무슨 탱크나 대포나 전투기를 동원할 필요는 없음이 명확하다.

이럴 때는 이런 임무를 위해 시꺼먼 복장을 하고 별도의 훈련을 받은 경찰 내지 군대 소속의 대테러부대가 투입된다. 이런 부대는 정체성이 경찰과 군대 어느 것에 딱 정확하게 떨어지지는 않는 것 같다. 아예 대놓고 특전사나 UDT 같은 급도 아니기 때문이다. 경찰특공대, 미국 SWAT.. 그런 쪽이다. (뭐, 그렇다고 군 특전사에서도 대테러임무를 수행하지 않는다는 얘기는 아님)

사용자 삽입 이미지

사실, 대테러부대라는 개념이 등장한 것은 생각만치 오래되지 않았다. 1972년 뮌헨 올림픽 때 독일(서독) 정부가 괜히 허둥대고 삽질한 게 아니었으며, 인질들이 전원 죽는 비극이 괜히 벌어진 게 아니었다. 법적 문제 때문에 정규군을 함부로 투입할 수 없었으며, 반대로 독일 경찰은 이런 상황에 대한 대처 매뉴얼이 갖춰져 있지 않았다. 북괴의 연이은 테러에 이골이 나 있던 한국 같은 나라나 극도의 통제된 분위기 하에서 치안이 덤으로 갖춰지는 정도에 불과했다.

경찰 소속의 대테러부대는 무력만 강화한 '경찰'이기 때문에 자국민을 최대한 보호해야 하고, 악당들도 사살보다는 생포하는 것을 지향해야 한다. 그러나 작전 지역이 국내가 아니거나 악당이 수가 많고 화력이 강하거나.. 아예 자국민이 아니다거나 하면 이들을 상대하는 공권력도 경찰이 아닌 군대 소속으로 바뀌게 된다.

참고로 지난 2009년 용산 철거 현장 참사 때 시위 진압을 위해 투입됐다가 순직한 사람들은 경찰특공대 소속이었다. 시위대가 무슨 전문적인 무장 테러리스트는 아니고, 그렇다고 통상적인 시위 현장 같은 전투경찰을 투입하기에는 장소가 위험하니 경찰특공대가 적절한 대응이었지만.. 그래도 안타깝게도 화재로 인한 희생자가 발생했다.

9. 토크멘터리 전쟁사

개인적으로 유튜브에서 연재되었던 토크멘터리 전쟁사 시리즈를 재미있게 봐 왔다.
국방부에서 유치한 애국심(?) 고취용으로 오글거리는 어용 관제 군대 홍보물만 만들 줄 알았더니 의외로 이런 재미있고 유익하고 수준 높고 건전한 교양 프로도 만들어 왔다. 그런데 왜 갑자기 종영했는지 이유를 모르겠다. 배후 음모 없이 정말로 단순한 소재 고갈 때문일까?

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

이놈의 친중종북 좌익 빨갱이 정권의 마음에 안 드는 너무 건전한 애국 메시지 때문에 짤린 것이 아니기를 바랄 뿐이다.

Posted by 사무엘

2020/06/17 08:35 2020/06/17 08:35
, , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1763

1. 옛날 냉병기 시절

옛날에 총(개인 화기)이라는 게 아직 없어서 전쟁터에서 갑옷 입고 투구 쓰고 냉병기로 적군을 직접 때리고 베고 찔러 죽이던 시절에는 군인과 무인의 차이가 지금보다 훨씬 작았다. 지금은 총검술 같은 부류가 제식처럼 거의 보여주기 스킬 아니면 특전사· 공작원의 영역에 머물고 있지만 그때는 그게 지금 군인의 사격술이나 수류탄과 동급으로 군인 본연의 임무를 수행하는 스킬이었을 것이다.

그때는 손가락 하나 방아쇠에 걸어서 까딱하는 것만으로 적군을 죽일 수 있는 마법 같은 도구가 존재하지 않았다. 그러니 죽음을 두려워하지 않고 전열을 갖춰 적진을 향해 용맹스럽게 닥치고 돌격하는 게 매우 중요했다. 화살..?? 정도는 그래도 갑옷과 방패로 그럭저럭 막을 수 있고, 기관총 참호에 비할 바는 아니었다.

그때는 기예의 달인이 벌이는 일당백의 비중이 컸으며 그게 군대의 사기에도 큰 영향을 끼쳤다. 지금의 관점에서야 무모한 개죽음처럼 보이지만, 신라 시대에 괜히 '관창' 같은 화랑을 혼자 희생시킨 게 아니었다.
심지어는 개떼같이 다 나와서 싸울 필요 없이, 각 진영의 대표 장수가 나와서 일대일로 결투를 벌인 결과만으로 전투의 승부를 가르는 일도 있었다.

성경에는 다윗과 골리앗 대결이 아주 유명한 예이다.
옛날에 "태조 왕 건" 드라마에서도 신라 박 술희와 후백제 애술의 결투씬이 시대적 배경과 이유가 있어서 들어간 셈이다.
그러니 영화 "봉오동 전투"도 총격전에다가 일대일 검술 대결을 어설프게 흉내 내서 집어넣었던데.. 저건 배경이 무려 20세기 근현대이니 현실성이 없다.

중일 전쟁 때 일본이 저지른 전쟁 범죄 중에 "100인 참수 경쟁"이란 게 있었다. 그게 일본군이 무슨 중세 판타지 급의 백병전을 벌여서 무장한 적군을 칼 한 자루만으로 순삭한 것이라면 아주 용맹스러운 무공이겠지만.. 실제로는 힘없는 민간인과 포로를 상대로 그런 짓을 한 것이니 그냥 범죄이고 상 또라이 싸이코 같은 짓일 뿐이었다. 심지어 신문 기사를 썼던 기자조차도 "엥..? 적군을 죽인 게 아니었어요?" 얘기를 나중에 듣고는 기겁했었다고 한다. (목적어 생략.. -_-)

자, 저런 낭만(?)이 있던 옛날과 달리..
지금이야 총기 화기의 성능이 워낙 좋기 때문에 그 어떤 체격 좋고 두꺼운 갑옷을 입은 병사라도 총에 맞으면 그대로 쓰러지고 죽는다. 소총탄을 막을 정도로 무겁고 두꺼운 장갑은 기계류에나 장착할 수 있지, 그걸 사람이 걸쳤다면 제대로 활동이 가능하지 않을 것이다.

이런 이유로 인해 오늘날 전쟁터에서 사격이 시작되면 제아무리 용맹한 군인이라도 일단은 닥치고 엎드리고 엄폐하고 숨어야 한다. 이것이 냉병기 시절과의 큰 차이점이다.
또한, 지금은 병사들과 같이 "돌격 앞으로~!"라고 외치고 뛰어드는 건 소대장 수준의 초급 장교의 몫이지, 더 높으신 분들이 야전에서 병사들을 직접 지휘하지는 않는다. 최고위 장수 장군 내지 아예 왕이 솔선수범해서 말 타고 앞장서서 돌격하던 옛날과는 많이 다르다.

오늘날 무인과 군인은 화가와 사진가만큼이나 영역이 달라져 있다.
사진 찍사는 무슨 붓이나 연필이나 물감을 능숙하게 다룰 필요는 없으며, 반대로 카메라의 기본 개념과 사용법을 잘 숙지해야 한다(소총 분해와 조립, 조준 따위).
하지만 사진을 잘 찍기 위해서는 색깔과 공간 배분· 구도에 대한 감이 여전히 필요하니, 사진가도 미술의 영역을 완전히 벗어났다고 볼 수는 없을 것이다. 무인과 군인의 관계도 이와 비슷하다.

사용자 삽입 이미지

* "라라 크로프트와 빛의 수호자" 게임의 컷씬에서 라라가 몇천 년 전의 옛날 장수인 '톨텍'에게 소총 사용법을 가르치는 장면이 문득 떠오른다. 저 장면에서 톨텍은 총열이 무슨 칼날이고, 개머리판 부분이 손잡이인 것처럼 생각했나 보다. ㅎㅎ

2. 근현대의 주요 전쟁사

19세기

  • 크림 전쟁: 나이팅게일, 최초의 종군기자와 전장 사진
  • 남북전쟁: 국제전이 아니라 일개 나라 안 내전에 불과했지만.. 천조국은 내전 하나도 유럽을 능가하는 당대 최첨단을 달리는 수준으로 치렀다.
    • 후미장전식 총기가 등장하면서 머스킷 전열보병 전술이 몰락하고 개인 각개전투 전술이 등장. 저격수도 등장.
    • 엄폐가 중요해지면서 예복과 전투복의 구분이 생김. 전투복은 100년 전 독립전쟁 시절보다 훨씬 더 저채도의 칙칙한 색상으로 바뀜
    • 병사들의 모자 크기(?)와 헤어스타일도 옆머리까지 꼬불꼬불 말던 시절보다는 짧아짐. 그래도 장교들은 여전히 수염이 덥수룩..;;
    • 초보적인 수준의 철갑선과 잠수함이 출현했고 찔끔찔끔 교전도 했음.
    • 철도를 이용한 대규모 병참 보급과 전면전이 실현됨.
      비행기와 탱크만 없는 1차 세계대전에 가까운 정도였다. 아직 내연기관이 발명되지 않았던 시절이니..

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

(미국 독립전쟁 vs 남북전쟁의 차이..)

남북전쟁이 끝난 게 1865년, 제너럴 셔먼 호 사건은 1866년, 그리고 신미양요는 한~참 뒤인 1871년이었다.
조선과 미국이 거리가 워낙 멀기도 하고, 미국도 전쟁 피해를 복구하느라 정신 없었기 때문에 신미양요가 저렇게 늦게 벌어진 것이다. 그런데 이 와중에 미국에 대한 조선의 인식은 정말 한심하기 그지없었다.

고종: 미리견(미국)이라는 나라는 어떠한 나라인가? (1871년 4월 어전회의에서..)

영의정 김 병학 (지금으로 치면 거의 국무총리와 비슷!!): 미리견이라는 나라는 화성돈(워싱턴)이라는 촌장이 영길리(영국)라는 나라와 교섭하면서 성곽과 연못을 개척해서 세운 작은 부족국가라고 지도에 나와 있네요.
얘들은 바다를 왕래할 때 약탈하는 습성이 있는 날강도 해적떼입니다. 일체의 교역 따위 할 필요 없구요, 만약 교역을 하게 되면 우리나라(조선) 국체를 보전할 수 없을 것입니다.

고종: 흠.. 그렇다면 우리가 저 코쟁이 오랑캐들과 교역하면 요사스러운 잡학들이 유입되어 공자의 예법이 무너질 것이고 가정이 무너지고 사회가 무너지겠구나.


대륙 횡단 열차를 굴리고, 세계에서 거의 최초로 후장식 총기를 도입하여 유럽보다도 앞선 방식으로 전투(남북전쟁)를 벌였던 엄청난 나라가.. 한낱 공자의 예법도 모르는 요사스러운 해적 오랑캐 내지 왜구 정도로 전락했다. ㅋㅋㅋㅋㅋㅋㅋㅋ

이웃 일본은 네덜란드를 거쳐서 외국어 통번역가부터 잔뜩 양성해서 서양 문물을 미친 듯이 받아들이면서 근대화 중이었는데.. 조선은 저 지경이었으니 안 망한 게 더 이상하지..
참고로, 야사에 따르면 고종이 신하들과 나눈 다른 대화로는 저 때로부터 30년쯤 뒤에 철도가 개통했을 때 "기차가 더 빠를까, 전차가 더 빠를까?"도 있다. 휴우~

20세기

  • 1차 대전: 참호전, 독가스, 탱크, 초보적인 수준의 전투기
  • 2차 대전(연합군): 역대 최대 규모의 해전.. 대형 전함, 뇌격기, 잠수함과 항공모함과 함재기, 수직 강하 폭격, 그리고 끝물에 개발되거나 등장하기 시작한 핵무기와 미사일, 제트기.
  • 6· 25 한국 전쟁(UN군): 인류 역사상 가장 많은 나라가 자그마한 듣보잡 작은 나라 하나를 도와주기 위해 결집함. 시기적으로 매우 특수한 배경 덕분에 가능했지, 이런 사례는 전무후무함. 이념 각축장 대리전 성격이 강했음.
  • 베트남전: 밀림을 날아다니는 헬리콥터, M16 소총. 언론이 조장한 반전 여론이 매우 강해졌음. 프래깅(상관 살해)이 본격적으로 거론되고 문제시됨
  • 걸프전(다국적군): 전투기와 미사일로 속전속결. 수송기도 맹활약했음. 전투 장면이 TV로 생중계됨.

중동 전쟁 쪽은 내가 딱히 기억하거나 아는 게 없다.;;

본인 생각에 역사는 국사와 세계사를 통합해서 가르치고 시험 문제도 그런 식으로 낼 필요가 있다고 본다.
하지만 현재 교사의 양성 과정과 교육과정을 감안하면 그건 물론 쉽지 않을 것이다. 더구나 역사의 모든 것을 동일 선상에서 객관적으로 봤다간 국뽕이고 동심이고 다 박살나 버릴 것이기 때문이다. 특히 18~19세기부터 벌어지는 동· 서양의 격차는 자괴감 들기에 충분할 것이다.

하지만 앞으로 악질 무단횡단자에게 100:0 판정이 늘어나는 것만큼이나 공교육에서 역사에 대한 인식도 갈수록 더 합리적인 방향으로 바뀌게 될 것이다. 언젠가는 말이다.

3. 기관총

그냥 총도 아니고 총알을 분당 수백 발씩 드르륵 갈겨 주는 기관총이라는 건 후장식 총기에 이어서 등장한 정말 획기적인 발명품이었다.
처음에는 대포처럼 크고 무거운 공용화기--혼자 간편하게 들고 다닐 수 없고 여러 명이 운용-- 형태로 먼저 등장했다가 나중에 더 작은 개인화기 버전도 등장하게 됐다.

물론 요즘은 일반 보병이 사용하는 일개 소총도 기관총 같은 자동 연사 기능이 있으며(방아쇠를 당기고 있으면 알아서 드르륵~), 심지어 소총탄 대신 권총탄을 갈기는 기관단총 같은 물건도 있다.
하지만 기관총이란 게 이름에 걸맞게 오랫동안 연사가 가능하려면 발열 관리를 위해 냉각 계통이 필요하고, 총구도 여러 개를 돌려 쓸 수 있어야 하는 등 단순 자동소총에는 필요하지 않은 추가적인 설계가 필요하다.

그러니 이것저것 오늘날까지도 기관총은 용도별로 경/중, 개인용과 공용의 체급 구분이 존재한다.
일반 소총이 정밀· 정확도 쪽으로 더 발전하면 저격수가 사용하는 망원경 달린 커다란 저격 소총으로 바뀌고(스타 고스트..??), 연사력 쪽으로 더 발전하면 M60 같은 경기관총으로 바뀌는 것 같다(둠 2 chaingunner).

모든 기관총이 그런 건 아니지만 기관총이라 하면 (1) 여러 총열이 뱅글뱅글 돌아가는 묘사가 많다.
그리고 급탄을 탄창 단위로 탄창 내부의 스프링에 의지해서 하는 게 아니라 (2) 수십· 수백 발의 총알이 일렬로 연결되어 들어간다. 이건 방아쇠만 당기고 있는다고 그냥 되는 게 아니다. 그렇기 때문에 기관총은 작동을 위한 별도의 동력이 필요하다.

사용자 삽입 이미지

이렇게 그냥 총이 아니라 넘사벽급의 화력을 내는 기관총은 무력의 종결자에 등극했다. 기관총이 없는 군대가 기관총을 보유한 군대를 상대로 싸워서 이길 가능성은.. 가히 0이 됐기 때문이다.

이로 인해 19세기엔 본격적으로 제국주의가 세계에 손길을 뻗치게 됐다.
오죽했으면 개틀링 기관총을 발명했던 리처드 조던 개틀링은 기관총 덕분에 앞으로 군대는 병사가 덜 필요해도 될 것이고, 더 나아가 너도 나도 기관총을 들고 있으면 다들 무서워서 전쟁을 할 엄두를 못 내게 될 것이라고.. 그렇게 역설적인 평화가 찾아올 것이라고 참 순진하게 예상했었다.

처음에는 기관총이 "유럽 vs 미개한 식민지" 이런 형태로 쓰였다. 그때야 일방적인 관광 플레이가 가능했다. 하지만 유럽 사람들은 얼마 못 가 동급인 자기들끼리 기관총 vs 기관총 형태로 싸우게 됐다. 1차 세계대전 참호전 말이다.
이때는 전략 전술이 기술 발달을 따라가지 못해서 병사들이 생지옥 속에서 끔찍한 희생을 치러야 했다. 기관총으로 철통 방어하는 참호를 돌파하기 위해서 결국 탱크, 군용기, 독가스 따위가 등장하게 됐다.

무서워서 전쟁을 안 하게 될 정도로 너무 강한 캐사기급 무기라는 개념은 다이너마이트의 발명자인 알프레드 노벨도 생각하고 있었다고 한다. 기관총 분야와 폭탄(!!) 분야에서 각각 저렇게 생각하는 엔지니어가 있었다는 게 흥미롭다.
하지만 그런 것은 인류가 20세기에 세계 대전급의 전쟁을 두 번이나 겪고 핵무기라는 것까지 발명된 뒤에야 현실이 되었다. 그 끔찍한 기관총조차 아득히 능가하여 화약 폭발력이 아니라 원자력 정도는 건드리는 경지가 돼서야 말이다.

4. 물과 뭍(!!)에서 폭발 무기의 종류

뭍이라는 말을 참 오랜만에 꺼내 보네.. 한 8~90년대까지만 해도 어린이용 동화책에서도 볼 수 있던 단어였는데 2000년대 이후로는 진짜 국어사전에서나 볼 수 있는 사어가 된 것 같다.

  • 목표물을 향해 날아간 뒤에 폭발: 각종 포탄(육지· 공중), 수류탄, 미사일 또는 어뢰(수중). 자체 추진이나 유도 기능까지 필요하기 때문에 비싸고 크기 대비 폭발 에너지가 적다.
  • 반대로 목표물이 근처에 와서 뭘 건드려 주면 폭발: 지뢰(육지) 또는 기뢰(수중). 이런 무기는 통제가 안 되어 "아무나 맞혀라"가 돼서는 매우 곤란하다.
  • 아래로 자유 낙하하면서 폭발: 항공포탄(육지) 또는 폭뢰(수중). 부가적인 설비 없이 순수하게 폭약의 비중이 크기 때문에 화력이 좋다.

옛날에는 화포로 배를 완전히 부숴서 격침시키기가 어려웠기 때문에 폭약을 싣고 불 붙인 작은 무인선을 적함에다가 접근시키고 충돌시켜서 펑~! 하는 저그 스커지 같은 전술도 쓰였었다.

내 기억으로 제너럴 셔먼 호를 격침시킨 방식도 그랬는데.. 거기는 바다가 아니라 대동강이고 배의 동선에 제약이 심했기 때문에 그런 전술이 가능했다.

Posted by 사무엘

2020/06/14 08:33 2020/06/14 08:33
, , ,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1762

1. 16색 팔레트

과거에 컴퓨터에서는 컬러를 표현할 수 있긴 하지만 해상도가 낮고 색깔수도 아주 제한됐던 시절이 있었다. 특히 고해상도라는 게 기껏 640*480이었고, 이 해상도에서는 표준 VGA 기준으로는 겨우 16색밖에 표현할 수 없었다. 1980년대 말에는 가로· 세로의 픽셀수가 모두 8비트 범위를 벗어난 것만으로도 고해상도라는 소리를 들었던 듯하다.

16색으로 가장 균형 잡힌 색상 팔레트를 꾸미는 방법은 뭐 뻔하다.
RGB 각 축별로 0, 1 조합을 시켜서 검정부터 하양까지 2^3 = 8색을 만들고, 이것보다 한 단계 더 밝은(혹은 어두운) 8색을 추가해서 16색을 만들곤 했다. 기본색 8색은 적록청과 흑백, 그리고 혼합된 색인 청록, 분홍, 노랑이다.

제일 단순하게 생각하면.. 어두운 그룹에서 비트별 on/off는 각각 128/0을 배당하고, 밝은 그룹에서 on/off야 최대치인 255/0을 배당한다.
다만, 0~15까지의 16색 중에서 7번(어두운 그룹의 가장 밝은 색)과 8번(밝은 그룹의 가장 어두운 색)은 각각 밝은 회색과 어두운 회색인데 얘는 예외적으로 각각 (192,192,192)와 (128,128,128)로 간주한다. 이렇게 하지 않으면 7번 색이 어두운 회색이 되고, 8번 색은 0번 검정(0,0,0)이 중복 배당되기 때문이다.

요게 바로 산술적으로 제일 단순하게 유도되는 팔레트이다.

사용자 삽입 이미지

하지만, 도스 시절에 EGA/VGA 그래픽 카드가 실제로 제공했던 기본 16색은 이와 대동소이한 차이가 있었다.
(1) 먼저, 어두운 그룹의 가중치가 128이 아니라 170 (0xAA)이어서 전반적으로 저것들보다 더 밝았다. 난 168인 줄로 오랫동안 알고 있었는데, 지금 다시 찾아보니 그렇지 않고 170이다. 최대치인 255의 정확히 2/3에 해당하는 값이다. 어째 256은 2의 8승이지만, 255는 3의 배수였구나.

(2) 그리고 밝은 그룹이야 on의 가중치는 응당 255이지만, off의 가중치가 0이 아니라 85이다. 그래서 밝은 파랑도 그저 (0,0,255)가 아니라 (85,85,255)이다. 앞서 언급된 단순 팔레트가 0 1/2 1로 색깔을 쪼갰다면 얘는 더 세분화해서 0 1/3 2/3 1을 추구한 셈이다.
이 체계에서는 따로 보정을 하지 않아도 7번은 산술적으로 자연스럽게 (170,170,170)이라는 밝은 회색이 되고, 8번은 (85,85,85)인 어두운 회색이 된다. 다른 색들은 전반적으로 단순 팔레트보다 더 밝지만, 회색은 어째 단순 팔레트보다 더 어두워졌다.

(3) 또한 VGA 팔레트는.. 구체적인 이유는 알 수 없지만 6번 색을 산술적인 (170,170,0) 어두운 노랑? 올리브색 대신, (170,85,0)으로 예외적인 변화를 줬다. 올리브색 대신 갈색을 만든 것이다. 노랑은 원래 밝은 색인데 어두운 노랑은 정체성이 모호하니.. 갈색이 더 실용적일 거라고 생각했던 모양이다.
그래서 VGA 팔레트는 단순 팔레트보다 약간 더 알록달록하고 채도가 높아졌다.

사용자 삽입 이미지

끝으로, Windows도 독자적으로 약간 변화를 준 16색 팔레트를 사용했다.
밝은 그룹은 255/0으로 간단하지만 어두운 그룹이 상황이 약간 복잡하다. on의 가중치는 170인데, off의 가중치는 0과 85가 뒤섞인 편이다.

파랑은 깔끔하게 (0,0,170)이지만 빨강과 초록에는 파랑이 반 정도 섞여서 각각 (170,0,85)와 (0,170,85)이다.
혼색인 cyan과 분홍, 올리브에도 색이 full로 들어가지 않은 나머지 축에는 0이 아닌 85가 들어간다. VGA와 달리 갈색 보정은 없고 올리브색은 (170,170,85)이다.

의외인 것은 7, 8번 회색들이다. 각각 (195,199,203), (134,138,142)로, RGB 값이 모두 근소하게 다른 별개의 가중치가 부여돼 있다. 흑백과 더불어 화면에서 제일 많이 보게 될 중립 무채색이니 나름 심혈을 기울여 이런 색을 만들었지 싶다.

사용자 삽입 이미지

지금까지 소개된 팔레트 세 종을 한데 늘어놓고 비교하면 다음과 같다.
Windows 팔레트는 밝은 그룹은 단순한 팔레트와 비슷하고, 어두운 그룹은 갈색 보정 여부만 제외하면 VGA 팔레트와 더 비슷하다고 볼 수 있다.

사용자 삽입 이미지

Windows의 경우, 고전 테마 GUI나 명령 프롬프트에서 기존 VGA 16색을 표시할 일이 있을 때 256색/high/true 컬러일 때는 128/255 기반의 단순 팔레트를 사용한다. 그러나 16색일 때만은위와 같이 약간 더 밝아진 팔레트를 사용한다.
그래서 똑같은 색상표를 사용하더라도 16색이다가 상위 색상으로 모드를 바꾸면 화면이 더 어둡고 차분하게 착 가라앉은 듯한 느낌이 든다. 흥미로운 점이다.

사용자 삽입 이미지

2. 256색 VGADemo

1990년대 초· 중반에 도스에다 Windows 3.1 정도나 설치돼 있던 컴에서는 일반적으로 util\tool이라는 디렉터리가 있었고, 여기에 각종 파일 압축 프로그램, 하드디스크 파킹, 파일 관리 셸 등 단독으로 돌아가는 자잘한 싸제 유틸리티들이 들어있곤 했다. 어느 디렉터리에서나 실행 가능하게 path도 걸려 있고 말이다.

그때 본인의 컴퓨터에 들어있었던 '툴' 프로그램 중에는 com인지 exe인지는 기억 안 나지만 vgademo라는 자그마한 프로그램도 있었다.
게임이 아니면서 VGA 320*200 256색 13h 모드로 진입해서 완전 현란한 팔레트 스크롤과 함께 선과 폴리곤, 원 그리기 따위를 선보이는 2D 그래픽 데모였다.

사용자 삽입 이미지

맨 처음에는 저렇게 동그란 그러데이션 형태의 인트로 화면이 나온다. 이때 space를 누르면 본 게임(?)이 시작된다.
한참 알아서 그림을 그리다가 일정 주기로 씬이 자동으로 바뀐다. 그럼 기존 화면은 fadeout 되기도 하고 모자이크 처리되면서 사라지기도 했다. (모자이크가 점점 더 커짐)

사용자 삽입 이미지

이거 단순히 난수 생성해서 아무렇게나 선을 찍찍 그어대는 게 아니다. 여러가지 그리기 시나리오와 화면 전환 조건, 무작위한 팔레트 스크롤 방식 등에 대해 나름 치밀한 설계가 필요하다.
CGA, EGA만 구경하다가 VGA에서 게임도 아니면서 이런 그래픽을 뿜어내는 프로그램을 PC에서 접했을 때 사람들이 적지 않게 놀랐지 싶다. 1990년대 초에 말이다. 해상도를 극도로 희생했지만 256색을 표현할 수 있게 된 덕분이다.

누가 언제 만든 무슨 이름의 프로그램이었는지 알 길이 없었는데.. 검색을 통해 razzle dazzle이라는.. 바로 요놈이라는 것을 나중에 파악할 수 있었다.
나름 셰어웨어 형태로 돈 받고 팔았고, 90년대 말까지 개발이 됐던 프로그램이었다. 그 시절에 유행했던 프로그램  장르인 눈요기 화면 보호기로는 꽤 적합했지 싶다.

Posted by 사무엘

2020/06/11 19:35 2020/06/11 19:35
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1761

원소가 0 아니면 1 두 종류밖에 없는 N*N 크기의 어느 정사각행렬 M(N)이 있다. N은 2의 거듭제곱 형태로만 가능하며, M(N)의 생성 규칙은 이러하다.

일단, 크기가 1인 M(1)은 그냥 {0} 하나뿐이다.
그 뒤, M(2*n)은 M(n)의 각 원소들에서 0과 1을 뒤바꾼 놈을 M(n)의 왼쪽과 위쪽, 그리고 좌측 상단에 총 3개 카피를 씌우는 형태로 생성된다. 그러므로 M(2)는

(1 1)
(1 0)

이 되며, 다음 M(4)는 쟤를 뒤바꾼 놈을 또 덧붙여서

(0 0 0 0)
(0 1 0 1)
(0 0 1 1)
(0 1 1 0)

이 된다. 생성 규칙이 이런 식이다.
이런 식으로 M(16), 더 나아가 M(256)을 그림으로 나타내면 이런 모양이 된다.

사용자 삽입 이미지

흐음. 무슨 프랙탈 같기도 하고..
이런 행렬은 고안자의 이름을 따서 Walsh 행렬이라고 부른다.
그런데, 모노크롬이나 16색을 어렵지 않게 접할 수 있던 옛날에 이런 무늬를 화면에다 깔아 놓으면 꽤 근사해 보였을 것 같다~!

이걸 갖고 더 재미있는 장난을 칠 수도 있다.
옛날옛적에 학교에서 전자· 컴공을 전공했던 분이라면 혹시 그레이 코드(gray code)라고 기억하는 분 계신가?
통상적인 2진법과 달리, 숫자가 1씩 증가할 때 언제나 1개의 비트만이 바뀌게 숫자를 특이하게 표현하는 방식이다. 즉, 01111이다가 10000으로 바뀌는 식의 격변이 없다는 것이다. 물론 이런 숫자 인코딩을 갖고 진지한 산술 연산을 할 수는 없지만, 다른 용도로 쓸모는 있다고 한다.

사용자 삽입 이미지

0 1 3 2 6 7 5 4 ...
난 저걸 봐도 비트를 flip하는 규칙 자체를 잘 모르겠다. 숫자가 커질수록 긴가민가 헷갈린다. 솔까말 이거 규칙을 찾는 걸로 IQ 테스트 문제를 내도 될 것 같다.
그런데 일반 숫자를 그에 상응하는 그레이 코드로 바꾸는 공식은 어이없을 정도로 간단하다. x^(x>>1), 다시 말해 자신의 절반값과 자신을 xor 하면 된다.

자, 여기서 끝이 아니다.
저 수열에서 각 숫자들을 구성하는 2진법 비트의 배열 순서를 뒤집어 보자. 10진법으로 치면 1024를 4201로 바꾸는 것과 같다.

비트를 shift나 rotate하는 게 아니라 reverse 하는 건 내가 알기로 왕도가 없다. 그냥 for문 돌려서 1비트씩 차근차근 처리하는 수밖에 없다. 마치 주어진 숫자를 2진법으로 표현했을 때 1의 개수를 구하는 것처럼 말이다.
비트 수가 고정돼 있고 속도가 무진장 빨라야 한다면 미리 계산된 테이블을 참조해야 할 것이다.

N=8이라면 비트 자릿수는 3일 테고.. 0 1 3 2는 2진법으로 각각 000, 001, 011, 010일 텐데,
이걸 뒤집으면 차례대로 000, 100, 110, 010.. 즉 0 4 6 2 ... 형태로 바뀐다. 이 정도면 완전 난수표 수준으로 숫자를 뒤섞은 거나 마찬가지로 보인다.

저 수열이 확보됐으면 그걸 토대로 기존 Walsh 행렬을 개조해 보자. 즉, 지금 줄 배열이 0 1 2 3 4..의 순인데, 그걸 0 4 6 2 ... 즉, 둘째 행(1)에다가 다섯째 행(4)을 집어넣고, 다음 행에다가 일곱째 행(6)을 넣는 식으로 순서를 바꾼다. 그러면..

사용자 삽입 이미지

이런 인상적인 모양의 무늬가 만들어진다. 이것도 크기별로 규칙성이 있다. 좌측 상단은 사각형이 큼직하고, 우측 하단으로 갈수록 픽셀이 조밀해진다.
얘는 여러 명칭으로 불리는데, 통상적으로는 Walsh 행렬의 Hadamard 변환이라고 불린다.
실제 저 행렬/테이블을 구하는 건 아무 프로그래밍 언어로나 10분이면 코딩 가능할 것이다. 참고로 비트 reverse 같은 난감한 동작 없이 저 행렬을 얻는 다른 계산법도 존재한다.

이런 무늬 행렬은 전자공학 신호 처리 쪽에서 쓰인다고는 하는데.. 난 그쪽을 전공하지 않아서 잘 모르겠다. 단지 0과 1만 갖고도 인간 두뇌의 잉여력이 얼마나 폭발할 수 있는지에 경이로움을 느낄 따름이다.

수 년 전에 디더링 패턴의 생성 규칙에 대해 글을 쓰고 나서 이런 재귀적인 무늬를 주제를 다룬 건 무척 오랜만이다. xor은 온갖 난수와 암호도 만들어 내는 이산수학과 정보 이론의 진수임이 틀림없어 보인다. 세상에 이런 게 있다는 걸 알게 됐다는 차원에서 간단히 글을 남기게 됐다.

(xor은 x-y 2차원 평면에다가 진리표를 나타냈을 때 0과 1 결과를 직선 하나로 단순 분류할 수 없는 유일한 연산이기도 하다. 일명 XOR 문제..;; 마치 특정 그래프에 대해 한붓그리기가 불가능한 것과 비슷한 인상을 주는데.. 과거에 한때는 퍼셉트론 무용론과 함께 AI 겨울을 야기한 이력이 있다.)

Posted by 사무엘

2020/06/09 08:35 2020/06/09 08:35
, , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1760

1. 법

내가 지금까지 살면서 작정하고 법을 찾아 본 건 다음 분야들이다. 다들 내 관심 분야 내지 생활 패턴과 직접적인 관계가 있는 것들이다.

  • 병특 하던 시절에 복무 관련 규정들: 이건 까딱 잘못하다 걸리면 편입이 취소되고 다시 군대로 끌려가는 문제이므로 제일 크리티컬했다. 그래도 이 법은 사회에서 '을'인 복무자에게 굉장히 유리하게 만들어져 있다. 일단 편입해 들어가면 회사가 아니라 복무자 자신이 티오(인원 배당)를 갖는다는 개념부터 시작해서 말이다.
  • 거리설교 관련: 주변에 민폐를 잘못 끼치면 경범죄에 걸려서 과태료를 물기 때문이다.
  • 캠핑과 야영 관련: 내가 자연 속에서 밤을 보내는 걸 좀 좋아해서 그렇다. 4개 정도의 법이 얽혀 있는데, 이에 대해서는 잠시 후에 더 자세히 다루도록 하겠다.
  • 자동차의 합법적인 크기와 무게 관련: 개인적인 관심사 때문이다. 도로교통법뿐만 아니라 도로법이던가 둘 이상의 법에서 중복 규정돼 있었던 걸로 기억한다.
  • 남북교류 협력에 관한 법률: 오래 전에 개인적으로 굉장히 특이한 경험을 한 게 있어서 그렇다. 덕분에 우리나라에 국가보안법 말고 이런 법도 있다는 걸 난생 처음으로 알게 됐다. 이에 대해서는 더 먼 미래에 기회가 되면 언급할 일이 있을 것이다.

법 하니까 더 떠오르는 생각으로는.. 우리나라는 사형 제도를 법적으로 완전히 폐지한 건 아닌데 그냥 집행만 무기한 안 하고 있다.
그리고 한반도 전체가 우리나라 영토이며 통일을 지향한다고 헌법에 명시는 해 놨지만.. 현실적으로는 그게 불가능한 지경이다. 애초에 6· 25 사변도 말은 휴전이라고 써 놨지만 사실상 종전이 됐고 휴전선이 국경선으로 굳어졌다. 이렇게 법과 현실이 서로 안 맞는 구석이 생겨 있는 게 느껴진다.

외국으로 가면.. 일본은 군대를 보유하는 것을 영원히 절대로 금지한다고 헌법에 명시돼 있지만, 자위대가 사실상 군대나 마찬가지이다. 이것도 법과 현실의 괴리라고 봐야 할까?
물론 저 헌법 때문에 일본은 자기네 무기를 해외로 수출하지 못하고 무조건 내수로만 소비해야 한다. 그리고 외국에 파병도 할 수 없다. 그러니 규제가 전혀 없는 건 아닌 것도 사실이다.

2. 취사· 야영을 할 수 없는 곳

구분 적용 대상 야영 금지 근거 위반 시 처벌
도시공원 및 녹지 등에 관한 법률 평지나 언덕, 산기슭 정도에 공원 형태로 조성된 녹지 제49조+동법 시행령 제50조 제56조, 10만원 이하 과태료
자연공원법 국-도-군립공원(주로 경치 좋은 산) 및 지질공원(공룡 화석, 지층, 운석..) 제27조 제86조, 200만원 이하 과태료
하천법 나라에서 지정한 국가하천 및 지방하천의 특정 구간 제46조 제98조, 300만원 이하 과태료
수도법 취수시설이 설치된 하천, 호수 등(상수원) 제7조 제83조, 2년 이하 징역 또는 2천만원 이하 벌금

  • 그러니 수락산은 산 중턱까지 민간 산장 휴게소가 들어서 있는 반면, 근처의 국립공원인 북한산은 그런 거 없고 등산로를 이탈하는 것, 계곡에 들어가는 것 몽땅 금지이다. 그 대신 북한산은 국가에서 관리하는 곳이다 보니 적당히 낮은 고도까지는 등산로가 아주 널찍하게 잘 닦였고, 화장실과 각종 표지판들도 충분히 갖춰져 있다.
    (하루 만에 완주가 불가능한 국립공원인 지리산은 지정된 구역에서만 야영을 할 수 있다. 반대로 말하면, 해가 떨어지기 전까지 야영 허용 구역에 반드시 도달해야 한다.)
  • 산보다는 강을 보호하려는 의지가 더 강하다. (위반 시의 처벌이 더 강함) 물론 현실에서는 낑낑대며 올라야 하는 산보다는 강이 접근성이 더 좋고 공간이 더 많고 야영하기도 더 쉽다.
  • 단순 공원보다는 특별한 공원에 대한 위반 처벌이 더 강하다. 그리고 단순 하천에 비해 상수원 하천은 뭐.. 처벌 수준을 교통 범죄에다 비유하면, 신호위반 속도위반이던 것이 음주운전으로 껑충 뛴 것과 비슷하다.
  • 4월부터 10월에 저녁 7시까지 제한적으로 허용되는 한강 공원의 텐트는 원래는 아예 안 되는데 예외적으로 봐주는 것에 가깝다. 위반 시의 과태료 100만원은 도시공원과 비교했을 때는 비현실적으로 높은 편이지만, 자연공원법이나 하천법보다는 낮게 잡힌 것이다. 저기는 1980년대 한강 종합 개발 사업의 산물일 뿐, 국립공원만치 대단한 곳은 아니니까..
    더구나 상수원도 아니다. 한강의 취수 마지노 선은 잠실대교 수중보이기 때문이다. 거기보다 하류 구간은 취수용으로 쓰이지 않는다.
  • 그냥 이름 없는 평범한 산의 정상에서 밤에 텐트 치고 자는 건 위의 법들 중 어느 것에도 걸리지 않기 때문에 가능하다. 잠만 자는 게 아니라 고기까지 구워 먹으려면 속 편하게 돈 내고 전용 캠핑장을 이용해야 할 것이다. 아니면 아예 멀리 해수욕장까지 가든가..

3. 민사와 형사

소송에서 민사 vs 형사, 경찰의 교통과 vs 강력과, 의료에서 당장 생명하고는 별 지장이 없는 과(성형) vs 직접 관련이 있는 과(외과)..
요것들이 다 심상이 서로 비슷한 관계인 것 같다.

가령, 누가 내 돈을 빌려 놓고는 기한 내에 갚지 않고 떼먹었다면 민사 소송을 걸어서 강제집행으로 돌려받는 게 순서이다. 사기죄로 엮어서 형사 소송까지 걸려면, 그 사람이 애시당초 돈을 갚을 생각이 없었고 단순 채무불이행 이상으로 매우 악의적으로 채권자를 물먹였다는 정황까지 입증해야 한다.

교통사고 가해자의 경우도 특례법 위반 여부, 고의성 여부, 피해 규모 등에 따라 보험사의 배상만으로 끝나는지 아니면 형사 처벌까지 받아서 콩밥 먹어야 하는지의 여부가 결정된다.

그리고..

  • '피고'는 민사에서만 쓰는 말이고 '피고인'은 형사에서만 쓰는 말이다. 다시 말해 '피고인'은 '피고'와 달리, 재판에서 패소했다간 전과자가 된다. 이걸 왜 구분하며 그것도 왜 하필 '人'짜의 여부로 구분하는지는 참 의아하게 느껴진다. 영어로는 둘 다 그냥 defendant 이다. 경우에 따라 민/형 구분을 위해 앞에 civil / criminal이 붙을 뿐..
  • 완전 생뚱맞은 bar이라는 단어에 변호사라는 뜻이 있는 게 의외이다. 미국에서 변호사 시험은 bar exam이라고 하고, ‘대한 변호사 협회’도 영어로 bar association이라고 부른다. 경찰을 police officer 대신 cop이라고 부르는 것과 비슷한 심상이려나?
  • 변호사와 판사는 민· 형사 소송에서 모두 등장하는 반면, 그럼 검사는 형사 말고 민사에서는 별 필요나 존재감이 없는 존재인 건가..??

4. 형벌의 분류

우리나라 법에 규정된 형벌은 방식을 보자면 재산형과 자유형으로 나뉜다. 자격상실· 정지는 명예형에 속하긴 하지만 형법상의 처분보다는 행정 처분에 더 가까워 보인다. 신체형(태형??)은 존재하지 않는다.

그 밖에 형벌을 '규모 내지 급'으로 나누면.. 경범죄급과 중범죄급으로 분류할 수 있다. 전자는 말 그대로 경범죄처벌법의 벌칙이 대부분이며 뒤끝이 없다. 빨간줄이 그인다거나 향후 몇 년 동안 범죄 기록이 조회된다거나 하지 않는다는 뜻이다. 검사가 개입해서 정식으로 기소하고 재판까지 열기에는 너무 자잘하고 사소하고 경미한 영역을 담당한다.

이것을 표로 분류하면 다음과 같다.

구분 재산형 자유형
경범죄 과료 (과태료,범칙금) 구류
중범죄 벌금 금고/징역

그런데 범칙금이라는 건 정체가 굉장히 모호한 것 같다. 과료나 벌금 같은 부류는 아닌 행정 처벌인데 굳이 과태료와 다른 명칭을 부여할 필요가 있는지 모르겠다.

5. 범죄 자체에 대한 중독

세상의 강력 범죄들은 우발적이건 계획적이건 대부분 돈 때문에, 또는 여러 방식의 뒤틀리고 비뚤어진 심성 때문에(자기가 무시 당하고 있다는 생각, 욱하는 감정 조절 실패, 너 죽고 나 죽자는 자포자기 등) 벌어진다.

물론, 그 정도 알량한 이유만으로 끔찍한 범죄가 정당화되는 건 아니기 때문에 범죄자는 그에 상응하는 형사 처벌을 받는다. 그런데 그 정도 이유나 목적조차 없이 범죄를 저지르는 것 자체만이 목적이고 오로지 거기서만 짜릿함과 쾌감을 느끼는 이상한 사람도 드물게나마 분야별로 있는 게 현실이다.

(1) 원한을 해소하거나 돈을 뺏거나 다른 범죄를 은폐하기 위해서가 아니라 그냥 살인 자체만을 즐기는 거라면 그냥 미친 싸이코패스 쾌락 살인마이다.
국내의 경우 옛날에 “살인을 더 할 수 없어서 우울하고 답답하다. 이럴 거면 날 빨리 사형 집행이나 해 주쇼”로 악명높았던 정 남규 정도가 이 등급일 것이다. 그 사람은 교도소에서 이제 남을 죽일 수는 없으니, 결국 자기 자신을 죽이는 것으로 최후를 맞이했다.

(2) 자기한테 당장 필요한 물건이 아니고 사흘 굶은 상태도 아닌데 남의 물건을 습관적으로 쓰윽~ 하는 건.. ‘도벽’이라고 말까지 만들어져 있다. 남에게 안 들키고 슬쩍이 성공하면 뭔가 아드레날린이 분비되기라도 하나 보다. 마치 도박 중독과 비슷하게 말이다.
손버릇이 나쁜 건 어린애부터 성인까지 의외로 나이를 가리지 않는다.

(3) 그리고 방화도 있다. 10여 년 전에 악명을 떨쳤던 울산 봉대산 불다람쥐 사건 기억하는 분 계신지? 2014년엔 우울증 기분 탓에 습관적으로 서울 대모산에서 산불을 낸 50대 주부가 검거되기도 했다. 야산이나 건물에 몰래 불을 질러서 활활 타는 걸 보고 그 자체만으로 후련함과 쾌감을 느끼는 극도로 위험한 연쇄방화범 부류도 있다.

도박 중독이나 알코올 중독처럼 살인, 절도, 방화도 중독이 있는 것 같다. 가해자는 범죄자와 정신병자라는 두 영역에 모두 걸쳐 있는 셈이다.
강간도 중범죄이며 변태 중독자가 없을 리가 없는 분야이다. 하지만 성욕은 식욕 수면욕 배설욕처럼 그나마 인간의 본성에 속하는 욕망이다. 이건 다른 범죄 중독과는 약간 다른 분야로 간주하여 이 글에서는 논외로 하겠다.

흉악범은 보통 누굴 죽이기 위해서, 아니면 다른 방법으로 살인을 이미 저지른 뒤에 증거를 은폐하기 위해서 불이나 물을 동원하는 경우가 있다. (현장 방화, 또는 자동차 째로 수장..)
하지만 피해자의 시신이 화재 현장에서 발견됐거나 물에서 건져졌다 하더라도.. 현대의 법의학 기술은 사람이 진짜로 화재로 인해 죽었거나 익사했는지, 아니면 다른 방법으로 이미 죽은 뒤에 거기에 놓인 것인지 정도는 아주 간단히 정확하게 판별해 낸다. 폐에서 검출된 이물질이라든가 시신 표면의 다른 상처들을 보면 된다.

Posted by 사무엘

2020/06/06 08:32 2020/06/06 08:32
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1759

1. SUV

자가용 자동차 중에서 SUV는 실용성을 강조한 외형이어서 그런지 덩치가 커도 사치스럽다는 느낌이 덜 들며, 반대로 작아도 싸구려 느낌이 덜 드는 것 같다. 비슷한 배기량이나 가격의 세단 승용차와 비교했을 때 상대적으로 그렇다는 뜻이다.
한 마디로 SUV는 차량이 차주의 부와 지위라는 편견과 연결된 정도가 덜하다. 그래서 굉장히 무난한 느낌을 준다.

SUV는 동급의 세단 승용차보다 길이가 짧고 높이는 높고 바퀴가 더 크다. 객실과 트렁크의 구분이 없고, 뒷좌석을 접어서 공간을 더 낼 수도 있다. 자전거를 접지 않고 그대로 실을 수도 있어서 좋다.

2. 친환경 모델

친환경 동력원을 주류로 미는 SUV가 조금씩 출시되고 있는 게 흥미롭다.
이게 무슨 말이냐 하면.. 휘발유 내지 디젤 모델이 주류로 먼저 나온 뒤에 같은 차체를 기반으로 하이브리드나 전기차 모델이 덤으로 나온 형태가 아니라는 것이다.

현대 ‘코나’는 전기 내지 하이브리드가 덤으로 출시된 경우이다. 그러나 기아 ‘니로’(Niro)는 처음부터 휘발유 하이브리드 또는 전기 모델로만 나와서 친환경 차량임을 처음부터 굉장히 강조했다.

그 뒤 현대에서는 자기 주특기를 살려서 수소 연료전지 기반 전기 SUV인 ‘넥쏘’를 내놓았다. 수소 엔진으로 일렉시티 버스밖에 안 만드는 줄 알았더니 드디어 더 작은 차량까지 만들기 시작한 게 흥미롭다.
얼마 전에 넥쏘가 달리는 모습을 우연히 볼 수 있었다. 자동차가 VVVF 전동차 구동음과 이렇게 비슷한 소리를 내는 모습은 난생 처음이었다. 매우 신기했다.

순수 전기차는 배터리에 의존하는 비중이 매우 크다 보니, 제조를 위해 자동차 회사의 고유 기술보다는 화학 회사의 기술에 대한 의존도가 더 올라간다. 이는 기존 자동차 회사의 입장에서도 자존심이 상하는 일이니 이것 때문에 현대가 미래의 밥줄을 유지하기 위해 수소차를 일찍부터 연구 개발한 게 아닌가 싶다.

다만, 천연가스만 해도 액화하는 게 장난이 아니게 까다롭고 어렵거늘 그것보다 통제가 더 안 되고 온도늘 더 낮춰야 하는 수소는 뭐.. 아직 갈 길이 멀다.
액체 수소는 우주 로켓의 2단 이상의 엔진에서 연료로 쓰이는 편인데, 수소 연료 전지는 그렇게 수소를 고온 고압(?)에서 태우고 폭발시키는 엔진과는 본질적으로 완전히 다른 물건이다. 연료 전지는 물리 반응이 아니라 화학 반응만으로 에너지를 얻기 때문이다.

로켓이 아닌 자동차 수준에서는 수소를 직접 태우는 방식보다는 연료 전지 방식이 더 실용성이 있다고 여겨진다.

3. 버튼

2000년대부터 자동차에는 전통적인 열쇠 대신 버튼식 시동 장치가 등장했다. 열쇠가 굳이 스위치에 꽂힐 필요 없이, 열쇠가 차내에 있기만 하면 된다. 그 상태로 브레이크를 밟으면서 ON/OFF 버튼을 누르면 시동이 걸린다. (브레이크를 안 밟으면 단순 ON/OFF만 전환)

그 뒤 2010년대 후반부터는 신기하게도 변속기도 버튼식으로 서서히 바뀌어 간다. 자동 변속기 차량의 특성 중 하나가 P와 D를 오갈 때 불가피· 불필요하게 후진등 램프가 잠시 깜빡이는 것이었는데.. 이런 아마추어 같은 특성도 역사 속으로 사라질 것이다.
그래도 재래식 열쇠와 시동 스위치, 그리고 심지어 수동 변속기도 완전 깡그리 멸종한 건 아니며 최하위 모델의 깡통 사양에서는 남아 있는 듯하다.

4. 자동 변속기 차량이 시동이 꺼질 수 있는가?

올해 초에는 나름 비싼 고급 준대형 SUV인 팰리세이드가 산길에서 전복 사고가 난 것이 자동차 커뮤니티에서 논란을 일으켰다. 처음에 운전자의 주장은 급발진을 수습하기 위해서 불가피하게 차량을 전복시켰다는 것이지만 블랙박스 영상을 보니 그게 아니고 그냥 개인의 운전 미숙 때문이었다.

당사자가 정말로 그런 말을 했는지 의구심이 드는 무개념 김여사 발언(거기 직원 3명을 짜르고, 사고를 겪은 나에게 위자료와 함께 제네시스 G80을 보상으로 달라??? ㄲㄲ)은 무척 병맛이지만, 문제의 핵심은 차가 전진 중일 때 실수로 후진 기어를 넣었을 때 차가 어떻게 동작하는 게 바람직하냐 하는 것으로 귀착되었다.

수동 변속기 차량이 기어를 잘못 넣어서 엔진에 과부하가 걸려 시동이 꺼지는 건 흔한 현상이다. 자동 변속기는 그런 현상이 없어서 좋다. 그런데 같은 방향의 고단 저단이 아니라 아예 엔진과 변속기의 진행 방향이 엇갈려 버리면 어떻게 될까?

예전에 영화 타이타닉을 보니 빙산과의 충돌 위기 때문에 배를 필사적으로 감속할 때는 엔진을 역추진 시키고 피스톤이 아예 반대 방향으로 돌기도 했더라만.. 걔는 증기 기관 외연 기관이다. 요즘 자동차 엔진은 피스톤의 회전 방향이 반대가 됐다가는 큰일 난다.

자동 변속기는 고/저단 변속을 잘못 했다고 시동이 꺼질 일이 없는 게 장점인데 그게 아예 전진과 후진조차 잘못 지정된 것까지도 감안해서 동작할 필요가 있는가?
개인적으로는 그것까지 감안할 필요는 없다고 생각한다. 하지만 외국의 다른 차들이 다 그걸 감안해서 동작한다면, 국산차도 제품 경쟁력과 운전자의 안전을 위해 그런 솔루션을 도입할 필요가 있어 보인다.

요즘 차들은 신호 대기 정차 중일 때 N 상태를 자동으로 흉내 내고, 심지어 시동까지 잠시 꺼 주는(ISG) 기능까지 도입돼 있다. 그런데 신호 대기가 아니라 내리막에서 변속 잘못으로 인해 시동이 꺼지는 건 차의 변속기는 보호해 주겠지만 탑승자까지 보호해 줄 수는 없을 것이다. 차 시동이 꺼지면서 브레이크의 제동력도 공급이 중단되기 때문이다. 바퀴로 동력 공급을 끊은 중립으로라도 유지돼야지..

그리고 그런 안전 장치가 있건 없건, 운전할 때 전· 후진 변속은 차가 완전히 선 상태에서 해야 안전하다는 것은 예나 지금이나 변함없는 철칙이다.

5. 통신 장치

(1) 그러고 보니 1990년대 승용차들은 라디오를 틀 때면 차 뒤쪽에서 길쭉한 안테나가 무슨 삼단봉처럼 쓰윽 올라가고, 라디오를 끄면 안테나가 다시 내려갔던 것 같다. 그러나 요즘 자동차는 기술이 좋아졌는지.. 그런 길쭉한 작대기가 아니라 뒤에 상어 지느러미 같은 짤막한 안테나로 끝이다. 자동차용이다 보니 안테나도 공기 저항을 최소화하는 형태로 디자인됐다.

(2) 터널 안에는 라디오의 음질이 AM/FM별로 어찌 됐더라..?? 아무래도 음질은 FM이 더 좋았다. 인공위성으로 송출되는 텔레비전은 화면이 나오지 않았고 말이다.

(3) 옛날에는 버스에서 텔레비전이 비치되어서 비디오 테이프가 아닌 전파 수신 영상을 시청하는 게 굉장히 신기한 일이었지만 지금은 아시다시피 넘쳐나는 게 디지털 영상이고 전혀 신기한 일이 아니다. 하지만 스마트폰으로 정작 아날로그 라디오를 청취할 수는 없고.. 굳이 라디오를 들으려면 인터넷 데이터를 써서 강제로 디지털로 바뀐 신호를 들어야 한다.

(4) 블랙박스도 스마트폰 같은 타 기기와 연계해서 날짜 시각 동기화 기능 정도는 있어야 할 것 같다. 사고가 발생한 시각을 기록해야 하는데 이건 결코 사소한 일이 아니기 때문이다. 블랙박스는 근본적으로 순정품이 쓰이지 않고 통신 기능도 없는 폐쇄적인 기기이다 보니 21세기답지 않게 사람이 불편하게 수동으로 날짜 시각을 맞춰 줘야 한다.

6. 자동차의 공기 필터

코로나바이러스 때문에 요즘 사람들은 외출할 때 마스크를 끼는 게 무조건적인 필수가 됐다. 오토바이를 탈 때 헬멧을 쓰는 것처럼 말이다. 그리고 공공장소에 들어갈 때 체온 측정을 하는 건 음주 측정을 하는 것과 비슷하게 됐다.

그 전에는 마스크라는 건 가끔씩 중공 발 중금속 미세먼지가 너무 짙어졌을 때 호흡기를 미세먼지로부터 보호하기 위해 착용하는 물건이었다(입력 차단). 즉, 그 마스크는 나를 위해 필요한 것이었으며, 끼지 않으면 자기가 손해였다. 그리고 공기가 상대적으로 맑은 실내에서는 마스크를 벗어도 됐다.

그러나 코로나바이러스의 확산을 방지하기 위해 착용하는 마스크는 미세먼지 마스크와는 용도가 완전히 정반대이다. 이건 이미 감염돼 있을지 모르는 사람의 날숨과 타액 비말(미세한 물방울)이 퍼지는 것을 막는 역할을 한다. 한 마디로 출력 차단용이다.

그러니 이제는 공공장소에서 마스크를 쓰지 않으면 자기가 남에게 민폐를 끼치게 된다. 그리고 원칙대로라면 실내에서도 써야 하며, 주변에 사람이 없거나 충분히 멀리 떨어진 곳에서만 벗을 수 있다.

한편, 자동차는 기계이니 사람처럼 바이러스에 감염되지는 않지만.. 공기가 미세먼지 불순물 때문에 탁한 것은 사람뿐만 아니라 자동차에게도 절대로 좋지 않다.
에어컨이나 히터를 틀었을 때 퀴퀴한 냄새가 나면 사람들은 공기 필터를 교환할 때가 됐다고 생각하게 된다. 그런데 자동차에 공기 필터라는 건 두 종류가 있다. 흔히 생각하는 객실(cabin)용 공기 필터뿐만 아니라 엔진으로 들어가는 공기를 거르는 필터도 있기 때문이다.

엔진용 공기 필터는 우리 생각보다 자동차의 수명에 기여하는 것이 많으며 매우 중요한 부품이다. 사람이 끼는 ‘미세먼지 마스크’의 자동차 버전과 정확하게 일치한다.
흙먼지 등의 불순물이 많이 낀 공기가 실린더 안으로 들어가면 전부 불순물 찌꺼기가 돼서 배출되지 않고 남는다. 그래서 엔진을 더럽히고 출력과 연비를 깎아먹고 온갖 탈을 일으킨다. 사람으로 치면 호흡기와 순환기에 질병이 생기는 것과 같다.

환경이 위생적이지 못했던 옛날에는 사람들의 평균 수명이 지금보다 매우 짧았다. 자동차도 안전 벨트나 안전 유리가 없던 시절에는 비포장 도로에서 정말 어처구니없을 정도의 저속 주행 중에 사고가 났는데도 탑승자의 사망· 중상이 속출했다.

그리고 그것처럼.. 초창기에 공기 필터가 없던 시절에는 엔진의 고장이 지금보다 훨씬 더 잦았다. 한 2~3000km 정도만 구르고 나면 엔진 내부가 끔찍하게 더러워져서 진지한 정비 없이는 더 운행을 할 수 없었다고 한다. 그러던 게 공기 필터가 도입되면서 엔진 수명이 비약적으로 향상되었다.

이런 식으로 자동차 기술이 발달해 왔다. 그렇잖아도 자동차의 동력원이 외연 기관(증기)에서 내연 기관(휘발유/디젤)으로 바뀌면서 효율과 성능이 크게 향상됐지만, 엔진의 내부 구조가 훨씬 더 복잡해지고 연료와 공기에 대해 요구하는 민감도도 크게 올라갔다. 아무거나 대충 집어넣어서 불 때서 물만 끓이면 되던 시절을 생각해서는 곤란할 것이다.

이런 경향은 자동차에 더 정교하고 복잡한 연료 분사 기술과 배기가스 정화 기술이 도입될수록 더 커지고 있다. 이런 이유로 인해 자동차에는 공기 필터뿐만 아니라 연료 필터라는 것도 진작부터 존재한다. 그리고 모든 필터들은 마치 엔진오일처럼 소모품이다.

7. 자동차의 이상 징후

자동차가 오랫동안 정비를 받지 않으면 주행 중에 여러 형태로 외형적인 이상 징후가 나타난다.
예를 들어 방향지시등 램프가 일부 고장 나면 내부의 전기 저항이 줄면서 깜빡거리는 주기가 몹시 짧아진다. 일부 버스나 트럭이 그런 상태가 된 것을 본인은 몇 번 본 적이 있다.

  • 배터리에 이상이 없는데도 가끔씩 시동이 잘 안 걸리거나 건 뒤에도 자동차가 부르르 떨리고 회전수가 불안정하다면.. 점화 플러그가 수명이 다 된 것이다.
  • 급브레이크가 아닌데 제동 중에 하이톤의 ‘끼익~’ 소리가 들리기 시작하는 건 브레이크 패드가 오늘 내일 하는 상태라는 뜻이다. 저런 소리가 안 나야 정상이다.
  • 공회전 중에 ‘두두두두.. 드드드드~’ 소리가 깊고 강렬하게 들리는 것은 노킹 현상이며 이건 심각한 문제이다. 조속히 엔진 정비를 받아야 한다.

그것 말고도 엔진 작동 중에 주기적으로 하이톤의 ‘휙휙휙.. 끌끌끌..’ 소리가 들리는 것은 팬 벨트의 상태가 좋지 않다는 뜻이다.

자동차 엔진의 회전력은 바퀴 구동축에만 걸려 있는 게 아니라 배터리 발전기, 냉각수 순환 펌프, 에어컨 압축기, 브레이크와 파워 스티어링 등과도 몽땅 연결돼 있다. 그래서 엔진을 돌리는 건 생각보다 몹시 빡센(?) 일이며, 시동을 끄면 엔진은 관성이고 뭐고 없이 회전이 순식간에 멈춰 버린다.

이런 부하가 걸려 있는 회전축을 1m 길이 기준 수십 kg의 토크로 분당 수천 회 회전시키는 것이 자동차 엔진의 위력이다. 그리고 엔진 브레이크는 바로 이런 부하를 이용해서 차의 속력을 줄이는 테크닉이다.

팬 벨트는 차를 직접 굴러가게 하는 구동축을 제외하고 엔진의 힘이 필요한 다른 모든 기계에다 동력을 전해 주는 매체이다. 여기에는 차내에 전기를 공급하는 발전기도 포함된다.
그런데 이게 끊어지면 에어컨이 안 나오거나 브레이크가 제대로 동작하지 않거나 잠시 후 배터리가 방전되거나 엔진이 과열되거나.. 아무튼 상상할 수 있는 모든 재앙이 발생하면서 차는 더 주행할 수 없게 된다. 엔진 오일만치 자주는 아니지만 점화 플러그나 브레이크액, 배터리, 타이어와 얼추 비슷한 주기로 점검하고 교환할 필요가 있다.

변속기 중에서는 CVT가 팬 벨트와 같은 재질은 물론 아니지만 푸시벨트라는 벨트 비슷하게 생긴 부품이 핵심 매체이다. 수동 변속기는 톱니바퀴이고 자동 변속기는 토크 컨버터와 오일인 것처럼 말이다.

Posted by 사무엘

2020/06/03 08:35 2020/06/03 08:35
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1758


블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

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

Site Stats

Total hits:
2620227
Today:
3226
Yesterday:
1544