« Previous : 1 : ... 100 : 101 : 102 : 103 : 104 : 105 : 106 : 107 : 108 : ... 230 : Next »

날개셋 한글 입력기 9.1

1. 들어가는 말

2017년 6월에 날개셋 한글 입력기 9.0이 나온 지 4개월 만에 9.1 버전이 나왔다. 추석을 낀 10월 황금 연휴 기간까지 보낸 뒤에 드디어 공개되었다. 오랜 마음의 부담을 덜었다.
이번 버전은 이전 버전들과 달리, 오로지 '보조 입력 도구'의 기능을 크게 강화하는 것에 초점이 맞춰졌다. 비록 readme가 분량이 이례적으로 매우 짧으며 사실 넣고 싶은 기능을 다 넣지도 못했지만, 이번에도 내부적으로 1500줄이 넘는 코드가 새로 추가되고 많은 변화가 있었다.

이미 있는 입력 도구에 기능이 추가된 것부터 소개하자면,
(1) 먼저, 지난 7월에 소개한 것처럼 "화면 키보드"에 일종의 live preview 옵션이 추가되었다. 현재의 문맥을 기준으로 수식을 계산했을 때 입력되는 문자를 실시간으로 바꿔서 표시해 주기 때문에 복벌식이나 신세벌식 같은 복잡한(?) 입력 방식을 사용할 때 큰 도움이 될 것이다.

(2) 그리고 5.3에서 첫 도입된 이래로 변화가 전혀 없었던 "한손 입력기"에도 아기자기한 변화가 생겼다.
화면 키보드처럼 3단계 크기 조절이 가능해졌으며, 초성과 종성의 배치가 대칭이라는 점을 착안하여 초성· 종성을 우-좌로 배치할지, 좌-우로 배치할지를 변경할 수 있게 했다. 세벌식이니까 존재할 수 있는 절묘한 customization이다.

사용자 삽입 이미지

또한, 중성의 경우, 천지인 방식뿐만 아니라 나랏글 방식도 고를 수 있게 했다. ㅡ 글쇠가 따로 없기 때문에 얘는 ㅣ를 두 번 눌러서 입력하면 된다.
한손 입력기는 애초에 나랏글처럼 '가획' 글쇠가 있어서 자음에서 쓰이고 있다. 그러니 모음도 나랏글 방식을 지원하지 말라는 법이 없다. 이런 옵션으로 인해 한손 입력기의 활용의 폭이 더 넓어지기를 기대해 본다.

2. 휴대전화 입력기

이번 9.1에서 추가된 가장 대표적인 기능은 바로 이 입력 도구이다. 얘는 3*4 방식의 키패드를 통해 다양한 입력 방식을 제공한다.
한글, 영문, 숫자, 기호 이렇게 총 4가지 모드가 있다. 그 중 한글은 현재 지정되어 있는 키보드 입력용 글자판(= 입력 항목) 중 하나에서 0~9와 * # 자리를 그대로 빌려 쓴다.
즉, '한손 입력기'처럼 독자적으로 제공하는 입력 기능이 없이 기술적으로는 '화면 키보드'의 부분집합처럼 동작한다. 처음에는 구동 당시에 사용 중이던 글자판을 기준으로 동작하지만, 글자판을 딴 걸로 변경하고 나서 우클릭 메뉴에서 '동기화'를 선택하면 기준으로 삼는 글자판을 바꿀 수 있다.

(1) 이 입력 도구는 기존 입력 설정을 빌려 와서 동작하는 대신, 한번 참조해서 불러들인 글자판은 사용자가 딴 걸로 변경하더라도, 심지어 날개셋 제어판을 통해 기존 입력 설정을 싹 갈아엎더라도 절대불변으로 계속 갖고 있는다. 이것이 '화면 키보드'와는 다른 점이다.
그렇기 때문에 한번 천지인이나 나랏글 같은 입력 방식으로 동기화시킨 뒤엔, 다시 PC 키보드용으로 쓰기 편한 두벌식이나 세벌식을 쓰다가 마우스로만 모바일용 입력 방식을 같이 쓸 수가 있다.

(2) 또한 비트맵 글꼴을 사용하는 '화면 키보드'와 달리, 이 입력 도구는 나름 크기 조절이 가능한 운영체제의 글꼴을 사용한다. 게다가 조합을 통해 생성되는 한글 자모들을 모두 한데 표시해 준다. 나랏글의 경우 ㅏㅓ, 첫지인의 경우 ㄱㅋㄲ 이런 것을 한 글쇠에다 크기 조절까지 알아서 해서 표시한다는 것이다.

사용자 삽입 이미지

다만, 글쇠에 비문자 특수글쇠나 가상 낱자가 들어있다면 이렇게 프로그램이 글쇠 문자를 자동으로 찾아 준 결과가 썩 정확하지 않을 것이다. 이럴 때는 이 글쇠는 무슨 역할을 한다고 사용자가 그냥 직접 지정을 할 수 있다. 나랏글의 가획/쌍자음 같은 글쇠는 500이니 501이니 이런 내부 숫자가 아니라, 저렇게 사람에게 실질적인 의미를 갖는 별칭을 표시하는 게 훨씬 낫기 때문이다.

이런 정보를 읽어들이기 위해서 '휴대전화 입력기'는 글쇠배열의 '설명문'을 사용한다. 그 텍스트에 XML 시그니처가 존재한다면 그 뒤에 나오는 XML을 해석해서 거기에 지정된 이름을 출력한다~!
미래에 궁극적으로는 설정 파일 내부에 임의의 메타데이터를 저장하는 계층을 더 그럴싸하게 강화할 것이지만, 일단은 이런 임시방편을 동원했다.

<?xml version="1.0"?>
<info>
    <key pos="#" name="SEP" flag="1"/>
</info>

날개셋 한글 입력기가 예제로 기본 제공하는 천지인· 나랏글· SKY 입력방식들은 모두 '휴대전화 입력기' 도구와 연계해서 잘 동작하게 저런 정보가 추가되었다. 지금까지 타자 시퀀스를 구하는 용도로나 사용되던 이 예제들에게 더 그럴싸한 활용 방법이 생긴 셈이다.
천지인의 경우, 사용되지 않는 * 자리에 문장부호를 다중타로 입력하는 사용자 정의 조합이 추가되었으며, # 자리에는 음절 구분자 글쇠가 배당됐다.

(3) '휴대전화 입력기' 도구는 한글 모드에서만 저렇게 기존 입력 설정을 빌려다 쓰며, 나머지 입력 모드에서는 다 자체적인 고정된 입력 기능을 제공한다.
영문은 '모비언스'라는 국내 기업에서 개발한 SmallQwerty 방식의 다중타 입력을 제공한다. 무식하게 ABC 순이 아니라 영문 글자 빈도수와 기존 쿼티 글자판을 적절히 고려하여 글쇠를 배당했는데, 생각보다 편한 걸 알 수 있을 것이다.
0번 키를 눌러서 대소문자를 바꾼 것은 한 글자에 대해서만 적용되고, 우클릭 메뉴에서 대소문자를 바꾼 것은 영구적으로 적용된다는 차이가 있다.

(4) 숫자 모드는 다른 복잡한 기능 없이 말 그대로 12키 키패드를 숫자 입력용으로만 사용한다.
그런데 여기에도 재미있는 바리에이션이 있다. 위에서부터 아래로 123 순으로 배열된 '전화기' 모드와, 그렇지 않고 역순으로 배열된 '계산기' 모드가 모두 제공되어서 사용자가 이를 선택할 수 있다. 전화기 모드에서는 기호도 말 그대로 *와 #가 있지만, 계산기 모드에서는 .와 ,가 배당된다.

(5) 끝으로, 기호 모드는 기술적으로 영문 모드와 별 다를 바 없는 다중타 방식 문자표이다.
backspace, space, enter는 모든 모드에 공통으로 존재하는 글쇠이다.
그리고 mode 버튼은 좌측 하단을 누르면 한/영이 전환되며, 우측 상단을 누르면 숫자/기호가 전환된다.
3*4 크기의 글쇠배열에서 단일타라는 범위 안에서는 내가 생각할 수 있는 가장 창의적인 기능들이 한데 깔끔하게 구현되었다. 단일타라 함은 여러 버튼을 동시에 누르거나 드래그 하는 것까지는 생각하지 않는다는 뜻이다.

3. 글쇠배열 이름 표시

그리고 이번에는 문자를 직접적으로 입력시키지는 않지만 문자 입력과 관련된 편의 기능을 제공하는 입력 도구가 하나 또 추가되었다.
'글쇠배열 이름 표시'는 메뉴에서 선택하더라도 당장 화면에 뭔가 튀어나오는 게 없다. 그 대신 사용자가 한/영이나 Shift+Space 같은 걸 눌러서 글쇠배열을 전환하면 새로 바뀐 글쇠배열의 이름이 cursor 근처에 풍선 도움말 형태로 나타난다. 짜잔~

사용자 삽입 이미지

풍선 도움말은 2.5초 정도 표시됐다가 사라진다. 한/영 상태뿐만 아니라 Caps/Num/Scroll lock을 눌러서 램프 상태가 바뀐 것도 풍선 도움말(툴팁) 형태로 표시해 준다.
그리고 툴팁이 사라진 지 5초가 경과한 상태라면, 날개셋 한글 입력기를 사용하는 텍스트 입력란이 포커스를 새로 얻었을 때에도 현재의 글쇠배열을 자동으로 잠시 표시해 준다. 반대로, 툴팁이 떠 있는 동안은 키보드 포커스가 다른 윈도우로 이동하더라도 툴팁 역시 cursor 근처를 자동으로 따라다닌다.

그리고 사용자가 텍스트의 입력을 시작하면 이 툴팁 역시 화면을 가리지 말자는 차원에서 곧장 사라진다. (응용 프로그램이 직통으로 담당하는 키 입력 말고, 날개셋 입력기로 접수되는 문자 입력 한정) 이런 여러 이벤트들을 세심하게 신경 썼다.

본인은 날개셋 입력기에 한/영 상태를 화면에 별도로 표시하는 기능이 있으면 좋겠다는 요청을 수 년 전부터 일부 사용자로부터 받은 적이 있었다. 그게 이런 형태로 드디어 실현되었다.
Windows 8 이상의 Metro UI에서는 입력 도구모음줄이란 게 없는 관계로 윈도우 포커스를 얻었을 때 현재 글자판의 대표 아이콘을 잠깐 표시해 주는 기능이 이미 있다. 그것과 기능이 약간 겹친다고 볼 수 있다.

물론, 이 기능은 한계도 있다.
날개셋 한글 입력기가 구동되자마자 자동으로 동작하는 게 아니며, 사용자가 이 입력 도구를 골라서 구동을 해 줘야만 동작한다. 내 프로그램은 자동으로 특정 입력 도구를 곧장 구동하는 기능은 아직 없다.
또한, 편집기가 아닌 외부 모듈에서는 응용 프로그램에 따라 cursor의 정확한 위치를 기술적으로 얻을 수가 없어서 화면 가장자리의 엉뚱한 위치에 툴팁이 뜨기도 한다. 이 점을 감안할 필요가 있다.

그래도 '글쇠배열 이름 표시' 기능은 날개셋 편집기의 상태 표시줄 내지 운영체제의 language bar를 응시할 필요를 상당수 줄여 주는 유용한 기능이 될 것이다. 다음 버전에서는(아마 9.3쯤) 이런 기발한 입력 도구들이 몇 개 더 추가되어서 사용자의 문자 입력에 시각적으로 큰 도움을 줄 것이다.

4. 제공 자료

(1) 예제로 제공되는 신세벌식 유형 파일을 '신세벌식 공동 개발안'이라는 이름으로 세벌식 커뮤니티에 공개된 최신 파일로 업데이트 했다. 이것이 20여 년 전 PC 통신 시절에 신세벌식 입력 방식을 처음으로 제안했고 지금까지 '신 광조'라는 이름만 알려져 있던 원 제작자분이 직접 고친 최신 입력 방식이라고 한다.

(2) 그리고 쿼티, 드보락, 콜맥에 이어서 영문 글쇠배열도 Carpalx라는 타자 행동 분석 프로그램으로 계산한 최적의 배열(배열 중 하나)이라는 QGMLWY 배열을 추가해 넣었다. 여러 바리에이션 중, ZXCV는 Ctrl 단축키를 의식해서 기존 Qwerty의 것을 그대로 유지시킨 거라고 한다. 제2군, 제3군에 이어 제4군까지 내려가면 얼마나 마이너해지려나 모르겠지만, PC용 영문 글쇠배열도 오늘날까지 연구가 완전히 중단된 게 아니라는 걸 알 수 있다.

(3) 내 프로그램의 도움말 디렉터리에는 버전 히스토리 리스트뿐만 아니라 '한글 자모 목록' 레퍼런스 txt 파일이 있다. 거기에 인터넷에서 긁어 온 '훈민정음 서문'과 '용비어천가' 텍스트를 예제로 또 추가해 넣었다. 이 분야에서 워낙 상징성이 뛰어난 텍스트이기도 하니, 방점이 가미된 그럴싸한 옛한글 예문이 필요할 때 간단히 불러와서 활용할 수 있을 것이다.

5. 그 밖에

입력 도구 외의 변화 사항들은 일일이 언급할 필요를 느끼지 못할 정도로 사소한 것들만 있다. 그나마 리드미 말고 블로그 글을 통해서라도 언급할 만한 것으로는..

(1) 날개셋 편집기의 화면 인쇄 퀄리티를 크게 개선했다. 작은 배율에서는 비트맵이 안티앨리어싱이 적용되어 부드럽게 찍힐 뿐만 아니라, '고대비 검정' 같은 검은 배경에서도 작은 글자의 뭉개지는 픽셀들이 다 사라지지 않고 정상적으로 표시된다. 어려울 것도 없고 비트맵을 찍는 옵션 하나만 살짝 바꿔 주면 됐는데 10년이 넘게 방법을 모르고 있었다.

(2) 그리고 고급 입력기의 사용자 정의 조합을 편집하는 화면에서.. 현재 존재하지 않는 새로운 상태로 가는 조합을 정의한 뒤 그걸 마우스로 더블 클릭하면, 자동으로 그 상태 번호를 등록하고 거기로 이동하게 해서 사용자 편의를 약간이나마 강화했다.

6. 끝으로.. 휴대전화(모바일)용 입력 방식에 대한 추가 잡설

