우리나라가 6· 25 사변 때 육해공을 통틀어서 첫 승리를 거둔 전투는... 6월 25일 당일 밤에 북괴의 부산 해안 침투를 막아낸 대한해협 해전이다.
그럼 졸전과 패배와 후퇴만 거듭했던 본토에서 육군의 첫 승리로 기록된 전투는 무엇일까?
그건 충주-음성 일대의 동락리 전투라고 여겨진다. (7월 5~8일) 3~400명 남짓한 병력으로 2천 명에 달하는 연대급의 적군 병력을 무찌른 대승이었다.

비록 승리 후에도 얼마 못 가 후퇴하게 되긴 했지만 이건 노획물, 아군의 사기 진작, 그리고 훗날 낙동강 방어선과 인천 상륙 작전에 이르기까지의 시간도 버는 매우 값진 승리였다. 특히 이때 노획한 소련제 무기들을 통해서 북괴가 소련의 지원을 받고 있음이 명확히 입증됐으며, 이는 우리도 유엔군의 지원을 받는 명분이 되었다. (☞ 관련 동영상 링크 1, 링크 2)

이 전투의 승리에는 동락 국민학교 교사 김 재옥 선생(1931-1963)이 피난 가지 않고 학교를 지키고 있다가.. 목숨을 걸고 국군을 찾아가서 공산군의 상황을 제보하고 적절한 타이밍에 기습을 유도한 것이 매우 크게 기여했다.

사용자 삽입 이미지

학교에는 공산군이 들어와서 진을 쳐 있고, 우리 국군은 어디 있는지도 정확히 모르는 채로 한밤중에 깜깜한 시골길을 몇 시간을 헤매면서 무작정 달린 끝에, 4~5km 남짓 떨어져 있던 국군 진영을 발견한 것이다. 이때 이분은 겨우 20세의 처녀였다.

큰 승전을 보고받은 할배 대통령은 입이 귀 밑까지 찢어졌지 않았을까 싶다. 덕분에 동락리 전투를 치렀던 6사단 7연대 2대대 대원들은 전원 1계급 특진했으며 해당 지휘관은 태극 무공 훈장을 받았다.

군인들뿐만 아니라 김 선생 역시 민간인으로서 태극 무공 훈장을 받았다는 말이 떠돌지만, 정확하게 검증 확인이 안 된다. 오히려 김 재옥 기념사업회 같은 단체에서는 나라에서 이런 대단한 영웅에게 훈장 하나 준 적이 없기 때문에 이제라도 줘야 한다고 2010년대에 이르기까지 탄원을 넣어 왔기 때문이다. 그러니 어느 말이 진실인지 모르겠다.
최종적으로는 2012년에 보국훈장 삼일장이 추서되긴 했다. 그리고 이분의 근무지이던 동락 초등학교에 기념비와 기념관는 진작부터 세워져서 지금까지도 남아 있다.

본인은 공교롭게도 바로 지난주 설 명절 귀성길 때.. 동락 초등학교를 잠시 들러서 저 현충탑을 직접 볼 수 있었다. 자가용의 내비가 횡축 이동 경로로 혼잡한 영동 고속도로(50) 대신 평택-제천 고속도로(40)를 제시했기 때문이다. 학교는 서충주 IC에서 아주 가까이 있다.

사용자 삽입 이미지

그리고 이 행적은 훗날 <전장과 여교사>(1966)라는 영화로도 만들어졌다.
필름이 소실되어 영영 사라진 줄 알았다가 뒤늦게 발견되고 복원되어서 한국 영상 자료원에서 지난 2015년 봄에 공개한 것이 언론에 보도되어 있다.

사용자 삽입 이미지

사용자 삽입 이미지

이분은 그 위기의 순간에 마주쳤던 어느 젊은 장교(이 득주 소위)와 눈이 맞아서 그 해 10월에 결혼까지 하게 됐다! 모든 게 해피엔딩으로 귀결된 것 같았으나 하지만...

이분의 생몰년을 살펴보면 굉장히 일찍 죽은 것을 알 수 있는데, 병이나 사고나 북괴의 테러로 죽은 게 아니었다.
군 복무 중에 중에 자기 상관에 대해 앙심을 품었던 고 재봉이라는 이름의 어느 병사(상병)가그 상관을 죽여 버리려고 관사를 찾아갔는데, 정작 죽이고 싶은 간부는 전출 가고 없고, 하필 그 집에 김 재옥 선생 일가족이 입주해 있었다.

그 병사는 이 사람들이 다른 사람인 줄 모르는 채로 흉기(도끼...)를 휘둘러서 일가족을 몰살했다. 김 재옥 선생은 이때 허무하게 참변을 당했다. 마치 1969년에 영화 배우 샤론 테이트가 찰스 맨슨 패거리에게 오인 살해당한 것처럼 말이다.

사용자 삽입 이미지

큰아들 딱 한 명(이 훈)만이 그 당시 친척집에 가 있어서 화를 면했고, 덕분에 대가 완전히 끊기지는 않았다. 그리고 가해자는 곧 붙잡혀서 당연히 사형장의 이슬로 사라졌다.

사용자 삽입 이미지
(위의 신문 그림의 우측 하단에서 얼굴을 손으로 가리고 우는 표정인 아이가 바로 유일한 생존자이고 사건 당시에 10대 소년이었던 이 훈 군이다. 지금이야 70을 바라보는 노인이 되어 있다. 국가 유공자의 후예인 데다 대가 끊길 수준의 일가족 몰살까지 경험한 고아 출신이니, 젊은 시절에 병역은 무조건 면제됐지 싶다.)

내 머릿속 잡학 사전에 또 거물 아이템이 하나 새로 입력됐다.
그런데 이런 엄청나고 드라마틱한 사실을 난 왜 30대 중후반의 나이가 돼서야 알게 됐을까? ㅠㅠㅠㅠ 난 6· 25 전쟁과 관련해서 조지 리비 중사, 김 재현 기관사 등 여러 마이너한 인물들에 대해 주워 들었는데, 김 재옥 선생에 대해서는 정말 난생 처음 들었다.
더구나 난 고 재봉 살인 사건에 대해서는 이미 들어서 알고 있었다. 단지, 피해자가 저런 사람이었다는 걸 지금까지 몰랐던 것이다.

일각에서는 고 재봉이 당변병이며 상관으로부터 온갖 부당한 대우를 받았다는 말이 있지만, 그렇지 않다는 반론도 있다. (☞ 링크) 그냥 저 병사가 처음부터 도벽도 있고 성질이 포악하고 더러운 놈이었을 뿐이라고 말이다.

이 글에서는 김 재옥 선생이 주제이므로 가해자의 배경에 대한 판단은 하고 싶지 않지만, 가해자가 끔찍한 살인을 저지른 뒤에도 능숙하게 도피 생활을 하고 체포된 뒤에도 태도가 너무 당당하고 뻔뻔스러운 걸 보면.. 정말로 그냥 처음부터 성질이 더러운 놈이 맞았던 것 같다. 원래 착하던 사람이 도를 넘는 가혹행위를 당하면서 욱해서 정신줄을 놓은 것 같지는 않다.

Posted by 사무엘

2020/01/31 08:35 2020/01/31 08:35
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1711

인간이 입으로 만들어 낸 창작물 내지 정보 중에, 말은 문자를 통해서 글의 형태로 보존되곤 했다. 그러나 말은 노래라는 형태로 표현되기도 하는데 거기서 말을 감싸던 음악, 멜로디, 선율은 제대로 전해지지 못한 것이 적지 않다.

먼 옛날(지금으로부터 수백 년 이상 전)에는 아시다시피 물자가 몹시 비싸고 귀했으며, 종이와 필기구도 예외가 아니었다. 선율은커녕 말을 받아 적는 것조차 아무나 함부로 하기 어려웠으며 아예 글을 모르는 문맹도 부지기수였다.
그런 시절에 모든 사람이 알고 대대로 전수해야 하는 텍스트는 전수 방법이 '구전'밖에 없으니, 최대한 규칙성을 띠고 외우기 쉬운 형태로 텍스트를 마개조해야만 했다. 그래서 운율이라는 개념이 생겼고 운문이 등장했다.

그리고 운문을 넘어 아예 노래를 만들어 흥얼거리기 시작했다. 노래를 기억하면서 가사도 덤으로 기억하게 되기 때문이다. 사람은 유전자 차원에서 음악을 즐기는 본성이 새겨져 있는 게 틀림없어 보인다.

옛날에는 음반이란 게 없었고, 평범한 사람들이 단순히 길거리 악사 이상 수준의 프로페셔널한 음악을 접할 일이 그닥 없었다. 그러니 싸제 야메 노래를 흥얼거리는 것에 대한 자괴감도 현대인보다는 적었으리라 여겨진다.
지금처럼 트루타입 윤곽선 글꼴이 널리 쓰이기 전의 도스 시절엔 싸제 야메 비트맵 글꼴들이 수십 종 이상 만들어져 쓰였던 것처럼 말이다.

그러니, 옛날 사람들은 암기용이든 단순 감정 분출 한풀이용이든.. 음악이라는 걸 스스로 더 창의적으로 활용했을 가능성이 높다. 그들이 자연스럽게 만들어 부른 노래는 역사적으로 귀한 자료가 됐을 텐데, 정작 그 귀한 자료들은 등장을 촉진했던 이유(기록 수단 부재)와 동일한 이유 때문에 소실도 많이 됐다는 것이 아이러니이다.

노래들을 전수받은 마지막 세대들은 그게 그렇게도 귀한 자료라는 걸 전혀 인지하지 않고 있었는데.. 시대가 바뀌면서 그런 노래를 부를 일이 없어졌고(산업화, 정권 교체 등), 그렇게 세월을 보내다가 전수자가 죽고 생존한 피전수자도 당시 기억을 망각하면서 음악 정보가 사라진 것이다.
문학 시간에 배울 정도인 구지가(龜旨歌), 청산별곡(!!) 등의 진짜 옛날 노래들뿐만 아니라 비교적 최근까지 다음과 같은 예가 있었다.

1.
3· 1 운동 때는 유 관순처럼 서대문 형무소에 투옥됐던 어린 여성 독립운동가들이 여럿 있었다. 그 중에는 심 명철(1896-1983)이라는 분이 있었는데, 감옥에서 동지들과 이런 노래를 숨죽여 지어서 불렀다고 한다.

사용자 삽입 이미지

그분의 아들인 문 수일 씨는 어머니가 살아 계실 적에 그 노래를 들으면서 가사를 적어 놨다. 그러나 멜로디는 콩나물로 미처 그려 놓지도, 녹음하지도 못했기 때문에 소실됐다. 어머니가 돌아가신 지는 이미 35년이 훌쩍 넘었고..

"대한이 살았다 대한이 살았다, 산천이 동하고 바다가 끓는다, 에헤이 데헤이 대한이 살았다"


이런 가사인데.. 이게 최근에 알려져셔 가수 박 정현이 그 가사에다가 곡을 자기 스타일로 새로 붙여서 노래를 불렀다. 이 영상이 유튜브에 공개돼 있다.

가사를 구성하는 어절들이 전반적으로 3글자 단위인 걸 보니 원래 멜로디도 3박자 계열이었지 싶다.
물론 이론적으로 꼭 그래야 할 필요는 없다. 4/4박자에다가도 ♪♪♪가 아니라 ♪♪♩ 같은 식으로 3글자 단위는 얼마든지 집어넣을 수 있기 때문이다. 다만, 민요풍 박자들이 전반적으로 6/8 같은 3박자 계열인 것까지 감안하면 원래 멜로디 역시 그 범주를 벗어나지 않았을 것이다. 박 정현의 리메이크곡도 들어 보면 아시겠지만 응당 3박자 계열이다.

옛날에는 '대한'이라는 단어가 대중적으로 익숙하지 않아서 "대한 독립 만세"가 아니라 "조선 독립 만세"라고 외쳤다는 말도 어디선가 들었는데.. 정말 그랬는지는 잘 모르겠다. 저 가사에도 멀쩡히 '대한'이라는 단어가 쓰이긴 했네..?

사용자 삽입 이미지

유 관순만 어린 나이에도 불구하고 징역 3년으로 형량이 유난히 무거웠으며, 매우 단명하기까지 해서 겨우 1920년에 순국한 것을 알 수 있다. 유 열사가 법정에서나 형무소에서 간수나 법조인들에게 굉장히 많이 저항하고 밉보였기 때문일 것이다.
몰년이 미상인 사람도 둘 있지만 그들은 유 관순이 죽기 전에 이미 만기 출소했을 정도로 형량이 가벼웠다.

참고로 심 명철 여사는 맹인이었다! 저 유튜브 영상에서 그 사실이 직접 언급돼 있지는 않지만, 저분은 사진에서도 검은 안경을 쓴 걸 볼 수 있다. 평생을 점자 아니면 기억에만 의지해서 의사소통을 해야 했으니 수십 년 전에 불렀던 노래도 생생하게 기억할 수밖에 없었을 것이다.

2.
자, 다음으로는 엄격 진지 근엄한 시절 말고 해방 이후 1955년의 일이다.
우리나라에서 시발 자동차라는 게 나왔을 때.. 믿기 어렵지만 이런 CM쏭까지 있었다고 한다!

사용자 삽입 이미지

"시발, 시발, 우리의 시~발 자동차를 타고 삼천리를 달리자"


195, 60년대에 이런 CM쏭을 대중적으로 퍼뜨릴 매체는 텔레비전은 어림도 없고, 라디오 아니면 극장 영화 상영 전 광고에 의지해야 했을 것이다.
이거 멜로디가 전해졌다면 인터넷 시대에 병맛 개그로 재조명되어 폭발적인 인기를 끌었으리라 여겨지나..
아쉽지만 악보도, 음반도, 증언자의 기억에서도 몽땅 다 소실됐다고 한다. 아마 팬암 CM쏭의 "You can't beat the experience -- Pan Am!" 같은 느낌이지 않았을까?

이상이다.
수십 년 전에 본인의 외할머니께서 사용하시던 찬송가 책이 문득 떠오른다. 거기에는 가사만 세로쓰기로 쭉~ 적혀 있고 악보가 인쇄돼 있지도 않았다. 복잡한 악보는 아무래도 저렴하게 인쇄하기 어려울 테니.. 가격 문제 때문에 옛날엔 가사만 적힌 책도 쓰였던가 보다.

멜로디는? 당연히 구전이었다. 보존의 우선순위가 아무래도 가사보다 뒤로 밀릴 수밖에 없다. 원래 조가 무엇이었는지, 혹은 4부 합창 파트 같은 건 생각할 수 없었다. 지금도 북한의 지하 교회에서는 성경과 찬송가 가사를 급히 베끼고 찬송가 멜로디 정도는 그냥 외워 와서 몰래 예배를 드린다고 한다.

사용자 삽입 이미지

찬송가만 해도 열악하던 시절엔 이런 식으로 전해졌으니, 하물며 민중에 의해 만들어진 노래는 더 격식 없이 의식의 흐름대로 만들어지고 전수되다가 잊혀지고 사라지기를 반복했을 것 같다.

끝으로, 성경도..
홍해 바다를 건넌 뒤에 이스라엘 백성들이 부른 노래를 포함해 시편까지 전부 원래는 곡이 붙어 있는 노래였다! 허나, 하나님은 말씀을 보존해 주신다고 했지 멜로디를 보존해 주신다고 약속하시지 않은 관계로... 후손들이 접할 수 있는 건 오로지 가사뿐이다. 곡을 붙이는 건 전적으로 후대 작곡자들의 재량 영역이 됐다.

"그들이 왕좌 앞과 네 짐승과 장로들 앞에서 새 노래 같은 것을 부르더라. 땅에서 구속받은 십사만 사천 외에는 아무도 능히 그 노래를 배우지 못하더라." (계 14:3)


이것도 도대체 무엇을 들은 것일지 굉장히 궁금해진다. 뭔가 새마을호 로고송이나 Looking for you에 근접하는 멜로디였을 것이다.

이번 기회에 무슨 마음에 드는 시, 짤막한 문구, 표어 같은 거 놓고 곡을 붙이는 연습을 스스로 해 보자. 생각보다 재미있다. 심지어 저 시발자동차 광고카피라도 말이다~! ㅎㅎ

Posted by 사무엘

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

본인이 갓 태어난 아기 내지 꼬마였던 1980년대, 레이건과 전대갈 대통령 시절 겸 히로히토 일왕의 말기는 미국· 일본· 한국 모두 경제가 호황이고 물질적으로 풍요롭고 잘 나가던 때였음이 틀림없다.
데모 하느라 성적이 개판이어도 대학 졸업장만 있으면 대기업들에서 모셔 가려고 난리이던 시절? 방학 때 공사판에서 한두 달 노가다만 뛰면 대학 등록금이 짠 마련되던 시절? 적당히 월급 저축해서 집을 마련하고, 남자 혼자 외벌이만으로 집안을 먹여 살리는 게 가능하던 시절?

아 물론 이런 것들은 추억 보정을 받아 비현실적으로 미화된 것도 있고 걸러 가며 들어야 할 것도 있다. 그 시절에 전반적인 분위기가 저랬다고 해서 너님도 반드시 저 혜택을 입는 게 가능했다는 보장도 없거니와, 저렇게 풍요로운 시절을 보낸 세대들은 더 과거에는 우리보다 훨씬 더 험악하고 무질서하고 힘들고 어려운 나날을 겪기도 했을 것이기 때문이다. 6· 25 전쟁까지 갈 것도 없이, 당장 1970년대의 악몽이던 석유 쇼크는 어떻게 극복했겠는가?

이때는 냉전의 여파로 과학 기술이 눈부시게 발전하고 있기도 했다. 우주왕복선이 등장했고 이제 막 컴퓨터 '정보화 시대' 운운하고 있었다. 그래서 각종 창작물에서 로봇, 우주선, 컴퓨터에 대한 만능주의 환상이 마음껏 반영되어 들어가곤 했다.

그리고 음악은 만능 음향 제조기인 신시사이저가 발명된 지 얼마 안 되어 전자 음향이 세계적인 대세가 돼 있었다. 영상에서 CG는 아무래도 1990년대 이후부터 각종 영화와 CF에서 널리 퍼졌으며 1980년대엔 아직 소수의 실험적인 시도 수준에 머물러 있었다. 그 반면, 음향은 그보다 약간 이른 아날로그 시대부터 전자화 가상화가 진행된 셈이다.
이 글에서는 이런 점들을 감안하여 그 시절의 매체들 몇 가지를 회고해 보고자 한다.

1. 주찬양 2집 알렐루야

먼저 찬양 음반부터 언급하도록 하겠다.
세상에는 창세기 1장 6일 창조의 둘째 날 말고도.. 시리즈로 나온 물건들 중에 유독 둘째 넘버링이 존재감이 없거나 특이하거나 흑역사가 된 것이 좀 있다. 인텔 8086/88 다음으로 80186 CPU라든가 보잉 707 다음으로 717처럼 말이다.

옛날에.. 무려 1991년에 발매되었던 주찬양 선교단 10주년 컬렉션 음반에는 과거에 내놓았던 1집부터 7집의 곡들 중에서 명곡이 수록되어 있었는데, 유독 2집 소속인 곡은 전혀 없었다. 그러니 본인은 주찬양 2집은 도대체 뭔가 자연스럽게 의문이 들게 됐다.

나중에 알고 보니 얘는 평범하게 최 덕신의 창작곡으로 구성된 앨범이 아니었다.
미국의 빌 게이더 & 글로리아 게이더 부부의 창작곡으로 구성한 찬양 예배 앨범 Alleluia를 그대로 번역하여 수록한 음반이었다. 아무래도 1집과 3집의 사이에 나왔을 테니 발매 시기는 1986년~87년 정도로 좁혀진다.
영어 원판은 바로 이것이다.

사용자 삽입 이미지

"Welcome! We've gathered together just to praise the Lord.
안녕하십니까? 우리는 주님을 찬양하기 위해 이 자리에 모였습니다."

뭐 이렇게 시작하고..
맨 첫째 1번 트랙은.. 무슨 올림픽 개막식 같은 느낌도 든다.
사회자가 시편 150편을 인용하면서 "나팔 소리로, 비파와 하프로 그분을 찬양할지어다" 이렇게 말하면 그 뒤로 오케스트라가 진짜로 그렇게 연주를 하고.. 그런다. ㅎㅎ 그래 봤자 스타일은 어쩔 수 없는 전형적인 1980년대 스타일이지만 말이다.

그래서 주찬양 2집은 주찬양 앨범들 중에 유일하게 외국 음반 번역이며 성격이 좀 특이하다.

"살아 계신 주" (주 하나님 독생자 예수...)
"예수 예수 예수 그 이름만 거기 있네"
"섬길 수록 더 귀한 주님" (주 내 맘에 오신 후에...)

요 찬송이 바로 게이더 부부의 곡이며, 저 앨범에 소개돼 있다.

7번 트랙이 "섬길 수록 더 귀한 주님"인데, (테이프에서는 B면 둘째 곡) 앞에 어떤 노년 신사의 인생 간증이 먼저 나온다. 영어 원판은 자기가 이제 70세가 됐다고 나오는데, 주찬양 2집 번역판에서는 회갑의 나이가 됐다고 약간 초월번역 됐다.
"일제로부터의 해방, 6· 25 사변 등의 여러 격변의 세월.." 운운하는 회고도 원판에는 없는 로컬라이징이다. 영어 원판이라고 해서 대공황이나 2차 세계 대전 같은 사건의 언급은 없다.. ^^

다만, 미국에서 어린 시절에 대공황과 2차 대전을 겪은 1910~20년대생은 정말 불굴의 Greatest Generation이라고 실제로 일컬어지긴 한다. 생존을 위해 겨우 10대 나이로 생업 전선에 내던져지고, 군 입대도 하는 개고생을 하면서.. 지금의 위대한 미국 천조국을 일궈낸 세대이기 때문이다. 물론, 한국처럼 나라 자체가 없어졌거나 헌정 체제가 널뛰기 하듯이 격변하는 일은 없었겠지만, 개인의 인생은 만만찮게 힘들었던 셈이다.
트럼프 성님이 "make America great AGAIN"이라고 슬로건을 만들었던 것도 다 이유가 있다. (원조 great가 먼저 있었음)

1980년대 기준으로 나이 70이면 진짜 딱 저 세대에 맞게 떨어진다~! 다만, 검색을 더 해 보니 알렐루야 영어 원판 앨범은 1973년작으로 더 오래됐다고 한다. ㅎㅎ

2. 철도 음악

본인은 철덕으로서 Looking for you도 1988년작 음반에 수록된 1980년대 곡이라는 것에 의미를 부여하고 싶다. 글쎄, 그 정도로 오래됐다는 생각까지는 들지 않는데..;;
그리고 혹시 기억하는 분이 계시나 모르겠는데, 지난 2006~07년 사이... 08년부터 Let it be 가야금과 국악풍 시그널송이 도입되기 전의 과도기에 새마을호에서는 정차역 안내방송 전에 뭔가 전자악기 풍의 경쾌한 G장조 시그널송이 연주된 적이 있었다.

알고 보니 동일한 음악이 1988년도 롯데 월드 쇼핑몰 CF에서 쓰인 적이 있었다. 그렇다면 저 음악은 그보다 더 전부터 발표되었고 존재했다는 뜻이다.
저 음악의 제목과 작곡자는 대외적으로 알려져 있지 않지만 이것도 여러 무명의 영상 음악 아카이브/라이브러리에 수록된 작품 중 하나가 아닐까? 롯데 월드 CF를 찾아낸 것만으로도 대단한 발견이다.

굳이 철도 BGM이 아니어도, 잊혀지지 않고 오늘날까지 불려지는 1980년대 BGM이나 팝송 따위가 있다면.. 그 음악이 만들어진 시대 배경과 맥락을 같이 생각해 보면 좋을 것이다.

3. 국내 가요와 동요

우리나라가 1980년대에 영화는 3S 정책과 맞물려서 좀 침체돼 있었다고 하나, 노래는 이때 의외로 명작들이 많이 배출된 것 같다.

  • 건전가요 아 대한민국
  • 코리아나 손에 손잡고
  • 해바라기 사랑으로
  • 이 상은 담다디
  • 혜은이 파란 나라, 피노키오
  • 신 형원 터, 개똥벌레
  • 동요 새싹들이다, 노을
  • 배따라기 아빠와 크레파스
  • 김 원중 바위섬

4. 영화 쿵 퓨리~!

아아~ 본인은 <쿵 퓨리>(Kung Fury, 2015)라는 미친 30분짜리 단편영화를 얼마 전에야 우연히 접했다.
정말 인간의 약빤 의식의 흐름과 병맛은 도대체 끝이 어딘가 의문이 들지 않을 수 없었다. 현웃 하면서 잘 봤다. ㅠㅠㅠㅠㅠ ㅋㅋㅋㅋㅋㅋ

사용자 삽입 이미지

  • 1980년대의 마이애미, GTA 바이스 시티
    (그러고 보니 "로보캅"은 배경이 디트로이트이고, "블루스 브라더스"는 시카고가 배경이구나! LA 배경도 어딘가에 있긴 할 것이다;;)
  • 들고 다니는 커다란 붐박스 라디오
  • 그 시절 티가 빵빵 나는 테크노스러운 전자음향 음악, 어설프게 SF스러운 폰트, 아날로그 VHS 노이즈와 그 색감
  • 모탈 컴뱃과 섀도 워리어 (서양 스타일로 왜곡된 오리엔탈리즘)
  • 킬 빌 (온갖 B급 영상물들 패러디)
  • 맥가이버와 스트리트 파이터 류 (빨간 머리띠만 -_-), 듀크 뉴켐 3D
  • 자동차 키트
  • 쿵푸 팬더 (!!!)
  • 공룡, 북유럽 신화
  • 그 시절 특유의 로봇, 우주선, 컴퓨터 해킹에 대한 만능주의 환상

젠장~ 쿵 퓨리에서는 저런 것들이 몽땅 다 오마주 되어, 짬뽕 돼서 나온다. =_=;;

옛날에 텔레비전에서 사람 실물이 튀어나오는 장면 정도는 어지간한 만화에서도 나왔지만, 여기서는 악당(히틀러..;; )이 전화기에다 대고 총질을 하니까 전화를 받는 사람이 죽는다. =_=;;
Hackerman, Kung Fuhrer 자막이 뜨는 그 촌스럽고 오글거리는 장면에서는 아 ㅆㅂ 소리와 함께 경악이.. '해커맨'을 보면, 서양에도 '금요일날, 프린터기, 역전앞' 같은 겹말이 얼마든지 쓰이는구나 하는 생각이 든다.

병맛을 이루 말로 형용할 수 없다. 이런 것인 줄 알았으면 돈 주고도 볼 의향이 있다.
만든 사람들의 노력에 대한 정당한 대가를 지불해야지.. 단, 만든 사람들 소변 도핑 검사도 시키는 조건으로 말이다.
운동 선수들 스포츠뿐만 아니라 영화도 정정당당한 상상력만 발휘해서 만들어야 하지 않을까 싶다.. ㅠㅠㅠㅠ

맨날 쿵푸 쿵푸 하는데 이건 功夫(우리말로 치면 '공부'에 더 가까운 소리!)에서 유래된 비격식 민간 어원이고, 위키백과에서는 '중국 권법의 총칭'이라고 분류돼 있다. 즉, 태권도나 가라테 같은 특정 무술 명칭이 아니라 일종의 집합이라는 것이다.
쿵푸의 하위 분류로 창시자별로 홍가권, 영춘권, 태극권, 절권도 등등의 파생이 있다. 마치 SVGA는 EGA, VGA 같은 특정 그래픽 모드가 아니라 여러 VGA 확장들의 총칭이듯이 말이다. 에휴.. 명작 병맛 영화 하나 덕분에 내가 이런 것까지 직접 찾아보게 됐다. ㄲㄲㄲ

철덕으로서 일말의 동질감이 느껴진 부분을 찾자면..
주인공이 번개를 맞고 코브라에 물려서 각성해서 쿵 퓨리가 된 것과 비슷하게, 본인은 새마을호를 타고 Looking for you를 들음으로써 철덕으로 각성했다.
그리고 히틀러가 쿵푸를 너무 좋아해서 자기 이름까지 쿵 퓌어러라고 지었듯이, 본인은 철도를 너무 좋아해서 영어 닉도 새뮤얼(새마을..)이라고 지었다. 이런 것도 비슷한 점이라 하겠다. ㄲㄲ