(1) 사실, 휴대전화용 입력기라고 해 봐야 옛날에나 12키 layout에 매여 있었지, 지금은 꼭 그렇지도 않다. 스마트폰은 글쇠 레이아웃의 제약이 없으니 qwerty처럼 익숙한 PC용 키보드 그림을 띄워서 그걸 터치하는 방식으로 문자를 입력하기도 한다.
다만, 키보드와 완전히 같지는 않고 거기에서 규모를 약간만 줄이곤 한다. Google 단모음 입력기가 이런 틈새시장을 잘 공략한 입력 방식이긴 하다.
4단 숫자까지 사용하는 세벌식에게 이런 모바일 환경은 일면 악재로 보인다. 하지만 그런 곳에서는 신세벌식 같은 방식으로 글쇠 수를 줄인 입력 방식이 각광받고 있다.

그리고 사실은.. 모든 모바일 기기들이 다 qwerty 배열을 통째로 화면에 띄울 수 있을 정도로 화면이 크지는 않다.
교통에서도 동일 면적에 차들을 너무 많이 집어넣어서 밀집도가 지나치게 올라가면 차들이 서로 부딪칠까봐 조심하느라 빨리 달리지 못한다. 정체가 시작되며 단위 시간당 차량 소통량이 오히려 감소하게 된다.

그것처럼 작은 화면에 글쇠들이 정확하게 누르기도 힘들 정도로 너무 조밀하게 많이 있으면, 원하는 글쇠를 한 번에 누를 수 있어서 편리한 것보다 오타 때문에 불편한 게 더 커진다.
이런 이유로 인해 본인 역시 스마트폰에서 qwerty 기반 두벌식을 잠깐 써 보다가 불편해서 다시 3*4 나랏글로 갈아탔다. 적당한 버튼의 면적과 수에 대한 HCI 관점에서의 연구가 필요해 보인다.

아울러, 3*4 같은 고정적인 글쇠 패러다임도 완전히 없어질 수는 없는 게.. 시각 장애인이 있기 때문이다. 점자는 물리적인 요철로 구현해야 하니 터치스크린으로 절대로 구현할 수 없다. 요즘 같은 비주얼한 세상에도 라디오가 망하지 않고 있는 게, 수많은 영업용 자동차 운전자 때문인 것과 비슷한 이치라 하겠다.

(2) 지금까지 고안된 수많은 모바일용 한글 입력 방식 중에는 한 글쇠에 자음과 모음이 중첩 배당된 게 있다. 신세벌식에서는 그나마 중성과 종성 중첩이라지만, 저런 입력 방식에서는 두벌식이기 때문에 한 글쇠가 문맥에 따라 초중종성 역할을 모두 담당하게 된다.

가령, 김 민겸 님(☞ 홈페이지)이 고안하신 입력 방식은 '으'에다가 ㅡ를 덧붙여서 ㅎ이 되는 동작이 있다..! 이건 워낙 특이한 동작이기 때문에 날개셋에서도 거의 7.x대 버전에서 0으로 만드는 특수 낱자까지 도입한 뒤에야 겨우 구현 가능해졌다. 그래도 복잡한 전용 특수 오토마타가 필요하며, 이렇게 너무 변칙적인 입력 로직은 내 프로그램에서 입력 순서 계산 같은 자동화도 제대로 못 해 준다.

그리고 웹사이트의 설명을 아무리 읽어 봐도.. 자음과 모음이 그렇게 중첩돼 버리면 음절 경계 구분은 어떻게 하는지, 초성은 그렇게 입력한다 쳐도 종성에서 '으으'와 '읗' 같은 건 어떻게 구분하는지, 뭔가 보편적인 규칙이 떠오르질 않았다. 내부 로직이 어떻게 돼 있는지 리서치를 할 시간이 없어서 본인은 그런 입력 방식들은 예제로 제공하지 못하고 있다.

사실, 모비언스에서도 영문뿐만 아니라 한글 입력 방식을 제안한 것이 있는데 거기서도 자음과 모음 중첩이 존재한다. 이 역시 비슷한 이유로 구현하지 못하고 내 프로그램에서는 영문 입력 방식만 얹었다.

Posted by 사무엘

2017/10/09 08:32 2017/10/09 08:32
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1414

Doom 게임의 몬스터 내분 외

예전에는 고전 게임들 중에 페르시아의 왕자 얘기를 종종 늘어놓는 편이었는데 요즘은 둠/퀘이크로 관심사가 바뀌어 있다. 그 시절엔 PC급에서 실시간 3D 렌더링를 구현한 최첨단 게임이었는데 그것도 벌써 20년도 넘은 게임이 돼 버렸구나.

Doom 계열 게임은 몬스터들끼리의 내분(infighting)이 존재하는 걸로 유명하다. 여타 액션· 아케이드 게임에서는 거의 찾을 수 없는 특징이다.
사실은 몬스터가 주인공과 동일하게 게임상의 트랩에 걸릴 수 있고 몬스터끼리 팀킬이 존재하는 게임도 흔치 않다. Doom에서도 몬스터는 용암· 독극물 같은 바닥 트랩에는 면역이며, 주인공과 달리 체력을 잃지 않는다. 이건 몬스터가 총알이 무한대(!)이고 스타 1의 AI에서 컴퓨터는 플레이어 위치를 내부적으로 이미 알고 있는 것처럼, 밸런스 차원에서 사람과 컴퓨터 사이에 어쩔 수 없이 존재하는 차이점이다.

단, Doom 몬스터도 위에서 짓누르는 crushing ceiling 트랩에 의한 압사는 동일하게 가능하다. 플레이어의 무기 공격 이외의 방법으로 몬스터가 죽을 수 있는 얼마 안 되는 방법 중 하나인데, 그런 것처럼 Doom은 몬스터끼리 팀킬이 가능한 걸 넘어, 자기들끼리 적극적으로 싸움박질까지 가능하다는 뜻이다.

솔직히 말해 게임이 아닌 현실에서는 킹왕짱 주인공 한 명이 적들이 우글거리는 본거지나 던전 같은 데에 들어가서 깽판을 치고 다니는 일이 도저히 있을 수 없다. 현실에서는 주인공 보정 같은 게 전혀 존재하지 않을 뿐만 아니라, 적군들도 절대로 혼자 놀지 않는다. 침입자가 감지되면 던전 전체에 경보가 걸리고 모든 적들이 서로 "연락"을 주고받으면서 힘을 합쳐서 침입자의 퇴로를 차단하고 화력을 집중해서 잡아낸다.

그러니 협력은 고사하고 몬스터 자기들끼리 싸운다니.. 이건 솔직히 말해 매우 비현실적인 설정이다.
하지만 현실을 곧이곧대로 반영했다가는 FPS는 너무 어렵고 재미가 없어지고, 심지어 잠입 액션 게임 같은 장르는 존재 자체가 불가능해진다. 현실에서 경험할 수 없는 쾌감과 카타르시스를 얻으려고 게임을 하는데 게임이 쓸데없는 데에 너무 고증에 충실할 필요도 없다.

Doom의 몬스터는 처음에는 주인공을 향해서 공격하지만 다른 몬스터로부터 공격을 당할 수도 있고, 또 누구든지 자기를 공격한 놈을 무조건 공격한다. 각각의 몬스터들이 그야말로 자기밖에 모르는 아주 이기적인 놈이라는 설정이 붙어 있어서 그런데, 이건 역으로 플레이어 주인공에게는 유리한 면모가 된다. 듀크 뉴켐 3D 같은 유사 3D FPS에는 이런 시스템이 존재하지 않는다.

몬스터간 내분은 단순한 꼼수 테크닉 차원을 넘어서 Doom의 제작사에서 정식으로 홍보를 했으며, 레벨들 자체도 저걸 반드시 활용하는 걸 가정하고 설계하기도 했다.
Doom 2의 경우 오리지널 버전에서 최종 보스였던 스파이더 마스터마인드(이하 스마마)와 사이버데몬이 이제는 에피소드가 바뀔 무렵에 종종 등장하는 중간 보스로 위상이 바뀌었는데, 사이버데몬이 있는 곳엔 어지간하면 무적 아이템이라든가 다른 몬스터도 있다. 그래서 걔네들끼리 싸움을 붙이면 편하게 격파할 수 있다. 대표적인 곳이 level 20 Gotcha!의 도입부이다.

다만, 개나 소나 다 서로 싸우게 만들 수 있지는 않다.
일단 총알은 눈이 안 달렸다 보니 우리 주인공, 좀비맨, shotgun guy, chaingunner, 심지어 스마마까지 동족· 이족을 불문하고 다 싸움을 시킬 수 있다.
그러나 괴물이 발사한 뭔가 초월적인 형태의 파이어볼들끼리는 서로 내성이 있다. 가령, 임프나 카코데몬, hell knight, baron of hell, mancubus 같은 놈들은 동족이 발사한 파이어볼에 맞아도 체력이 깎이지 않으며 서로 싸우지도 않는다.

물론 서로 다른 종족끼리는 얄짤없다. 임프 vs 카코데몬, 레버넌트 vs hell night 이런 식으로는 싸움을 얼마든지 붙일 수 있다.
그럼 동족끼리는 싸움을 붙이는 게 절대 전혀 불가능한가 하면.. 그렇지는 않다. 이게 또 Doom 엔진의 아주 오묘한 면모이다. 바로, 폭발하는 드럼통의 스플래시 대미지를 이용한 간접적인 방법을 통해 가능하다.

드럼통은 내부적으로 소량의 hit point를 갖고 있으며, 얘가 공격을 받아서 HP가 0 이하가 되면 터진다. 그런데 동족 몬스터 A, B가 있고 B가 A의 공격을 받아 터진 드럼통의 근처에서 대미지를 입으면 B는 A가 자신을 공격했다고 간주하게 된다.

이건 아무데서나 가능한 게 아니고 컨트롤도 굉장히 어렵다. 하지만 Doom 엔진 하에서 파이어볼 쏘는 괴물끼리 서로 싸우는 게 이론적으로 가능은 하다는 뜻이다. 이를 시연하는 동영상들도 유튜브에 많이 있다.
동영상을 보면, 드럼통이 맨 먼저 A의 공격을 받고 당장 터지지는 않았지만, 나중에 B가 그 드럼통의 근처에 왔을 때 플레이어가 최종적으로 터뜨려서 B에게 대미지를 입혀도 되는 듯하다. 이게 사실 더 쉽긴 하다.

이 일이 벌어지면 B는 A에게 파이어볼을 쏘면서 다가간다. 그래도 파이어볼은 대미지나 공격으로 인식되지 않기 때문에 A는 B의 원거리 공격을 무시하고 반응하지 않는다. 그러다가 B가 A를 직접 할퀴고 때리는 식으로 근접 공격을 시작하면 그건 비로소 대미지로 인식되기 때문에 A와 B는 동족임에도 불구하고 서로 싸우는 진풍경이 벌어진다. 그러다 둘 중 하나가 죽는다..;;

몬스터들 중에 demon은 물어뜯는 근접 공격밖에 존재하지 않기 때문에 다른 몬스터에게 먼저 피해를 주는 건 불가능하다. 언제나 자기가 먼저 얻어맞고 시작하게 된다.
pain elemental도 먼저 피해를 줄 능력이 없는 놈이다. 그런데 반격을 하는 방법이 자기가 무슨 파이어볼을 발사하는 게 아니라 가해자를 공격하는 lost soul을 소환하는 것이다. 참고로 lost soul은 돌격하다가 자기들끼리 부딪치면 내분을 잘 일으킨다.

스마마는 인간이 아닌 괴물이고 게다가 보스급임에도 불구하고 괴물 특유의 파이어볼을 발사하는 게 아니라 평범한 기관총 탄환을 발사한다.
Doom 2의 level 28 Spirit world에서는 전레벨을 통틀어 유일하게 한 레벨에서 스마마가 두 마리나 나오는데, 스마마끼리 내분을 붙일 수 있다. 아까 level 20에서는 사이버데몬 vs 스마마였는데 이제는 동족끼리 팀킬인 것이다.

Doom의 몬스터들은 대체로 요리조리 갈짓자걸음으로 얼쩡거리다가 일정 주기로 공격을 하는 편인데, 스마마의 경우 플레이어를 발견하면 그냥 자신이 경직되거나 플레이어가 시야에서 사라질 때까지 닥치고 다발총을 갈겨댄다. 이런 공격을 하는 몬스터가 오리지널 Doom에서는 최종 보스이던 스마마밖에 없었지만, 둠 2에서는 잡몹급에서도 더 늘었다. chaingunner (heavy weapon dude), 아라크노트론(둠 2에서 추가된 거미 축소 양산판)이 추가됐기 때문이다.

Doom 2의 시크릿 레벨에 존재하는 나치 SS 군인도 이런 식으로 공격한다. 그런데 얘들은 인간이지만 동료의 총알에 맞아서 대미지를 입더라도 자기들끼리 싸우지 않고 오로지 플레이어만 공격한다. 즉, 팀킬이 존재함에도 불구하고 몬스터 내분에서 예외이다. (.... 라고 처음에 썼는데, 그건 아니고.. 스프라이트의 출처가 옛날 울펜슈타인이다 보니, 공격하는 모습은 언제나 플레이어를 향한 정면 각도 것밖에 없어서 겉보기로만 그렇게 보이는 거라고 한다. ㄲㄲㄲ)

참고로 보스급 몬스터는 (1) 로켓 런처의 스플래시 대미지를 맞지 않고 오직 직타 대미지만 입으며, (2) 죽더라도 아크바일이 소생시키지 못하고, (3) 얘들이 플레이어를 발견하는 소리와 죽는 소리가 플레이어가 어디에 있던 맵 전체에서 들린다는 특징이 있다. (4) 이동하는 것만으로도 삐걱삐걱 소리가 들리는 건 보스가 아닌 아라크노트론도 가진 특징이므로 유니크함이 덜하고.

Doom 2에서 이런 보스를 오마주한 듯한 작은 양산형(?) 스케일 몬스터가 추가됐다. 사이버데몬은 mancubus (노란색 계열, 3콤보 공격)이고, 스마마는 아라크노트론이다.
mancubus는 근접 공격이 없고 원거리만 있기 때문에 그럼 동족끼리 싸움이 붙으면 싸움이 영원히 끝나지 않을 것 같다.

또한, 오로지 총알만 종족 불문 통용인지, 사이버데몬의 로켓과 아라크노트론의 플라즈마건은 플레이어도 동일하게 소유한 무기임에도 불구하고 동족간 몬스터 내분을 일으키지 않는 것으로 보인다. 이유는 모르겠다. 하긴, 사이버데몬은 일반적인 Doom 맵에서는 두 마리 이상이 동시에 존재하는 경우가 없기 때문에 몬스터 내분을 따지는 것이 의미가 없기도 하다.

Doom은 안 그래도 몬스터 개떼들이 몰려드는 물량전이 많은데 플레이어가 지형 장애물에만 가려지지 않고 있으면 다들 닥치고 공격부터 한다. 그래서 몬스터 내분이 굉장히 잘 일어나는 편이었다.
그러던 것이 후속작인 Quake에서는 AI가 수정되었다. 앞에 지형 장애물뿐만 아니라 동· 이족을 불문하고 자신과 플레이어 사이의 직선 경로에 다른 몬스터가 있으면 공격을 하지 않게 되었다. 둠을 하다가 퀘이크를 해 보면 곧장 차이를 알 수 있다.

그래서 퀘이크는 둠만치 몬스터 내분이 금방 곧장 발생하지는 않는다. 하지만 그래도 플레이어를 조금만 컨트롤하면 여전히 내분을 어렵지 않게 일으킬 수 있다. 멍청해서 수류탄을 맵의 온 곳에다 뿌리는 Ogre 아저씨가 몬스터 내분의 가해자가 되기 제일 만만하고 쉽다.

Ogre는 같은 Ogre의 수류탄에 맞아도 동족을 공격하지는 않는다. 하지만 의외로 대미지를 전혀 안 입는 건 아니고 아주 조금씩은 입는다. 내 경험상 동족 내지 심지어 자기 자신이 발사한 수류탄을 수십~백여 번 가까이 맞으면 죽긴 하더라.

Doom에서는 몬스터끼리 싸우다가도 죽을 때는 언제나 플레이어를 보는 방향으로 쓰러지는 게 다소 어색한데(죽는 스프라이트는 플레이어를 보는 시점 하나뿐이므로) 퀘이크는 폴리곤 기반 풀 3D이기 때문에 죽는 모션의 시점도 자연스럽게 개선되어 좋다. 몬스터 내분을 구경할 맛이 난다.

이를 더 확장해서 보면, Doom 게임을 몬스터의 시점에서 본다거나, 주인공의 움직임을 다른 곳에서 3인칭 시점에서 보면 어떨까 하는 생각이 든다. 실제로 이를 가정한 유튜브 동영상도 있다. 몬스터가 보기에 플레이어는 크기는 생쥐처럼 작은 게 무엇보다도 이동이 겁나게 빨라 보이겠다. alert sound도 없고 pain chance(공격 당해서 일정 확률로 움찔하는 것) 같은 것도 없다. 몬스터가 물량에서 유리한 반면 플레이어는 압도적인 민첩성이 유리하겠다.

FPS의 유행이 퀘이크 3 아레나를 거쳐서 밀리터리 + 온라인 팀플 스타일로 바뀌는가 싶더니 요즘은 오버워치와 LOL처럼 다시 옛날 같은 초현실적인 스타일이 뜨는 듯하다. 이런 트렌드의 차이가 둠 3과 둠 4의 성향 차이를 만들기도 했다. 이건 2010년대 이후에 병맛이 전세계적으로 재조명 받은 둠 코믹스의 영향을 받기도 했을 것이다.

군대에서 실제로 총을 쏴 보면 알 수 있듯, 현실의 총질과 하이퍼/고전 FPS의 총질은 느낌이 영 다를 수밖에 없다. 현실의 총기는 반동과 재장전이라는 게 존재하고 총소리도 서로 다르다. 현대의 군인이 쓰는 돌격소총은 둠의 권총, 샷건, 체인건 중 어느 부류에도 정확하게 딱 떨어지지 않는다. 그리고 총을 100% 현실처럼 반영해 버리면 치명상 내지 즉사가 너무 쉬워져서 게임의 재미가 크게 줄어든다. 그러니 현실적인 군사 FPS는 그런 걸 일부러 추구하는 사용자를 대상으로 하는 별도의 장르로 가야 한다.

이 와중에도 Doom은 C언어 소스 코드가 공개된 이후로 엔진이 양덕후들에 의해 그야말로 뼈와 골수 속까지 몽땅 다 분석됐다. 온갖 변태적인 포팅판, 개조· 변형판, 맵이 나와서 플레이 동영상들이 돌아다닌다. 페르시아의 왕자의 경우 소스는 공개되지 않았지만 그래도 더 오래 된 단순한 게임인 덕분에 오로지 역공학 분석을 통해 맵 에디터가 나돌긴 하는데.. 둠의 경우는 더 재미있고 소스까지 공개되지 않았던가? 활용의 스케일이 더하다.
(뭐, 엄밀히 말하면 페르시아 왕자도 조던 메크너가 초 구닥다리 애플 2 어셈블리어로 짰던 원판 소스가 수 년 전 공개되긴 했지만 그건 과연 분석과 포팅이 가능할지? ㅡ,.ㅡ;;)

그 중 초월이식 마개조의 끝판왕으로 뜨고 있는 건, 이미 아는 분도 계시겠지만 2013년경부터 개발된 Brutal Doom(브루탈 둠)이다. 오리지널 둠의 무기가 더 밀리터리 FPS스럽게 바뀌고 듀크 뉴켐과 모탈 컴뱃스러운 마초이즘이 가미되었다. 그리고 그래픽이 온통 피가 튀는 형태로 잔혹해졌다.

1990년대 중반에 둠/퀘이크의 경쟁작이던 듀크 뉴켐 3D는 high resolution pack이라고 해서 몬스터들을 완전히 폴리곤으로 개조까지 한 리메이크작이 있는데 둠은 모르겠다. 브루탈 둠도 스프라이트 자체를 3D화한 건 아니니 말이다.

추신 1. 찰진 무기들

이상, Doom의 몬스터 내분부터 시작해서 굉장히 많은 얘기가 나왔다. 둠 2는 단순 따발총이나 로켓 런처 같은 평범한(?) 무기 말고도, (1) 버서크(berserk) 파워업이 가능한 주먹, (2) 그야말로 범용성 가성비가 최강인 슈퍼샷건, (3) 이후의 그 어떤 FPS에서도 찾을 수 없는 캐사기 BFG.
이렇게 무기들도 분야별로 개성 넘치며, "찢고 죽이는"(rip and tear) 카타르시스가 느껴지게 정말 잘 만든 것 같다. 울펜슈타인 바로 다음으로 어떻게 저런 것들을 생각해 낼 수 있었을까?

내 총은 반동이 없지만 총을 맞은 적은 팍팍 과장되게 뒤로 밀려나는 것도 쾌감을 증가시키는 요인이다.
그리고 BFG의 경우 단일 파이어볼의 위력이 넘사벽이고 주변의 잡몹들을 싹 정리하는 용도로도 최강이지만, 한편으로 파이어볼이 터질 때 나 자신 역시 적에게 노출하고 적들을 똑바로 보고 있어야만 위력이 제대로 발휘된다는 함정도 있다.

다시 말해 BFG는 다 좋은 대신, 쏘고 튀거나 엄폐물에 숨는 식으로 운용할 수 없다는 뜻이다. 전혀 현실적이지 않고 소스 코드가 공개될 때까지는 정확한 동작 방식을 짐작조차 하기 어려웠던 설정이나, 이런 창의적인 무기를 게임용으로 생각해 내고 구현했다는 것 자체가 심히 경이롭지 않을 수 없다.

추신 2. 스타크래프트와의 접목

엉뚱한 잡생각이긴 하다만, 스타크래프트 같은 게임에서 Doom 2 몬스터를 유닛으로 뽑을 수 있으면 어떨까 상상을 해 봤다. 종족은 인간형, 사이보그형, 외계인형(프로토스?), 그냥 괴물형(저그?) 같은 식으로 나뉠 거고..

좀비맨, 샷건가이 같은 인간형 몬스터는 테란 바락(배럭스)에서 생산될 것이고 헤비 웨펀 듀드는 공격력이 탁월한 상위 유닛이니 아카데미 같은 건물이 추가로 필요하다. 뭐, 그래도 인간형은 전반적으로 너무 약하니 밸런스 보정이 좀 필요하다.
임프나 데몬도 괴물형 중에서는 당연히 저가형 기본 유닛에 속한다. 기획을 어찌 하느냐에 따라 데몬에다가 클록킹을 개발해서 스펙터로 일시적으로 변하거나, 아니면 영구 클록킹 형태로 스펙터를 따로 넣을 수 있다.

아크 바일은 정규 공격이 아니라 프로토스로 치면 다크 아칸 급의 고급 마법형 유닛이 될 것이다. 화염 공격이나 죽은 유닛 소생 둘 중 하나는 건물에서 리서치를 해야 가능하며, 스킬 사용 시에 마나가 필요하다. 카코데몬은 당연히 공중 유닛이고, 페인 엘리멘탈은 캐리어가 인터셉터 생산하고 리버가 스캐럽 날리듯이 내부적으로 로스트 쏘울을 생산해서 날리는 공중 유닛이 될 것이다~! (응???)
사이버데몬이나 스파이더 마스터마인드는 테크트리 최종 단계의 유닛이 될 것이다.

2D 스프라이트가 3D 폴리곤보다 좋은 점은.. 아무래도 컴터에서 처리하기 가볍고 처리 속도가 월등하다 보니 수백, 심지어 수천 마리 물량 개떼전이 가능하다는 것이다. 안 그래도 둠과 스타 모두 '마린 vs 질럿, 캐리어 vs 배틀'처럼 '사이버데몬 vs 스마마, 아라크트론 vs 맨큐버스' 이렇게 개떼 대결이 많이 나돌기도 한다.

"노업 레버넌트 한 부대 뽑아서 사거리 업한 카코데몬 한 부대 잡기"...;;; 비록 FPS와 RTS라고 장르는 다르지만 발상을 바꿔서 이런 교배도 생각할 수 있을 것 같다.
Doom 몬스터들을 그저 슈퍼 샷건이나 BFG, 버서크 주먹으로 내가 학살하거나, 몬스터 내분 붙여서 구경만 하는 게 아니라.. 내가 생산해서 부대 지정해서 다른 몬스터들을 공격하라고 어택 땅 시켜 보고 싶기도 해서 말이다.

추신 3. 언어 이슈

mancubus 몬스터 얘기가 나와서 말인데 언어 관련 얘기만 추가하고서 글을 맺겠다.
외국 동영상을 보니 mancubus의 복수형을 mancubi라고 부르더라. 신기했다.
대학 시절에 강의 계획서라고 많이 들어 봤을 syllabus도 복수형은 원래는 syllabi라고 한다. 라틴어 어원의 단어가 복수형이 좀 기괴한 경우가 있는데 저 단어도 저런 듯..

matrix, index, vertex처럼 -(e)x로 끝나는 단어의 복수형이 -(i)cies로 바뀌는 것과 비슷한 맥락이다.
다만, 자동차 bus는 omnibus에서 끝부분만 떼어 온 라틴어 어원의 단어이지 싶은데 그냥 buses라고 잘 정착해 있다.

Posted by 사무엘

2017/10/06 08:30 2017/10/06 08:30
,
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1413

컴퓨터 프로그램이 뻗는 방식을 분류하면 크게 다음과 같이 정리된다.

1. 아무 뒤끝 없이 그냥 뻗음(crash)

제일 단순하고 흔한 형태이다. 코딩을 잘못해서 잘못된 메모리에 접근하다가 튕긴 것이다. 그 예로는 null 포인터(null로부터 유도된 인근의 잘못된 주소 포함), 초기화되지 않은 포인터, 초기화되지 않은 배열 첨자 인덱스, 이미 해제된 메모리 포인터 등 참 다양하다.
혹은 애초에 메모리를 할당하는데 할당량에 엉뚱한 값이 들어와서 뻗은 것일 수도 있다. 가령, 음수만치 할당은 저 문맥에서는 대체로 부호 없는 정수로 바뀌면서 도저히 감당 불가능한 엄청난 양의 메모리 요청으로 바뀌기 때문이다.

2. CPU 사용 없는 무한루프

단독으로 돌아가는 프로그램이 제발로 이렇게 되는 경우는 잘 없다. 이건 스레드 내지 프로세스 간에 서로 아귀가 안 맞는 상호 대기로 인해 deadlock에 걸려서 마취에서 못 깨어난 상황이다. 그러니 엄밀히 말해 무한루프보다는 무한대기에 더 가깝겠다.
굳이 커널 오브젝트를 직접 취급하지 않고 윈도우 메시지를 주고받다가도 이렇게 될 수 있다. 가령, 스레드 A가 타 프로세스/스레드 소속의 윈도우 B에다가 SendMessage를 해서 응답을 기다리고 있는 중인데, B는 또 스레드 A가 생성한 윈도우에다가 SendMessage를 했을 때 말이다. 요 데드락을 해소하려고 ReplyMessage라는 함수가 있다.

3. CPU 쳐묵과 함께 무한루프

종료 조건을 잘못 명시하는 바람에 loop에서 빠져나오지 못하는 경우이다. 부호 없는 정수형으로 변수를 선언해 놓고는 while(a>=0) a--; 이런 식으로 코딩을 해서 무한루프에 빠지는 경우도 있다. 얘는 그래도 다행히 메모리 관련 문제는 없는 상황이다.

4. stack overflow와 함께 뻗음

이건 단순 뺑뺑이가 아니라 재귀호출을 종료하지 못하고 비정상적으로 반복하다 이 지경이 된 것으로, 컴에 메모리가 무한하다면 3번 같은 무한루프가 됐을 상황이다. 하지만 현실에서는 물리적인 자원의 한계가 있고, 또 컴이 취급 가능한 메모리 주소 자릿수 자체도 무한하지 않기 때문에 언젠가는 뻗을 수밖에 없다.

재귀호출도 반드시 A-A-A-A-A... 이렇게 단일 함수만 쌓이는 게 아니라 마치 유리수 순환소수처럼 여러 함수 호출이 주기적으로 쌓이는 경우도 있다.
스택은 다음에서 다룰 heap 메모리와는 달리, 그래도 그 정의상 할당의 역순으로 회수되고, 회수가 반드시 된다는 보장은 있다.

5. 메모리 쳐묵과 함께 뻗음

이건 heap memory의 leak을 견디다 못하고 프로그램이 뻗은 것이다. loop 안에서 계속해서 leak이 발생하면 꽤 골치아프다. 또한, 금방 발견되는 leak은 그나마 다행이지, 프로그램을 몇 주, 몇 달째 돌리다가 뒤늦게 발견되는 것은 더 답이 없고 잡기 어렵다. 프로그램이 뻗은 지점이 실제로 문제가 있는 지점과는 전혀 관계 없는 곳이기 때문이다. 뭔가 컴파일 에러와 링크 에러의 차이와도 비슷한 것 같다.

요약하면, 메모리 쪽 문제는 가능한 한 안 마주치는 게 낫고, 마주치더라도 프로그램이 곧장 뻗어 주는 게 디버깅에 유리하다. 1과 5는 포인터를 대놓고 취급하지 않는 C/C++ 이외의 언어에서는 프로그래머가 직접 볼 일이 드물다.
요즘은 그래도 디바이스 드라이버 급이 아닌 평범한 양민 프로그램이라면 메모리 문제로 뻗는 경우 전적으로 혼자만 뻗지, 컴퓨터 전체를 다운시키는 일은 없으니 세상 참 좋아졌다. 이게 다 가상 메모리와 보호 모드 덕분이다.