사용자 삽입 이미지

이제 이 영화에서 컴퓨터와 관련된 부분만 코멘트를 몇 가지 더 하겠다.
이렇게 시커먼 배경의 바둑판 격자 사이버 공간(?)은 1980년대 초창기 CG의 상징이라 해도 과언이 아닐 것이다.

사용자 삽입 이미지

최초의 CG 합성 영화라고 일컬어지는 그 유명한 1982년작 트론(TRON)에서 이런 장면이 나오며..

사용자 삽입 이미지

장 선우 감독이 <성냥팔이 소녀의 재림> 때문에 쫄딱 망하기 전, 옛날에 만들었던 수작 중 하나인 <성공시대>(1988)에서도.. 컴퓨미라는(..!!) 가상의 제품과 그 광고 역시 전형적인 1980년대 상상력에 근거한 것이었다. ㅡ,.ㅡ;; 참, 그러고 보니 쿵 퓨리도 작품 중에 전화기 광고가 나오네..

사용자 삽입 이미지

다시 쿵 퓨리로 돌아온다.
1980년대 8비트 컴퓨터에서 Java 코드가 줄줄 흘러나오는 건.. 저 영화의 개막장 안드로메다 초월 설정과 전개에 비하면 새발의 피도 안 되는 비중의 아이템이니 그냥 넘어가자~ 해킹으로 시간 워프는 물론이고 주인공의 총상까지 치료하는 영화인걸 뭐.. ㅡ,.ㅡ;; 외계인의 컴퓨터를 해킹해서 방어막을 무력화시키는 것쯤은 시간 해킹에 비하면 완전 약과였다(인디펜던스 데이;;).

예전에도 언급한 적이 있지만, 8비트 컴퓨터는 기술과 성능상의 한계로 인해 화면 해상도가 오늘날의 컴퓨터보다 매우 낮다. 코딩은 닥치고 어셈블리어, 아니면 최대한 잘해 봤자 C 정도만 나오는 게 자연스러울 것이다.

사용자 삽입 이미지

아아~ 심지어 화면이 맛이 갔을 때 모니터를 툭 치니까 다시 원래대로 돌아오는 깨알같은 디테일까지 영화에 반영돼 있다!! 존경하지 않을 수 없다. ㅠㅠㅠ 요즘은 스마트폰 같은 게 맛이 갔다고 해서 툭 치지는 않는다. 참 오래된 추억의 관행이다.
비현실적인 사기 해킹으로 문제를 해결하는 경찰물은 후대에도 로보캅 3, 걸캅스 등 여럿 있지만, 이 정도는 돼야 정말 진한 병맛이 느껴진다.

Posted by 사무엘

2020/01/25 08:35 2020/01/25 08:35
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1709

0과 음수에 대한 생각

수학에서 다루는 수 중에는 음수라는 게 있다. 얼마를 빼는 것은 음수를 더하는 것과 동급으로 치자고 발상의 전환을 한 것이다. 그래서 0의 양 옆으로 양수와 음수가 존재하게 됐다.

음수는 덧셈· 뺄셈· 곱셈· 나눗셈이라는 기본 사칙연산 범주에서는 별로 어려울 게 없다. 곱셈과 나눗셈에서는 부호가 마치 xor 연산과 비슷하게 바뀐다는 것만 염두에 두면 된다. (둘 다 동일하면 양수, 다르면 음수) 뭐, 음수라는 개념뿐만 아니라 -1 곱하기 -1이 어째서 +1이 되는지도 마냥 직관적으로 쉽게 이해 가능한 개념은 아닐 수 있는데..

더 나아가 실수 나눗셈 말고 '나머지'를 같이 구하는 정수 나눗셈에서는 피연산자에 음수가 섞여 있으면 연산의 정의부터가 깔끔하게 딱 떨어지지 않고 굉장히 골치 아파진다. 내 기억이 맞다면 나머지의 부호는 나누는 수의 부호와 동일한 것이 원칙일 텐데, 당장 컴퓨터의 정수 나머지 연산은 그렇지 않다. 걔들은 부호 불문하고 몫은 그냥 소숫점을 짤라낸 것이고, 나머지는 그 몫으로부터 파생된 부산물이기 때문이다.

또한 bit shift 연산에서도 음수만치 shift한 결과는 그냥 undefined가 된다. a<<(-b)가 자동으로 a>>b로 되는 게 아닌 게 의외이다.

그럼 음수는 나머지나 비트 shift 같은 정수 컴퓨터 연산에서만 복병인가 하면 그렇지 않다. 일반적인 대수학에서 거듭제곱의 영역으로 가 봐도 음수는 난감한 상황을 만들어 낸다.
가장 먼저, 제곱해서 음수가 되는 수 자체가 통상적인 실수 중에는 존재하지 않는다. 이런 수는 도대체 특성이 어떤 놈일까? 이런 개념을 처음으로 떠올리고 고안한 사람은 도대체 무슨 부귀영화를 바라고 무슨 약을 빨고 이걸 생각해 낸 걸까?

지수함수의 정의역을 실수 전체로, 대수적으로 확장할 때도 음수는 애로사항이 꽃핀다. 당연히.. a^b에서 b 말고 a가 음수인 것 말이다. 음수의 거듭제곱은 횟수에 따라서 부호가 음수와 양수 사이를 널뛰기 하듯 바뀌는데, 그 횟수 자체가 자연수를 넘어 다른 이상한 수가 된다면 결과가 도대체 어떻게 되겠는가?

지수함수를 대수적으로 확장한 결과에 따르면, 음수에 대해 정수가 아닌 거듭제곱을 한 결과는 허수가 섞인 복잡한 복소수가 된다. (-1)^(1/2)는 당연히 그 정의상 i가 되고 말이다.
0과 1은 그 어떤 수로 거듭제곱을 시켜도 다른 정상적인 형태의 수가 나오지 않는다. 그렇기 때문에 이 두 수는 로그 함수의 base가 될 수 없다.

하지만 복소수 범위에서는 0과 1만 빼고 나머지 아무 복소수라도, 음수와 심지어 -1조차도 log의 밑이 될 수 있다. -1을 삐리리 승 하면 100이 될 수 있고 1000이 될 수도 있다는 뜻이다. 단지 그 수가 실수가 아닌 복소수 중에 있을 뿐이다. -1의 거듭제곱은 그냥 -1과 1 사이만 진동할 거라고? 천만의 말씀이다.

다만 정의역을 실수로만 한정하면 x에 대해서 Re((-1)^x)의 그래프.. 쉽게 말해 -1의 x승의 실수부는 cos(Pi*x)의 그래프와 같으며, 허수부를 나타내는 Im((-1)^x)의 그래프는 sin(Pi*x)의 그래프와 완전히 같다! 애초에 x^n=1의 근이 복소평면에서 정다각형의 꼭지점 형태로 나타나니, 거듭제곱과 삼각함수는 피할 수 없는 귀결이라 하겠다.

사용자 삽입 이미지

어째서 그렇게 되는지는 너무 어렵게 생각할  것 없이 그 유명한 오일러의 등식 정도만 따져 봐도 된다. 우리는 고등학교 수준에서는 로그를 그냥 실수 범위까지만 배웠겠지만, 그것이 그림의 전부가 아니다.
또한, 정의역을 실수로만 한정했을 때 이렇다는 것이고, 다른 임의의 복소수를 주면 (-1)^x는 절대값이 1보다 더 큰 다른 수도 얼마든지 나올 수 있다.

a^x를 넘어 아예 x^x의 그래프를 복소수 범위까지 생각해서 그려 보면 더 환상적인 결과를 얻을 수 있다.
얘는 양의 실수 범위에서는 x=1/e일 때 최소값을 갖는다. x=0일 때는.. 0의 0승이기 때문에 값을 구하기가 좀 아햏햏하긴 하지만 극한값이 양쪽 모두 1이기도 하고, 많은 경우에 0^0은 여느 수의 0승과 마찬가지로 1이라고 편의상 통용되곤 한다.

사용자 삽입 이미지

하지만 x가 본격적으로 음수가 되면.. 이제 그래프는 실수 영역에 존재하지 않게 된다. 뭐, 어차피 실수부와 허수부 모두 0으로 급격하게 쪼그라들기 때문에 생각만치 볼 건 없긴 하다만... 그래프의 모양이 꽤 예술적이어 보이지 않는가? =_=;;

수학에는 수에서 특정 부분의 정보를 떼어내고 남은 부분만 되돌리는 연산자 내지 함수가 세 가지 남짓 있다.

(1) 가장 먼저, 수에서 부호를 제거하는 ‘절대값’이 있다. 여닫는 세로줄 기호는 다들 친숙할 것이다. y=|x|는 오르내리는 사선을 만들어 낸다.
얘는 복소수를 대상으로는 복소평면에서 원점으로부터의 거리를 의미하기도 하며, 행렬에서는 행렬식을 의미하기도 한다.

(2) 그리고 수에서 소수점을 떼어내고 근처의 정수를 되돌리는 floor 내지 ceiling 연산이 있다. 얘는 그래프에서 계단을 만들어 낸다.
(3) 끝으로, 복소수에서 실수부 내지 허수부만을 되돌리는 Re() 및 Im()이 있다.

이런 연산들은 다 특정 분야에서 인간에게 필요하고 특정 관점에서 의미가 있기 때문에 고안된 것이겠지만.. 미적분 같은 해석학의 관점에서 자연스럽고 직관적인 연산은 결코 아니다. 절대값 연산은 부호가 바뀌는 지점에서 미분 가능하지 않은 지점을 만들며, 소수점 자르기는 더 나아가 아예 연속이지도 않은 지점을 만든다.

멀쩡한 복소수에서 실수부나 허수부만 떼어내는 것도 저 그래프의 예쁘고 매끄러운 모양과는 달리, 만만찮게 인위적이고 부자연스러운 보정이다. 그렇기 때문에 x^x에서 x가 음수일 때 실수부와 허수부의 그래프 식을 따로 구해서 각각 최대값과 최소값까지 구하는 건 양수일 때와 같은 방법으로 할 수 없다. 복소함수를 취급하는 더 복잡하고 난해한 방법론을 동원해야 한다.

복소수라는 개념을 떠올리고 나니까 어째 리만 가설이라는 것도 나올 수 있고 20세기엔 수렴· 발산 여부로 만델브로트니, 줄리아니 하는 프랙탈 집합까지 발견할 수 있었다. 이런 걸 도대체 어떻게 찾아냈을지 오묘하기 그지없다. 다들 계산량이 엄청나고 빡세다는 공통점도 있다. 하긴, 프랙탈이 '차원'이라는 개념도 대수적으로 확장했다. 행렬 계산의 최적 시간 복잡도에서 거듭제곱 계수가 2도, 3도 아닌 로그함수 값이 된 것처럼 말이다.

이상이다.
리만-제타 함수라든가 감마 함수 같은 난해한 함수들이 양수 구간과 음수 구간이 모양이 심하게 차이가 나고, 특히 음수 구간에서는 상하로 심하게 널뛰기를 하는 근본 이유가.. 지수 함수와 관련된 음수의 기괴한 특성 때문이라고 감을 잡으면 될 듯하다.
x^x 말고 0의 x승의 경우.. 양수에 대해서는 그냥 0이 될 것이고 0^0은 사실상 1이 통용되고 있고, 음수 승은 0으로 나누는 것과 동급인 부정으로 귀착된다.

Posted by 사무엘

2020/01/22 19:34 2020/01/22 19:34
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1708

오늘날 마이크로소프트는 운영체제와 오피스뿐만 아니라 개발툴 분야도 세계를 석권해 있다.
걔들은 과거에 운영체제 쪽은 맥 내지 IBM OS/2와 경쟁했었고, 오피스는 로터스, 워드퍼펙, 한컴(...)과 경쟁했으며.. 개발툴 쪽은 볼랜드라는 쟁쟁한 기업과 경쟁했다.

마소와 볼랜드가 내놓았던 프로그램 개발툴은.. 먼저

1. IDE까지 있는 도스용 대중 보급형의 브랜드가 있었다.
볼랜드는 터보, 마소는 퀵.. 뭔가 스피디한 단어를 썼다는 공통점이 있다.
그리고 볼랜드는 브랜드명-언어명 사이를 띄었지만, 마소는 둘을 붙여 썼다.;;

Turbo Basic, Turbo C, Turbo Pascal
QuickBasic, QuickC, QuickPascal

다음은 볼랜드 말고 '마소'에서 개발했던 QuickC와 QuickPascal IDE의 스크린샷이다. 보기에 참 생소하다. 출처는 유명한 고전 소프트웨어 라이브러리인 WinWorld이다.

사용자 삽입 이미지

사용자 삽입 이미지

마소는 QuickBasic만 건지고 나머지는 다 망했다. QuickBasic이야.. 뭐 무료 축소판 QBasic을 MS-DOS와 Windows에다 포함시키기까지 했을 정도이고 말이다. 빌 게이츠가 베이식 언어를 아주 좋아했다.
그 반면 볼랜드는 Turbo Basic만 망하고 C와 Pascal을 건졌다. Turbo Basic의 개발진은 볼랜드를 퇴사하고 따로 회사를 차려 PowerBasic을 만들게 됐다.

2. 다음으로, 본가에 속하는 최상위 플래그십 제품군에는 그냥 자기 회사명을 붙였다.

Borland Pascal, C++
Microsoft Basic, C/C++

1990년대에 C에 이어 C++ 컴파일러가 개발되면서 자기 제품의 공식 명칭을 아예 C++이라고 바꿔 붙이는 곳이 있는가 하면, C와 겸용임을 내세우면서 C/C++이라고 붙이는 곳도 있었다.

볼랜드의 경우 C++을 C와는 완전 별개로 취급했는지 버전까지 1.0으로 도로 리셋하면서 Turbo C++ 내지 Borland C++이라고 작명했지만.. 마소는 C++을 기존 C 컴파일러의 연장선으로 보고 MS C 6.0 다음으로 7.0을 MS C/C++ 7.0이라고 작명했다. 사실, 연장선이라고 보는 게 더 일반적인 관행이었다.

참고로 왓콤 역시 Watcom C 9.0의 다음 버전이 Watcom C/C++ 9.5가 돼서 마소와 비슷하게 작명과 버전 넘버링을 했다. 왓콤은 제품이 짬이 길다는 인상을 주기 위해 첫 버전을 일부러 1이 아닌 6.0부터 시작하는 기행을 벌였었다! 볼랜드의 버전 넘버링과 비교하면 극과 극 그 자체였다.

터보 C++이랑 볼랜드 C++의 차이는.. 더 덩치 큰 상업용 프로그램 개발을 위한 OWL/Turbo Vision 같은 자체 프레임워크 라이브러리를 제공하느냐 여부 정도였지 싶다. 프로페셔널 에디션이냐 엔터프라이즈 에디션이냐의 차이처럼 말이다. 그리고 이때쯤 Windows용 지원도 시작됐다.

3. 그랬는데, 1990년대 이후부터는 그 플래그십 제품군도 Windows 전용의 더 고급 브랜드로 대체됐다.

볼랜드는 90년대 중반의 Delphi와 C++Builder로,
마소는 그 이름도 유명한 비주얼 브랜드로 말이다. Visual Basic, Visual C++.
그리고 마소도 Visual C++부터는 C/C++ 대신 C++만 내걸기 시작했으며,

관계가 이렇게 된다.
Visual C++이 과거 MS C/C++을 계승한 거라는 흔적은 _MSC_VER 매크로 값이 Visual Studio 자체의 버전보다 더 크다는 점을 통해서나 유추할 수 있다.

1이 2를 거쳐 3으로 바뀌는 동안 주변에서는 C 대신 C++이 대세가 되고, 주류 운영체제가 도스에서 Windows로 완전히 넘어가고 거대한 프레임워크 라이브러리가 등장하는 등의 큰 변화가 있었다. 개발 환경도 단순히 코딩용 텍스트 에디터와 디버거 수준을 넘어서 RAD까지 추구하는 수준으로 발전했다.

또한, 이 3단계가 주류가 될 즈음부터 마소의 Visual 툴들이 볼랜드를 완전히 꺾고 제압해 버렸다.
마소가 운영체제 홈그라운드라는 이점을 갖고 있기도 했거니와, 또 근본적으로는 파스칼이라는 언어 자체가 볼랜드의 창업자인 필립 칸이 선호하거나 예상한 것만치 프로그래밍계의 주류가 되지 못하고 마이너로 밀려난 것이 크게 작용했다. 네이티브 코드 생성이 가능하면서 빌드 속도가 왕창 빠른 건 개인적으로 무척 마음에 들었는데 말이다..;;

그에 반해 마소의 베이식은 파스칼보다 그리 나은 구석이 없는 언어임에도 불구하고 자사 운영체제의 닷넷빨 있지, 레거시 베이식도 자사 오피스의 VBA 매크로 언어가 있으니 망할 일이 없는 지위에 올라 있다.

한때(1990년대 후반??)는 파스칼이 언어 구조가 더 깔끔하고 좋다면서 정보 올림피아드 같은 데서라도 각광 받았지만.. 지금은 그런 것도 없다. 그 바닥조차도 닥치고 그냥 C/C++이다.
델파이를 기반으로 이미 만들어진 유틸리티나 각종 DB 연계 프로그램들(상점 매출 관리 등등..), SI 쪽 솔루션을 제외하면 파스칼은 마치 아래아한글만큼이나 입지가 좁아져 있지 않나 싶다..;;.

범언어적인 통합 개발 환경이라는 개념을 내놓은 것도 마소가 더 일렀다. Visual Studio가 나온 게 무려 1997년이니까.. 개발툴계의 '오피스'인 셈이다. (Word, Excel 등 통합처럼 Basic, C++ 통합). 그에 비해 볼랜드 진영에서 Delphi와 C++Builder를 통합한 RAD Studio를 내놓은 것은 그보다는 훨씬 나중의 일이다.

Windows NT야 이미 있던 16비트 Windows와 버전을 맞추기 위해서 3.1부터 시작했는데, Visual Studio의 경우, 공교롭게도 1990년대 중반까지 Visual Basic과 Visual C++의 버전이 모두 4.x대였다.
그래서 첫 버전인 Visual Studio 97은 각각의 툴 버전과 Studio 버전이 모두 깔끔하게 5로 맞춰졌으며, 이듬해에 나온 차기 버전은 어째 98이라는 연도 대신, 버전인 6으로 맞춰질 수 있었다.

2010년대 이후로 C++이 워낙 미친 듯이 바뀌고 발전하고 있으니.. D 같은 동급 경쟁 언어들조차 기세가 꺾이고 버로우 타는 중이다. 도대체 지난 2000년대에 C++98, C++03 시절에는 C++ 진영이 export 병크 삽질이나 벌이면서 왜 그렇게 침체돼 있었나 의아할 정도이다. 그 사이에 Java나 C# 같은 가상 머신 기반 언어들이 약진하니, 뭘 모르는 사람들은 겁도 없이 "C++은 이제 죽었네" 같은 소리를 태연히 늘어놓을 지경까지 갔었다. (2000년대 중반이 Windows XP에, IE6에... PC계가 전반적으로 좀 '고인물'스러운 분위기로 흘러가던 때였음) 한때 잠시 그러던 시절이 있었다.

Posted by 사무엘

2020/01/20 08:34 2020/01/20 08:34
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1707

1. 죄의 성립

기독교의 핵심 기본 교리 중 하나는 바로 인간이 세상 법보다 훨씬 더 원론적이고 고차원적인 의미에서 '죄인'이라는 것, 그리고 인간의 알량한 노력으로는 그 무슨 수를 써서도 죄의 고리를 빠져나갈 방법이 없다는 것이다.

그걸 일깨우기 위해서 복음 설교에서는 "형제를 마음 속으로 미워하는 것만으로도 이미 살인, 마음으로 음욕을 품는 것만으로도 간음" 등 여러가지 말씀 인용과 비유가 제시되는데.. 뭐 좋다. 세상 법과는 달리 마음의 동기와 근원 차원에서 죄가 성립되니까 말이다.
그런데 논리를 펴는 과정에서 최소한의 개연성과 합리성은 있어야 한다. 최소한 자기끼리 모순을 일으키지는 않아야 할 것이다. 다음과 같은 얘기는 좀 조심해서 할 필요가 있어 보인다.

(1) 인간은 당장은 티가 안 나지만 환경이 나빠지고 여건만 갖춰지면 누구라도 지금까지 착 가라앉아 있던 추악한 본성이 다시 튀어나올 거라고 한다. 이는 물론 큰 그림 차원에서는 맞는 말이다.
그런데 나쁜 환경이란 도대체 무엇을 말할까? 정당방위나 긴급피난까지 죄일까? 당장 남을 안 죽이면 내가 죽게 되는 상황이어서 어쩔 수 없이, 혹은 패닉에 빠져서 남을 죽인 것까지 살인죄일까?

이건 세상 법리로나 성경의 법리로나 그렇지 않을 것이다. 하다못해 출애굽기조차도 깜깜한 데서 자기 집에 침입한 도둑을 정당방위 차원에서 때려죽인 건 무죄라고 실드 치니 말이다. (출 22:2-3)
하나님은 인간의 동기와 마음을 일일이 다 따져보시니 이런 문제를 오히려 더욱 정확하게 판결할 것이다.

하지만 어디까지가 사랑의 체벌이고 어디부터가 아동학대 폭력인지, 안락사가 어디까지가 살인이고 어디부터가 하나님이 데려가시도록 놔 주는 건지.. 이런 모호한 상황 문제에 대해서는 신앙을 가졌다는 사람들끼리도 좀 진지하게 생각해 볼 필요는 있다. 남에게 복음 전할 때 자기가 책임질 수 없는 말을 동원하면서 꼬드겨서는 안 된다.

(2) "당신이 어디어디에 낸 돈은 이런이런 나쁜 일을 하는 기업이나 다른 조직의 배를 불리게 됩니다. 그러니 여기 제품을 불매합시다" 이런 부류의 보이콧 권유 문구를 본 적이 있을 것이다. 특히 기독교계에는 어느 기업이 무슨 이단 종교 계열이라는 식이기 때문에 당신이 그 기업의 제품을 구입한다면 그 기업의 악행에 동조하게 된다는 식으로 반쯤 팩트 내지 반쯤 루머 괴담이 나도는 게 많다.

그런데 몇 년 전에는 기업 제품 구매를 넘어서, 세금을 내는 것만으로도 모든 사람들은 이미 죄에 관여하고 있다는 식의 논리 전개를 어느 설교에서 들어서 본인은 개인적으로 굉장히 의아함을 느꼈었다. 이유인즉, 내가 낸 세금이 어차피 반성경적인 나쁜일을 조장하는 데 쓰이기도 하기 때문이랜다.

허나, 기업 제품 구매는 생필품 독과점이 아닌 한 전적으로 자기 자유 의지인 반면, 납세는 마치 군 입대만큼이나 내게 선택의 여지가 없는 의무이다.
더구나 예수님조차 "하나님의 것은 하나님에게, 카이사르의 것은 카이사르에게" 발언과 함께 로마 제국 식민지 휘하에서 납세를 사실상 몇 차례 실천해 보였다. 그럼 예수님도 죄에 관여한 것인가? 저건 비유에 좀 문제가 있어 보인다. 켄트 호빈드 같은 사람을 지지하는 게 아니라면 말이다. (신념에 의한 병역..이 아닌 납세 거부 혐의로 오랫동안 감방 생활함. 꽤 극렬 강경한 젊은 우주 창조론자이기도 함)

(3) 인간은 불법 중에 수태되었고 죄인으로 태어나서 죄를 짓긴 하지만(성악설), 죄인으로 태어났다는 이유만으로 지옥 가는 건 결코 아니다. 이것은 어린아기가 죽었다고 지옥 가지는 않는 것과도 일맥상통한다. 스스로 선과 악을 분별할 능력이 없고 하나님 역시 걔들에게는 죄에 대한 책임을 묻지 않기 때문이다. 어린애는 체벌도 불사하는 양육과 훈육이 필요한 거지, 아예 죽어 버렸을 때의 구원 걱정은 안 해도 된다. 갓 소환돼서 잠시 동안 무적 상태인 게임 캐릭터와도 같다.

내가 늘 강조하지만 인간이 구원받지 못하고 지옥에 가는 건 전적으로 자신의 자유의지와 행위로 인해 가는 것이다. 하나님이 지옥 가기로 찜해 놓고 예정했기 때문에 가는 게 아니다. 다른 건 몰라도 이 점에 대해서는 칼빈주의가 전적으로 틀렸으며 알미니안주의의 통찰이 정확하다.

난 당연히 그런 걸로 알고 있고, 남에게 복음을 전하고 듣기 싫은 얘기를 하는 것도 인간의 그 자유 의지를 돌려 놓고 바꾸기 위해서인 것으로 알아 왔는데.. 그걸 이상하게 배배 틀어서 가르치는 사람도 있다는 걸 알고서 놀랐었다.
다시 말하지만.. 세종대왕과 이 순신이라 해도 자기 의지에 따라서 죄 가운데 죽어서 엄한 곳에 갔을 수는 있다. 하지만 그럴 능력조차 없는 어린애들까지 죽어서 그렇게 되지는 않는다.

2. 회개

이건 몇 년 전에 칼빈주의와 알미니안주의에 대해 논하면서 다뤘던 주제이지만 이번 기회에 다시 한번 복습하고자 한다.

주변에 복음을 전할 때 앞서 다뤘던 저런 죄에 대해서 의에 대해서, 하나님의 거룩하심 공의로움, 심판과 지옥 같은 불편한 진실을 전하지 않고..
무슨 종교 영업사원마냥 “하나님은 사랑이에요, 우리 교회 나오기만 하세요, 님 인생에 나쁠 거 없어요. 이 영접 기도문 따라 읊기만 하세요” 이러기만 하는 건 복음 전파가 전혀 아니다. 그건 시간과 노력의 낭비일 뿐만 아니라, 자칫 잘못하면 전혀 거듭나지 않은 사람에게 거짓으로 구원의 확신까지 심어 줄 수 있는 대단히 잘못되고 위험한 짓이다.

그런데 그런 관행을 까고 비판하는 건 좋은데, 거짓 evangelism을 비판하는 진영은 대단히 높은 확률로 반대편의 잘못된 극단으로 또 빠지더라. 드러난 행실의 변화가 없는 사람은 구원도 못 받은 거라고 말이다. 폴 워셔 목사라든가..

그 진영의 최대 문제점이 뭐냐 하면..
“저는 죄인입니다. 그래서 이제 술 담배 끊고 모든 세상적인 생활방식을 그만두고 예수님처럼 홀리하게 살기로 결단했습니다. 그러니 저를 구원해 주십시오”가 된다는 것이다.
(앞으로 니 힘만으로 그렇게 잘도 살아지는가 한번 테스트 해 봐라)

술 담배, 음란방탕, 살인 간음만 회개의 대상인 줄 알지,
지금까지 하나님이 없다고 생각한 것, 죽으면 다 끝이라고 생각한 것, 착한 일을 나쁜 짓보다 더 많이 하면 구원받는 걸로 생각한 것, 예수가 그냥 십자가에 달려 죽은 사대성인 출신 죄수인줄로만 안 것..

이런 건 회개의 대상이 아니거나 ‘선행’(?)에 비해 굉장히 사소하고 하찮은 것으로 안다. 전자가 아니라 후자야말로 성경이 규정하는, 구원을 가져다 주는 진짜 회개인데도 말이다! 이 황금 만능주의 인본주의 안티개독이 횡행하는 시대에 후자처럼 믿는 또라이 별종이야말로, 당장 인간적으로 바보 같고 거칠고 서툰 구석이 많아도 하나님 눈엔 얼마나 기특하고 예쁘게 보이겠는가? 이런 믿음 체계가 아니면 성경의 기독교가 도대체 타 종교와 무슨 차이가 생기겠는가!

구원은 그냥 구원받은 죄인이라는 영적 출생이고 0차원 점이다. 그 뒤 신앙생활을 통해 영적으로 자라서 차차 예수 그리스도를 닮아 가고 제자의 삶을 살고 그리스도의 심판석용 보상을 쌓는 건 1차원 선이고 축적, 적분이다.