Posted by 사무엘

2017/10/03 19:34 2017/10/03 19:34
, , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1412

1. 이 교숙 (1924-): 우리나라의 상징 BGM들

이런 엄청난 분이 계신다는 것을 최근에야 인터넷을 돌아다니다가 우연히 알게 됐다. 요즘 인터넷은 정말 대단하긴 하다. 지금 존재하는 모든 유· 무형의 사물들에 대해 그 창조주(?)와 기원과 내력에 대해 알 수 있다.
에디슨 같은 질문덕후가 21세기를 살았으면 무슨 짓을 하며 살다가 뭐가 됐을지 궁금해진다.

아무튼, 저분은 우리나라 국민의례 BGM을 있게 한 분이다. 해군 군악대장 출신으로, 국기에 대한 맹세/경례 BGM을 작곡했으며 “빰빠라 빰빠라 밤~”으로 시작하는 그 장성 경례곡도 작곡했다. 그게 정확하게 언제인지는 잘 모르겠다.
지난 2007년에 국기에 대한 맹세 본문이 약간 수정된 바 있지만 BGM은 여전히 그대로이다. 고칠 필요가 없으니까.

확인은 못 해 봤지만 순국선열 및 호국영령에 대한 묵념 BGM도 정황상 저분 작품이 아닌가 하는 추측을 해 본다. 이 묵념은 국민의례를 완전 진지하게 full scale로 할 때만 실시하기 때문에 BGM 역시 자주 들을 수 있지는 않다. 우리나라 근현대 수난기의 양대 비극이 각각 일제 강점기와 북괴(특히 6· 25)이니 순국선열과 호국영령은 각각 전자와 후자를 대표하는 셈이다.

아무튼. 저분이 아직 살아 계신다면 90이 넘은 고령인데, 최근 근황은 잘 모르겠다. 다만, 먼 옛날에 저분에게서 직접 음악을 배운 적이 있는 분의 회고록이 전해진다.

곁다리: 짤막한 멜로디

2~3분 이상 길이에 기승전결(?) 형식을 갖춘 노래나 악곡이 아니라 ‘딩동댕!’ 같은 짤막한 멜로디 말이다. “만나면 좋은 친구” 방송국 시그널송이나 초인종 벨소리.
글에다 비유하면 산문이나 운문도 아니고 짤막한 포스터 표어와 비슷한 위상일 것이다. 그림에다 비유하면 커다란 그림이 아니라 16*16, 32*32 크기의 아이콘 정도.

이렇게 극도로 제한된 시공간에다가 최대한 임팩트 있는 메시지를 전달하게 곡을 쓰는 건 보통일이 아닐 것 같다.
장성 경례곡을 좀 만들어 달라/보라는 의뢰를 받았거나 학교 수업 과제를 받았다면 독자 여러분은 어떻게 하시겠는가? 길어야 30초 남짓한 시간 동안 무슨 심상을 표현하도록 콩나물을 오선지에다 그려 넣을까?

더 나아가 초인종 BGM은 어쩌다가 하필 “엘리제를 위하여”로 온통 물갈이가 됐을까? 그 곡이 초인종 BGM으로서 도대체 무엇이 좋아서? 장성 경례곡을 듣다 보니 이런 의문도 강하게 든다.

단, 저것들 말고 군대 기상 나팔 BGM은 딱히 작곡자가 전해지지 않는 것 같다. 외국 군대에서도 오래 전부터 나돌던 멜로디가 적당히 변형되었다.

2. 김 희조 (1920-2001): 국민체조

이분은 육군 군악대장 출신이다. MBC 기자 출신인 여자분과는 당연히 동명이인.
지금은 학교에서 자취를 감췄다지만 "국민체조" BGM과 “잘 살아 보세”가 바로 이분의 작품이다. 그렇다면 자매품인 “국군 도수체조” BGM도 같은 출처이지 싶다.

본인은 먼 옛날에 잉여짓 차원에서 국민체조 BGM의 주선율을 오선지에 받아써 본 적이 있다. 진작부터 머릿속 장기 기억에 영구보존된 곡이니 검색해서 다시 안 들어도 얼마든지 채보 가능하다.
기본에 충실한 박자이면서도 최소한의 기교는 다 동원된 것 같았다. 음표는 2분에서 16분음표까지 다 나오고 점 4, 8분음표도 쓰인다. 임시 조표도 나오고 당김음(등배 운동), 스타카토(당연히 뜀뛰기에서), 셋잇단음표(전주에서)도 한 번씩 나온다.

템포 변화가 잦은 편이다. 가령, 전주에서는 ♩=108가량이지만, 체조가 시작되고부터는 ♩=88 정도로 느려진다. 뜀뛰기에서는 ♩=112~120 정도로 평소보다 25% 이상 템포가 빨라지다가, 마지막 숨쉬기에서는 ♩=60~70대까지 떨어진다.
모든 체조를 한 번씩만 했을 때(뜀뛰기 후 다시 처음으로 돌아가는 게 아니라 팔다리 운동으로 진입) 전주에서부터 숨쉬기 끝까지 음악의 러닝 타임은 우연의 일치인지 딱 2분 30초가 나왔던 걸로 기억한다. 이런 것도 다 계산해서 작곡한 건지? 처음으로 한번 되돌아가서 풀 세트로 하면 4분 50초 정도 걸린다.

참고로, 국민체조의 BGM 말고 체조 동작 자체를 고안하고 구령을 녹음한 사람은 당연히 음악인이 아닌 체육인이다. 전 경희대 교수인 유 근림 씨로 알려져 있다.

3. MBC 창작 동요제

이제 분위기를 바꿔서 오랜만에 동요 얘기를 좀 꺼내 보겠다.
<새싹들이다>. 1983년 제1회 MBC 창작 동요제 대상 수상작인 것, 작사 작곡자가 '좌'씨인 건 알고 있었는데, 제주도민의 작품인 건 처음 알았다. 전문적인 음악가가 아니라 현직 교사의 작품이다.
저 애도 참 목소리 예쁘고 노래 잘 부른다. 1972년생 정도일 텐데 지금은 어디서 뭘 하고 있을까?

개인적으로 저거랑 제일 비슷한 풍의 다른 곡은 <어린이 노래>(하늘 향해 두 팔 벌린 나무들 같이..)라고 생각하는데, 그래도 그거보다 더 나중에 작곡된 <새싹들이다>가 더 훨씬 더 밝고 명랑한 분위기이다.
미디, 신시사이저, 컴퓨터 반주 같은 일체의 디지털스러운 흔적 없이, 완전 클래식으로 오케스트라 꾸며서 반주하는 것도 지금 보니 굉~장히 인상적이다. 영상에다 비유하면 CG 없는 아날로그 특수효과만으로 구성됐다는 뜻이다.

이거 다음 1984년도 대상 수상작인 <노을>은... 나 초딩 시절, 컴퓨터 학원에서 GWBASIC 배우던 시절에 들은 적이 있다.
그 당시 매주 금요일은 학원에서 다른 수업이 없고 그냥 원장님이 만든 음악 재생 프로그램을 있는 그대로 쳐서 실행되는 거 검사만 받고 나면 오락(게임)을 할 수 있었다.
그때 입력해서 들었던 곡 두 개가 지금까지 기억에 남아 있는 게 하나는 MBC 드라마 <질투> 오프닝이랑, 알고 보니 노을이었다.
다시 말해 난 저 두 곡은 텔레비전에서 처음 들은 게 아니라 PLAY문 코드를 통해서 PC 스피커로 난생 처음으로 들었다.

MBC 창작 동요제는 의외로 오래, 2010년 20몇 회차까지 계속되긴 했다. 그러나 얘는 그 성격상 순수성이 오래 유지되기가 도저히 어려웠다.
21세기부터는 출품되는 곡이 점점 더 동요답지 않게 기교가 심해지고 가요풍으로 바뀌고, 출연하는 애들의 의상만 쓸데없이 고퀄로 올라가고, 후원 협찬 줄어드는 등.. 여러 악재가 겹치면서 2010년대에 들어와서는 폐지됐다. 어찌 보면 미스코리아와 비슷한 과정을 거치며 위상이 추락했다.

Posted by 사무엘

2017/10/01 08:32 2017/10/01 08:32
,
Response
No Trackback , a comment
RSS :
http://moogi.new21.org/tc/rss/response/1411

1. 화생방

공중이나 바다가 아닌 평범한 육상 재래전 전쟁터에서 군인을 가장 많이 죽이는 것은 폭발물 파편이다. 근원지가 수류탄이든 지뢰이든 포격이든 폭격이든, 어쨌든 날아가서 박히기만 하는 게 아니라 터져서 넓은 면적에 파편을 날리는 폭탄이 짱이다. 단순 총알은 파괴 면적이 너무 작은 관계로, 저격이 아니라면 그 자체가 사람을 죽이는 경우는 흔치 않다.

그래도 총은 여전히 군인의 상징이며, 소총 사격은 화망을 형성해서 아군을 엄호하거나 적군을 움직이지 못하게 하는 역할을 충분히 한다. 당장 kill 수를 많이 못 낸다고 해서 개인화기가 일체의 쓸모나 필요가 없는 건 결코 아니다. 지금 세계가 명목상 교류와 평화를 추구하고 옛날 같은 제국주의 침략 전쟁을 지향하지는 않는 시대가 됐다고 해서, 군사력 자체가 당장 필요하지 않게 된 건 절대 아니듯이 말이다.

그런데, 전쟁터에서 사람을 죽게 하는 방법은 폭탄이나 총알, 심지어 총검을 이용한 물리적인 충격만 있는 게 아니다. 파리를 굳이 손바닥이나 파리채로 쳐서 잡는 게 아니라 에프킬라를 뿌려서 잡듯, 방탄조끼나 헬멧이 아니라 방독면으로 방어해야 하는 방식의 전투도 있다. 이를 특별히 '화생방전'이라고 한다. 이건 공격 수단들의 근간 원리에서 각각 첫 글자를 딴 명칭인데, 마치 군사의 육해공처럼, 물리 화학 생물이라는 과학의 세 분야를 두루 아우르는 용어이기도 하다.

단, 보다시피 '물화생'은 아니고 '화생방'이다. 물리는 분야가 너무 넓어서 그런 것 같다. 과학의 각 분야에 대응하는 공학을 생각해 봐도 화학공학, 생명공학은 있지만 물리공학이라는 말은 없으니 말이다. 그 대신 기계공학, 전자공학, 원자력공학, 항공우주공학 등이 있을 뿐이지.
스타에서 테란의 물리학 연구소는 배틀크루저의 야마토 포를 개발하는 곳인데, 물리학의 어느 분야를 주로 연구하는지가 문득 궁금해진다.

스타에도 응당 화생방에 해당하는 개념이 있다. 디파일러의 플레이그가 생물에 해당하고, 베슬의 이레디는 방사능에 속한다.
원래는 고스트의 핵도 방사능이어야 하지만, 설정과 밸런스 문제 때문에 게임엔 반영 안 됐고 그냥 크고 무시무시한 폭탄이라고 구현돼 있다.
화학은 잘 모르겠다. 스타에 딱히 독가스 같은 게 등장하지는 않으니까.. 단지, 광범위 대량학살용으로는 독가스보다 더 고차원적인 프로토스의 싸이오닉 스톰이 존재할 뿐이다.

난 태어나서 화생방(전)이라는 단어를 처음 본 곳은 아마 초딩 시절 전화번호부 끝부분 부록에 적혀 있던 '전시 국민 행동 요령'이었지 싶다.
성경에도 계시록뿐만 아니라 슥 14:12처럼 사람이 산 채로 눈과 살과 혀가 녹아/썩어 없어지는 묘사는 뭔가 화생방전을 떠올리는 섬뜩한 장면으로 보인다.

2. 전쟁의 주요 양상

  • 고지전: 나로서는 이거 뭐 6· 25 말고는 다른 고지전 자체가 떠오르는 게 존재하지 않는다. 한반도 중부의 서쪽은 평지 위주였지만 우리에게 지형적으로 불리하고 판문점도 가까이 있어서 제대로 싸울 수 없었던 반면, 동부의 첩첩산중에서는 고개를 하나 점령해서 조금이라도 영토를 더 수복하려고 치열한 전투가 벌어졌으니 말이다.
  • 참호전: 1차 세계 대전 당첨이다. 여차여차 하다 보니 서로 평지에서 땅따먹기를 한 뒤, 참호 파고 지겹도록 시즈 탱크 우주 방어만 벌이는 지경이 벌어졌다. 무슨 FPS에서 캠핑처럼.. 공격이 방어보다 너무 불리하다 보니, 참호 하나 점령하려고 갈려 들어간 병사들이 그 당시에 얼마였나 모르겠다. 그 교착 상태를 해소하려던 와중에 원시적인 탱크와 전투기가 발명됐고 독가스도 동원됐다.
  • 상륙전: 바다에서 육지로 상륙하면서 섬을 하나씩 점령하는 형태의 전투는 2차 세계 대전 중에서 태평양 전선이 대표적이다. 전쟁의 규모가 커지다 보니 미군 해병대의 비중이 본격적으로 커졌다. 뭐, 거기 말고도 본토 진출을 위해서 서부 전선의 노르망디 상륙이 있고 나중에 6· 25 때 인천 상륙도 전쟁사의 한 획을 그었지만..

오늘날은 세상에 고층 건물이 즐비한 대도시가 많기 때문에 전쟁이 나면 '시가전'의 비중이 커질 것이다.
만약 북괴가 다시 남침해서 서울로 쳐들어온다 해도, 2017년의 서울은 1950년 당시의 그 허접한 서울이 절대 아니다. 그때와는 비교도 할 수 없이 복잡하고 빽빽해진 건물숲 속에서 시가전을 제대로 치러야 할 것이며, 그렇게 호락호락 사흘 만에 서울 점령이란 절대 가능하지 않을 것이다.

하지만 역사 속의 전쟁 중에 시가전으로서 내가 딱 떠오르는 건 없다. 그리고 2차 대전은 동부(vs 러시아)나 태평양 전선(vs 일본..) 말고 서부 전선에 대해서는 내가 딱히 기억이나 존재감이 느껴지는 게 없다.

3. 탄피 처리