단도직입적으로 말하는데, “예수 그리스도가 내 죄 때문에 십자가에서 피흘려 죽으셨다가 사흘 만에 부활하셨다”라고 믿어서 갓 구원받았다고 해서 곧바로 “주는 것이 받는 것보다 복되다”가 선뜻 믿어지고 행할 수 있게 되는 거 아니다. 구원받았다는 게 영적으로 내부적으로는 정말 대단하고 새로워진 것이지만, 한편으로 외형적으로는 정말 별것 아니고 달라진 거 없이 그대로이다.

세상에는 교회 댕긴다는 사실상의 논크리스천들도 굉장히 많다. 그 사람들은 만약 구원을 못 받았다면, 선행 안 하고 거룩하게 살지 않았기 때문이 아니라, 애초에 저런 믿음 체계도 세워지지 않은 경우가 90% 이상일 거라고 본인은 단언한다.

구원의 결과, 열매(fruit)를 구원의 조건, 근간(root)과 헷갈리지 말라. 킹 제임스 이외의 성서에서 요 3:36 (아들을 믿는 자 vs 순종하는 자)과 벧전 2:2 (말씀의 젖으로 자라라 vs 신령한 젖으로 구원에 이르도록 자라라)가 괜히 변개된 게 아니다.
그리고 행 2:38은 비록 변개 이슈는 없지만 이게 잘못 적용되면 괜히 위험한 결과를 초래하는 게 아니다. 예수님을 십자가에 못 박고 바라바를 선택한 “당대의 유대인들”에게 특별히 처방되었던 회개 조치가 행위 구원 조건으로 둔갑해 버리기 때문이다.

인간적인 생각만으로는.. 하나님이 구원받을 사람, 지옥 갈 놈을 다 미리 갈라 놨다고 생각하는 게 더 편할지 모르고(예정론), 그렇게 컴파일 타임이 아니면 런타임으로 사람이 구원을 상실할 수도 있다고 말하는 게 자기가 싫어하는 교회 내부 사람을 정죄하는 용도로 더 적합하다! 그에 비해 "구원은 확실하게 받았는데 존나 육신적이고 이기적인 영적 아기"라는 개념은 솔~직하게 말해서 별 재미가 없고 이해하기 쉽지 않다. 내 말 틀렸나?

영이랑 혼 구분 없이 싸잡아서 생각하는 게 더 편할 수 있으며, 구원받은 죄인이랑 레알 크리스천을 한데 싸잡아서 생각하고 멋대로 판단하는 게 더 편할지 모른다. 마치 생명 자연 발생설과 지구 평면설이 당장 우리 눈으로 보기에는 더 직관적인 것처럼 말이다. 자살하면 지옥 간다고 생각하는 것도 일단 그렇게 믿어서 해로울 건 없다.

하지만 답이 맞다고 해서 계산 과정이 틀려도 되는 건 아니다. 성경이 그렇게 귀걸이 코걸이 엿가락 같은 책이 아니기 때문이고, 하나님이 그 정도로 원칙 없고 제멋대로 성품이 아니라 우리의 생각보다 굉장히 더 고차원적이시기 때문이다.
선행을 보태서 구원받고 악행으로 구원을 잃을 수 있다고 생각하는 그 사람들 중에 평범한 행실 말고.. 기도를 안 하면, 성경을 안 읽으면 구원을 잃는다고 생각하는 사람은 없을 것이다. 결국 그건 성경의 사고방식이 아니라 자기 편한 대로, 자기 직관대로만 내린 결론일 뿐이다.

그러니 우리는 교리 공부를 통해 인간이 예수님의 어떤 면모를 믿어서(죽으심, 부활), 정확하게 무엇이 거듭나고(내 영)이 무엇이(내 혼) 무엇으로부터(죄의 형벌, 권능, 임재..) 무엇을 통해(은혜와 믿음) 어떤 구원을 받는다는 것인지 정확하게 알 필요가 있다,

3. 믿음

믿음과 순종· 행위는 일체인 걸까 별개인 걸까? 이건 거의 모든 논쟁의 근원이라 할 수 있는 의문이다.
이거 갖고 서로 용어의 정의와 범위도 모른 채 쓸데없는 논쟁이 왕창 많이 오가고, 보다시피 부분적인 면모만 왕창 강조하는 이단 파당이 왕창 많이 생겨 왔다. 여러 장님들이 코끼리를 만지고서 코끼리는 뱀 같은 길쭉한 동물이다, 무슨 건물 기둥 같은 동물이다, 말 같은 안장이 달린 동물이다 등등으로 싸우는 거나 다를 바 없는 모습이다.

사용자 삽입 이미지

일반적으로 믿음이라는 건, 당장 가시적이고 물리적으로 확인할 수 없는 형이상학적인 어떤 정보· 이념을 받아들여서 그에 따라 반응하는 것을 말한다.
성경이 그냥 그리스 로마 신화, 단군 설화 같은 책인 줄 알았다가 전능한 하나님의 영감으로부터 유래된 무오류한 계시라고 보기 시작한 것, 예수 그리스도가 나의 죄 때문에 십자가에서 죽으셨다가 장사된 지 사흘 만에 스스로 부활한 게 맞다고.. 그게 나를 위한 것이었다고 인정한 것이 '믿음'이라고 볼 수 있다.

이런 건 과학으로는 증명도, 반증도 가능하지 않다. 그리고, 이 정도로 생각을 고쳐먹은 것만으로도 대단한 회개· 회심이며 일종의 순종이고 행위이다. 기독교가 요구하는 구원 조건은 대외적인 선행이 아니라 이런 머릿속 소프트웨어 개조가 전부이다.

구원이라는 선물을 내 돈 지불하지 않고 받기 때문에 '행위 없이 오직 믿음'이라고 말한다. 선물을 받고 싶다는 의사를 표현하는 것, 팔에 힘을 주고 손을 내밀어서 그 선물을 받는 것조차 무슨 '자기 의'가 들어간 행위라거나, 선물에 대한 대가를 지불한 거라고는 사회 통념상으로도 그렇게 말하지 않는다. 그런데 칼빈주의에서는 전적 타락이라든가 저항할 수 없는 은혜 얘기를 하면서 이와 관련된 말장난을 좀 하는 모양이다.

그럼 행위란 무엇인가? 간단하다.
형이상학적인 것을 믿고 구원을 받았으니 이를 토대로 당장 나한테 물리적이고 가시적인 손해가 오는 상황에서도 성경의 다른 가르침을 믿고서 절제하고 헌신을 실천하고, 예수 믿는 삶을 나타내 보이는 것을 말한다.
보이지 않는 것을 믿는 증거를 보이는 행동으로 나타내 보이는 것이다. 땡볕에 기우제를 지내러 나가기 전에 우산을 미리 들고 가는 것과 같다.

믿음만 있고 행위가 없는 것은 기껏 내 자신과 집, 처자식을 지키려고 성능 좋은 총을 샀는데, 아니 자기 돈으로 산 것도 아니고 선물 받았는데.. 그 총으로 무장 강도에게 맨날 공포탄만 쏘다가 집이 털리는 것과 같다.
성능 좋은 차를 장만했는데 시동 걸어서 맨날 중립 기어에서만 액셀러레이터를 밟는 것과 같다.

웅웅거리는 엔진음이 들리고 엔진이 돌아가기는 하는 것 같은데 차가 차주의 일상생활에 실제로 쓰이지는 않는다. 그럼 그 차나 총을 선물해 준 사람은 무슨 생각을 하게 될까? (물리학적으로 '일'이란 힘에다가 '거리/길이'를 적분한 것으로 정의됨!)
다만, 어이없고 좀 말이 안 되는 상황이긴 하지만, 그렇다고 해서 그 총이나 자동차 자체가 거짓 가짜는 아닌 셈이다. 자동차 등록증이 있고 총기 사용 허가증은 있다. 물건 자체의 존재와 진품 여부는 소유자의 저 이상한 행동과는 전적으로 별개로 생각해야 할 문제이다.

그리고 믿음에도 분량이 있으며, 믿으려 하지만 잘 안 믿어지는 경우가 있다. 마치 열심히 찾으려(seek) 하지만 안 찾아지는(find) 것처럼 말이다.
기우제를 지내면 비가 올 거라고 믿고 우산을 챙겨 가는 것 정도는 별 부담 없이 할 수 있다. 우산 하나 챙긴 것쯤이야 설마 비가 안 오더라도 내 신상에 큰 타격이 없기 때문이다.

하지만 비가 오는지 여부에 따라서 집 문서를 걸거나 내 손모가지를 건다면 선뜻 하겠는가? 갓 구원받은 초짜가 당장 순교가 가능할까?? 그리고 그걸 못 한다고 해서 "에라이 믿음이 부족한 놈"이라고 욕을 할 수 있겠는가? 그리고 그 초짜가 겁먹어서 순교를 못 하면 구원이 도로 취소될까?

그런 식이다. 믿음도 여러 종류와 강도가 있다. 구원으로 이르는 믿음 이후에는 또 다른 종류의 믿음이 필요하며 그 크기도 차츰 업그레이드 해 나가야 한다. 신혼 부부에게 데이트 때 씌였던 콩깍지가 길어야 얼마나 지속되겠는가? 바로 그것처럼 갓 영접하고 구원받았을 때의 내 감격과 감정과 믿음은 절대로 무한하지 않으니 지속적인 믿음 공급과 성장이 필요하다.

이런 것들을 잘 분간하면 요 3:36 "아들을 믿지 않는 자" vs "아들을 순종하지 않는 자"의 차이를 분별할 수 있으며, '믿음 따로 행위 따로' 같은 말에 대해서 부분적으로 옳은 내용과 전체적으로 틀린 논리 전개를 분별할 수 있을 것이다.

구원받은 뒤에 믿음의 행위가 나오는 거지, "구원에 이르도록 자라라"(벧전 2:2)는 변개된 텍스트이다. 그리고 "구원을 일하여 이루라"(빌 2:12)는 변개는 아니지만 work out을 좀 오해의 소지가 있게 번역한 대목인 것이다.

Posted by 사무엘

2020/01/17 08:33 2020/01/17 08:33
, , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1706

1. 철도 복습

인류가 개발한 교통수단들 중에 외형상 가장 철저하게 시스템에 의한 통제를 받으며 돌아가는 교통수단은 철도이다.
철도는 비행기 같은 3차원이 아니고, 선박이나 자동차 같은 2차원도 아니라 오로지 앞 아니면 뒤밖에 진행하지 못하는 1차원 교통수단이기 때문에 그렇다. 스스로 방향 전환조차 할 수 없고 외부에서 선로를 전환해 줘야 한다.

(덧: 잠수함도 잠항과 부상이 있으니 넓은 의미에서는 3차원이라고 볼 수 있지만.. 공중이 아닌 물 속의 3차원일 뿐인 데다 사실상 군 전용이고, 대중교통의 형태로 운용되는 것은 전무하므로 논외로 하자. 물 속에서는 공기가 없어서 내연기관을 가동할 수 없다!)

철도 차량은 그야말로 모든 것이 파악되고 통제 가능한 '독 안에 든 쥐' 상태로 움직인다. 그리고 조향이라는 차원 하나를 희생한 대신, 일반 자동차를 훨씬 능가하는 수송 능력과 효율, 속도와 승차감과 안전을 얻었다.
"아스팔트 길에서 고무 바퀴 vs 철길에서 철 바퀴"는 동력 효율이 얼마나 차이가 날까? 그리고 도로와 철도에서 무인 자율 주행을 구현하는 기술적 난이도가 서로 얼마나 차이가 날지도 한번 생각해 보자.;;

철도에서는 앞 차와 거리가 너무 가까워지거나 일정 속도를 벗어나거나, 기관사가 생존을 인증하는 신호에 응답하지 않는 등... 별별 이상 징후가 감지되면 열차는 즉시 제동이 걸리고 멈춰서게 된다.
비행기는 테러리스트에 의해 장악되어 폭주하기 시작하면 전투기가 출격해서 격추시키는 것밖에 달리 통제할 방법이 없는 반면, 철도는 비행기는 물론이고 자동차와도 차원이 다른 안전 시스템을 갖춘 셈이다.

출퇴근 시간에 지하철을 타 보면 열차가 걸핏하면 "앞 차와의 거리 유지" 명목으로 답답할 정도로 서행하거나 심지어 급제동이 걸리는 걸 경험할 수 있는데..
이건 기관사가 자동차 몰듯이 자의로 브레이크를 밟아서 그렇게 된 게 아니다. 차량이 자기가 달리는 선로의 신호 상태를 감지해서 알아서 그렇게 동작한 것이다. 철도는 육안으로 앞 차를 발견한 뒤에야 제동을 걸었다가는 십중팔구 충돌 사고가 나며, 그런 무식하고 원시적인 방식은 현업에서 애초에 쓰이지도 않는다.

철도 차량을 그나마 자동차 운전과 비슷하게 기관사의 자의만으로 조종 가능한 곳은 자동차의 주차장뻘 되는 차량 기지 내부 정도밖에 없을 것이다. 거기는 일반인이 절대 출입 금지일 뿐만 아니라, 거기서는 어차피 사람 걷는 속도로밖에 못 밟는다.

이건 증기 기관차가 단선 선로에서 달리던 시절 이래로 열차의 안전이 인간의 오감과 판단력이 아닌 시스템 차원에서 자동으로 보장되는 방법을 연구해 온 엔지니어들의 노력의 산물이다. 어떤 경우에도 한 폐색 구간에 두 열차가 동시에 진입하지 않고, 열차끼리 정면 충돌이나 후미 추돌 사고가 나지 않게 말이다.

이런 이유로 인해.. 고속철의 경우, 지금의 시속 300에서 400~500으로 증속을 하는 것은 차량만 최신 고성능으로 새로 뽑아서 죽어라고 밟는다고 해서 실현 가능하지 않다. 신호· 관제 시스템이라는 소프트웨어 요소까지 싹 다 업데이트를 해야 하는데, 이것이 내가 알기로는 국내 기술만으로 그냥 가능하지 않다. 과거에 재래선에서 열차의 주행 속도를 100에서 150으로 야금야금 올리던 시절과는 상황이 다르다. 철도라는 게 그만치 상상을 초월하게 정교한 시스템인 것이다.

2. 여객기의 항로

육지에 도로와 철도, 바다에 선박의 항로만 있는 게 아니라 하늘에도 지정된 항로라는 게 있다. 이에 대해서는 본인이 3년쯤 전에도 글을 쓴 적이 있다.
여객기들은 목적지 공항을 향해서 무작정 구면기하학에 근거한 직선 지름길 경로로만 가는 게 아니다. 비록 육상 교통수단처럼 산과 강이라는 지형의 영향을 받지는 않겠지만, 다음과 같은 변수들의 영향을 받는다.

  • 제트 기류: 한국과 미국을 오가는 여객기가 갈 때와 올 때 항로가 서로 다른 이유는 이 때문이다.
  • 언제든지 비상 착륙이 가능한 공항까지 일정 거리 이내 유지: 그러니 아무리 지름길 최단거리여도 태평양 정중앙으로 날아가는 여객기는 없다.
  • 비행 금지 구역 회피: 우리나라의 경우 청와대, 원자력 발전소와 원자력 연구원, 군사분계선 부근이다.

지금이 무슨 린드버그가 살던 때처럼 누가 비행기를 인류 최초로 발명해서 아무런 통제도 없는 하늘을 마음대로 누비고 대서양을 횡단하던 시기가 아니기 때문이다.
너 말고도 하늘을 날 수 있는 기계류는 너무 많다. 그렇기 때문에 안전을 위해서라도 비행 신고를 하고 허가를 받고, 남의 나라라면 영공 통과료 내고 관제를 받아야 한다. 그리고 정해진 길로만 가야 하며, 비행 금지 구역 같은 곳에 가서는 안 된다.

사용자 삽입 이미지

여객선의 항로는 다음과 네이버의 민간 인터넷 지도에도 표시되어 있기 때문에 상대적으로 친숙하지만 비행 항로 지도는 정말 해당 분야에 관심이 있거나 직업으로 종사하는 사람이 아니면 접할 일이 없을 것이다. 하지만 이런 항로들은 나름 알파벳과 숫자를 조합하여 국제적으로 통용되는 명칭까지 부여돼 있다. 마치 고속도로나 국도의 번호처럼 말이다.

예를 들어 서울-부산을 잇는 경부선뻘 되는 항로는 A582이다(중간에 대구 경유). 그리고 동해를 따라 국도 7호선과 비슷한 종축 항로는 V11이며, 미국으로 가기 위해 국토를 횡단하는 항로는 G597이다.

위의 항로를 보니 대도시 중에서 서울 강북, 그리고 대전은 공중에서 여객기를 볼 일이 전혀 없는 지역임을 알 수 있다.
그러나 구로-금천 일대는 경부선(+경인선) 때문에 열차가 많이 지나갈 뿐만 아니라 비행기도 굉장히 많이 지나가는 곳이다. 안양 부근에서 미국· 일본행과 국내선 여객기들이 분기한다.

3. 항로의 개선, 복선화

(1) 경상남도 끝자락에 있는 사천 공항의 경우, 서울 김포를 최단거리로 잇는 항로가 존재하지 않는다. 사실, 대구와 광주 사이, 경상도와 전라도의 경계 상공이 공군의 군사 훈련 구역으로 지정되어 있어서 민항기가 비행할 수 없었다.
이 때문에 김포에서 사천을 가려면 과거에는 아예 제주도로 갈 때처럼 광주를 먼저 찍고 나서 동쪽으로 우회해서 사천으로 가는 삽질을 해야 했다. 시간 낭비 돈 낭비는 당연지사였다. 자동차도 아니고 비행기가 이게 뭔 뻘짓인가..;;

이것 때문에 해당 지역에서 "현기증 난단 말이에요" 민원이 빗발쳤었다. 그러던 것이 2000년대 이후에는 규제가 완화되고 대구-사천 항로가 개통된 덕분에 광주가 아닌 대구를 경유하는 것으로 동선이 개선되었다.
경상도와 전라도 사이의 지상에서는 88 올림픽 고속도로가 오랫동안 악명을 떨치다가 결국은 전구간 4차로로 다시 만들어졌는데.. 하늘길에도 오랫동안 같지는 않지만 비슷한 우여곡절이 있었던 셈이다.

다만, 개선된 항로가 개통된 때는 이미 통영-대전 고속도로가 개통되어 항공 수요가 예전에 비해 많이 줄어든 뒤이니 시기가 다소 늦은 감이 있다.

(2) 지난 2012년에는 세계적으로도 손꼽힐 정도로 많은 트래픽을 자랑하던 서울-제주 항로가 무려 '복선화'했다. 철도에서 서울-부산이 1군이라면, 국내선 항공은 서울-제주가 1군인 셈이다. 그리고 저기가 국내 최초 유일의 복선 항로가 됐다.

물론 비행기들은 단일 항로에서도 고도 차이로 상행과 하행(그리고 국내선과 국제선도)을 구분하기 때문에 단선이 곧 철도의 단선 같은 열악한 환경을 의미하지는 않는다. 하지만 서울-제주는 그것만으로도 부족해서 비행기가 제때 이· 착륙을 못 하고 공항 주변을 돌거나(착륙 허가) 활주로에서 대기하며(이륙 허가) 시간을 왕창 날려야 했다.

결국 여기는 방향별로 항로가 분리됐다. 원래 서울-광주-제주 항로는 B576이었는데, 하행용으로 Y711, 상행용으로 Y722라는 항로가 새로 생겼다.
상선과 하선은 서로 무려 14km 정도 떨어져 있으며, 제주 방면이 서쪽이므로 개념적으로 우측통행이다.
기존 B576은 다른 용도로 여전히 쓰인다. 상행인 Y722가 B576에 더 가까이 있다.

항로의 복선화는 철도의 복선화처럼 거창한 시설 따위 만들 필요 없이 지도에서 선만 새로 그으면 되는 일임에도 불구하고.. 이거 하나 고치는 데도 관련 법을 고치고 관제 시스템을 업데이트 하고 중국 같은 이웃 나라들로부터 동의도 얻는 등 절차가 굉장히 복잡했다고 한다.

(3) 오늘날의 관점에서야 단선 철도는 느리고 불편하고, 자동차가 발달하지 못해서 어차피 철도밖에 선택의 여지가 없던 옛날에나 존재하던 유물처럼 느껴진다. 그러나 19세기에 영국에서 철도가 완전 처음으로 등장했던 극초창기에는 철도도 단선이 아닌 복선을 기본으로 깔고 달렸다.

왜냐하면 진짜 옛날에는 전신기라는 것도 없어서 역간의 통신조차 아직 가능하지 않았기 때문이다. 단선 교행을 구현하기 위한 최소한의 기술적 기반이 마련돼 있지 않으니 열차 운행은 최소한의 안전이 자명하게 보장되는 복선 위주로 할 수밖에 없었다. 그러다가 폐색 구간 같은 정교한 안전 시스템이 갖춰지면서 더 저렴한 단선이 가능해진 것이다.

이는 마치 자동차도 19세기 말~20세기 초 극초반에는 전기차가 잠시 활발하게 연구됐고 시속 100도 넘었지만.. 한순간에 도태되고 없어진 것과 비슷한 얘기처럼 들린다.

4. 나머지

(1) 비행기가 기수를 위로 향한 채 땅에 거의 근접해 있는 정지 사진 하나만 보고 이게 이륙 중인지 착륙 중인지 분간이 가능할까?
나 같으면 기체의 pitch 각도(일반적으로 이륙 중일 때가 더 가파름), 랜딩기어 주변의 연기(착륙할 때만 마찰열 때문에..), 주익에 펼쳐진 플랩(착지까지 한 뒤에) 같은 변별 요인이 있으면 가능하겠지만, 그런 차이가 없으면 알 수 없을 것 같다.

전후대칭형 열차의 정지 사진을 보고 진행 방향이 어딜지 판별하는 것은 백색 및 적색 램프가 켜진 방향, 그리고 전철의 경우 팬터그래프가 펼쳐진 쪽(뒤)을 토대로 가능하다. 이거 마치 노을 사진을 보고 아침인지 저녁인지 판별하는 것과도 비슷해 보인다. (그림자의 방향 말고 하늘 색깔만 보고 판별하는 것은 일반적으로 불가능)

(2) 끝으로, 제트 엔진이 달린 비행기는 자동차처럼 한 엔진이 몇 행정 몇 기통이라는 식의 구분은 전혀 존재하지 않으며, 그냥 엔진 자체가 2개냐 4개냐 같은 구분이 있을 뿐이다.
비행기가 순항 중일 때는 공기가 빨려 들어가고 뿜어져 나오는 소리까지 가미되어 육상 교통수단에 존재하지 않는 고유한 날카로운 소리가 난다. 하지만 비행기가 활주로에서 이제 막 가속과 이륙을 시도할 때는 '웨에엥~' 하면서.. 뭔가 전동차의 VVVF 구동음과 일말의 유사점이 있는 소리가 잠깐이나마 난다.

전동차와 비행기의 구동음이 서로 더 비슷해질 수는 없을까? 그러면 철덕과 항덕이 모두 좋아할 텐데 말이다.

Posted by 사무엘

2020/01/14 08:35 2020/01/14 08:35
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1705

GUI 표시 용도로 쓰이는 폰트

컴퓨터에서 폰트, 글꼴이라는 건 말 그대로 사람이 읽는 문자를 찍는 용도로 널리 쓰인다.
그런데 그것만이 전부가 아니다. 문자는 그 자체로 생각보다 굉장히 정교한 그래픽 데이터이며, 그걸 빠르게 보기 좋게 찍어 주는 소프트웨어는 매우 강력한 벡터 그래픽 엔진에 속한다. 이걸 다른 그래픽 요소를 출력하는 용도로 얼마든지 활용할 수 있다.

1. Marlett

단적인 예로 Windows의 경우.. 95부터 7까지 15년 가까이 존속했던 '고전 테마'의 GUI 요소들은 상당수가 글꼴 출력이었다.
체크 박스의 체크 표시, 라디오 버튼의 동그라미, 창의 최소화/최대화/닫기 버튼, 콤보 상자 오른쪽에 붙은 ▼ 모양 말이다.

이것들의 정체는 Marlett이라는 트루타입 글꼴에 들어있는 글립이다. 다음 그림은  이 글꼴에 들어있는 글립들을 표시한 것이다. 모양들이 다들 기억에 남아 있고 익숙할 것이다.
하드코딩된 비트맵이 아니라 이렇게 윤곽선 글꼴로 처리하면 다양한 크기에 대응 가능하다는 이점이 생긴다.

사용자 삽입 이미지

겨우 27,724바이트밖에 하지 않는 아담한 크기이며, 제공되는 글립은 저게 전부이다. Windows 95내지 NT4 이래로 내용이 한 번도 바뀐 적이 없는 듯하다.
라디오 버튼은 잘 알다시피 흑백 음영이 져 있는데, 왼쪽 절반은 흰색으로, 오른쪽 절반은 검정으로 그려서 구현했다는 것을 쉽게 유추할 수 있다. 더구나 응용 프로그램이 크기 조절이 가능한 상태라고 우측 하단에 표시되는 빗금무늬도 알고 보니 이 글꼴의 글자였다.

그런데 어지간한 프로그램의 글꼴 목록에서 Marlett이라는 이름의 글꼴을 본 적이 있는 분은 별로 없을 것이다. 얘는 일반적인 한글 내지 영문용 글꼴이 아니라 Wingding 같은 심벌 전용 특수 글꼴이기 때문에 그렇다.

지금이야 저런 dingbat 심벌들을 모두 독립된 코드값을 부여해서 새로운 문자로 만들어 주는 시대이지만, 옛날에는 유니코드는커녕 2바이트 문자 코드조차도 생소했다. 그러니 기성 문자 코드에 없는 custom 그림문자들은 아스키 코드 번호에다가 글꼴만 달리해서 찍는 게 불가피한 관행이었다. 또한, 그런 용도로 만들어진 심벌 전용 글꼴은 언어별로 필터링을 해서 글꼴 목록을 출력하는 프로그램에서는 이름이 조회되지 않았던 것이다.

Marlett은 MS Sans Serif, System (-_-;; ), Wingding처럼 16비트 Windows 시절부터 존재했던 글꼴도 아니니.. 이름이 더욱 생소할 수밖에 없다. 이 글꼴의 존재를 확인하려면 '문자표'처럼 진짜로 원초적인 글꼴들을 몽땅 나열해 주는 프로그램을 써야 한다.

아직도 잊혀지지 않는데.. 과거에 Windows 95는 알 수 없는 이유로 인해 주기적으로(몇 달 간격?) 글꼴 시스템이 맛이 가곤 했다. 그래서 창의 최소/최대화 버튼처럼 Marlett 글꼴을 써서 출력되던 GUI 요소들이 깨져서 Small Fonts 기준의 숫자나 알파벳으로 바뀌어 찍혔다. 원인은 잘 모르겠지만 운영체제를 강제로 '안전 모드'로 몇 번 재부팅을 해 주면 문제가 해결되었다.

그리고 요즘은 반대로.. 일반적인 숫자와 문자로 찍혀야 할 문자열들이 Marlett 기준으로 엉뚱하게 깨져서 찍히는 문제가 발생하기도 하는가 보다. 난 직접 본 적은 없다.

사용자 삽입 이미지

오늘날의 Windows에서는 고전 테마가 공식적으로는 사라졌지만, 고전 테마 형태의 GUI 요소를 그려 주는 DrawFrameControl 같은 함수는 여전히 존재한다. 그게 없어질 수는 없다. 그러니 Marlett 폰트도 legacy 명목으로 언제까지나 남아 있을 것으로 보인다.

2. 설치 프로그램/부팅 화면에서 쓰이는 폰트

운영체제는 GUI를 제공하는 셸이란 걸 갖추고 있는데, 사실은 그 전에 운영체제의 설치 프로그램도 동일한 셸을 기반으로 GUI를 제공해야 한다.
그렇기 때문에 Windows 원본 디스크의 내부를 뒤져 보면 *.ttf 파일이 존재하는 걸 볼 수 있다. Windows를 다 설치했을 때와 동일한 규모는 아니고, 그냥 설치 프로그램 GUI를 표시하는 데 필요한 정도만 존재한다.