공기총 같은 거 말고 화약으로 격발하는 총들은 탄두와 화약이 탄피로 감싸져 있는 탄환을 사용한다. 음식을 먹고 나면 그릇이 남고 커피를 마시고 나면 컵이 남듯, 총을 쏘고 나면 탄피 껍데기만 남아서 사출된다.
탄피 부분까지 싹 폭발해서 없어지거나, 아니면 같이 발사되어 날아가는 총알이 있다면, 마치 손잡이 부분까지 몽땅 과자로 돼 있어서 다 먹어치울 수 있는 길거리 아이스크림 콘만큼이나 참 좋을 것이다. 하지만 총알을 그렇게 만들었다간 화약 부분이 평소에는 어지간히 열받아도 절대로 폭발하지 않고 안전하게 있다가 원하는 순간에만 격발하게 만들기가 도저히 불가능하다. (실용적인 가성비 수준에서..)

탄피 처리라는 게 군대에서 골치아픈 일이긴 하지만.. 그래도 얘는 여러가지 이유로 인해 가능한 한 몽땅 회수해서 재활용하는 것이 바람직하다. 환경 보호(?)나 물자 절약 따위 말고 좀 더 social한 이유로는..
평시에는 탄약의 무단 유출을 감지하고 자살· 프래깅 같은 부정 사용을 예방하기 위해서이다. 총을 몇 발 쐈는지 알고 싶을 때 탄피 개수를 세는 것만치 단순무식하고 효과적이면서도 정확한 방법이 없기 때문이다.

전시에야 적에게 총 쏘는 게 병사들의 재량 영역이 되며, 수십· 수백 발의 총알이 순식간에 없어진다. 그러니 실탄 사용 내역을 평시만치 일일이 파악하고 통제하면서 탄피를 챙길 여유가 없다. 그 대신, 적군에게 아군의 위치 내지 이동 경로를 노출하지 않기 위해 흔적을 치우는 과정에서 탄피도 눈에 띄는 것 정도는 다 줍고 치운다.
그리고 전투가 끝나고 병사들이 병영으로 복귀한 뒤에는 모든 병사들을 일일이 정말 빡세게 몸수색을 해서 잔여 실탄을 몰래 짱박아 둔 게 절대 없도록 조치를 취한다고 한다. 1996년 강릉 무장공비 토벌 작전이 끝났을 때에도 이런 후처리 절차가 응당 행해졌다고 한다.

4. 심폐소생술과 인공호흡

사람을 죽이는 전쟁 얘기를 했으니 다음으로는 사람 살리는 얘기로 넘어가 보겠다.
멀쩡하던 사람이 어디로 추락하거나 뭘 맞거나 부딪치지 않았는데 외상 없이 의식을 잃고 픽 쓰러지는 건 아무래도 흔히 보는 장면은 아니다. 신경계나 뇌 쪽의 문제로 인해 몸이 셧다운 된 게 아니라면 저런 건 대체로 (1) 호흡기 아니면 (2) 순환기에 문제가 생겼기 때문이다.

목에 생선 가시 같은 게 걸려서 숨을 못 쉬고 쓰러지는 건 기도 폐쇄로 인한 질식이니 (1)번 계열이다. 본인이나 어린 자녀가 갑자기 이런 상황에 처했을 때 대처하는 방법을 뒤늦게 네이버에서 검색하려 든다면 너무 늦을 것이다. 평소에 숙지해 둬야지.
그리고 물에 빠진 건 숨을 못 쉰 질식에다 폐에 물이 들어간 것까지 복합이다.

호흡과 무관한 순환 계통 문제는 부정맥 같은 심장의 지병 때문이다. 그런데 혈액 순환이 잠시만 중단돼도 어차피 호흡기 문제와 마찬가지로 뇌에 산소가 제대로 못 가게 되고, 뇌세포가 죽기 시작해서 몸에는 심각한 트러블이 발생한다.
물에 빠져서 질식으로 인해 의식을 잃어 가는 거나, 심장 박동이 중단되어 쓰러진 거나 원인은 다르지만 결과는 비슷하며, 단 몇 분간의 golden time 이내에 최소한의 적절한 조치가 취해져야 하는 건 동일하다.

이거 하냐 못 하냐에 따라 사람이 사냐 죽느냐, 혹은 살더라도 온전히 살아나냐 반신불수가 되느냐가 갈린다. 그래서 소위 '심폐소생술'(CPR)이라 하는 기법이 도입되고 대대적으로 홍보되고 있다.
누군가가 쓰러지면 먼저 "괜찮으세요?" 물어 보고, 의식이 없으면 주변 사람을 지목해서 "왼쪽 저 여자분은 당장 119에 신고해 주세요, 저기 흰 옷 입으신 분은 근처의 심장 제세동기를 가져와 주세요" 지시를 한다. 그 뒤 CPR 실시다.

심폐소생술은 배터리가 방전된 차를 시동이 걸릴 때까지만 밀어 주는 게 아니다. 의료진이 와서 환자를 인계할 때까지 시술자의 손으로 심장의 역할을 얼추 대신하는 거라고 생각하고 가슴을 눌러야 한다. 하다못해 사람이 수 분 동안 숨을 참으면 참았지, 심장 박동이 그만치 멈춰 버리면 어찌 되겠는가?
약한 갈비뼈는 부러뜨리는 것도 감수한다는 심정으로 굉장히 세게, 분당 110~120회 남짓한 주기로 생각보다 빠르게, 오래 해야 한다.. 이건 수~10수 분 간격으로 옆 사람과 주기적으로 교대도 해야 할 정도로 꽤 힘든 노동이다.

전문적인 의료· 보건인이라면 몇 차례의 CPR 후 환자 상태를 봐서 인공호흡을 재량껏 시도할 수도 있으나, 일반인을 상대로 한 매뉴얼에서는 그런 건 물에 빠진 가족을 구한 정도가 아니면 안 해도 된다고 진작에 빠졌다. 환자가 독극물에 중독돼 있는 경우 구강 접촉은 시술자도 위험에 빠뜨릴 수 있거니와, 명백한 호흡기 쪽 이상이 아니라면 심장 압박만 잘 해 줘도 산소 전달은 그럭저럭 된다고 여겨지기 때문이다. CPR이 그만큼 더욱 중요하다고 보는 셈이다.

CPR과 인공호흡은 의식을 잃은 사람을 구명하는 양대 조치로 여겨지고 있는데, 취지와 목적과 효과가 이렇게 서로 차이가 있다는 점이 개인적으로 와 닿았다. 호흡과 혈액 순환의 관계에 대해서도 이 기회에 다시 한번 생각하게 되었다.
참고로 사람의 목을 졸라 죽이는 교수형도 흔히 생각하는 호흡의 차단이 아니라, 그에 앞서 뇌로 가는 혈류를 막아서 훨씬 더 신속하게 사형수를 죽이는 것이 목적이다. 물론 집행을 잘못하면 여전히 켁켁거리면서 더 고통스럽게 죽게 될 수도 있다.

5. 보건의료인과 군대의 관계

아군을 살리는 일은 적군을 죽이는 일 이상으로 매우 중요하고 어렵고 책임감이 큰 스킬이다. 그렇기 때문에 저 스킬의 보유자는 어떤 형태로든 소총 들고 전장에서 뛰어나니는 알보병 소총수 같은 보직에는 결코 투입되지 않는다. 그 대신,

  • 군 소속의 의사가 돼서 장교 계급으로 병역을 수행하는 방법이 있다.
  • 아니면 군대와는 빠이빠이 하고 그냥 공중보건의 신분으로 스킬의 난이도 대비 굉장한 저임금과 널널함으로 병역을 수행할 수도 있다.
  • 보건의료 계열 출신이긴 하지만 정식 의사보다 낮은 급이거나(물리치료사..) 미묘하게 다른 계열이라면(의공, 수의학 등등..) 의무병으로 빠질 수 있다. 위생병은 의무병의 옛 명칭 되겠다.

단,

  • 공보의로 병역을 마친 의사들은 여느 보충역들처럼 명목상 예비역 이등병이며, 예비군 훈련을 받는다. 의사들은 직장인(봉직) 내지 자영업자(개원)이지, 무슨 보건소 직원 같은 처지가 아니기 때문이다. 군· 경이나 교사, 소방관만치 전시 보직이 국가 차원에서 완전히 동일하게 보장되지 않는다.
  • 의사라도 극소수 만학도 의대생이나 의전 출신처럼 군대를 다른 경로로 이미 다녀온 사람이 예외적으로 있다. 이들은 여느 의사들 같은 공보의나 군의관 복무 경험이 있지 않다.

6. 주유와 충전의 차이

우리 주변에서 볼 수 있는 대부분의 기계들은 동력의 원천이 기름 먹는 (1) 내연기관이 아니면 전기 먹는 (2) 모터이다.
에너지 공급이라는 관점에서 봤을 때, 주유는 사람에다 비유하면 식량을 그냥 가방이나 창고에 넣고 비축하는 것과 같다. 그러니 아무리 많은 양도 비축이 금방 끝날 뿐만 아니라, 공간이 허락하는 한 얼마든지 해도 문제 없다.
그러나 충전은 실제로 사람 몸에다 밥을 먹이는 것과 얼추 비슷하다. 그렇기 때문에 시간이 엄청 오래 걸리며, 인간이 소화하고 비축할 수 있는 양만큼만 가능하다.

전기는 에너지 그 자체이다. 배터리의 전기가 소모될 때 발생하는 화학 메커니즘을 역방향으로 가해 줘야 충전이 된다. 세상엔 공짜란 없으니 말이다. 충전 아니면 방전, 그리고 전동기 아니면 발전기.. 전기는 이렇게 상호 가역적인 에너지 이동 메커니즘이 있는 게 신기하다. 마치 생물에서 광합성 아니면 세포호흡이 있는 것처럼 말이다.

다만, 사람이 손으로 수동 발전기를 죽어라고 돌려 가지고 그 알량한 전기로 할 수 있는 일은 정말 얼마 없다. 결국 기계가 필요하다.
반대로, 아무리 힘이 넘쳐나도 배터리가 견딜 수 없을 정도의 과다한 에너지가 짧은 시간 동안 가해지면 배터리가 터진다. 충전 시간을 무슨 주유 시간마냥 획기적으로 단축시킬 수 없는 이유가 이 때문이다.

사람은 오랫동안 굶은 상태에서 갑자기 기름진 음식을 막 먹으면 몸에 큰 탈이 나고 심하면 그걸로 죽기까지 한다. 그것처럼 배터리도 무슨 탱크 안에 잘 밀폐· 보관돼 있는 석유처럼 stable한 물건이 아니다. 완충과 완방 반복 시의 내부 상태 변화, 충전 가능 용량의 감소, 너무 추운 환경에서의 자연 방전처럼 까탈스러운 변수들이 존재한다. (아 하긴, 석유조차도 휘발유 같은 건 생각만치 오래 보관 가능하지 않으며, 증발과 변질 때문에 몇 년밖에 못 간다고는 하더라..)

이런 전기와는 달리, 석유는 그 자체는 에너지가 아니라 평범한 액체일 뿐이다. 엔진이 돌아가야만 그제서야 석유가 연소와 폭발을 통해 에너지로 바뀐다. 엔진은 연료의 공급과 비축이 신속하고 간편하고 안정된 반면, 그 엔진을 최초로 돌리기 위해서는 전기 같은 외부 에너지 공급이 필요하다는 한계가 있다. 관계가 이렇게 설명된다.

순수 전기차가 배터리의 용량과 무게· 가격 문제 때문에 도저히 실용화가 못 되고 소형차 수준에 머물러 있는 건, 과거에 브라운관이 화면 크기에 비례해서 급격히 두꺼워지고 무거워지는 것 때문에 30인치대 이상의 대형화는 도저히 엄두를 못 냈던 한계를 보는 것 같다. 요즘의 왕창 크고 넓으면서 두께는 왕창 얇은 텔레비전과 얼마나 비교되는가?

과거에는 전기 자동차는 소형차보다도 더 작은 경차 수준에 머물다가 그나마 기술이 발전해서 이젠 소형이나 준중형 승용차까지는 노리는 모양이다. 하지만 대형 버스나 트레일러가 순수 전기만으로 지금처럼 힘차게 달리는 것은 요원한 일이다. 전기차는 자체 동력은 말할 것도 없고 지금까지 엔진의 힘과 열의 도움을 받아 자연스럽게 얻던 냉난방마저 추가로 자력으로 해결해야 하니 그 부담이 이만저만이 아닐 것이다.

획기적인 배터리나 무선 송전 기술이 개발되지 않는 한, 전기차는 대형차· 군용차까지 몽땅 대체하지는 못하고 그냥 개인용 자가용 수준에 머무르면서 기름 자동차와 공존할 가능성이 높아 보인다. 철도에서는 전기 기관차가 대형차 영역인 여객과 화물 수송에서 그야말로 디젤이 넘보지 못하는 차력쇼를 선보이고 있는 것과 무척 대조적이다. 다만, 아직까지는 부피 당 에너지 축적 능력 면에서 석유를 능가하는 원천은 없는 듯하다.

참고로 하이브리드 차는 엔진이 어중간하게 크고 무거워지고 비싸지기 때문에 경차나 소형 승용차에서는 수지가 맞지 않고, 심지어 이미 더 크고 무겁고 복잡한 디젤과도 그리 궁합이 안 좋다. 승용차 중에서 최하 준중형 이상은 가야 하고, 적당히 비싸면서 가성비도 챙긴 쏘나타-그랜저급 승용차가 하이브리드를 얹기 제일 적당하다.
하지만 아예 최고급 기함급 대형 승용차는 오로지 성능만 추구한다거나 돈이 썩어나는 부자들만 공략하는 너무 고매한 컨셉이어서 그런지, 휘발유 말고 다른 동력원을 얹은 사례가 없다. (에쿠스 디젤이나 롤스로이스 하이브리드 같은 건.. ㅡ,.ㅡ;;)

* 이상, 위의 모든 아이템들은 민방위 교육 가서 떠올랐던 생각과 글감들이다~
그러고 보니 육군 대령이나 준장급은 예편한 뒤에 예비군 내지 민방위의 안보 강사로 종종 빠지는 것 같고, 대위· 소령급은 예편 후에 군무원으로 취직해서 예비군 동대장으로 들어가는 것 같다.

Posted by 사무엘

2017/09/28 08:34 2017/09/28 08:34
, , , , , , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1410

지난 8~9월의 짤막한 활동 일지

1. 뚝섬 한강 공원에서의 외박

무더위가 기승을 부리던 어느 여름 밤엔, 아예 돗자리와 노트북 PC, 밤참 간식거리를 몽땅 싸들고 자전거를 몰고 여기서 외박을 했다. 여기는 아무래도 집 근처보다는 확실히 더 시원했고 그럭저럭 견딜 만했다. 이것도 지금 다시 회상해 보니 재미있는 추억거리이다.

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

돗자리가 아니라 풀밭에다 아예 텐트를 친 사람들도 있었다. 나도 1인용 작은 텐트라도 하나 장만하고 싶다는 생각이 들었다.
글쎄, 너무 작은 건 침낭이나 영현빽(..!!) 같은 느낌도 들긴 한다만.. 하긴, 잠도 생물학적으로는 일시적인 죽음이긴 하지.