Windows XP쯤부터는 쌩 텍스트 모드라는 게 없어졌다. 그래서 시꺼먼 배경의 명령 프롬프트 전체 화면에서도 한글이 언제나 16*16 비트맵 글꼴로 찍힌다.
그리고 Vista부터는 16*16 비트맵 글꼴이 찍히는 명령 프롬프트 전체 화면이라는 게 없어졌다. 그 대신, 부팅이나 설치 중간에 시꺼먼 배경의 전체 화면이 필요할 때 표시되는 글자들이 16픽셀이 아니라 24픽셀 이상으로 커졌다.

사용자 삽입 이미지

이것들은 다 kor_boot라는 트루타입 글꼴에 포함돼 있는 비트맵 글립이다. 다만, 영문은 설치 때는 똑같은 굴림 계열이고, 설치 후의 부팅 관리자에서는 Lucida Console로 차이가 나는 것 같다.
그리고 하나 더..
Windows 8부터는 운영체제의 부팅이나 설치/업데이트 작업이 진행 중일 때 동그라미 5개가 뱅글뱅글 돌아가는 애니메이션이 나오기 시작했다.

사용자 삽입 이미지

이 애니메이션의 기술 기반은 gif나 avi 따위가 아니라.. 역시 글꼴이다!
malgun_boot라는 글꼴 파일을 보면 U+E000대 사용자 정의 영역에 110프레임이 넣는 각 모양들이 일일이 그려져 있다. 이 글자들을 짧은 시간 동안 연달아 찍게 하면 동그라미 5개가 뱅글 돌면서 들어갔다가 나오는 애니메이션이 그려진다.

위의 움짤은 저 폰트의 글립을 연달아 찍고 화면을 캡처해서 저장하는 프로그램을 본인이 직접 작성하고 돌려서 20분 만에 만든 것이다.

사용자 삽입 이미지

이렇듯, 부팅 때 잠깐 쓰이는 (1) 한글 비트맵 글꼴과 (2) 동그라미 애니메이션용 글꼴이 거론되었는데.. 얘들은 설치 프로그램뿐만 아니라 설치가 완료된 Windows 자체도 사용하는 폰트이다. 하지만 Windows에서 _boot이라는 이름을 가진 폰트 파일이 딱히 조회되지는 않는다.

고전 테마 GUI 글꼴은 앞서 살펴본 바와 같이 Marlett이라고 알려져 있으며, FixedSys, System, MS Sans Serif 같은 옛날 티 팍팍 나는 초 구닥다리 글꼴들도 다 C:\Windows\Fonts에 *.fon이라는 파일 형태로 존재한다. 그럼 저것들은 어디에 콕 짱박혀 있는지, 실체가 어디에 존재하는지가 매우 궁금해진다.

사용자 삽입 이미지

Windows Vista/7부터 마소에서는 Segoe UI라는 이름의 폰트 시리즈를 밀기 시작했다.
처음에는 본편만 있다가 8부터는 Segoe UI Symbol이라는 게 추가됐으며, 얘의 PUA 영역에는 위에서 보다시피 체크박스, 컴퓨터 전원 버튼, 웹브라우저 뒤로-앞으로 버튼, 그리고 좌우상하 방향, 배터리 충전 상태 등...

어지간한 도구모음줄 버튼 아이콘까지 다 폰트 형태로 제공되기 시작했다.
단색으로 단순화됐으면서 크기 조절은 마음대로 되니까.. 폰트가 괜찮은 선택인 셈이다.
원래는 이모지까지 담고 있다가 이모지가 단독으로 워낙 방대해지니 이건 Segoe UI Emoji라는 전용 폰트로 분리되어 나갔다. 한 8.1이나 10쯤부터?

3. 나머지

운영체제뿐만 아니라 응용 프로그램도 자신만의 UI 요소를 간편하고 깔끔하게 출력하기 위해 폰트를 사용한다.
예를 들어 Visual Studio IDE의 경우, 각종 창들을 사용할 때만 툭 튀어나오게 하거나, 아니면 붙박이로 고정(pin)시킬 수 있는데, 그 상태를 나타내는 아이콘이 바로 자체 폰트이다.

초창기 버전인 Visual Studio .NET은 이를 위해 VisualUI라는 폰트를 임시 등록하곤 했다.
아래의 글립들을 보시라. 0x5부터 0x7의 자리에 있는 주사기 비스무리한 아이콘이 바로 저것이다.

사용자 삽입 이미지

.NET의 초기 버전은 자기가 실행돼 있는 동안 VisualUI 폰트가 시스템 전체에 등록되어서 이름을 조회할 수 있었다. 이는 불필요한 side effect이므로 후대 버전에서는 그렇게 되지 않게 바뀌었다.

또한 Outlook도 자체 UI를 표시하기 위한 폰트를 구비하고 있었다. MS Outlook이라는 폰트가 있는데, 아래와 같은 글립만 들어있는 작고 단촐한 폰트이다.

사용자 삽입 이미지

이것도 후대 버전에서부터는 티가 나지 않기 시작했다. 참고로 폰트를 시스템 전체가 아니라 자기 프로세스 내부에만, 더구나 디스크 상의 파일이 아니라 메모리 데이터만으로 간편하게 임시 등록하는 함수는 Windows 2000에서부터 처음으로 추가됐다(AddFontMemResourceEx). 자기들도 프로그램 만들 때 필요하니까 추가한 것이 분명해 보인다.

그럼, 개인적으로 하나 궁금한 것을 예를 들면서 글을 맺도록 하겠다.
저런 기하학적인 UI 이미지 중에는 뭔가 공간이 부족한 환경에서 "나머지도 마저/모두 표시"(Show all / More)라는 의미를 갖고 있는 이중 갈매기(angled bracket) 마크가 있다. >> 요거 말이다. 오른쪽을 가리키고 있는 게 제일 많으며 드물게 아래로 향할 때도 있다.
부등호와 비슷하게 생겼지만 명칭이 부등호는 절대 아니다. 이건 마이너스(빼기)와 dash/hyphen이 다른 것만큼이나 다르며, 번호 #과 조표 #이 다른 것만큼이나 다르다.

사용자 삽입 이미지

이렇듯, 요 마크는 사용자가 심심찮게 접한 적이 있을 것이다.
어째 공교롭게도 Windows XP 시절의 옛날 UI에서 더 눈에 많이 띄는 것 같다만.. 그래도 저 표시가 옛날 UI의 전유물인 것은 아니다.

더구나 Windows 9x 초창기부터 존재했던 물건도 아니다. 그렇기 때문에 의외로 Marlett 폰트에는 존재하지 않는다. 딱 거기 있을 법해 보이는데도 불구하고 말이다.
아래로 향하는 모양은 Windows 2000/ME 시절, 딱 저 personalized menu 때문에 즐겨 쓰였고, 오른쪽으로 향하는 모양도 저렇게 90년대 말이나 2000년대 초부터 등장한 것같다.

본인은 이것도 뭔가 모처의 폰트를 사용해서 출력하는 것이지, 비트맵은 아닐 거라고 생각한다. 하지만 정확한 출처를 발견하지 못했다. comctl32나 shell32 내부에 비트맵으로라도 존재하지 않을까 생각했지만 그런 건 없었다. 그 출처가 궁금하다. 빨리 감기/되감기 버튼처럼 채워진 삼각형이 두 개 붙은 모양은 각종 심벌 글꼴에 아주 흔하게 존재하는 반면에 저 모양은 유난히 눈에 띄지 않더라.

참고로 MFC에서는 하드코딩된 비트맵 형태인 게 맞다. MS Office의 외형을 흉내 내는 기능이 있으니 저런 마크를 출력하는 기능도 응당 있을 텐데.. 소스를 들여다보니 그냥 비트맵이었다. 약간 허무함이 느껴졌다. 명칭은 afxmenuimages.h에 선언돼 있는 IdArrowShowAll (아래), IdMoreButtons (오른쪽)이다.

사용자 삽입 이미지

Posted by 사무엘

2020/01/11 08:33 2020/01/11 08:33
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1704

옛날에는 멀쩡한 사람을 모함하고 누명 씌워서 제거하는 방법이 정치 분야의 역적, 아니면 종교 분야의 이단/이교도(특히 서양에서) 만들기 정도가 있었다.
오늘날은 그때보다 사회 구조가 복잡해졌다 보니, 사람을 유죄 추정의 원칙에 근거하여 매장하는 방법이 분야별로 더 다양해져 있다.
  • 이 반도 땅 한정으로 친일파 내지 빨갱이: 그런데 '진짜 빨갱이'는 멀쩡히 판치면서 돈과 권력을 쥐고 나라를 마음껏 말아먹고 허물어뜨리고 있는 반면, 당장 외환죄 급으로 나라 존립을 위협하는 친일파 따위는 실체가 전혀 존재하지 않는다.

  • 성추행범: 판단 잣대가 그야말로 옛날의 막걸리 반공법 뺨칠 정도로 엿장수 마음대로이다. 그 반면, 무고죄 저지른 허언증년에 대한 응징은 솜방망이급에 불과하다. 신분증 위조해서 술 산 애새끼는 아무 일 없는데 가게만 벌받는 것처럼 말이다.

  • 탈세범: 나랏님 마음에 안 드는 기업인 경제인을 조지는 특효약이다. 특히 영세 자영업자 내지 혼자 잘나가는 프리랜서가 제일 만만한 호구이다. 법의 허점을 완벽하게 피해 가는 게 사실상 불가능이기 때문이다.

위증 무고죄 허언증 거짓말이야말로 한번 입 잘못 놀렸다가는 저 정도로 매장되고 X되고 훅 간다는 사회 분위기가 형성돼야 할 텐데.. 천조국처럼 말이다.

하지만 남을 거짓말쟁이라고 누명 씌우고 매도한다거나, 반대로 그런 누명을 썼을 때 당사자가 빨갱이· 친일파 이상으로 엄청나게 화내고 기분 나빠하고 결투 신청이나 심지어 자결(?)로라도 명예를 회복하려는 관행은 이 나라에 존재하지 않는다. 이 나라는 어쩌다가 이렇게 됐는지는 모르겠지만 거짓말에 너무 관대한 것이 사회악 망국병 수준인 게 분명해 보인다.

그리고.. 억울하게 누명을 쓴 사람이 있는 것과는 별개로, 실제 성추행범과 탈세범, 종북 빨갱이는 지금도 당연히 존재하고 있다. 이들이 죄질이 결코 가볍지 않은 나쁜놈들인 건 변함없다. 소수의 예외적인 사례 때문에 문제의 본질을 놓치지는 말아야 한다.

요 근래에 본인의 멘탈에 굉장히 큰 상처를 입힌 바깥 소식은 세 가지이다.

  • 멀쩡한 월성 원자력 발전소의 원자로 난도질과 해체 (고리도 아니고 월성이더군!)
  • 멀쩡한 탈북자를 범죄자 딱지와 함께 북송 (여기에 대해 침묵할 거면 지금까지 인권팔이 하던 자식들 당장 다 닥버 자폭해라)
  • 그 미친놈을 그나마 법무부 장관 자리에서는 끌어내렸지만.. 수십억대의 갑부 주제에 뭐? 구속되면 가족 생계가 막막하다고 변명을 해..?
    (지금은 신 정아 시즌 2를 찍으면서 국제적으로까지 망신살이 잘 하고 있더라. 그러고 있으면서 정 유라의 과제 대리수행 욕을 같이 늘어놓는 건.. 거의 다중인격 정신분열 중증 말기가 아닌가 싶다.)

저 X끼가 운동권 주사파 출신 법조인이 아니라 그냥 대기업 재벌 2세 3세였어 봐라, 여론이 어찌 됐을까? 우와..
이 세 가지는 정말 자다가도 썅 소리와 함께 벌떡 일어나서 개XX 소XX 쌍욕을 퍼붓고 멱살 잡고 뒤집어엎고 다 때려부수고 쳐죽여 버리고 싶은 사항이다.

킹 제임스 성경이 원어· 원문(originals)보다 더 나은 이유 중의 하나로 "후자는 아예 실체가 존재하지 않기 때문" 이런 논리가 있다.
본인은 이와 정확히 동급으로 "종북이 친일보다 더 나쁜 이유"도 "후자는 아예 실체가 존재하지 않기 때문"이라고 말한다. 지금 일본이 핵무기· 미사일을 개발하고 있고 온갖 비열한 도발로 한국 군인을 다치게 하지는 않았을 뿐더러, 그걸 옹호하거나 일본에게 평화 운운하면서 막 퍼주자고 주장하는 미친놈은 없기 때문이다.

이런 거 분별할 능력도 없는 애새끼들한테 투표권 줘서 뭐 어쩌겠다고?
투표권은 자동차 운전까지 가능하고 납세와 병역이라는 의무를 이행하는 시늉이라도 한 사람에게만 줘도 충분하다.
지금은 사법 책임을 질 수 있는 최소 연령, 목욕탕의 이성탕에 입장 가능한 최대 연령 같은 거나 더 낮춰야 할 것이다.

Posted by 사무엘

2020/01/07 08:35 2020/01/07 08:35
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1702

요즘 Visual C++ 사용 메모

1. 디버깅 관련

수 년 전에 본인은 Windows에서 명령 프롬프트와 디버그 로그(OutputDebugString)에 유니코드가 지원되는 날이 언제쯤 올까 푸념을 늘어놓은 적이 있었는데.. 이건 놀랍게도 Windows 10에서 명령 프롬프트의 유니코드화(특수한 여건이 갖춰졌을 때 부분적으로 한해서)와 더불어 그럭저럭 현실이 됐다.

디버거 툴에 대해서 본인이 더 원하는 것은..

(1) IDE가 디버거를 붙여서 직접 실행해 준 디버기 말고.. 타 프로세스에 의해 실행된 디버기도 자동으로 감지해서 breakpoint 내지 로그 출력을 잡아 주기
(2) breakpoint의 작동 조건으로, "임의의 타 지점을 먼저 지나쳤거나 그게 call stack 아래에 있을 것" 정도 지정하기

정도이다.
(1)을 위해서 Attach to process 같은 기능이 이미 있긴 하다. 하지만 내 프로그램이 아주 잠깐 동안만 짤막하게 실행되고 마는 상황이라면(정상적인 종료이든, 오류로 인한 종료이든) 사용자가 느릿느릿 일일이 저 명령을 내릴 겨를이 없다.
이건 EXE의 디버깅도 DLL의 디버깅과 비슷한 양상으로 만든다. 실행 인자를 사용자가 지정해 주는 게 아니라, 이 EXE는 다른 EXE로부터 어떤 인자를 받아서 실행됐는지를 디버거로부터 안내받게 될 것이다.