2. 경기화학선의 흔적 추가 답사

본인은 2년 전에 오류동 역에서 분기해 나가는 전설의 지선 철도이던 경기화학선 폐선 부지를 답사한 적이 있었다.
그 뒤 근래에는 거기보다 더 남부인 부천 옥길동 일대에서 같은 선로가 이어지는 곳을 추가로 답사했다. (☞ 예전 글) 거기에 일종의 선로 분기점이 있기 때문이다.

한 선로는 진짜 경기화학 공장 내부의 역(명목상)으로 들어갔고, 다른 하나는 시흥시 방면으로 10여 km 남짓 더 경기 자동차 과학 고등학교 근처까지 내려가서는 군부대에 도달했다. (제3 군수 지원 사령부 소속의 모 부대임)
그리고 이 분기점 일대는 마치 그린벨트처럼 자연의 정취가 살아 있는 곳이며, 이런 기막힌 위치에 '은빛 전원 교회'라는 예배당도 있었다.

본인은 이런 지리 여건에 깊은 흥미를 느끼게 됐다. 그리고 여기도 싹 다 개발되고 아파트가 지어질 거라는 소리에 하루 날잡아서 현장으로 달려갔는데..

사용자 삽입 이미지

도착한 순간 내 눈을 의심했다. 일단 은빛 전원 교회부터가 건물이 통째로 흔적도 없이 싹 철거되어 사라져 있었다. 몇 달쯤 전의 일이고 이 교회 예배당은 딴 데로 이사를 갔다고 한다.

사용자 삽입 이미지

지도상으로 경기화학 공장 공터의 화물 하역장인 곳에도 그런 거 없다. 공장 방면 선로는 흔적도 없이 사라졌으며, 도로를 만들려는지 터가 닦이고 있었다. 아아...;;

사용자 삽입 이미지

이게 군부대 방면 선로와 공장 방면 선로가 분기하는 지점이다. 인터넷 지도 로드뷰 내지, 이곳을 나보다 먼저 다녀간 사람들의 사진 기록과 대비해 봐도, 선로 상태는 더 안 좋아졌으며 잡초는 더욱 무성해져 있었다. 오른쪽이 공장 방면인데, 선로가 저걸로 끝이다.

사용자 삽입 이미지

그나마 군부대 방면으로 내려가는 선로도 지금 내가 있는 곳에서는 이 이상 더 접근을 사실상 할 수 없다. 다른 곳에서 또 선로의 흔적을 추적해야 한다.
여기는 그래도 간간이 군용 화물을 실은 열차가 오간다고도 들었는데, 지금은 전혀 그런 상태가 아니었다. 열차가 다닐 수 있는 상태가 아니며 수인선 폐선 부지와 별 다를 바 없다. 그나마 이런 상태의 선로를 볼 수 있는 나날도 얼마 안 남았고 조만간 다 없어질 것 같다.

재작년에는 본인은 이천에 가서 수려선 오천 역 역사로 쓰였던 옛 폐건물을 답사하고 촬영하고 오기도 했다. 그때는 정말 운이 좋았다. 그 건물 역시 주변 지역의 재개발로 인해 철거하네 마네 하던 상황이었는데, 내가 다녀간 뒤 거의 정확히 한 달 뒤에 실제로 철거되어 버렸기 때문이다.
하지만 경기화학선 분기점 주변은 내가 한 발 늦었다. better late than never 차원에서 지금 같은 사진을 건진 거라도 다행으로 여겨야겠지만, 상태가 더 좋던 시절의 모습을 직접 확인하지 못한 것이 아쉬움으로 남는다.

3. 도산 공원· 도산 안 창호 기념관

서울 강북에는 지리학자 김 정호를 기리는 명칭인 '고산자로'라는 도로가 있다. 그런데 강남 압구정 일대에는 '도산대로'라는 도로도 있는 것을 언젠가 버스 차창 밖으로 어렴풋이 봤다.
도산? 검색해 보니 안 창호의 호를 가리키는 게 맞았다. 게다가 이분의 묘지와 기념관까지 이 서울 강남 한복판에 있다고 한다. 그런데도 이건 신사동 가로수길에 비해 굉장히 인지도가 없고 너무 생소하게 들렸다.

이런 곳이 있다는 제보를 입수한 본인은 도산 공원을 다녀왔다. 하긴, 근처의 전철역들과는 1km 가까이 골고루 어설프게 멀리 떨어져 있긴 하더라.

사용자 삽입 이미지

안 창호는 순국 후에 처음에는 망우리 공동묘지에 묻혔다. 그러나 1970년대 초에 박통이 무슨 필이 꽂혔는지 안 창호에 대한 대대적인 재평가와 승격을 지시했으며, 1971년에는 이 부지에 기념관과 근린공원의 건립을 지시하고 묘지도 이곳으로 옮겼다고 한다. 잘은 모르지만 안 창호는 우리가 흔히 생각하는 것보다 굉장히 대단한 인물이며, 미국에도 이 사람을 기리는 이름이 붙은 도로 내지 건물이 남아 있다고 한다.

그래서 여기는 안 창호가 실제로 활동하고 지낸 곳은 아니지만 어쨌든 강남 금싸라기 땅을 당당히 점유하고 있는 공원과 기념관이 됐다. 시설이 완공되고 개장한 때는 1973년. 건설 당시에는 여기 주변은 지금으로서는 도저히 믿을 수 없는 황량한 허허벌판이었다.
안 창호 기념관은 1988년에 더 남쪽에 개장한 윤 봉길 의사 기념관보다도 건립 시기가 훨씬 더 이르다. 하긴, 윤 의사 기념관 역시 당사자의 고향이나 거처와는 무관한 곳에 있긴 하다.

나중에 이 홈페이지에 정식으로 여행기가 올라오겠지만, 본인은 다산 정 약용 선생의 묘지와 기념관도 다녀왔다. 왠지 안 창호와 비슷한 성향의 인물인 것 같다는 느낌이 들지 않는가?
이건 당사자의 출생지인 물 좋은 남양주 두물머리 시골 마을에 있기 때문에 부지가 훨씬 더 넓으며, 반쯤 강변 유원지 + 테마파크의 형태를 하고 있다. 어떤 인물을 기리는 공간을 이렇게 교외에 거창하게 만들지, 아니면 소박하지만 접근하기 아주 편한 인서울에 만들지.. 이건 제각기 장단점이 있어 보인다.

사용자 삽입 이미지

공원 안은 이렇게 온통 나무들로 울창해서 직사광선이 바로 내리쬐는 곳이 거의 없었다. 중간 중간 운동 기구와 의자, 정자도 있었으며..

사용자 삽입 이미지

공원의 중간에는 안 창호 선생의 동상도 커다랗게 놓여 있었다.

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

  • "청년이 죽으면 민족이 죽는다."
  • "나 하나를 건전한 인격으로 만드는 것이 우리 민족을 건전하게 만드는 유일한 길이다."
  • "우리 중에 인물이 없는 것은 인물이 되려고 마음먹고 힘쓰는 사람이 없기 때문이다."

안 창호는 사상 세계가 굉장히 심오했으며, 남 탓 사회 탓 정치인 탓 외세 탓이 아니라 "문제의 원인은 가장 먼저 나 자신 개인에게서"를 통한 의식 개조를 주장했다.

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

안 창호 기념관은 한 층의 넓은 방 한 칸에 이런 분위기로 사진과 유품이 전시돼 있는 정도였다. 정 약용 기념관보다는 훨씬 더 조촐하다. 이분에 대해서는 보통 콧수염 난 미중년 아저씨의 모습으로만 기억하는데, 생애에 마지막으로 찍힌 사진으로 여겨지는 1937년 서대문 형무소 수감 사진에서는 수염이 더부룩하고 젊은 시절보다 다소 초췌해져 있다.

"나는 밥을 먹어도 대한의 독립을 위해, 잠을 자도 대한의 독립을 위해서 해 왔다. 이것은 내 목숨이 없어질 때까지 변함이 없을 것이다."는 김 구로 치면 '나의 소원'과 같은 급의 발언인데.. 안 창호는 같은 말을 그래도 훨씬 더 실천주의적으로 멋있게 했다.
또한 그는 독실한 크리스천이기도 했으니, 아마 고전 10:31을 염두에 두고 저런 말을 했을 수도 있다. (먹든지 마시든지 모든 행동을 하나님의 영광을 위해서... vs 대한 독립을 위해서..)

이 정도 구경을 했다.

4. 우이 경전철

그리고 지난 2017년 9월 2일엔.. 드디어 서울에서도 경전철 시대가 개막됐다.
어디 먼 곳이 아니라 서울 시내에, 그것도 서울 지하철 최초의 환승역인 그 낡은 신설동 역을 기점으로 신분당선처럼 전방이 보이는 무인 운전 전철이 새로 개통하다니 느낌이 대단히 새롭다. 1974년에 최초로 생긴 역과 2017년에 새로 생긴 역이 이렇게 한데 연결됐으니 말이다.

사용자 삽입 이미지

물론, 역들의 건설 시기가 너무 차이가 나는 만큼, 분당선 왕십리 역은 아무래도 북쪽으로 더 이어질 가능성이 없으며, 우이 경전철 신설동 역은 남쪽으로 더 내려갈 가능성이 없다. 신설동에서 경전철과 2호선 성수 지선 사이의 환승은 내가 직접 해 보니 굉장한 막장 환승인 것을 감안해야겠다.

열차의 구동음은 서울 지하철 2호선 신형 전동차와 다를 바 없이 동일하다. 다만, 차량 편성은 듣던 대로 겨우 2량이다. 승강장이 정말 짧긴 하더라.
인구 수에 비해 전철 수가 너무 부족하던(4호선이 유일) 성북구 일대가 이 전철의 혜택을 많이 입겠다. 또한 130번 같은 시내버스가 타격을 입을지도 모르겠다.

도봉산에 이어 북한산도 궤도 교통수단으로 가는 날이 오다니 감개무량하다. 산으로 가는 전철답게 노선색도 산뜻한 연두색이다.

Posted by 사무엘

2017/09/25 08:37 2017/09/25 08:37
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1409

유리 안전 이야기

* 2010년에 썼던 글을 리메이크 한 것이다.

일상생활에서 유리는 뭔가를 담는 병이나 그릇, 컵의 재료로 쓰이고 안경과 렌즈를 만드는 데 쓰이며, 각종 교통수단이나 건물에서 창문의 재료로도 쓰이는 요긴한 물질이다. 사실, 유리를 빼면 투명한 고체 자체가 주변에 의외로 흔하지 않다. 플라스틱, 얼음, 보석 말고는 뭐 떠오르는 게 없는 것 같다.

유리는 목재나 플라스틱과는 달리 열에 강한 편이며, 불탈 때 유독가스가 발생하지 않는다.
성냥을 갖다 대면 바로 불이 붙을 정도로 수백 도로 달궈진 유리 막대도, 차가운 유리와 외형상 전혀 차이가 안 보이기 때문에 취급에 절대 주의해야 한다고 과학 실험실 안전 수칙에 언급되어 있을 정도이다.

유리는 금속과는 달리 녹이 슬지 않으며, 염산이나 황산, 왕수 같은 위험한 강산 약품을 담을 수도 있다. 매우 편리한 점이 아닐 수 없다. (뭐, 플루오르 같은 변태 독극물은 유리조차 녹이기 때문에 다른 플라스틱 병에다 담는다지만..)
또한, 유리는 도자기와 더불어 전자레인지에 넣기에 가장 적합한 용기 재료이기도 하다. 종이나 나무 그릇은 용기도 손상될 수 있기 때문에 안 되고, 금속 그릇은 전자파를 반사하기 때문이다.

그런데 이런 유리도 단점이 있으니, 조금만 충격을 받아도 잘 깨진다는 것이다. 깨질 때 꽤 경쾌한-_- 소리가 나기 때문에 이말년 작가께서 이 소리를 만화에서 자주 써먹곤 했다.
그리고 그 깨진 유리 조각은 굉장히 날카롭고 위험하다. 길바닥에 이런 게 널브러져 있으면 사람이 다치기 쉬운 건 말할 것도 없고 자동차나 자전거의 타이어를 펑크 내기도 딱 좋다. 이런 조각들은 쓰레기로 배출· 수거하기도 힘들다.

말이 나왔으니 말인데, 사람이 자기 신체로 유리를 직접 파괴하는 건 대단히 위험한 짓이다. 그렇기 때문에 어떤 경우에라도 절대로 하지 말아야 한다. 교통사고나 화재로 인해 건물이나 교통수단으로부터 긴급히 탈출해야 할 때라도, 더 무겁고 단단한 다른 물건(망치, 소화기 등)으로 유리를 미리 먼저 부순 뒤에 나가야지, 박치기를 해서는 안 된다.

긴급 상황이라면 차라리 이해라도 하는데, 열받았을 때 객기 부린답시고 유리창이나 거울을 맨주먹으로 쳐서 깨는 건... 완전 바보 짓 미친 짓이다. 주먹과 닿은 유리 표면이 부서지는 순간 손은 유리 조각에 찔리며, 유리를 뚫고 들어갔다가 되돌아오는 과정에서 날카로운 유리 날에 쫘악~ 베이고 긁히고 유리 조각이 박힌다. 손은 그야말로 피투성이가 되고, 잘못하면 불구가 될지도 모른다. 동맥이라도 손상됐다간, 급소를 다치지 않아도 과다 출혈로 죽는 수가 있으며, 고인은 영락없이 다윈 상 후보로 귀착되어 버린다.

유리는 총· 총소리만큼이나 영화나 게임이 현실을 제일 왜곡하고 사람들에게 잘못된 관념을 심어 주는 물건에 속한다.
액션 영화에서는 주인공이 조금만 충격을 줘도 유리로 된 문이나 창문이 정말 쉽게, 시원하게 박살나고 주인공은 아무렇지도 않지만 현실은 전혀 그렇지 않다. 영화에서 소품용으로 쓰이는 유리는 애초에 따로 있기 때문이다. 투평하고 잘 깨지고 파편이 사람에게 피해를 주지 않는 대신, 너무 약하기 때문에 애초에 건축자재로 쓰이지도 않는다.

게임에서도 마찬가지다. 우리는 현실에서는 절대로 페르시아의 왕자처럼 행동하지 말아야 한다. 묘하게도 1과 2에서 모두 이런 장면이 있다.

사용자 삽입 이미지

거울을 무려 맨발로 격파하는 왕자님. 자기 영혼(?)이 빠져나가고, HP는 1로 곤두박질친다.

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

2는 아예 시작부터가 저런 막장 설정으로..;;

좀 큰 규모의 교통사고가 나면 역시 해당 교통수단의 유리창도 박살이 나곤 한다. 과거에는 깨진 앞유리 파편들을 얼굴에 고스란히 뒤집어 쓴 자동차 운전자는 충돌로 인한 충격보다도 이것 때문에 그대로 끔살 당하곤 했다..;;
그래서 두 유리판을 셀룰로이드로 접착한 안전유리가 20세기 초에 발명되었다. 일반 유리보다 강하고 잘 깨지지 않으며, 심한 충격을 받아 깨지더라도 유리 조각들 모양으로 금만 쫙 생기지 모양은 최대한 유지되는 유리이다. 이것도 만능은 아니겠지만, 그래도 마치 방탄조끼나 헬멧만큼이나 인간의 생명을 구하는 데 큰 기여를 한 훌륭한 발명품임이 틀림없다.

VIP들이 타는 자동차에는 안전유리를 넘어 방탄유리가 쓰인다. 이건 교통사고처럼 넓은 면적에 고르게 받는 충격이 아니라, 총알처럼 한 점에 집중된 강한 충격에도 쉽게 뚫리지 않게 강화된 유리이다. 즉, 방탄복· 헬멧의 유리 버전이다.
영화 <아저씨>에서 만석이 차 안에서 이거 하나만 믿고 "이거 방탄유리라구 이 ㅂㅅ아~!"라고 깝쳤으나, 한 곳에만 집중된 권총 사격에 유리가 뚫리면서 결국 밥숟가락 놓게 됐다.

중남미 어디던가 치안이 불안한 어떤 나라에서 한인 교포가 차량용 방탄 유리 제조 업체를 운영하는데, 성능이 좋아서 현지인들에게서 인기가 좋다고 TV에서 본 기억이 있다. 길거리에서 수시로 총싸움이 벌어질 정도로 치안이 막장이다 보니 저게 보안 차원에서 수요가 있다고 그런다..
하긴, 외국 또 어디에서는 제조사 사장이 직접 차에 타고 직원이 그 차에다 소총을 갈기는 CF를 찍어서 유튜브에 올리기도 했다. 멀쩡히 살아서 나온 사장은 "이래서 우리 제품 짱"이라고 선전하고 말이다.

다만, 운동 에너지에서 m이 극단적으로 작고 v만 극단적으로 큰 총알이 아니라, 아예 쇠망치나 도끼 같은 걸로 차량 유리를 찍는다면 창 자체는 박살나거나 뚫리지 않지만 창이 통째로 차량의 필러(기둥, 지지대)에서 뜯겨져 나갈 수가 있다. 다양한 형태의 물리적인 충격에 대비하여 철통보안을 달성하려면 이래저래 신경써야 할 게 많다.

한편, 총알 방어와는 반대로, 교통사고 현장의 탈출이나 차량 내 자살자 구출 같은 이유로 차량의 유리를 인위적으로 깨야 할 때도 있다. 앞유리는 굳이 방탄이 아니더라도 앞서 얘기했던 안전을 위해 어지간한 인력만으로는 정말 지독하게 안 깨지게 설계돼 있다. 거기보다는 측면,  도어의 유리를 공략하는 게 좋다. 도어의 유리에서 모서리 쪽을 망치로 쳐 주면 그럭저럭 깰 수 있다고 한다.

끝으로, 똑같이 투명한 유리여도 그런 창문용 유리랑 아예 유리궁전 건물 외벽을 구성하는 유리는 강도와 두께가 서로 쨉이 안 된다. 이건 똑같이 벽돌처럼 생겼어도 건물 외벽 벽돌과 내부 인테리어용 벽돌이 다른 것만큼이나 다르다. 후자는 아예 겉모습만 벽돌일 뿐 애초에 돌도 아닌 플라스틱 벽돌도 있으니 말이다. 초가집이 사라진 것만큼이나 불과 몇십 년 전까지만 해도 주류였던 벽돌이 자취를 싹 감춘 게 인상적이다.

Posted by 사무엘

2017/09/22 19:32 2017/09/22 19:32
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1408

철도 회사 사이의 알력 다툼 사례

서울 지하철 중에 1, 3, 4호선은 지하철에다가 일명 국철이라고 불리는 코레일 광역전철이 한데 붙어서 직통 운행한다는 것을 다들 아실 것이다. 사실, 1호선은 지하철 구간은 매우 미미하고 압도 다수가 지상 광역전철이다. 비록 그 미미한 구간이 서울의 최고 중심부 도심이긴 하지만 말이다.

1호선은 직· 교류 절연구간이 존재하지만 그래도 지하철과 광역전철이 동시에 건설되고 개통되기라도 했다. 애초에 대한민국 정부 수립 내지 건국일(1948년)을 일부러 광복절과 동일한 8월 15일로 맞췄는데, 서울 지하철 첫 개통일(1974년)까지 거기에다 맞췄다. 그 날은 사실 서울 지하철 1호선(빨간 전동차)에다가 수도권 광역전철(파란 전동차)이 동시에 개통한 날이기도 했다. 이건 overloading이라는 단어의 적절한 예시인 것 같다.

그러나 훗날 개통한 4호선의 경우는 직결 계획이 전혀 없던 과천선을 서울 지하철과 뒤늦게 한데 연결하다 보니, 절연구간뿐만 아니라 좌측통행과 우측통행도 입체교차로 뒤바뀌는 꽈배기굴이 등장하게 됐다(남태령-선바위).
사실, 넓게 보면 1호선 지상의 노량진-대방 사이에도 꽈배기굴이 있긴 하다. 일반열차와 전동차의 선로 좌우 배치가 어느 샌가 쓱~ 바뀐다. 하지만 이건 선로를 뒤늦게 3복선화화려다 보니 주변 공간이 여의치 않아서 나중에 추가된 선로가 선형이 배배 꼬인 형태가 된 것이기 때문에 실드의 여지가 있다. 유니코드에 문자가 뒤늦게 추가되어서 코드값이 사전 순서대로 깔끔하게 배당 못 되는 것과 비슷한 현상이다.

3호선도 구파발· 지축 이북으로 일산선이 건설되기로 결정됐을 때, 철도청 구간과 지하철 구간 사이에는 꽈배기굴 시즌 2가 만들어질 뻔했다. 그러다가 감사원이 개입하여 철도청 구간도 지하철처럼 우측통행 직류로 만들라고 시정 조치를 내림으로써 이런 삽질 만행은 벌어지지 않았다. 1호선 때는 지하철이 철도를 따라 좌측통행으로 통일됐지만 이때는 광역전철이 이미 만들어진 지하철을 따라 우측통행+직류로 만들어졌다.

이렇게 일산선의 건설이 시작됐는데, 공교롭게도 이와 비슷한 시기에 서울 지하철 3호선은 6량에서 10량으로 증결 운행도 시작되었다. 그 당시 3호선의 사실상의 북쪽 종점은 구파발이었고, 그 다음 차량 기지 근처에 있던 지축은 10량 대비도 안 해 놓은 완전 초라한 단선 두단식 종착역이었다.

그런데 지축 이북으로 3호선이 일산선과 직결· 연장되니 지축 역도 10량 복선 승강장 형태로 확장하고 리모델링을 해야 하게 됐다. 그리고 이 일을 한 것은 지하철 공사가 아니라 철도청이었다..;;
이 때문에 지축 역은 지상 고가 형태이면서 섬식 승강장인 매우 드문 형태일 뿐만 아니라, 수도권 전철 전체를 통틀어서 환승역도 아닌 주제에 단일 역사와 승강장에 두 회사가 입주해서 알력싸움을 하는.. 이거 무슨 판문점 같은 역이 됐다.

사용자 삽입 이미지

선로를 3:2로 갈라서 남쪽은 지하철 구간, 북쪽은 철도청 구간..;; 양 구간에는 역명판의 글씨체도 다르고(HY울릉도 vs 초롱지하철체) 벤치의 모양도 다르다. 어느 출구로 나가느냐에 따라 승하차자 집계도 양 회사가 따로 하다가 요 몇 년 전부터 그건 그냥 코레일이 지하철에다 양보를 했다. 정말 웃긴다.

3호선은 관할 회사가 바뀌는 구간에 4호선 같은 꽈배기굴은 없지만, 이렇게 또 다른 형태의 명물이 존재하는 셈이다.
4호선의 남쪽으로 과천선은 전구간 지하이고 금정 이남의 안산선은 전구간 지상인 반면, 3호선 구파발 이북의 일산선은 단독 노선에서 지상과 지하가 꽤 섞여서 다이나믹하게 등장한다는 것도 인상적이다.

2010년쯤이던가? 3호선의 남쪽 이남 수서-오금 구간이 개통했을 때는 서울 메트로와 도철 사이의 환승역이 둘 생겼다. 바로 가락시장(8)과 오금(5)인데, 이때는 한 역에서 두 회사가 입주해서 아웅다웅 할 것 없이 한 역은 서울 메트로에게 통째로 주고, 다른 역은 도철이 통째로 맡는 식으로 운영권을 분할했던 것으로 기억한다. 어느 게 서메이고 어느 게 도철이었는지는 기억이 안 남. 옛날에는 까치산 역이 2호선 지선 구간도 서메가 아닌 도철이 모두 관할하기도 했는데 말이다.
물론 이것들은 서메와 도철이 합쳐져서 '서울 교통 공사'가 출범한 지금에 와서는 별 의미 없는 얘기가 됐다.

예전부터 도철은 모르겠고 서메는 아무래도 철도청과 한 선로에서 자주 부대끼기도 하다 보니 철도청을 상대로 갑질을 하면서 잘 요리하긴 했었다.
철도청이 운영 효율화를 위해서 1990년대 초에 1호선 지하철 서울역-청량리 구간을 철도청 일산선, 과천선, 안산선(3~4호선 전체)과 서로 교환하는 거 어떻냐고 제안했을 때도 서메에서는 "분당선도 덤으로 주면 생각해 보겠음~ ㅋ" 이딴 대답으로 협상을 사실상 결렬시켰었다. 이는 또한 서울 지하철 1호선 종로 구간이 그만치 알짜 황금노선이라는 뜻이기도 하다.

지난 2002년 2월에는 철도청의 신입사원이 선로 보수 차량을 몰다가 수원역 근처에서 신호 대기 중이던 서울 메트로 1호선 전동차를 추돌하는 사고를 냈다. 철도청은 남아도는 중고 저항 전동차 몇 량이나 적당히 보상으로 주는 걸로 퉁치려 했다. 허나, 서메에서는 피해 차량 중엔 뽑은 지 몇 년 안 된 새끈한 신차도 있구만 그에 상응하는 신형 차량으로 안 주면 보상 동의 안 하겠다고 뻗튕겨서 결국 받을 건 다 받아내기도 했다..;;

옛날에도 그랬는데 하물며 지금은 서메와 도철이 합병하여 덩치가 더 커졌으니, 서울 지하철이 코레일을 상대로 목소리를 더욱 크게 낼 수 있을 듯하다.

  • 지축: 앞서 언급했듯이 지상 '고가'로서는 드물게 섬식 승강장
  • 오리: 9호선처럼 완급 결합을 하는 것도 아닌데 지하에 매우 드물게 쌍섬식 승강장
  • 이매: 지하에 최초로 건설된 중간 추가역
  • 석계: 지상의 섬식 승강장이 따로 확장· 분리된 사례 (1호선 신도림 완행선과 유사)

참고로, 지축 역은 이런 식으로 특이할 뿐만 아니라 한글 명칭이 통상적인 한자음과 일치하지 않는다는 점도 독특하다. 한자의 표준 한자음은 '지뉴'라는 굉장히 어색한 표기이니까..
동해북부선의 제진 역도 원래는 '저(猪)진'이다. 철도역들 중에 이렇게 한글 표기가 표준 한자음과 따로 노는 사례가 더 있는지는 잘 모르겠다.

Posted by 사무엘

2017/09/20 08:32 2017/09/20 08:32
, , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1407

Windows에서 메뉴, 리스트박스, 콤보박스처럼 세부 항목이 존재하는 고전적인 UI 컨트롤에는 기본 글꼴로 문자열을 찍는 기능뿐만 아니라 임의의 크기로 임의의 그림도 그리는 owner draw 기능이 있다. 한두 개 정도 특수하게 쓰이는 owner draw 기능이라면 해당 UI 컨트롤을 구동하는 대화상자 등 부모 윈도우에서 메시지를 받아서 처리한다.

그러나 매 아이템들마다 check box가 달린 리스트라든가, 트리 계층 구조를 owner draw 기능을 이용해서 얼추 구현한 리스트처럼.. 특정 owner draw 기능과 동작을 컴포넌트화해서 여러 곳에서 동시에 사용하고 싶다면 그 UI 컨트롤 자체가 개조 대상이 된다. 윈도우 프로시저를 서브클래싱한 후, owner draw 메시지를 부모 윈도우로부터 되받아서 자신이 직접 처리하면 된다. 이건 뭐 16비트 시절부터 존재해 온 아주 고전적인 Windows 프로그래밍 테크닉이다.

owner draw는 개념적으로 모든 아이템의 크기가 동일한 owner-draw fixed와, 각각의 아이템 크기가 모두 다를 수 있는 owner-draw variable이 존재하는데, 개인적으로 후자는 전혀 다뤄 본 적이 없다.

그리고 string 버퍼를 사용하는 owner-draw가 있고(LBS_HASSTRINGS 내지 CBS_HASSTRINGS 스타일), 그런 게 없는 owner-draw도 있다. 문자열의 옆에다가 아이콘 같은 걸 추가로 그리거나 문자열 자체를 좀 색다른 색깔과 폰트로 출력하기 위해서 owner-draw를 사용하는 것이라면 전자를 선택해야 할 것이고, 그게 아니라 완전히 생판 다른 그림만을 찍거나, 자체 버퍼에 있는 문자열을 직통으로 찍으려면 후자를 선택하면 된다.
문자열 없는 owner draw 리스트박스는 일일이 LB_ADDSTRING을 호출할 필요 없이 LB_SETCOUNT만으로 간단하게 아이템 수를 뻥튀기할 수도 있다.

owner draw 컨트롤이 동작을 시작하면 아이템을 손수 직접 그리라는 WM_DRAWITEM 메시지가 오기에 앞서, 그림을 그릴 영역을 정하기 위해 WM_MEASUREITEM 메시지가 부모 윈도우로 날아온다. 그런데 여기서 꽤 재미있는 동작 특성이 있다. WM_MEASUREITEM는 DRAWITEM과는 달리, 굉장히 일찍 날아온다. 대화상자의 경우, MEASUREITEM은 WM_INITDIALOG보다도 먼저 날아온다.