(2)는 물론 코드 자체를 고쳐서 상태 변수 같은 걸 global하게 추가하는 식으로 편법으로 구현할 수는 있다. 하지만 그건 몹시 귀찮고 불편하다.
디버깅을 해야 하는 코드가 여러 부분에서 호출되고 있는데 우리는 특정 상황에서 호출된 것에만 관심이 가 있는 거.. 생각보다 자주 있는 일이다. 이에 대한 지원이 더 잘 된다면 프로그래머의 생산성이 많이 향상될 수 있을 것이다.

글쎄, 위의 두 아이템은 오래 전에 이미 언급한 적도 있을 것이다.
이것 말고.. 딱히 기술적으로 어려울 것 전혀 없는데 좀 있었으면 좋겠다 싶은 기능으로는..
디버깅을 위해 실행할 프로그램과 인자(argument)를 여러 세트 등록해 놓고.. 사용자가 예전에 등록해 놨던 세트를 곧장 불러올 수 있으면 좋겠다.

지금도 Debug 탭의 Command 입력란의 콤보 상자를 눌러 보면.. 달랑 revsvr32, Edit, Browse 이런 몇 가지 고정적인 아이템밖에 없다. 거기에다가 사용자가 이전에 등록한 적 있는 세트들이 같이 나오면 된다. 이 얼마나 깔끔한가?
EXE라면 Command가 바뀔 일은 별로 없겠지만 인자에 대한 세트 관리 기능이 있다면 충분히 유용할 수 있다.
IDE에 이런 기능이 없으니 날개셋 같은 개인 작품에서나 회사 제품 코드에서나.. 디버깅을 위해 사용할 다양한 프로그램들 경로를.. 소스 코드 주석이나 별도의 텍스트 파일에다 따로 메모해 놓는 촌극이 벌어지고 있다.

세트 데이터는 굳이 해당 프로젝트 파일에다가 저장하지 않아도 된다. 프로젝트/솔루션에 의존할 필요 없이, 그냥 그 프로그램 자체의 history data 명목으로 관리하는 형태로 제공되어도 충분히 편리할 것 같다.

2. 코드 자동 서식 적용

요즘 Visual C++ IDE에는.. 코딩을 하면서 닫는 중괄호나 세미콜론이 입력됐을 때, 각종 변수와 연산자· 토큰 사이에 공백을 균일하게 삽입하거나 없애고 탭 들여쓰기도 일관되게 맞춰 주는 '자동 서식' 기능이 제공된다. 쉽게 말해 whitespace에 대한 formatting 말이다. 이 옵션이 기본적으로 켜져 있다.

내 기억이 맞다면 이건 Visual C++ 2013쯤부터 처음으로 도입됐다. 2012에는 아직 확실하게 없었다.
베이직은 1980년대 도스 시절 QuickBasic에서부터 있었으며 C#도 최소한 200x 버전에서는 들어간 기능이지 싶은데 C++은 이제야 도입됐다.

다른 언어들은 문장을 완전히 파싱해서 내부 representation tree로 바꾼 뒤, 그걸 텍스트로 재구성함으로써 서식도 덤으로 적용되는 것이겠지만, C++은 그럴 수는 없지 싶다. 진짜 기계적이고 lexical한 문자열 치환 수준에서만 서식이 적용되지 싶다.

자동 서식 기능이 전반적으로는 괜찮은 편인데.. int *a, *b는 왜 int* a, * b라고 공백을 어색하게 배치하나 모르겠다. D처럼 int* a,b라고 썼을 때 b까지 포인터형이 되는 언어라면 모를까, 포인터형 별표와 변수명 사이에 공백이 들어가야 할 필요는 느껴지지 않는다.

그리고 배열 delete인 delete[]도 토큰 배치가 약간 기괴하긴 하지만.. 개인적으로는 붙여서 delete[] ptr; 이러는 걸 선호한다. 거기까지는 괜찮은데 delete []a를 다 붙여서 delete[]a로 바꾸는 건 좀 의아하다. 차라리 delete[] a라고 해 주지..
비슷한 맥락으로로, 함수의 인자로 배열의 포인터를 전달하는데 TYPE(*arg)[4] 같은 것을 한데 다 붙여 버리니 이 또한 어색하고 이상하다.

이런 것들이 C++의 자동 서식은 완전한 파싱을 거쳐서 적용되는 게 아니기 때문에 발생하는 부작용이지 싶다. 그러니 매크로나 템플릿 내부 같은 데서도 정확한 동작을 기대하기 어렵다.

3. 2019, 대화상자 리소스 에디터 뻗음

Visual Studio IDE는 2012~2013 즈음부터 외형이 크게 바뀌지 않기 시작했기 때문에 특히 2015와 2017은 내 경험상 거의 분간이 안 된다. 영문판은 웬일로 FILE EDIT 등 메뉴 이름을 잠깐 몽땅 대문자로 표기하는 객기(?)를 부리기 시작했다가 후대 버전에서 객기를 접은 듯하다.
2019는 프로그램의 제목 표시줄이 없어지고 화면 첫 줄에 곧바로 메뉴가 표시되기 시작했다. 현재 열려 있는 솔루션의 이름은 메뉴의 오른쪽에 표시된다. 윕 브라우저들도 그렇고 요즘은 제목 표시줄을 없애는 게 유행이기라도 한가 보다. 게다가 쟤들은 메뉴조차 없애 버리고 Alt키를 눌렀을 때만 메뉴가 표시되게 해 놨다.

그렇게 프로그램의 외형이 야금야금 바뀌는 것이야 좋다고 치는데.. 왜 예전에는 경험한 적이 없던 버그까지 야금야금 끼어 들어가나 모르겠다.
우선 아주 불규칙하지만 분명한 빈도로.. 텍스트 에디터의 폰트가 본인이 수동으로 변경하기 전의 원래 폰트로 되돌아간다. 정확한 재연 조건은 모르겠다. Visual Studio를 열어 놓은 채로 며칠 간격으로 절전 모드에 들어갔다가 복구하기를 반복하다 보면 되돌아가 버린다.

그리고 C++ win32 리소스 중에서 대화상자 편집기만 제대로 안 열리고 프로그램이 무한 루프에 빠지며(= CPU 소모하면서) 응답이 멎는 문제가 있다.
잘 알다시피 Visual Studio 2012부터는 msi 파일을 생성하는 배포 패키지 프로젝트가 짤려서 기본 제공되지 않는다. 별도의 extension을 설치해야만 다시 지원된다. 본인은 회사에서는 그렇게 했다.

그런데 그 extension을 설치한 뒤부터 win32 프로젝트에서 대화상자 편집기가 열리지 않고 IDE가 얼어붙어 버렸다. 그래서 대화상자 리소스를 편집하는 작업을 할 수가 없어졌다.
뒤늦게 그 extension을 disable시키거나 아예 제거해도.. 버전 16.2.3 최신 업데이트를 적용해도, 심지어 Visual Studio를 재설치(복구)해도 그 문제는 해결되지 않았다! 이 VS 2019는 대화상자 리소스를 영원히 편집할 수 없는 절름발이 상태가 된 것 같다.

검색을 해 보니 이 문제는 VS 2019 초창기 시절부터 종종 보고되곤 했던 것 같다. 하지만 release candidate 수준의 옛날 일이지 최신 업데이트에 이르기까지 문제가 발생하거나 해결됐다는 얘기는 딱히 발견하지 못했다.
이러니 Visual Studio는 최신 버전이 구버전의 용도를 완전히 흡수· 대체하지 못하고 구버전도 여전히 병행해서 사용돼야만 할 것 같다. 결국 회사에서도 2010을 따로 설치해야 했다.

4. 2010, 동작은 하지만 이상한 경고 메시지

그럼 구버전은 아무 이상이 없느냐 하면 불행히도 그것도 아니다.
Windows 10 초창기에는 안 그랬던 것 같은데.. 운영체제 업데이트를 몇 번 거치고 나니 VS 2010 devenv.exe는 정체를 알 수 없는 이상한 에러 메시지를 한번 내뱉은 뒤에 실행된다.

The file C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Vsa.tlb could not be loaded. An attempt to repair this condition failed because the file could not be found.
Please reinstall this program.


이미 알려진 문제이며 .NET Framework 3.5를 설치한 뒤에 Visual Studio도 복구(재설치)하면 이런 메시지가 없어질 거라고 하는데..
프로그램 사용을 못 할 정도의 치명적인 오류는 아니니 귀찮아서 안 하고 지낸다. 어차피 VS 2010을 C# 같은 .NET 플랫폼 개발용으로 사용하는 건 아니니 말이다.

5. 컴파일러의 버그

하루는 32비트 정수와 16비트 정수를 인자로 받아서 이걸 한데 뭉친 64비트 정수를 되돌리는 정말 간단한 인라인 함수를 구현한 적이 있었다. 이렇게 생성된 값을 저장하고 불러오게 했는데.. 문제가 발생했다. 불러온 결과가 이전에 저장했던 결과와 일치하지 않고 프로그램이 제대로 동작하질 않았다.

곳곳에다 변수값을 화면에다 찍어 봐도 내가 짠 코드에는 좀체 문제가 없는 것 같고.. 듣도 보도 못한 이상한 값은 전혀 예상치 못했던 곳에서 갑자기 생기고 있었다.
비유하자면 MAKELONG(16012, 76)의 계산 결과값이 저장할 때와 불러올 때가 서로 다르다는 게 믿어지시는가? high word 쪽의 값이 내가 지정한 값이 아니라 32766 같은 엉뚱한 값을 기준으로 계산되었다.

해당 함수를 #pragma를 줘서 최적화를 끄고, 인라이닝을 해제하는 등 별짓을 해도 계산값이 교정되지 않았다. 컴파일러가 구형인 것도 전혀 아니고, 갓 업데이트 받았던 따끈한 Visual C++ 2019 16.3.2였다.
신기한 것은.. { return X|(Y<<32); } 대신

{
    auto ret = X|(Y<<32);
    TRACE("%d %d\n", X,Y);
    return ret;
}

이렇게 함수 인자를 강제로 화면에다 찍게 하면 버그가 발생하지 않고 계산이 맞게 되었다는 것이다.
하지만 저렇게 하지 않고 함수를 아예 #define 매크로 형태로 고쳐도 문제가 동일하게 발생하니.. 이 정도면 변수를 참조하는 코드 자체가 단단히 잘못 생성되고 있는 것이나 마찬가지였다.

수 년 전엔 bit rotation을 구현한 암호화 알고리즘에서도 release와 debug의 동작이 다르고 최적화 적용 여부에 따라 동작이 달라지는 현상을 발견하긴 했는데.. 이 문제는 그것보다도 더 심각한 문제였다.
물론 비트 연산이라는 공통점은 있다. 컴파일러가 << >> | 같은 연산자를 다루는 데서 무리하게 최적화를 시도하는가 보다.

결국 이 버그는 memcpy라는 무식하기 짝이 없는 물건을 동원함으로써 겨우 회피할 수 있었다. 64비트 정수에다가 일단 32비트 값을 대입한 뒤, 4바이트 오프셋에다가 16비트 정수를 강제로 복사하게 했다. 컴파일러가 memcpy는 어째 제멋대로 최적화를 안 했는지 이렇게 하니 프로그램이 깔끔하게 돌아가기 시작했다. 비트 엔디언 독립성은 물론 포기했다.

memcpy는 예전에 align이 맞지 않는 임의의 단위로 메모리를 읽고 써야 할 때.. x86 계열에서는 아무 문제 없다가 ARM 같은 CPU에서 멀쩡한 프로그램이 뻗을 때도 유용하고 사용한 적이 있다.. CPU 특성이나 컴파일러의 특성을 가리지 않고 제일 무식하고 확실하게 메모리를 읽고 쓰는 게 보장돼야 할 때 최후의 보루 역할을 하는 듯하다.
그나저나 컴파일러의 버그임이 명백한 이 현상은 도대체 왜 발생하는지, 해결할 방법이 없나 궁금하다.

이상이다.
본인은 예나 지금이나 개인용 컴터에는 VS 2003, 2010, 2019를 나란히 설치해 놓고 지낸다. 즉, 최신 버전 말고도 2003과 2010은 고정 설치라는 뜻이다.

한때는 최신 API에 대한 설명 때문에 201x의 도움말을 하드에 설치해 놓았으나, 요즘은 마소에서 로컬 도움말은 2015 이후로 업데이트도 안 하고 거의 버린 자식 취급하길래..
그건 포기하고 그냥 옛날 200x 시절의 MSDN을 고전 Windows API 및 기본 C/C++ 레퍼런스용으로 사용한다. 이걸로 충당이 안 되는 최신 정보는 인터넷 조회로 해결하고 말이다.

Visual C++ 201x 버전들에서 본인의 기억에 남아 있는 인상적인 변화 사항은 다음과 같다.

  • 2012: 흰 스킨 도입. Windows XP 타겟 지원을 최초로 중단했다가 별도의 툴킷으로 따로 제공 시작. Syntax coloring이 더 세분화됨. 정적 분석 기능 도입. 예전 같은 서비스 팩 대신, 업데이트 n 형태로 수시로 업데이트 되기 시작
  • 2013: 약간 푸르스름하면서 흰 스킨 도입. 코드 자동 서식 적용 시작, 커뮤니티 에디션 도입.
  • 2015: C 런타임 라이브러리 구조가 개편됨
  • 2017: 설치/업데이트 체계가 전면 개편됨. 안드로이드 등 별별 환경 개발까지 다 지원하기 시작. 오프라인 도움말 앱을 사실상 지원 중단
  • 2019: 프로그램 제목 표시줄이 없어짐. 스플래시 화면이 더 간지나게 바뀜. 색깔이 채도가 약간 더 올라가고 산뜻해짐. 처음 실행했을 때나 기존 솔루션을 닫은 직후에 통상적인 시작 페이지 대신, "원하는 작업을 선택하세요" 대화상자가 표시됨.

Posted by 사무엘

2020/01/04 08:34 2020/01/04 08:34
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1701


블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2020/01   »
      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:
2620103
Today:
3102
Yesterday:
1544