WM_INITDIALOG는 대화상자 내부의 모든 컨트롤들이 생성되었고 모든 준비가 완료되어서 대화상자가 화면에 표시되기 직전에 날아온다. 그러나 MEASUREITEM은 그렇게 내부 컨트롤이 생성될 때마다, WM_CREATE 타이밍에서 자신의 스타일에 owner draw 속성이 주어져 있으면 곧장 부모 윈도우로 전달된다고 생각하면 된다. 그러니 자기 주변의 다른 대화상자 컨트롤들이 다 생성되기도 전의 굉장히 이른 타이밍에 날아온다.

대화상자 윈도우(HWND)를 그에 상응하는 C++ 개체 같은 사용자 정의 오브젝트(LPARAM)와 연결하기 위해서는 CreateDialog나 DialogBox 같은 함수에다가 연결할 그 오브젝트 포인터를 넘겨주는 편이다. 그리고 HWND와 LPARAM이 실제로 만나는 타이밍이 WM_INITDIALOG이다. 즉, 이 메시지가 대화상자계에서 WM_CREATE나 마찬가지인 셈이다.

하지만 WM_MEASUREITEM은 이런 통상적인 초기화 메커니즘이 수행되기 전에 부모 윈도우로 호출된다. 그렇기 때문에 MFC 말고 자체적인 Windows API 프레임워크를 구현하고 있다면 이 메시지의 처리를 좀 특수하게 해 줄 필요가 있다.
리스트박스나 콤보박스가 좀 지연 초기화를 지원해서 대화상자의 초기화가 다 끝나고, 자기가 WM_PAINT를 받아서 화면에 그려지기 직전(WM_DRAWITEM)처럼 정말로 폭을 알아야 할 때에나 저런 메시지를 보냈으면 사용자가 UI 프로그래밍을 하기 약간 더 수월했을 텐데 싶은 아쉬운 생각이 좀 든다.

그리고 WM_MEASUREITEM의 도착 타이밍이 너무 일러서 부담된다면, 아이템의 폭을 꼭 이때 지정해 주지 않아도 된다. 뒤늦게라도 부모 윈도우에서 LB_SETITEMHEIGHT(리스트박스), CB_SETITEMHEIGHT(콤보박스) 메시지를 보내서 아이템 전체(ower-draw fixed), 또는 개별 아이템(owner-draw variable)의 폭을 지정해 줄 수 있다.
리스트박스의 경우 경험상 둘의 차이는 거의 없다. 콤보 박스는 WM_MEASUREITEM 메시지의 결과에 따라서 drop list 내부에서의 아이템 높이뿐만 아니라 한 줄짜리 자기 본체의 높이도 그에 맞춰 자동으로 조절되는 반면, CB_SETITEMHEIGHT 메시지는 그런 효과까지는 없다는 차이가 있다.

또한, 메뉴야 대화상자의 내부 컨트롤 같은 존재가 아니니 저런 대체제가 존재하지 않으며 owner-draw 메뉴 아이템의 폭을 지정하는 타이밍은 WM_MEASUREITEM밖에 선택의 여지가 없다. 딱히 MENUITEMINFO 같은 구조체에 자신의 높이를 지정하는 곳은 존재하지 않는다.

요즘 운영체제의 옵션에 따라서는 콤보 박스의 drop list가 튀어나올 때, 또는 메뉴가 출력될 때 바로 툭 튀어나오는 게 아니라 fade in으로 서서히 나타나거나 위-아래 내지 대각선 방향으로 슬라이딩 하듯이 튀어나오곤 한다. 이건 임의의 윈도우에 대해서 AnimateWindow라고 이런 애니메이션 효과를 구현해 주는 함수가 따로 있다.

그런데, 과거의 Windows 9x에서는 owner-draw 아이템이 들어있는 콤보박스나 메뉴에 대해서는 그런 애니메이션이 지원되지 않았다. 기본 스타일로 문자열을 출력하는 컨트롤만 애니메이션이 나오던 것이 2000/XP 같은 NT 계열에 와서야 owner-draw 방식의 컨트롤에 대해서도 동등하게 애니메이션이 지원되기 시작했다. 그림을 화면에다 바로 그리는 게 아니라 내부 버퍼 DC에다가 그려 놓고 그런 처리를 하게 된 듯하다.

참고로 AnimateWindow는 애니메이션 대상인 윈도우에다가 WM_PRINTCLIENT라고 좀 생소하게 생긴 메시지를 보낸다. 이것은 WM_PAINT와 비슷하게 창의 내용을 그리라는 메시지이지만, WM_PAINT 때와는 달리 BeginPaint나 EndPaint 호출이 필요하지 않다. invalid 영역이나 클리핑 처리 같은 개념도 없으며 주어진 DC에다가 언제나 윈도우 내용을 처음부터 끝까지 그려 주면 된다.

Posted by 사무엘

2017/09/18 08:37 2017/09/18 08:37
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1406

본인은 몇 년 전에 쓴 글을 통해 Windows API에서 비트맵을 출력할 때 사용하는 GDI API 몇 개를 브러시와 비트맵의 관계라는 관점에서 비교하고 살펴본 적이 있었다. 이번에는 픽셀 포맷과 DDB/DIB라는 관점에서 관련 API들과 이들의 특성을 살펴보도록 하겠다.

1.
먼저, 비트맵은 CPU의 관점에서 봤을 때 빅 엔디언 형태이다.
모노크롬 비트맵에서는 128, 64 같은 큰 비트 자리수가 왼쪽을 나타내고 작은 비트로 갈수록 오른쪽으로 간다.
색깔을 나타내는 RGB야 숫자의 대소 구분이 무의미하겠지만, 일단 RGB 매크로(메모리)에서의 색상 배열 순서와 RGBQUAD 구조체(파일 저장)에서의 색상 배열 순서는 서로 정반대이다. 전자는 R이 최하위 비트이지만 후자는 R이 최상위 비트이다. 그러니 여기서도 이념이 빅 엔디언임을 확인할 수 있다.

2.
일반적으로 비트맵 폰트 파일 내부의 비트맵들은 한 줄이 바이트 단위로 align이 돼 있다. 그러나 CreateBitmap 함수가 받아들이는 DDB(장치 종속 비트맵)는 역사적인 이유 때문인지, 한 줄이 2바이트, word 단위로 align돼 있어야 한다.
compatible bitmap이 아니라 CreateBitmap으로 직통으로 만들 수 있는 비트맵이 사실상 모노크롬밖에 없다는 점을 감안하면, 저기에 전달되는 가로 크기는 사실상 언제나 16의 배수 단위여야 한다.

한편, BMP 파일과 직통 대응하는 DIB(장치 독립 비트맵)는 이런 제약이 더 커져서 한 줄이 4바이트 단위로 align돼 있어야 하며, 얘는 또 상하가 뒤집혀 있기까지 하다. y축 양수가 위로 올라가는 좌표계를 염두에 뒀기 때문이다. DIB를 취급하는 함수들은 다 이런 형태의 비트맵을 입력으로 받는다.

3.
Create(Compatible)Bitmap 함수로 만들어진 비트맵은 성능이 가장 좋고 속도가 빠르지만, 한번 초기화한 뒤에 내부 비트맵 메모리에 직접 저수준 접근을 할 수 없다. GetDIBits 같은 함수로 내부 메모리 컨텐츠에 대한 복사본만을 얻을 수 있을 뿐이며, 이 내부 메모리는 철저하게 장치 종속적이다. 즉, portable하지 않다. 컨텐츠를 조작하는 건 BitBlt 같은 타GDI 함수를 써서 해야 한다.

비트맵을 출력하는 다른 함수로는 SetDIBitsToDevice가 있다. 얘는 받는 인자가 많고 사용이 좀 복잡하긴 하지만, BitBlt와는 정반대로 그냥 아무 메모리가 가리키는 임의의 BMP 헤더와 컨텐츠를 통째로 받아서 그 내용을 화면에다 찍어 준다. 원본 비트맵에 대해서 뭐 메모리 DC 만들고 비트맵 만들고 SelectObject 할 필요가 없으며, 메모리에 직통으로 접근해서 픽셀, 팔레트 테이블, 크기 따위의 수정도 얼마든지 가능해서 매우 좋다.

하지만 BMP 헤더를 매번 해석해서 DIB를 DDB로 변환해서 찍을 준비를 해야 하기 때문에 이 함수는 비트맵을 뿌리는 속도가 DDB 전용 함수만치 빠르지는 않다. 구형 운영체제의 16/256색 구닥다리 비디오 환경에서는 성능 열화의 폭이 더욱 크다.

그런데 알고 보니 저 둘의 중간 역할을 하는 함수도 있다.
CreateDIBSection은 내부적으로 반쯤 DIB로 취급되는 HBITMAP을 되돌린다. 이 비트맵을 사용하기 위해서는 BitBlt를 쓸 때처럼 원본 메모리 DC를 만들고 SelectObject를 해 줘야 한다. 하지만 픽셀을 직접 조작할 수 있는 메모리 포인터도 되돌리기 때문에 이를 응용 프로그램이 사용 가능하다.

이 메모리는 운영체제가 내부적으로 직접 할당해서 준 것이다. SetDIB*처럼 아무 메모리에 있는 비트맵을 찍을 수 있는 게 아니며, 그림의 크기나 색상 수 같은 헤더 정보는 한번 정해진 뒤에 변경 가능하지 않다. (그게 달라진다면 그냥 비트맵을 새로 만들어야..) 단지 픽셀 데이터에만 접근 가능하며, 색깔 변경은 SetDIBColorTable라는 별도의 함수로 해야 한다.

하지만 픽셀 데이터에 직접 접근과 조작이 가능한 것만 해도 어디냐. 기존 HBITMAP의 특성은 다 가지고 있기 때문에 BitBlt, DrawText, LineTo 같은 GDI 함수들을 고스란히 사용하면서 그림이 그려진 결과를 메모리 포인터 레벨에서 바로 확인 가능하니 실로 놀라운 일이 아닐 수 없다. 이런 DIB의 특성을 반쯤 가지면서 비트맵을 뿌리는 성능도 SetDIB*보다는 약간 더 좋다.

지금까지 얘기했던 이 세 가지 API를 표로 정리하면 다음과 같이 요약된다.

  CreateBitmap + BitBlt SetDIBitsToDevice CreateDIBSection + BitBlt
픽셀 포맷 2바이트 패딩 4바이트 패딩 + 상하 반전 4바이트 패딩 + 상하 반전
사용하는 메모리 내부 전용 사용자 임의 지정 가능 내부 전용
픽셀 메모리에 직접 접근 가능 X O O
BMP 헤더에 직접 접근 가능 X O X
단색 비트맵의 색깔 지정 SetTextColor / SetBkColor BMP 헤더 구조체 값 직통 수정 SetDIBColorTable
성능 제일 빠름 제일 느림 약간 느림

* 참고로, CreateDIBitmap은 DIB 함수들처럼 BMP 헤더를 인자로 받긴 하지만, HDC까지 인자로 받아서 DIB를 완전히 DDB 형태로 변환해 버린다. 이 함수를 통해 생성된 HBITMAP은 외부에서 내용 수정이 가능하지 않다.

* 그리고 HBITMAP의 내부 컨텐츠를 얻어 오는 함수로 GetDIBits 말고 GetBitmapBits도 있는데, 얘는 그냥 레거시 잔재이다. BITMAPINFO 헤더 정보를 받는 부분이 없기 때문에 그냥 모노크롬 비트맵 데이터를 얻을 때나 쓰는 간소화 버전이라고 생각하면 된다.

예전에 Windows 95부터 2000/ME까지는 시스템 종료 명령을 내리면 화면 전체에 50% 검은 음영 픽셀이 깔리면서 시스템 종료, 재시작 같은 세부 기능을 선택하는 대화상자가 떴다. 지금은 그런 효과는 관리자 권한을 요청하는 UAC 확인 대화상자가 뜰 때에나 그렇게 배경이 어두워질 텐데 그때는 시스템 종료 대화상자가 그 비주얼 이펙트 역할을 담당했다. (XP에서는 그 효과가 "흑백으로 서서히 fade out"이라는 더 화려한 형태로 바뀌었다가, 후대 버전부터는 이펙트가 사라졌다.)

그런데.. 그렇게 50% 검은 음영을 뿌리는 게 바로 래스터 오퍼레이션을 가미한 BitBlt 내지 PatBlt 실행으로 구현되었다. 최신(당대 기준) 그래픽 카드에서야 즉시 전체 화면에 음영 뿌려졌겠지만, 하드웨어 가속 없이 640*480 VGA 내지 그에 준하는 구린 그래픽 환경에서는 음영이 위에서 아래로 뿌려지는 게 눈으로 보일 정도로 속도가 느렸다. 그건 나름 수십만 개에 달하는 픽셀이 바뀌는 거니까..

그리고 그게 바로.. 그 컴퓨터에서 BitBlt 함수로 화면을 가득 채우는 속도와 같다 생각하면 된다. 그때는 이 따위 느린 그래픽 함수로는 답이 없으니, Windows에서 게임을 돌리려면 발상의 전환을 달리한 DirectX 같은 API를 만들어야겠다는 생각을 응당 안 할 수 없었을 것이다. 하드웨어 계층 추상화+통합이 아니라, 하드웨어 직통 제어를 지원하게 말이다.

DirectX 쪽 그래픽 프로그래밍이 재래식 GDI 그래픽 프로그래밍과 다른 점은..

  • 하드웨어의 발전에 따라 프로그래밍 방법론의 변화 기복이 매우 큼.
  • 하려는 일(도형 그리기, 글자 찍기..)보다는 그래픽 하드웨어의 기능 위주로 API가 설계돼 있다. 사실, 이걸 수용하라고 애초부터 이념이 이런 식인 API를 따로 만든 거다.
  • 이런 이유로 인해, GDI처럼 프린터, 플로터, 메타파일 같은 디바이스까지 다 통합하는 추상화 계층 건 전혀 안중에 없음. 오로지 화면 아니면 화면 출력용 메모리 버퍼 위주이다.
  • BeginPaint/EndPaint로 대표되는 invalid 영역 그딴 개념이 없고, 그 대신 '서피스 소실'이라는 개념이 존재한다.

정도로 요약되겠다.
예전에는 GDI와는 완전히 다른 기술 계층을 거쳤기 때문에 화면 캡처도 특수한 프로그램을 써서 했을 정도이지만 이제는 그런 유별난 점이 점점 없어지고 통합돼 가고 있는 것도 인상적이다.

Posted by 사무엘

2017/09/15 19:31 2017/09/15 19:31
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1405

« Previous : 1 : ... 100 : 101 : 102 : 103 : 104 : 105 : 106 : 107 : 108 : ... 230 : Next »

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2026/07   »
      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:
3942268
Today:
1251
Yesterday:
1685