« Previous : 1 : ... 107 : 108 : 109 : 110 : 111 : 112 : 113 : 114 : 115 : ... 232 : Next »
 
헌정체계 대통령 대수 대통령 개헌 내력 북괴
미군정 존 하지   소련정
1공 (1948) 1 이 승만 제헌헌법, 대통령 4년+1중임, 부통령, 간선 김 일성
2 1차, 대통령 직선제 (부산 정치 파동, 발췌개헌)  
3 2차, 초대에만 중임 제한 폐지 (사사오입) 8월 종파 사건 (정적 숙청)
2공 (1960) 4 윤 보선 3차, 의원내각. 최초의 졸속 아닌 합법적 개헌  
국가재건 최고회의 의장 4차, 1공 시절 잔재 청산??  
3공 (1962) 5 (vs 윤 보선) 박 정희 5차, 대통령 중심제로 회귀. 지방자치 사실상 사문화  
6 (vs 윤 보선)    
7 (vs 김 대중) 6차, 3선 개헌  
4공 (1972) 8 단 7차, 유신, 대통령 6년+무제한 중임, 간선 주체사상 명문화 (자가신격화)
9 독
10 출 (1979) 최 규하    
11 마 (1980) 전 두환    
5공 (1981) 12 8차, 대통령 7년 단임  
6공 (1988) 13 노 태우 9차, 대통령 5년 단임, 직선; 지방자치제 부활  
14 김 영삼   김 정일, 고난의 행군 (경제 파탄)
15 김 대중    
16 노 무현    
17 이 명박  
18 박 근혜  3공과 6공 그 어떤 선거 때보다도 많은 득표율로 당선됐지만..;; 탄핵소추 파면 김 정은

대한민국, 남한이라는 이 나라는 다음과 같은 점들로 인해 여느 나라들과 같지 않은 독특한 현대사를 보유하고 있다.

  • 20세기 중반에 주변 나라들과는 달리 매우 이례적으로 공산화되지 않았다.
  • 일본의 덴노 같은 정신적인 지주나 중심점이 있지 않으며, 그나마 있던 것도 조선이 망하면서 싹 사라졌다.
  • 미국처럼 초대 대통령이 2선만 하고 깔끔하게 물러났다거나, 쿠데타 한 번 없이 평화적으로 정권이 교체되어 오지 않았다. 미국은 도중에 중임 관련 규정만이 살짝 바뀌었을 뿐, 대통령의 임기 체계 자체가 우리나라 헌정사 같은 급의 큰 변화나 굴곡을 겪은 적은 없다.

본인은 노 태우 대통령 내지 서울 올림픽 시기가 스스로 경험한 기억이 아직까지 남아 있는 가장 먼 과거이다. 그 이전은 기록을 통해 간접 체험만을 한 선사시대이다.
그렇기 때문에 본인은 5공 시절을 직접 경험한 기억이 없다. 노 태우의 바로 전임까지만 해도 대통령을 5년마다 한 번씩 뽑지 않았을 뿐만 아니라 나라의 정치 체계가 완전히 달랐다는 얘기가 대단히 충격적으로 들릴 수밖에 없었다.

그렇잖아도 그땐 도대체 선거를 어떻게 했기에 이 승만이나 박 정희는 1~3대, 5~9대로 대통령을 그렇게 오래 할 수 있었는지, 그리고 굳이 왜 기간과 대수를 나누는지를 이해하지 못했다.
각 대통령에 대한 호불호야 개인의 정치 성향에 따라 달라지겠지만 이런 들쭉날쭉한 자국의 헌정사 자체는 역덕후에게 뭔가 유사점과 차이점을 정리하고 분석할 만한 좋은 아이템인 것 같다.

가장 먼저 미군정부터 생각해 보자. 미군정은 기간이 짧고 존재감 없는 과도기여서 잘 부각되지 않지만, 알고 보면 단군의 후손들이 거의 전무후무하게 백인(미군정 사령관인 존 하지 장군)의 통치를 받은 시절이라는 점에서 굉장히 독특하다. 마치 신미양요가 분단 이전에 단군의 후손이 무려 미국과 군사 교전을 벌인 전무후무한 사건인 것처럼 말이다.
한국은 일제 식민지가 됐을지언정 제국주의· 군국주의에 입각한 서양 백인들의 지배를 받은 적이 없다는 점에서 전세계적으로 매우 드문 나라이다. 영국이라든가 스페인이라든가... 대한민국 역사상의 미군정은 저런 이념에 따른 지배는 아니었다.

그 뒤 우리나라 역사상 통치 기간이 가장 길었던 대통령 톱 3(쓰리)는 이 승만, 박 정희, 전 두환이다. 이 승만은 선출은 선거를 통해 무리 없이 됐지만 훗날 장기 집권을 위한 꼼수 개헌을 했으며, 박 정희는 쿠데타에다가 장기 집권 개헌을 모두 자행한 인물이다. 마지막 전 두환은 집권을 위한 쿠데타만 저질렀으며 임기 만료 후에는 군소리 없이 물러나긴 했는데.. 이것도 전국민적 저항이 없었으면 물러나지 않았을지도 모른다는 분석이 있긴 하다.

초대 제헌헌법이 규정하는 대통령 체제는 보다시피 완전 미국 스타일인 걸 알 수 있다. 이 승만은 1~3대 대통령을 역임했는데, 위의 표에서 보다시피 매번 헌법을 자신의 당선에 유리하게 약간씩 뜯어고쳤다. 직선제는 그 자체는 나쁠 것 없는 선거 제도이지만, 아마도 꼴보기 싫은 야당 의원이 아니라 무지몽매한 민중을 돈과 서커스로 꾀어서 직접 투표를 시키면 여당에게 더 유리할 것 같아서 도입한 듯하다. 그래도 2선 때는 우리나라가 아직 전쟁 중인 관계로 정서적으로 어지간해서는 집권 여당을 바꾸지 않으려고 하니 이 승만의 당선에 큰 문제는 없었다.

다만, 3선 이상까지 하는 건 법적으로 금지되어 있으며, 심지어 롤모델 국가인 미국에서도 대공황에서부터 2차 세계대전을 모두 경험한 프랭클린 루스벨트 같은 사례 말고는 찾기 어렵다. 그러니 단순한 정치깡패 동원이나 부정선거만으로는 안 되고 또 헌법을 고쳐야 했다.

다른 대통령도 아니고 초대 대통령이 벌써 저런 짓을 하면 얼마나 안 좋은 선례가 남겠는가? 개인적으로는 그 고령에 그 검소한 구두쇠 대통령이 다른 돈과 권력, 명예를 탐해서 저런 짓을 한 건 아니고, 그냥 "어떻게 세운 나라인데 내가 꽉 붙들지 않고 야당에게 정권을 선뜻 넘겨 줬다간 남조선이 또 공산당 손에 넘어갈 것 같다."라는 자격지심 똥고집 때문에 저렇게 된 것 같다. 그게 아무 근거 없는 황당한 망상도 아닐 뿐더러 인의 장막은 그 기질을 더욱 부추겼을 테고. 게다가 신 익희(1956), 조 병옥(1960) 같은 야당 라이벌 정치인이 알아서 없어져 주기까지 한 덕분에 3선과 4선은 더욱 수월하게 넘겼다.

허나 도를 넘는 부정선거가 폭로되면서 12년 독재를 참다못한 국민들로부터 전국적인 혁명이 일어나자, 이 승만은 현실을 직시하고 하야를 선택하게 됐다. 제1 공화국은 자신은 부정부패와 독재를 저지르면서도, 참 아이러니하게 국민들에게는 국민학교에서부터 자유 민주주의를 가르치면서 오히려 자신을 무너뜨릴 만한 사상적인 기반을 듬뿍 마련해 줬다. 비록 현실이 시궁창이었을지언정 최소한 방향만은 올발랐던 셈. 이로 인해 남한과 북한은 서로 완전히 다른 길을 가게 됐다.

이 승만 얘기가 갑자기 좀 길어졌는데, 그 다음 출범한 제2 공화국은 우리나라 헌정 역사상 최초이자 최후인 의원내각제 정부이다. 군부나 독재자의 입김이 개입하지 않고 나름 최초로 합법적(?)인 절차로 개헌도 이뤄 냈다. 이게 제대로 시행됐으면 대한민국이라는 나라는 이 승만 시절과는 굉장히 딴판인 나라가 됐을 수도 있지만 박 정희 군사정권으로 인해 송두리째 뒤집어엎어지면서 이건 정말 짧고 존재감 없는 흑역사 헌정 체제가 됐다.

2공이 계속 유지되는 배경을 설정해서 대체 역사물 소설이나 영화가 충분히 나올 법해 보이지 않는가? 아예 조선이 망하지 않아서 입헌군주제가 계속 유지되는 상황을 가정하는 것보다야 더 현실적일 것 같지만.. 그래도 현실에서는 고종· 명성황후가 장 면· 윤 보선보다 존재감이 더 크고 대중적인 인기가 더 좋다.

2공은 '장 면 내각'이라고도 불린다. 다만, 장 면은 국무총리였고 대통령은 엄연히 윤 보선이었다. 이때 행해진 4차 개헌은 친일 반역자..는 아니고 1공 시절의 정치 깡패나 부정 선거 주동자 같은 반민주(반민족이 아님) 행위자를 처벌하고 청산하는 법적 근거를 마련하는 개헌이었다. 하지만 이에 대해서는 과거의 행위를 새로운 법으로 처벌하는 것이니 법리적으로 문제가 있다는 비판이 그때부터 있었다. 4공 시절 박통의 긴급조치 중 3호만은 그리 정치적이지 않고 생뚱맞은 민생 분야인 것과 비슷하게 4차 개헌은 나머지 개헌들과는 성격이 좀 다르다.

그 다음으로, "자고 일어나니 세상이 바뀌었다"의 주인공인 박 정희가 등장한다. 그는 대통령 선출은 훗날 전역 후 민간인 신분으로 된 것이고, 쿠데타 직후에 아직 군인 신분일 때는 '국가재건 최고회의' 의장도 역임했었다.
이때는 아직 나라가 워낙 못살고 사회 기강이 불안하고 6· 25 시즌 2가 또 벌어질지 모르는 지경이었기 때문에 "다 갈아엎자" 식의 군사혁명은 우리가 지금 생각하는 것보다 지지를 많이 받았다. 지금처럼 길거리에 뛰쳐나와 촛불 들고 "민주주의가 죽었습니다" 이럴 상황이 아니었다. 전땅크의 쿠데타 때와는 달리 박통의 쿠데타 때는 누가 막 심하게 저항하거나 죽지도 않았다.

박통은 차근차근 자본을 유치하고 경제 개발을 해 나갔다. 경부 고속도로도 3공 시절에 완공되었다. 하지만 겨우 한두 대만으로는 임기가 너무 짧았다. 온갖 공작으로 야당 후보를 간신히 이겼는데 3선을 하자니 진짜 이 승만 시절의 사사오입 개헌과 정확히 같은 방식으로 헌법을 또 날치기로 고쳐야 하게 됐다. 그리고 나중에는 헌정 체계를 전반적으로 다 자기 독재에 맞게 뜯어고치는 유신 헌법을 제정하게 되었다.

4공 체제에서는 단독 후보가 혼자 출마해서 꼭둑각시 의원들의 만장일치에 의해 대통령으로 선출됐다. 대통령은 국회를 해산할 수 있지만 국회는 대통령을 탄핵할 수 없었다. 그리고 대통령은 앞서 언급했듯이 긴급조치라는 필살기도 내릴 수 있었다.
우리나라 정치 제도가 이렇던 시절이 있었다는 게 믿어지지 않는다. 이건 정치적으로 엄청난 모험이었기 때문에 반발을 최소화하려면 경제 개발, 민생 안정, 굳건한 반공 안보, "우리식 민주주의" 등 뭔가 좋은 명분을 만들어서 '유신'이라는 브랜드명(?)에 대해서 사람들에게 긍정적인 세뇌를 시켜야 했다.

박 정희가 암살당하지 않았으면 이 4공 체제가 도대체 얼마나 갔을지 모르겠다. 사실, 그가 9대 대통령의 예정 임기만 다 마쳤어도 이미 1984년이 되기 때문이다.

서울 지하철에서 5~8호선뿐만 아니라 3호선 양재-수서와 4호선 당고개도 시기적으로는 2기 지하철에 속하듯, 10대 최 규하와 11대 전 두환도 시기적으로는 이런 4공 체제에서 선출된 것이다. 그러나 박통 당사자 말고 다른 정치인들이 이런 무지막지한 독재 헌정 체제를 받아들일 리 없었으므로 이내 쿠데타가 일어났고 헌법도 업데이트 됐다. 그래서 4공 중에서 8~9대는 유신 시대이지만, 10~11대는 "국가보위 비상대책 위원회"라는 기구 휘하에 있었다.

박통이 암살 당한 뒤에도 1980년 서울의 봄은 오래 가지 못했다. 독재자가 물러났다고 해서 군대가 필요 없어지는 건 아니니까. 그래도 "대통령 임기와 관련된 개헌은 그 당대의 대통령에게는 적용되지 않는다"라는 가히 "신의 한 수" 소급 적용 금지 조항이 5공 시절 8차 개헌 때에야 드디어 추가되었다. 뭔가 "자백만이 형사 피고인에게 불리한 유일한 증거라면 그 자백은 인정되지 않는다", "피고인에게 유리한 법 개정만 소급 적용되고, 불리한 것은 적용되지 않는다"와 비슷한 맥락이다.

이런 우여곡절 시행착오를 겪은 뒤, 우리나라는 1987년 6월 항쟁을 계기로 6· 29 선언이 이뤄졌으며, 박 정희 유신 시절 이래로 없어졌던 대통령 직선제가 부활하고 5년 단임제가 정착했다. (5공 12대 대통령 선거도 유신 시절 같은 노골적인 단독 출마만 아니지, 주요 야당 후보들은 감금당한 채로 관제야당 후보들이나 참여한 답정너 선거였기 때문) 당장 13대 때는 후보 단일화 실패로 인해 또 전 두환의 육사 후배인 노 태우가 당선됐지만, 14대 이후부터는 순수 민간인 대통령이 나오고 있다.

이 1987년 9차 개헌이 우리나라 역사상 유일하게 10년 넘게, 아니 30년 가까이 장수하고 있는 헌정 체계이다. 과연 이 상태에서 헌법이 부분 또는 전면 개정돼서 7공화국이 나올 일이 있을지는 모르겠다.

총평

1. 본인은 위와 같은 내력을 감안하고도 이 승만과 박 정희 대통령을 매우 긍정적으로 본다. 전자는 0에서 1을 만든 사람이고 후자는 1에서 100을 만든 사람이다. 그 절망적인 가난과 시궁창인 국민 의식, 북괴의 위협 속에서 그만치라도 이룬 게 용하고, 그 정도 독재는 막 잘했다고 칭송할 수는 없어도 이해와 수긍이 된다. 지금 역으로 의회와 언론의 막장 횡포를 생각하면, 옛날에 그 상황에서 그 정도 의회· 언론의 통제와 독재 없이 적화통일을 어떻게 막고 경제 성장이고 민주주의고를 어떻게 이룰 수 있었을까? 독재 정권이 뭘 그렇게까지 망쳐 놓을 게 있었는지 이상한 피해의식 선동에 공감하지 않는다.

2. 물론 경제 성장을 이룬 뒤에 이 정도 국민의 희생으로 '직접 민주주의'를 이룬 것 역시 그 의미와 가치를 폄하하고 싶지 않다. 우리나라 역사는 충분히 자랑스러운 역사이다. 군사 정권이 잘한 것을 실드 치더라도 그들의 쿠데타에 희생된 사람들을 잊고 싶지는 않다(장 태완 같은).
하지만 오늘날은 민주화라는 게 그냥 별 명분도 없이 그저 권위에 대항하고 반역하는 걸 합리화하는 데 쓰이고 국가 체제를 부정하고 필요악을 없애자고 하고 더 심하게는 반정부 종북 세력에게 선동되고 이용당하는 추세가 명백하여 본인은 이를 경계한다. 옛날에는 민주화 운동을 하는 운동꾼들도 태극기를 들고 나오곤 했는데 요즘 어떤 사람들은 태극기와 애국가를 싫어하는 것 같다.

3. 북괴의 존재로 인해 대한민국은 무슨 분야든 천천히 여유롭게 발전을 할 수가 없어졌다. 여기서 우리나라 20세기 중후반의 대부분의 비극이 시작됐다. 또한 북괴 같은 저질이 존재함으로써 우리나라 정치인들의 수준까지 하향평준화되었음도 명백히 사실이다. 뭔 무능과 비리를 저지르더라도 최소한 안보관· 사상 자체가 썩었거나 대놓고 북괴에다가 퍼주고 교류하자, 말만 번드르하게 포장해서 공산주의 하자는 놈들보다는 훨씬 나으니까. 그건 어쩔 수 없는 사실이니까. 이건 우리나라 정치판의 고질병으로 남거나, 아니면 진짜 나라가 망해서 고생해 봐야 해결될 것 같다.

Posted by 사무엘

2017/05/28 08:33 2017/05/28 08:33
, , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1364

지난 3월 초에 본인은 1년 전에 한번 오른 적이 있는 불암산을 다시 찾았다. 단, 북쪽의 당고개 역 인근에서 출발했던 그때와는 달리, 이번에는 태릉 방면의 남쪽 구간만 잠깐 오르다가 곧장 하산했다. 여기를 답사하게 된 계기는 다음과 같다.

사용자 삽입 이미지

인터넷으로 지도를 만지작거리던 중, '공릉산 백세문'이라는 이름이 붙은 이 문과 산책로가 눈에 들어왔다. 여기 근처에는 서울 과학 기술 대학교와 원자력 병원이 있고, 산기슭에는 서울여대, 육사, 태릉 선수촌 등이 있다. 예전에 불암산을 올랐다가 돌아오면서 이 도로(화랑로)를 버스 타고 지난 적은 있지만, 정작 근처의 불암산 구간을 답사한 적은 없었다. 그래서 여기를 다녀와야겠다고 마음먹었다.

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

아파트 뒤로 난 언덕길의 좌우로는 처음엔 평범한 울타리가 있다가 나중엔 살벌한 철책으로 바뀌기도 했다. 왼쪽엔 한전 인재 개발원은 고압 전기 시설 때문에 경비가 삼엄하며, 오른쪽에는 문화재인 태릉에다가 태릉 사격장이 있으니 아무래도 아무나 못 들어가게 통제를 해야 한다.
불암산이 남쪽엔 요주의 문화재와 보안 시설이 많이 자리잡아 있다. 그래서 이런 것들 말고 참호 같은 군사 시설도 있었고 거기에는 '촬영 금지 - xxxx부대장 백' 이런 표시가 붙어 있었다.

사용자 삽입 이미지

등산로는 철책을 따라 이런 식으로 계속 이어졌다.

사용자 삽입 이미지

그나마 딱 한 군데 전망이 트인 곳에서는 육사 캠퍼스가 희미하게 보였다. 지인용(智仁勇) 탑과 근처의 동그란 육군 박물관이 보인다. 봉화산에서는 육사를 전혀 볼 수 없었는데 산에서 저기를 이렇게 보는 건 처음이다.

사용자 삽입 이미지

한전 인재 개발원에서는 한참 멀어졌다고 생각하지만 바닥에는 한전에서 매설한 듯한 무슨 표지석이 눈에 띄었다. 3 말고 4라고 적힌 것도 봤다.

사용자 삽입 이미지

이제 불암산 남부의 등산로에서 중요한 분기점이 나타났다. 서울 둘레길을 선택하면 인서울에 속한 산중턱 능선만 계속 타면서 북쪽의 당고개· 수락산 방면으로 갈 수 있다. 사실, 공릉산 백세문에서 시작해서 본인이 지금까지 걸은 길도 서울 둘레길이다.

아니면 다른 길로 가서 봉우리를 갈아탈 수 있다. 그러면 거기서 또 다른 갈림길이 나타나는데, 거기서 불암산의 정상으로 가거나 아니면 이 상태로 삼육 대학교 방면으로 하산할 수 있다.
본인은 오랜 고민 끝에 서울 둘레길은 더 가지 않고 정상· 삼육대 방면을 선택했다.

사용자 삽입 이미지

이제는 철책이고 울타리고 뭐고 다 없어지고 산행을 하는 것 같았다. 그러나 그것도 잠깐이고 본인은 삼육대 방면으로 하산했다. 그러자 여기부터는 삼육대 사유지임을 알리는 표지판과 각종 울타리가 나타나기 시작했다.

사용자 삽입 이미지

불암산 정상은 바로 저기이다. 북한· 수락산처럼 얘도 꼭대기 부근은 온통 바위이다.

사용자 삽입 이미지

이것은 삼육대 캠퍼스 안에 있는 그 유명한 '제명호'라는 인공 호수이다.
종교 계열 학교 아니랄까봐, 곳곳에서 금주 금연 강조하고 성경 말씀이 걸려 있고 "거룩한 안식일에 드리는 예배에 등산객 여러분도 초대합니다" 이런 표지판이 보였다.

사용자 삽입 이미지

삼육 대학교 백주년 기념관의 모습. 삼육 대학교 캠퍼스를 구경한 건 이번이 난생 처음이었다.
비록 불암산 자체는 별로 높게 오르지 않고 등산을 짤막하게 마쳤지만 작년에 갔던 곳과 중복되지 않는 구간만 다닌다는 목표는 달성했다.

천장산 기슭에 의릉이 있는 것처럼 여기 근처에는 태릉과 강릉(?)으로 들어가는 입구가 있었다. 하지만 거기에 가 보지는 않았다. 그 대신 본인은 여기 근처에 있는 또 다른 낮은 산인 초안산을 찾아갔다.

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

초안산은 전철 1호선 녹천 역에서 내리면 코앞에 있다.
옆에 중랑천을 흐르는 동부 간선 도로가 원래는 강의 양 옆으로 상행과 하행이 달리는데, 여기 초안산 구간만은 부지가 없어서 전철 선로가 중랑천의 바로 옆을 지난다. 이 때문에 이곳은 동부 간선 도로도 폭이 좁아지기 때문에 병목과 정체가 발생하곤 했다.

도로의 확장을 위해 철도 선로를 이설하겠다는 계획이 거의 2000년대부터 나온 걸로 기억하는데 아직도 진행은 지지부진한가 보다. 그래도 여기 주변의 풍경이 가까운 미래에 바뀌기는 할 것으로 보인다.

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

초안산은 워낙 작고 낮은 산이며, 비슷한 체급인 봉화산처럼 등산로도 여기저기 많이 뚫려 있었다. 여느 산들처럼 어디에서 어디 지점까지가 수 km 거리가 아니다. 그냥 몇백 m만 설렁설렁 걸으면 된다.
원래는 산의 규모가 더 큰데 덕흥로라는 길을 내느라 둘로 쪼개진 듯하다(창동 주공 4단지 아파트, 생태 다리).

사용자 삽입 이미지

낮은 산치고는 정상 주변에 헬리패드도 있고 정자와 심지어 태극기 등, 메이저급 산의 정상에 있을 만한 시설은 다 놓여 있었다.

사용자 삽입 이미지

그리고 내가 초안산을 찾은 또 다른 이유는 바로 이것.
초안산에는 조선 시대 궁궐 내시, 양반, 서민 등의 무덤이 1000여 개 가까이 있다고 한다. 정상 근처를 보니 웬 묘비와 석상들이 여럿 보였다. 내가 지금까지 올랐던 다른 산에서는 볼 수 없는 광경이었다.

사용자 삽입 이미지

녹천 역에서 /자 모양으로 산을 남서쪽으로 가로질러서 하산했다. 역시 빽빽한 아파트와 빌라들이 나를 반겨 주었다.

Posted by 사무엘

2017/05/25 08:31 2017/05/25 08:31
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1363

1. 트리플

  • 저그 해처리 레어 하이브 : 학사 석사 박사
  • 워드 엑셀 파워포인트 : 서울 지하철 1호선 2호선 3호선 (힌트: 색깔의 유사성)
  • 크레용-크레파스-파스텔 : 짜장면-짜파게티-스파게티
  • 레코드 SP EP LP : 그래픽 카드 CGA EGA VGA =_=;;

세상에는 3개로 이뤄진 진영이 속성이 서로 다 동일하거나 제각기 다 다른 경우가 있다.
스타크래프트의 플토, 테란, 저그가 좋은 예이다. 미네랄과 가스, 서플라이를 사용하며 기본적인 공방 업그레이드가 3단계씩 있는 건 공통이지만, 건물을 짓는 방식이나 각종 스킬 같은 건 전부 제각기 다르다. 두 종족은 완전 공통인데 한 종족만 다른 경우는... 일단 없다.

요런 체계를 모델링한 세트(Set)라는 아주 재미있는 머리 싸움 보드 게임도 있다. 4가지 속성(색깔, 도형 개수, 채움 패턴, 도형 모양)이 전부 같거나 전부 다른 카드 트리플을 빨리 찾는 게 목적이다. n개의 카드가 있을 때 세트가 하나라도 존재할 확률 내지 전혀 존재하지 않을 확률도 구할 수 있을 텐데 내 수학 지식으로는 모르겠다.

필기 내지 그리기 도구로서 색연필-크레용-크레파스-파스텔-콩테로 갈수록 특성이 어떻게 달라지나 모르겠다. 파스텔은 그냥 딱딱한 분필 같고, 크레파스는 왁스가 들어가서 그런지 좀 끈적거렸던 것 같다.
콩테나 목탄 같은 건 본 적 없다. 목탄화는 <플란다스의 개>의 주인공이 화가 지망생이라 쓰던 물건이라는 것 정도만 알고 있다.

2. 트윈

  • 지하철역 중에서 종로3가와 종로5가는 영락없이 삼겹살과 오겹살을 떠올리게 한다. -_-
  • 농사에 비닐하우스가 있다면, 야구에는 돔구장이 있는 듯..
  • 서울 강북에 청와대 뒷산인 북악산이 있다면 강남에는 국정원 뒷산인 대모산이 있다. 그리고 강북에 거대한 군사 시설인 용산 미군 기지가 있다면, 강남에는 국군정보사가 있어서 서초대로에 길이 끊겨 있고 gap이 존재한다. 서로 비슷한 심상이 느껴지는데, 얘들은 가까운 미래에 서울 밖으로 이전할 계획이 잡혀 있다.
  • 스타크래프트에나 있어야 할 옵티컬 플레어의 실사판: 공중으로 쏘는 레이저 포인터(특히 녹색), 육지 자동차에는 HID 불법 개조.

크리스천들이 하나님에 대해서는 그분이 우리가 원하는 것을 주시는 게 아니라 우리에게 "필요한" 것, 우리에게 유익한 것을 주신다고 믿는다.
허나, 사람에 대해서는 능력껏 벌어서 "필요한" 만큼 가져가는 세상은 필연적으로 다같이 망하고 거지 되는 세상을 부른다.
이것이 신과 인간에 대해서 '필요'라는 개념이 작용하는 방식의 차이점이다. 이건 성악설이 성립하는 한 반박 불가능할 것이다.

그리고 한편, 컴퓨터와 관련해서는..

  • 옛날에 컴퓨터를 다루던 사람들은 디스크의 배드 섹터를 걱정했지만 요즘 사람들은 모니터의 불량 화소를 신경 쓰는 듯하다.
  • 옛날 사람들은 컴퓨터를 오래 쓰면 Windows 3.x 내지 9x의 리소스 퍼센티지가 줄어드는 걸 보고 바싹 긴장했지만, 요즘 사람들은 스마트폰의 배터리 퍼센티지가 줄어드는 걸 보고 바싹 긴장한다.

3. 부정적인 예

  • C++ 템플릿의 문제(소스 코드가 노출된 채 모든 번역 단위에 매번 인클루드 돼야 함)를 해결하려고 고민했는데 기껏 나온 게 export
  • 남북이 통일하랬더니 기껏 나온 게 고려연방제 (1국가 2체제.. 그냥 전쟁만 없는 반쯤 적화통일)
  • ActiveX를 없애라고 하자 나온 게 EXE 프로그램

이들이 무슨 공통점이 있는지는 설명이 필요하지 않을 것이다. 본질적인 문제는 전혀 해결하지 않은 채 그냥 눈 가리고 아웅일 뿐이다.

4. 긍정적인 예

  • 건축업계· 학계에서는 '철근 + 콘크리트'가 신이 건축· 재료공학계에 내린 천혜의 재료 궁합이라고 그런다. 열팽창 계수가 거의 같아서 혼합 가능하면서도 서로 장점을 부각시키고 단점은 보완하면서 최고의 건축 자재 역할을 하기 때문이다.
  • 항공업계에서는 하필 여객기의 최적 순항 고도에 제트 기류라는 게 존재하는 게 기적적인 행운이라고 한다.
  • 1970년대에 인류가 우주 개발을 하고 있을 때 마침 태양계 행성들이 가까이 일렬로 배열돼 있어서 보이저 2호는 단독으로 천왕성과 해왕성을 동시에 탐사하는 대박을 경험할 수 있었다. 이것도 못해도 백수십 년 만에 한 번 찾아오는 기회였다고 그런다.

이런 예가 더 있을지 궁금하다. 혹시 반도체를 만드는 데에도 무슨 천혜의 자연 광물 특성이 활용되는 게 있지 않을까?

5. 예상치 못한 대박

예전에 교통수단 관련 글을 쓰면서 한 번씩 언급한 적이 있는 내용이긴 하지만 복습 차원에서..

  • 서울 지하철 9호선은 잠재적 수요를 인정받은 덕분에 서울 3기 지하철 중 거의 유일하게 얘 혼자만 노선 계획이 온전히 살아남아서 건설되고 개통되었다. 그런데 한편으로는 국가에서는 이거 만들어 봤자 지상의 올림픽대로를 달리는 자동차들의 적수가 못 될 것이고 공기수송 적자이면 어쩌나 지금의 입장에서는 참 쓸데없는 걱정을 했다. 그래서 전동차도 달랑 4량으로 편성하고, 최대한 메리트를 끌어올리려고 급행도 만들었다. 그랬는데, 실제로 뚜껑을 열어 보니 9호선은 초대박을 쳐서 최악의 가축수송 혼잡도를 보이는 노선이 됐다.
  • 지난 1960년대 말, 보잉 사에서는 유럽에서 초음속 여객기 콩코드가 개발되는 걸 예의주시하면서 "이거 초음속 여객기가 대박을 치면 어쩌나" 생각을 했다. 그래서 자기들도 초음속기인 보잉 2707을 개발 준비만 하면서 간을 보는 한편으로, 이미 개발 중이던 보잉 747 아음속 여객기는 주류에서 밀려날 경우 화물기로 언제든지 개조 가능하게 만반의 대비를 해 놓았다. 그러나 뚜껑을 열어 보니 초음속기는 가성비가 심각하게 부족했고 오일 쇼크와도 맞물려 영 재미를 못 봤다. 그 대신 747은 대형 여객기로 수십 년간 엄청난 성공을 거뒀다.

6. 2단계 계층

컴퓨터 프로그램 내지 알고리즘을 보면 작업을 수행하는 양상이 명백하게 독립된 두 phase로 나뉘는 것이 있다.

  • 힙 정렬: 정렬 알고리즘 중에는 얘가 꽤 독특하다. 배열을 기반으로 heap을 생성하는 단계와, 그 heap으로부터 최종적으로 정렬된 리스트를 하나씩 뽑아내는 단계로 나뉜다.
  • 컴파일러: 소스 코드를 구문 분석을 해서 내부 representation으로 변환하는 프런트 엔드, 그리고 이를 토대로 최적화와 기계어 코드 생성을 하는 백 엔드로 단계가 분명하게 나뉜다.
  • 일본어 IME: 일본 문자 자체를 입력하는 방식과, 그 일본어 문자열을 NLP 관점에서 분석해서 어절을 나누고 한자 변환 후보를 제시하는 것은 서로 완전히 별개의 단계이다. 그러니 전자와 후자를 분리해서 일부 파트만 서로 다른 알고리즘 내지 DB 제품으로 교체해서 사용할 수 있지 않나 싶다.

그리고 데이터 압축이 있다. 흔히 간과하기 쉬운데, 압축이라는 절차도 두 단계로 나뉜다. 먼저, 원소나열법을 간단한 조건제시법으로 바꿀 만한 규칙성, 반복 패턴을 찾아서 더 간결한 방식으로 표현 방식을 바꾸는 것이 전자이다. 전자를 수행하는 방법은 그야말로 무궁무진하며, 손실 압축과 비손실 압축도 이걸 수행하는 방식의 차이에 지나지 않는다. 압축된 데이터는 데이터 + 탈출문자 + 약어에 대한 번문 명령(expansion instruction) + 사전 참조 오프셋 같은 게 뒤죽박죽 섞여 있다.

그 다음으로, 이런 인코딩 결과를 정보 이론 관점에서 빈틈 없는 아주 compact한 형태로 물리적인 표현 방식을 바꿔서 최종 출력하는 것이 후자이다. 후자는 이론적인 압축률의 한계도 다 증명돼 있고 전자에 비해 더 발전할 게 별로 없는 상태이다.
압축 알고리즘이라 하면 이 둘을 싸잡아서 한데 일컫는 경향이 있으나, 이 두 단계는 엄연히 용도와 성격이 다르다. 가령, jpg 이미지 포맷의 경우 이산 코싸인 변환은 전자요, 결과를 허프만 코딩으로 출력하는 것은 후자에 대응한다.

요즘은 보기 힘든데 1990년대에 Windows Installer가 아직 없던 시절에는 마소에서는 확장자가 cab이던가? 독자적인 압축 파일 포맷을 써서 프로그램을 배포했다. 더 옛날에는 원본 디스크를 보면 설치되는 파일들이 확장자만 다 _xe, _ll 혹은 ex_, dl_ 이런 식으로 바뀌고 안에 내용은 어설프게 압축되어 있곤 했다. Lempel-Ziv 같은 알고리즘으로 압축되긴 했는데, 코딩 방식을 조밀화하는 '후처리'는 하지 않아서 가끔씩 원본 파일에 들어있는 문자열이 드문드문 보이곤 했다.

파일을 압축하면 기본적으로 전자 과정을 거쳐서 크기가 줄어드는데, 후처리까지 거치면서 크기가 좀 더 감소할 뿐만 아니라 이때 진짜 난수표 같은 뒤죽박죽 비트 나열로 바뀐다. 둘은 마치 사이다에서 (1) 단 맛을 내는 향신료와 (2) 탄산, 에어컨에서 (1) 온도를 낮추는 압축기와 (2) 송풍기하고 얼추 비슷한 관계가 아닌가 싶다.

7. 혈액형과 상속 개념

코딩 하니까 드는 생각인데..
중등학교 때 혈액형과 수혈 가능성에 대해 배울 때 우리는 객체지향 프로그래밍에서 말하는 상속이라는 개념을 어렴풋이 접했다고 볼 수 있을 듯하다. 수혈 가능성은 형변환 가능성이고.

O형이 베이스 클래스이고 A, B형은 O형으로부터 상속이며 AB는 A와 B 다중 상속이다.
A형과 B형이 O형을 가상 상속을 한 건지는 잘 모르겠다.
하지만 현실은 그렇게 매끄럽지가 않기 때문에 어지간해서는 반드시 같은 유형끼리만 수혈을 하지, A/B계열형에다가 O형 피를 수혈하고 AB형에다가 A나 B형 피를 수혈한다거나 하지는 않는다고 한다. 이런 얘기는 어렸을 때 과학 책이나 교과서에서 접하지 못했다.

아무쪼록 다중 상속은 포인터의 형변환이 이뤄질 때 오프셋 보정이 필요하게 하며, pointer-to-member도 포인터 하나 형태로 간단하게 구현할 수 없게 만드는 주범이다.
다중상속 받은 한 클래스의 포인터를 다른 상속 파생 클래스의 포인터로 바꾸는 건 굉장히 조심해서 해야 한다. 이럴 때 C-style cast는 reinterpret_cast와 개념적으로 다를 바 없어지기 때문에 반드시 static_cast를 써야 실수를 예방할 수 있다.
그러니 혈액형간 typecast도 가능한 한 안 하는 게 좋아 보인다. 아무래도 위험해 보인다.

Posted by 사무엘

2017/05/22 08:27 2017/05/22 08:27
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1362

1. 애산과 한글 학회

본인은 몇 년 전 한글 학회 관계자로부터 메일을 한 통 받았다. '애산 이 인 선생(1896-1979) 추모 학술대회' 초청장이었다.
저 사람은 도대체 누구? 약력을 보니 해방 초기에 우리나라에서 활동한 법조인이긴 한데, 본인은 그 당시 아는 게 전혀 없었다. 그 시절의 관련 분야 인물로는 초대 제헌 헌법 초안을 작성한 유 진오 박사 같은 사람밖에 못 들어 본 상태였다. 저분은 진짜로 문학과 법학에 모두 통달하여 공부의 신이요 문과 먹물 계열의 가히 천재 완전체였다.

그러니 처음 보는 인물에 대해서는 "국어학자도 아닌 사람이 한글 학회와는 무슨 상관?" 이런 의문이 들었으며, 그 당시에 또 시간대도 안 맞아서 그 행사에 가 보지는 못했다. 그래도 저 분야에서 저렇게 언급된 인물이 있다는 사실 자체는 본인의 머릿속 기억 한 구석에 각인되었다.
그 뒤 나중에 차츰 알고 보니 애산 이 인이라는 분 역시 생각보다 굉장히 대단한 사람이었다. 호머 헐버트와 더불어 한글 학회를 계기로 알게 된 위인 중 한 분이다.

이분은 메이지 대학 법학부를 졸업한 후 일제 강점기 때 피식민지 조선인으로서 변호사가 되었다. 인도의 마하트마 간디가 영국 식민지 치하에서 변호사가 된 것처럼 말이다.
그리고 이 선생은 일제 강점기 동안 의열단, 안 창호 사건 등 여러 항일 운동에서 자진해서 독립 운동가들을 변호했으며, 그것도 국선이 아닌 민간 변호사임에도 불구하고 변호를 무료로 해 줬다. 일본의 국익을 대변하지 않는(?) 변호가 너무 잦고 일제 말기엔 창씨 개명조차 거부하니 조선 총독부로부터 요주의 인물로 찍혔으며 변호사 면허 정지를 당하기도 했다. 조선의 독립을 지지했던 '일본인 변호사' 후세 다쓰지처럼 말이다.

이런 민족 인권 변호사가 이 인 말고 전국적으로 몇 명 더 있긴 했지만(허 헌, 김 병로) 그래도 손가락으로 꼽을 정도의 수였다.
그리고 이 인 선생은 여느 변호사와는 달리 한글 학회와도 각별한 인연이 있었다. 역시 문과 전문직답게 자기 나라 말과 글의 소중함을 알고서 조선어 사전 편찬을 위해 후원회를 조직했으며, 1942년엔 조선어 학회 사건에 연루되어서 구속되기까지 했다. 다만, 이분은 옥고를 치른 다른 국어학자들과는 달리 집행유예로 끝났다.

해방 후에 이분은 엘리트 지식인으로서 건국 초기부터 우리나라에서 관련 분야 요직을 두루 역임했다. 초대 법무부 장관을 맡았으며 제헌 국회의원을 지내기도 했다. 그 와중에 한글 학회가 장소가 협소하고 재정 부족으로 어려움을 겪고 있다는 소식을 듣자 1976년에는 지금의 붉은 벽돌 건물인 한글 회관을 짓는 기금 3천만 원을 쾌척했다. 40년 전 물가로 3천만 원... 이건 마침 비슷한 시기에 막 출시되었던 현대 자동차 포니를 10대가 넘게 살 수 있던 금액이었다(대당 약 230만 원).

그리고 이분은 그걸로도 모자라서 임종 전, 유언을 통해 자기 전재산을 한글 학회에 기증했다! 이 정도이니 한글 학회에서 두고두고 칭송할 수밖에 없겠다.
이분은 일제 강점기와 해방 후에 두루 우리나라에 끼친 업적이 워낙 출중하기 때문에 사후에 건국훈장이 추서되었다. 그런데 정확한 수훈 등급이 뭔지 문헌에 따라 국민장과 독립장이 서로 난립해 있는 건 이해가 되지 않는 점이다.

한글 학회는 전신이던 조선어 학회 시절에 최초의 국어사전을 편찬했으며, 이것을 오늘날까지 굉장히 큰 자랑거리와 자부심, 긍지로 여긴다. 특히 조선어 학회 사건을 사건이 아니라 '수난'이라고 자체적으로 의미를 더욱 부여해서 부른다.
국립 국어원의 표준 국어 대사전이 국어사전계를 평정해 버린 오늘날의 눈으로 보면 격세지감이 느껴진다. 그런데 오늘날은 그 표준 국어 대사전조차도 이해타산 문제로 인해 종이책으로는 더 출간되지 않으니 참 아이러니다. (유니코드 전 영역 차트도 종이책 출간이 이미 진작부터 중단됐고..)

한글 회관의 건립과 관련해서는 그 당시 박 정희 대통령도 큰 기여를 했다.
노산 이 은상 선생이 박통을 직접 찾아가서 한글 회관 건립을 위한 재정 지원을 호소했다고 한다. 그 당시에는 대통령이 "국방 성금은 1원도 안 낸 양반이 무슨 한글 회관 같은 데에 모금 요청을?" 식으로 씨크하게 반응했으나, 다음 날엔 1억 원이라는 돈을 금일봉 형태로 당시 영애이던 박 근혜 씨를 통해 전해 줬다고 한다. (한글 학회 김 종택 회장의 증언)
박통은 이것 말고도 한글 관련 단체 지원이나 어문 정책 쪽으로도 칭송 받을 행적을 여럿 남겼다. 광화문 현판조차도 한자가 아닌 한글로 친필을 남겼을 정도이니..

사용자 삽입 이미지

오늘날 한글 학회는 학술적인 성향이 절반, 한글 문화 연대처럼 운동 및 계몽적인 성향도 절반 정도 덤으로 갖추고 있다. 애국 단체라고 국내외로 후원하는 분도 적지 않다. 그리고 저런 사연을 거쳐서 1970년대에 건립된 한글 회관 건물 덕분에 서울 도심 금싸라기 지대에 좋은 부동산도 보유하고 있고, 그걸로 임대업 하면서 직원 월급도 준다.
그러나 지은 지 40년 된 건물은 딱 봐도 주변 건물들에 비해 외관이 낡았으며, 온통 임대를 주느라 정작 학회 자체의 문헌과 자료를 쌓아 둘 공간이 부족한 실정이라고 한다.

(오늘날의 업무용 건물의 건축 트렌드인 유리궁전과는 달리, 혼자 떡 버티고 있는 붉은 벽돌 건물은 한눈에 봐도 완전 옛날스럽다. 부산에서 봤던 동아 대학교 석당 박물관, 부산 임시 수도 청사도 다 같은 붉은 벽돌이지 않던가?
인테리어로 가면 옛날에는 가구나 복도 바닥, 문 같은 것도 요즘처럼 금속, 플라스틱, 콘크리트가 아니라 목재가 훨씬 더 많이 쓰였다.
옛날에는 금연에 대한 경각심도 지금보다 훨씬 덜했으니 저런 건물은 안에 들어가면 담배 냄새가 쩔어 있기도 할 것 같다. 거기에다가 각종 간판이나 표지판 글꼴까지 어설픈 둥근고딕 내지 붓글씨 부류로 넣으면 완벽한 옛날 고증 완성이다.)

2. 애산과 반민특위, 영화 <암살>

그럼 이번에는 한글 학회 말고 법조인으로서 애산 선생이 관계가 있는 다른 이야기를 꺼내 보겠다.
이분은 명백히 변절 없는 항일 독립 운동 노선을 갔으며, 사후에 건국훈장이 무난하게 추서되었을 정도이다. 그런 한편으로 해방 후에는 반공 우파를 표방하면서 이 승만 정권을 지지했다. 이것도 내가 보기엔 정상적이고 건전하다.

그런데 이런 사람이 반민특위(반민족 행위 특별 조사 위원회)의 위원장까지 돼서는 이 위원회를 완전히 해체시켜 버린 것은 언뜻 보기에 고개를 갸웃거리게 만든다. 이것 때문에 이 승만 정권은 친일 청산을 안 한 정권이라고 후대로 욕을 두고두고 쳐먹게 되었다. 일이 왜 이렇게 된 것일까?

이 사건에 대한 이해를 돕는 관련 장면이 영화 <암살>의 결말부에 묘사돼 있다.
염 석진은 해방 후에 반민특위에 의해 기소되었지만 증인을 비열하게 미리 죽여 버린 덕분에 증거 불충분 → 공소권 없음 → 불기소 처분으로 끝난다. 이 꼴을 보니 판사조차 속으로 부글부글 끓었는지, 원래 주려고 했던 벌은 못 주고 "단, 법정모독죄로 벌금 2만원에 처한다"와 함께 재판봉을 부서져라 내리치고는 나가 버린다.

물론, 이 영화에 대해서 좌익 공산주의 계열 독립운동가인 김 원봉을 띄우고, 남조선은 친일 청산 못/안 한 나라라는 왜곡된 시각'만' 주입한다는 이른바 '좌편향' 비판이 있었다. 하지만 이 글에서 그 얘기를 더 논하지는 않겠다. 우리나라가 북괴나 구소련처럼 기록말살형이 존재하는 속좁고 옹졸한 나라는 아니며, 훗날 일제에게 변절했거나 월북한 사람이라도 흑화 전의 행적 중에 선한 게 있다면, 훈장은 안 줄지언정 팩트를 객관적으로 평가할 필요는 있으니 말이다.

사실, <암살>의 원래 대본에는 재판 중에 이런 장면도 있었다고 한다. 그런데 그게 최종적으로는 짤렸다.

- 검사: (와~ 재산 목록 보소~) 피고는 지금까지 도대체 독립운동을 하셨습니까 사업을 하셨습니까? 얼마나 많은 사람들을 팔아서 번 겁니까 이거?
- 염 석진: (개빡침. 검사의 멱살을 붙잡고 흔들다가 손찌검~) 이 친일파 아들놈의 새X가 지금 와세다 법대 나와서 꽃방석에 앉았다고 내 앞에서 떵떵거려? 니 애비도 우리 암살 리스트에 있었어 이 X꺄. 어딜 감히 조국을 위해 목숨을 바친 내 인생을 부정축재자로 몰아?


사용자 삽입 이미지

사용자 삽입 이미지

염 석진이 처음엔 독립운동을 하다가 종로 경찰서 지하 고문실에서 끔찍한 생명의 위협을 겪고서야 밀정으로 변절했듯, 심지어 민족정기 바로 세우기 반민특위 재판을 진행하는 법조인들조차도 사실 친일파 가문의 금수저 출신이었다는 반전이 숨어 있다. 이 지경이라면 이놈의 나라는 참 꿈도 희망도 없다.;;

영화의 작품성을 위해서는 선악 구도가 일관된 게 더 보기가 좋으며 저 장면이 없는 게 더 낫다. 그러니 편집은 적절하게 한 거라고 여겨진다.
하지만 저 장면이 있는 것이 1940년대 말의 완전 시궁창이던 현실의 선악 구도를 사실적으로 묘사하는 데는 도움이 됐을지 모른다.

일제만 물러갔다고 해서 군· 경 간부가 필요하지 않은 게 아니고, 판· 검· 변호사 같은 법조인이 필요하지 않은 것도 아니다. 나라가 혼란하던 시절에는 그렇게 사회 질서를 유지시키는 사람들이 특별히 노련한 경력자 위주로 더욱 필요했다. 친일 경력 없다고 해서 일자무식한테 법률 자문과 재판 판결을 맡길 수는 없는 노릇이니까.

그런데 단순 생산· 기술직이 아니라 저런 전문직은 아무나 될 수 있는 게 아니고 결국은 유복한 환경에서 공부 많이 한 사람 차지가 되는데, 유복한 환경이 아무래도 항일보다는 친일 쪽 집안에 더 많이 조성돼 있었음은 자명하다. 이게 참 불편하다면 불편한 진실이다.

그러니 일본 경찰· 헌병 출신 조선인이 훗날 반공투사로 깃발 바꿔 단 것만큼이나, 일제 치하에서 법조인으로 편하게 살았던 사람이 역설적으로 반민특위 조사관으로 변신했다 해도 이상할 게 없다(실제로 그런 사례가 있었는지는 모르겠지만). 법조인 중에 저런 민족 인권 변호사만 있었던 게 아니니까 말이다.

그럼 애산 선생을 생각해 보자. 그는 영화에 나온 것처럼 친일파 집안 출신도 아니었고 독립 운동가 출신의 법조인이요, 한글 학회의 제일 든든한 후원자였음에도 불구하고 왜 반민특위 활동을 통한 친일 청산을 반대하는 소신이었을까? 정확하게는 모르겠지만 legal mind 관점에서 봤을 때 다른 이유가 있었으니 해체시킨 게 아닐까 싶다.

당장 몇몇 악질 부역자들을 망신 주고 응징해서 감정적인 만족을 얻는 것보다 부작용이 더 커지고 있었다거나, 정확한 진상 규명과 재판이 현실적으로 도저히 곤란했다거나, 불순분자들이 반민특위 조사관을 사칭하면서(문화혁명 당시의 가짜 홍위병 같은!) 생사람 잡는 일이 늘었다거나...

그 당시 이 승만 대통령이나 애산 선생이 반민특위에 대해 무슨 생각을 하고 있었겠는지는 본인이 기회가 되고 자료를 더 접하는 대로 공부를 더 해 볼 생각이다. 다만, 결과가 무엇으로 귀착되건 그 당시에 나라가 일제 부역자 전문직들을 불가피하게 재등용할 수밖에 없는 상황이었다는 것은 인정한다.

Windows 9x가 그 당시의 가정용 똥컴에서 돌아가고 도스 호환성을 보장하기 위해 16비트 코드를 불가피하게 재등용할 수밖에 없던 것과 정확하게 동일한 맥락의 한계이다. 우리나라의 친일파 청산을 제일 방해한 것은 사회 혼란과 체제 전복을 조장하던 북괴 공산주의자들이라는 게 절대적인 사실이다. 어떤 경우든 누가 선동하는 것처럼 친일 청산이라는 걸 악의적으로 일부러 안 한 건 아니다.

끝으로, 다시 영화 <암살> 얘기로 돌아오면,
원래 의도했던 것처럼 염 석진이 검사와 싸우는 장면이 들어가 있어야 "법정모독죄로 벌금 2만원형"이 논리적으로 개연성이 성립하겠다.
겨우 웃통 벗고 "내 몸엔 일본놈들의 총알이 6개나 박혀 있소!" 쇼 한 게 왜 지금 물가로 수백만 원 이상의 벌금을 내야 할 법정모독죄인지 본인은 지금까지 이해를 못 하고 있었다. 그런데 이 역시 짤린 장면을 보니까 납득이 된다. 검사랑 현피 주먹다짐 정도는 해야 법정모독죄가 성립하지 않겠는가?

Posted by 사무엘

2017/05/19 08:34 2017/05/19 08:34
, , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1361

다음 버전 개발 근황

날개셋 한글 입력기 8.9는 지난 8.8과는 달리 딱히 치명적인 버그가 발견된 게 없고 잘 만들어져 있다. 한편으로 다음 버전인 9.0은 현재 이렇게 순조롭게 개발되고 있다.

0. 한글 공식 명칭에서 <> 제거

이 시간부터 내 프로그램의 공식 명칭은 그냥 '날개셋 한글 입력기'임을 밝힌다. 날개셋이라는 단어를 감싸는 화살괄호(angle bracket)를 쓰지 않기로 했다. 프로그램의 모든 UI와 도움말, 각종 예제 파일, 홈페이지에서 이걸 이미 제거했다. 프로그램이 완성되는 날, 웹에다가도 업로드해서 반영만 하면 된다.

몇 년 전에 한번 얘기한 적이 있지 싶은데 검색하기가 귀찮다.
세벌식 최종은 타 한글 글쇠배열과는 달리 가운뎃점이 있으며, 화살괄호(컴퓨터에서는 그냥 부등호일 뿐이지만..)가 아랫글쇠(non-shift)에 있다. 하지만 날개셋 한글 입력기 1.0이 최초로 개발되던 시절에 여전히 많이 쓰이던 Windows 95는 비록 공식적으로 최종을 지원했음에도 불구하고 마소 직원의 무지(?)로 인해 기호의 배열에 틀린 게 굉장히 많았다. 그래서 화살괄호조차도 원래 의도했던 방식으로 입력할 수 없었다.

그래서 결국 허접하게나마 내가 입력기를 직접 만들고 나니 가운뎃점이고 참고표고 화살괄호고 다 제대로 입력이 가능했다. 그 당시엔 그것 하나만으로도 참 감격스러워서 뒷일을 별로 생각 안 하고 프로그램 브랜드명에다가도 화살괄호를 쌌다. 아래아한글이 고유명사에다가 옛한글을 쓴 것처럼 뭔가 튀어 보이는 효과는 덤이고 말이다. 그게 사건의 전말의 전부이다.

하지만 고유명사의 내부에 문장 부호가, 그것도 dash 정도의 작은 물건도 아니고 아예 여닫는 pair가 존재하는 놈이 끼어들어 있는게 그리 보기 좋지는 않다. 아래아한글도 옛한글을 표현할 수 없는 환경에서는 '한/글'이라는 대체 표기가 쓰이는데, slash는 그 자체가 디렉터리 같은 토큰 구분용으로 쓰이는 문자이기도 하니 이 역시 그리 보기 좋은 표기는 아니다.

또한 화살괄호는 컴퓨터 키보드로 칠 때는 의미가 완전히 다른 부등호가 돼 버리며, 명령 프롬프트에서는 도스와 유닉스를 막론하고 redirection 기호로 쓰여서 파일명에 들어갈 수 없고.. HTML 태그를 여닫는 기호이기도 해서 본문에 간단히 삽입할 수도 없다. 이 때문에 지금처럼 공식적으로 화살괄호를 제거하기로 결심하기 전부터도 내 프로그램의 명칭은 화살괄호가 빠진 형태로도 암묵적으로 많이 쓰이고 있었다. 이제 본인은 그렇게 간소화된 명칭만을 사용하기로 했다.

지난 7.0에서는 프로그램의 얼굴이라 할 수 있는 아이콘이 대거 바뀌어서 지금에 이르고 있는데, 그로부터 4년 뒤인 9.0에서는 프로그램의 이름 표기가 바뀌는 큰 변화를 겪게 되었다. 나름 의미 있는 변화이다.

1. 복합 낱자 입력 로직 생성기: 허용 한글 범위 제약 기능 + 오토마타 연동

복합 낱자 입력 로직 생성기는 날개셋 한글 입력기 8.x대 후반, 그리고 본인의 박사과정 연구 기간의 대미를 장식한 그야말로 엄청난 핵심 기능이다. 나로서는 정말 엄청난 시간과 노력을 들여서 구현해 냈고 논문도 썼다. 그래서 주요 기능들이 잘 완성됐으며 동작에 딱히 심각한 버그도 없긴 하지만, 이번 9.0에서는 '허용 한글 범위 제약' 기능과 연계하는 기능들이 또 추가되었다. 허용/금지 등 등급별로 분류된 글자들을 날개셋 한글 입력기의 오토마타와 연계하여 재미있는 오덕질을 하는 옵션인데, 다음과 같은 것이 있다.

(1) 먼저, 허용되는 글자 중에서 더 결합의 여지가 없는 단말(terminal) 글자에 도달한 경우 자동으로 조합을 종료하는 옵션이다.
예를 들어 '고'라는 글자는 ㅏ를 결합해서 '과'가 될 수 있고 종성과 결합해서 '곡', '공' 같은 글자가 될 수도 있다. '안'이라는 글자도 '앉'이나 '않' 같은 글자로 추가 결합이 가능하다. 그러나 '엌', '같' 같은 글자는 더 결합이 이뤄질 게 없다. '판'이라는 글자도 KS X 1001 하에서는 '안'과는 달리 겹받침이 붙을 수 있는 게 없다.

이런 글자를 terminal로 간주하며, 이게 만들어지는 순간 조합을 종료하는 것이 이 기능의 핵심이다. 조합을 미리 끊든 말든 사용자의 타자 행동이 달라지는 건 없지만, 이것이 지금 입력 체계 하에서 더 결합의 여지가 없는 단말 글자였다는 시각· 심리적인 피드백을 준다. 이런 것도 날개셋 한글 입력기로 구현 가능하다는 데모 차원에서 옵션을 구현했다.

'허용 한글 범위 제약' 기능을 사용하면 이 프로그램은 일단 입력 가능한 글자들을 받아서 입력을 위해 추가로 허용해야 하는 글자를 수집하고, 글자가 완성된 뒤에 연속 입력을 위해 다단계 분리 처리를 해야 하는 글자도 제3 그룹에다 수집해 준다. 이 글자들은 기존 허용 글자들의 밖에 존재하는 것들이다. (1은 무조건 허용되는 글자, 2는 무조건 실패하는 글자로 용도가 예약됨)

그런데 이 옵션을 사용하면, 기존 입력 가능 글자들 "중"에서 terminal에 속하는 글자들을 제4 그룹에다가 따로 모은다. 그래서 지금까지 오토마타에서 T==3에 대해 다단계 분리 -12를 적용하듯이 T==4에 대해서는 이미 있는 기능인 -3 (결합 후 조합 중단)만 지정하면 일이 깔끔하게 끝난다.

terminal 감지는 두벌식에서는 그렇게 의미 있는 기능이 아니다. 종성이 있는 글자는 그 종성의 일부나 전부가 다음 글자의 초성이 될 수도 있으니 도중에 조합을 끊어서는 절대로 안 된다. 하지만 종성이 없는 글자 중에서도 '긔, 꾜, 뀨, 눼, 댜, 듸, 쮸, 켸, 쿄' 등 terminal이 20여 자 있다. 이 글자들 이후에는 종성이 이어지는 게 전혀 없으니 두벌식에서도 조합을 바로 끊어 버려도 안전하다.

얘들은 '쌰, 쓔, 뢔, 쬬' 같은 고아 글자와는 성격이 정반대이다. 고아 글자들은 받침이 붙은 '썅, 쓩, 뢨, 쭁'은 KS X 1001에 있는데 받침이 빠진 형태가 빠진 경우이고, 모음 terminal 글자는 자신 이후로 아무 받침이 붙지 않는 경우이니 말이다. 어쨌든, 고아 글자를 찾는 기능이 있으니 terminal을 찾는 기능도 있어야 한다는 생각이 들어서 잠시 시간을 내어 이 기능을 구현하게 됐다.

세벌식으로는 terminal 감지 기능이 제 기능을 발휘할 수 있다. 그 극단적인 경우는 현대 한글 기준으로 모든 받침을 1타 만에 입력 가능한 최종(391) 글쇠배열이다. 받침을 찍는 순간 글자가 완성됨과 동시에 그냥 조합이 종료돼 버린다. 물론 이렇게 테이블을 참조할 필요조차 없는 일방적인 경우라면 아예 오토마타 수식을 고쳐 버려도 되지만 '안'일 때만 조합이 유지되고 '판'일 때는 조합이 끊어지게 하려면 이 기능을 사용하면 된다.

(2) 그 다음으로, 허용되지 않는 글자를 만드는 낱자는 다음 글자로 보내는 게 아니라 그냥 무시하는 옵션이 있다. '또+ㅁ'의 경우 ㅁ을 다음 글자로 보내는 게 아니라 그냥 무시한다는 뜻이다. 이 역시 두벌식에서는 종성에 대해서는 적용할 수 없고, 중성에 대해서만 적용 가능하다. T==2에 대해서 -1 (무시)을 되돌리게만 하면 간단히 구현 가능하다.

날개셋 한글 입력기의 완성도를 더욱 끌어올릴 아이디어가 하나 떠올라서 성공적으로 구현되니 좋다. 이제야 '복합 낱자 입력 로직 생성기는' 진짜로 더 만들 게 (현재로서는) 안 떠오르고 작업이 완전히 종결된 것 같다.
이 옵션이 추가됨으로써 '복합 낱자 입력 로직 생성기' 마법사의 2단계 대화상자는 너무 큼직하고 복잡해졌다. 사실, '허용 한글 범위 제약'은 통상적인 로직 생성 옵션과는 성격이 좀 다른 액세서리에 가깝다. 그렇기도 하니 이건 마법사의 별도의 단계로 분리해 버렸다.

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

복합 낱자 입력 로직 생성기가 쓰라는 의도로, "오토마타에 '0번 상태에서 모든 실패 상황을 처리"라는 옵션을 추가했다.
정상적인 한글 입력에 따른 상태 분기와는 달리, 실패 상황의 상태 분기 방식은 지금 오토마타 상태와 무관하게 언제나 동일한 경우가 많다. T가 3이면 -12, T가 4이면 -1 이렇게 T라든가 I~K의 값에 따라 달라질 뿐, 성공 상황처럼 매번 처리 방식이 들쭉날쭉해지는 건 매우 드물다.

이 점에서 착안하여, T==3 ? -12 : T==4 ? -1: 0 같은 수식은 초기 상태에서 A ? 1: B ? 2: C: 3 : (!!) 다음에 한 번만 추가하면 모든 오토마타 상태에서 동작하게 했다.

  • 8.8: 복합 낱자 입력 로직 생성기 첫 도입
  • 8.9: 그 기능에다 '한글 허용 범위 제약' 기능 연계 추가
  • 9.0: '한글 허용 범위 제약' 연계 기능에다가 '오토마타'와의 연계를 또 추가. 이제 진짜 끝?

2. 그 밖에 복합 낱자 입력 로직 생성기의 사소한 개선 사항

  • '낱자 최적화' 알고리즘이 좀 더 개선되어서 글쇠에 등장하지 않고 쓰이지 않는 낱자 결합 군더더기를 더 잘 걸러내게 했다.
  • 매우 드문 상황이겠지만, 로직 생성 작업이 아무 메시지 없이 깔끔하게 끝났다면 "작업을 완료했습니다"라는 말 한 마디라도 출력해서 사용자가 심리적으로 혼동하지 않게 했다. PC용 세벌식+현대 한글처럼 복잡한 처리가 필요하지 않은 설정에서는 드물게 이런 일이 있을 수 있다.
  • 초성 문맥이 전혀 존재하지 않는 종성 두벌식 날개셋문자를 사용하더라도 초성에 등장하는 것 자체는 가능하니 이를 감안하여 동작하게 했다. 물론 원래 소속이 종성이니 이 낱자들은 초성 '대결합'은 전혀 처리하지 못한다는 걸 사용자가 염두에 둬야 한다.

그리고, 입력 데이터를 검증할 때 현재는 대결합의 결과값이 소결합의 시작과 결과값에 또 등장하는 것을 금지시키고 에러로 처리하는데, 9.0은 여기에 덧붙여 대결합의 결과값이 자신이나 다른 대결합의 과정값에도 등장하지 못하게 조건을 강화했다. ㅂ+ㅅ → ㅄ이 있다고 해서 ㅄ+ㄷ → ㅵ를 줘서는 안 되고 반드시 매번 ㅂ+ㅅ+ㄷ → ㅵ로 해야 한다는 뜻이다. 그렇게 해야 대결합을 실제로 expand할 때 동일 input으로부터 a+b → x와 a+b → y가 동시에 등장하는 식의 논리 오류를 방지할 수 있다.

이런 제약을 가한 대신, ㅂ+ㅅ+ㄷ → ㅵ에서 ㅅ+ㄷ → ㅼ이라는 다른 대결합이 존재하고 ㅼ이 글쇠에 존재해서 한 타 만에 입력 가능한 경우, 이 프로그램이 ㅂ+ㅼ → ㅵ이라는 결합도 자동으로 찾아서 생성하게 했다.

3. 기본 글자판 설정에 두벌식 관련 고급 옵션 추가

날개셋 한글 입력기가 제공하는 빠른설정들 중에 '기본 글자판 설정'은 대중적이고 기본적인 입력 기능만 사용하는 분들이 가장 자주 사용할 만한 빠른설정이다. 처음으로 개발된 이래로 별다른 변화 없이 10년이 넘게 존속해 왔다.

본인은 다른 대화상자들이라면 몰라도 얘만은 프로그램 내부 구조 지향이 아니라 사용자 지향· 사용자 친화적으로 만들려 애썼다. 복잡한 각종 옵션들을 어지럽게 한 화면에 몽땅 노출하지 않고 새끈하게(?) 보이게 하려고 단계별 마법사 UI를 쓸까 생각도 했다. 대화상자를 보면 좀 마법사 UI처럼 생겼지 않는가?

그런데 실제로 개발을 해 보니 기본 글자판 설정이란 게 굳이 몇 단계짜리 마법사까지 동원할 정도로 구조가 복잡하지는 않아서 '다음' 단계 대신 그냥 '고급' 버튼만 넣는 걸로 퉁쳤다.
마법사 UI는 먼 훗날에 '복합 낱자 입력 로직 생성기' 빠른설정이 대신 찜했다. '기본 글자판 설정'보다 기능이 훨씬 더 많고 복잡하니 처음에 3단계 마법사로 시작했고 이번 9.0부터는 4단계로 더 늘었다.

이런 사정을 거쳐, 기본 글자판 설정엔 현재까지 '고급' 옵션이라는 게 세벌식 자판과 관련된 것 네 종류만 있었다. 그러나 이제는 표준 두벌식을 골랐을 때도 '고급' 옵션을 사용할 수 있으며, 여기에는 두벌식에만 적용되는 고유한 고급 옵션이 몇 가지 들어갔다.

사용자 삽입 이미지

먼저, '자음의 처리 방식'이다. '초성과 종성 따로'는 일반적인 동작 방식이고, '초성 지향'은 '날 - 나라' 대신 '나ㄹ - 날'이 되는 동작을 말한다. '종성 지향'은 초성도 일단 종성 문맥으로 입력되었다가 나중에 중성을 받았을 때에야 초성으로 바뀌는 동작이다.

기술적으로야 초성 지향은 '고급 입력기'의 옵션을 사용해서 동작하고 종성 지향은 '종성 두벌식'이라는 별도의 날개셋문자를 사용해서 동작한다. 구현 방식이 서로 완전히 다르지만 이 빠른설정에서는 한데 선택할 수 있다는 것에 의의가 있다.

그리고 표준 두벌식은 오로지 알파벳 26개 자리에만 한글 글쇠가 있고 숫자와 기호를 사용하지 않는다는 특성상, 숫자와 기호는 굳이 입력기가 가로채지 않고 응용 프로그램으로 보내도록 하는 옵션을 빠른설정에서 곧장 선택할 수 있게 했다.

이로써 두벌식과 세벌식 모두 빠른설정에서 오로지 자신만의 고유한 고급 옵션을 갖게 됐다. 단지 세벌식의 고급 옵션들은 3.x 완전 초창기 때부터 존재했지만, 두벌식의 고급 옵션들은 다 6~7.x에 가서야 도입됐고 빠른설정에 반영은 훨씬 늦었다는 것이 차이점이다.

4. 토씨 자동 교정

한글 입력과 직접적인 관계가 있지 않고 평생 다시 볼 일이 없을 거라고 생각했는데, 토씨 자동 교정 알고리즘을 우연한 계기로 재검토해서 정확도를 조금 올렸다.

토씨 자동 교정 기능은 동작이 은근히 복잡하다. 은/는, 을/를, 과/와 같은 거야 아주 쉬운 케이스이다. 그러나 (으)로는 유일하게 ㄹ 받침도 무받침과 동급으로 간주해야 한다는 예외가 있으며, '이'는 처리하기가 훨씬 더 어렵다. '이나마, 이랑, 이라'처럼 받침 유무에 따라 '이'를 넣거나 생략해야 하는 것들이 많기 때문이다. '이다'의 경우는 받침이 없더라도 반드시 생략할 필요는 없다.

이것들부터 먼저 검토한 뒤, 한글이 또 등장하지 않아서 명백하게 주/보격 조사인 '이'에 한해서 '이/가' 처리를 해야 한다. 하긴 중세 국어에서는 조사 '가'가 없었다고 하더라만..
'이'만 처리가 이렇게 복잡한 이유는 한국어의 매우 독특한 단어 '이다'의 정체성과 밀접한 관계가 있다.

한국어의 어절(띄어 쓰는 단위)에서 관형어나 부사· 감탄사, 기능어 등등 잡다한 거 빼고 내용어를 구성하는 것은
딱 (1) '체언+조사' 계열, 아니면 활용을 하는 (2) '용언+어미'라는 두 계열로 나뉜다.
그런데 '이다'라는 단어는 정말 요물이다. 얘는 문법적으로 무엇으로 분류해야 할지 쟁쟁한 국어학자 문법학자들 사이에서도 의견이 오랫동안 일치하지 않았다.

마치 영어에서 be 동사가 여느 다른 동사들과는 문법적으로 다르게 취급되는 동사이듯, 쟤도 평범한 용언은 아니다.
오늘날 표준 국어 대사전 + 학교 문법에서는 '이다'를 서술격조사로 본다. '이었다' 등 영락없이 용언처럼 생긴 물건이 조사라니.

그래서 '이니', '이고', '이면'처럼 '이다'의 활용형도 다 별개의 접속조사이고, 일단 사전에 일일이 단독으로 등재돼 있다.
이것도 많은 고민 끝에 내린 결론이겠지만 이게 합리적인 결정이라고 볼 수 있는지는 모르겠다.
하긴, '귀신이다', '불이야'처럼 체언에 잘도 척척 달라붙는 동사나 형용사가 다른 예가 없긴 하다. (공부하다 이런 건 논외. 그때의 '-하다'는 접사임.)

체언과 용언을 파동과 입자에다 비유하자면, '이다'는 진짜 빛처럼 두 성질을 모두 지닌 이상한 물건이다.
그리고 이 '-이' 때문에 '찾기/바꾸기'에서 한글 토씨 자동 교정 기능도 구현하기 꽤 복잡하고 어려워져 있다.

끝으로, '야'의 경우 호격조사 '아' 또는 보조사 '이야'가 모두 가능한데, 이것은 용례 domain이 겹치기 때문에 글자만 보고 구분하기가 불가능하다. 토씨 자동 교정 알고리즘의 구조적인 한계가 될 수밖에 없는 점이다.

5. 기타 사소한 것들

(1) 도움말 부록의 자음 참조표에서 ㅁㅂㅅ의 순서가 잘못 기재되었던 오타를 지적해 주신 분이 있어서 고쳤다. 78이 빠지고 79가 두 번 들어가 있었다. 이 오타는 굉장히 오랫동안 발견되지 않고 지금까지 잘도 숨어 있었다. 오죽했으면 5년 전, 2012년에 발행된 본인의 석사 학위논문의 부록에도 동일한 오타가 그대로 들어갔다!

(2) 편집기에는 프로그램의 중복 실행이 감지된 경우 인스턴스를 또 생성하지 않고 기존 인스턴스에다 새 문서창을 열게 하는 기능이 있다. 그런데 기존 인스턴스가 어떤 이유로 인해 응답이 없고 뻗은 상태라면 그 옵션이 지정되어 있더라도 예외로 그냥 새 인스턴스에서 실행되게 하여 동작에 융통성을 더했다.

(3) 날개셋 편집기를 비롯해 내 프로그램이 내부에서 자체적으로 사용하는 빨랫줄 모양 옛한글 비트맵 글꼴의 중성 자형을 일부 수정했다. 그래서 ㅣㅛ, ㅓㅛ, ㅕㅗ 등, ㅗ/ㅛ가 포함돼 있는 겹모음들이 위의 초성과 더 잘 포개져서 조화롭게 보이게 했다.

(4) 두벌식 옛한글의 Shift+H(ㅗ) 자리에 지금까지 ㅗㅜ가 배당돼 있던 것을 ㅗㅗ로 변경했다. 기왕 내 프로그램은 Shift 자리에는 다른 자모와 겹치지 않는 한 아랫자리에 있는 낱자의 double(쌍) 버전을 넣는 것으로 컨셉을 잡았으니 저렇게 하는 게 더 일관성이 있을 것 같다. 아래아한글의 영향을 받아서 내 프로그램도 까마득한 2.x 옛날 버전부터 ㅗㅜ이긴 했는데, 그냥 breaking change(하위 호환성이 깨지는 단절적인 변화)를 만들었다.
ㅜ와 ㅡ도 double 버전이 있긴 하지만 쟤들은 Shift 자리에 다른 글쇠가 정해져 있기 때문에 double 버전을 넣을 수 없다. 두벌식은 옛한글 배열이라 해도 숫자· 기호 자리를 침범하지 않는 게 일종의 불문율이긴 하다.

Posted by 사무엘

2017/05/16 08:31 2017/05/16 08:31
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1360

* 3년 전에 썼던 글을 내용을 보충하여 리메이크 한 것이다.

Windows 운영체제에서 생성하는 윈도우들은 그 본질이 크게 overlapped, popup, 그리고 child 이렇게 셋으로 나뉜다. 이해를 돕기 위해 아래의 Windows 1.0 사진을 한번 살펴보도록 하자. 그때는 이 세 종류의 구분이 지금보다 훨씬 더 명확했기 때문이다.

사용자 삽입 이미지

1. overlapped

1985년에 발표된 Windows 1.0 첫 버전은 기술적인 한계 때문..은 아니고, 애플 사와의 이상한 특허 분쟁에 얽히는 바람에 응용 프로그램 창들이 서로 겹치지를 못하고 타일 형태의 배치만 가능한 정말 괴상한 형태로 개발되었던 걸로 유명하다.
그러다 Windows 2.0에서는 타일 제약 봉인이 풀렸기 때문에 이 윈도우들은 겹쳐지는 게 가능해졌으며 Z-order라는 개념도 생겼다. 그게 워낙 뜻깊은 일이었던지라 명칭에까지 OVERLAPPED가 붙은 것이다.

그리고 저렇게, 타일 형태의 배치가 가능한 응용 프로그램의 최상단 껍데기 윈도우가 바로 오늘날의 개념으로 치면 overlapped 윈도우이다. 캡션이라고 불리는 제목 표시줄이 달려 있고 크기가 언제든지 유동적으로 바뀔 수 있으며, CreateWindow(Ex) 함수에다 위치와 크기를 지정할 때 CW_USEDEFAULT(대충 적당히 알아서)를 줄 수 있는 유일한 타입의 윈도우이다.

사실, WS_OVERLAPPED의 값은 그냥 0이다. popup이나 child 같은 속성이 따로 지정되지 않은 윈도우는 기본적으로 overlapped 속성이 지정된다. 여기에다가 최소화/최대화(WS_M??MIZEBOX)/닫기(시스템 메뉴 WS_SYSMENU) 버튼, 크기 조절 가능한 굵은 껍데기(WS_THICKBORDER) 비트들이 합쳐진 것이 바로 WS_OVERLAPPEDWINDOW 스타일이다.

2. popup

그럼 popup은 무엇이냐 하면 저 위의 About 대화상자처럼, overlapped window의 위에 겹쳐져서 배치될 수 있는 윈도우이다.
그런데 당장 Windows 2.0부터 오버랩은 말 그대로 overlapped window에서도 다 가능해졌으니, 둘의 실질적인 차이가 없어졌다고 볼 수도 있다. 하지만 둘은 여전히 완전히 동일하지는 않다.

popup 윈도우는 기본적으로 캡션이 없는 형태이며, WS_CAPTION 같은 별도의 옵션을 줘야만 캡션이 달린다. 그러나 overlapped 윈도우는 옵션을 주지 않아도 캡션이 무조건 달려 나온다. Windows 2~3 시절까지만 해도 응용 프로그램에서 캡션이 없고 제목이 없는 대화상자는 지금보다 훨씬 더 흔하게 볼 수 있었다.

지금은 대화상자들도 다 캡션이 달려 있으며 일반적인 응용 프로그램처럼 아이콘에다 최소· 최대화 버튼과 두꺼운 프레임까지 별도로 스타일로 주고 나면.. popup 형태의 대화상자 프로그램과, overlapped 형태의 일반 프로그램 창과 외형상의 구분은 사실상 다 사라지는 건 사실이다.

그럼에도 불구하고 popup과 overlapped의 구분이 원래 저런 데서 시작되었다는 것을 알면 되겠다. 다른 창의 내부에 종속되지 않고 독자적으로 화면에 떠 있으면서 캡션 같은 외형이 없거나 취사선택 가능한 모든 custom 윈도우라면, 묻지도 따지지도 말고 그냥 WS_POPUP을 주면 된다.

대화상자 리소스 편집기에서도 이 대화상자의 초기 스타일을 지정해 줄 수 있다. 프로퍼티 페이지처럼 다른 대화상자의 내부에 들어가는 대화상자이면 WS_CHILD를 주면 되고, 나머지 경우에는 WS_OVERLAPPED는 신경 쓸 필요 없고 그냥 WS_POPUP을 지정하면 된다.
여담이지만, 인터넷을 하면서 수시로 튀어나오는 웹브라우저 팝업창은 명칭과는 달리 사실은 overlapped 윈도우라고 생각하면 된다. 팝업창에도 웹브라우저 창 고유의 캡션과 프레임은 그대로 남아 있기 때문에 overlapped 윈도우의 정의에 훨씬 더 부합하는 걸 알 수 있다.

3. child

끝으로, WS_CHILD는 동작 방식이 위의 둘과는 굉장히 다르니 이해하기 쉽다.
자기의 위상이 독자적이지 않고 외형상 부모 윈도우의 내부에 종속된 모든 윈도우들은 child 윈도우이다. 대화상자의 내부 컨트롤들이 대표적인 예임.

얘는 컨트롤 ID라는 정보도 갖는다. HWND는 운영체제가 창들을 식별하기 위해 부여하는 가변적인 번호인 반면, ID는 창을 생성하는(= 운영체제에다 생성을 요청하는) 주체 측에서 고정붙박이로 부여하는 번호라는 차이가 있다. GetDlgItem은 이름처럼 굳이 대화상자의 자식 컨트롤뿐만 아니라 부모-자식 관계를 갖는 아무 윈도우에서나 ID값으로부터 자식 창을 얻을 때 사용 가능하다.

popup이나 overlapped 윈도우에는 저런 ID라는 개념이 존재하지 않으며, 그 대신 메뉴를 표시하는 기능이 있다.
뭐, child 윈도우도 비록 메뉴는 태생적으로 없을지언정 마치 overlapped 윈도우처럼 캡션과 프레임, 그리고 시스템 메뉴를 갖는 건 불가능하지 않다. 그 대표적인 예는 MDI 프레임 윈도우이긴 한데.. 그래도 그걸 빼면 캡션과 프레임을 갖춘 child 윈도우는 매우 드물다. 캡션과 프레임 자체가 최상위 윈도우의 상징과도 같으니 말이다.

이렇게 보면 overlapped와 popup이 한 묶음이고, 성격이 다른 child가 혼자 좀 따로 노는 것처럼 보인다. 하지만 동일한 클래스의 윈도우가 상황에 따라서 popup과 child 속성을 취사선택해서 동작하는 경우도 의외로 있다. 콤보 박스에서 내부적으로 쓰이는 ComboLBox라는 리스트 박스가 대표적인 예이다.

콤보 박스의 타입이 Simple이어서(대표적인 예는 글꼴 선택 대화상자) 리스트가 언제나 표시되어 보일 때는 얘는 콤보 박스에 딸려 있는 child 윈도우이다.
그러나 콤보 박스를 클릭하거나 F4를 눌렀을 때만 리스트가 표시되는 drop list 상태일 때는 그 리스트는 대화상자의 위에 별도로 표시되는 popup 윈도우 형태로 생성된다. 이해가 되시겠는가?

차일드 윈도우의 표시 위치는 자기 부모 윈도우의 클라이언트 위치를 기준으로 상대적으로 산정된다. 그런데 자기가 현재 부모 윈도우의 클라이언트 위치 기준으로 어디에 있는지를 한 번에 얻는 게 은근히 힘들다. 대화상자 크기에 따라 차일드 컨트롤들을 적절하게 재배치하는 코드를 작성해 보았다면 이 말이 무슨 뜻인지 잘 알 것이다.

이 경우 GetWindowRect를 한 후에 부모 윈도우를 기준으로 ScreenToClient를 하여 화면 좌표를 한번 거쳐야 하거나, 아니면 번거로운 구조체 초기화를 해야 하는 GetWindowPlacement 함수를 호출해야 한다. 후자 함수의 경우, 최대화된 윈도우라도 원래 있던 위치와 크기까지.. 그 윈도우의 위치와 관련된 모든 정보를 되돌려 주기 때문에 유용하다. 응용 프로그램이 종료 후 나중에 재실행될 때 원래 위치를 100% 그대로 실행되기를 원할 때 이 구조체 값을 백업해 두면 된다.

4. 윈도우 간의 부모/자식 관계

child 윈도우야 그 정의상 태생적으로 부모 자식 관계가 명백하게 존재할 수밖에 없다. 하지만 popup 윈도우도 비록 child처럼 표시되는 위치와 영역이 부모 윈도우 내부로 한정되는 급까지는 아니더라도, 부모 자식 관계 비스무리한 개념이 물론 존재한다.

popup 윈도우는 Z-order상으로 자기 부모 윈도우를 가리고 언제나 더 앞에 출력되며, 부모 윈도우가 소멸될 때 자기도 같이 없어진다. 요렇게 child가 아닌 popup 윈도우의 부모 역할을 하는 윈도우를 개념상으로 owner 윈도우라고 따로 부르기도 한다.

그럼 popup 말고 overlapped 윈도우는? 지금까지 살펴보았듯이 쟤는 애초에 주 용도가 응용 프로그램의 최상단 프레임 껍데기이다. 그러니 태생적으로 부모 윈도우 같은 걸 지정하지 않고 생성되며 부모 자식 관계를 따지는 건 딱히 의미가 없다고 봐야 할 것이다.

그런데, 여기서 유의해야 할 점이 있다. EnumChildWindow나 GetWindow(GW_CHILD) 함수에서 찾아 주는 건 순수하게 child 윈도우들뿐이다. Spy++를 실행하면 계층 구조로 표시된 윈도우 트리를 볼 수 있는데, 이것도 child 윈도우들의 관계만 볼 수 있다.
쉽게 말해 어떤 대화상자 내부의 대화상자(프로퍼티 페이지)라든가 각종 컨트롤들은 계층 구조로 표시되지만, 대화상자에서 얘를 owner로 삼아서 또 다른 modal 대화상자를 꺼내 놓은것을 계층 구조로 보여주지는 않는다는 뜻이다.

자신을 부모(정확히는 owner)로 갖는 서열상 하위의 popup 윈도우들을 한번에 찾아 주는 API는 의외로 존재하지 않는다. 난 이게 당연히 있을 줄 알았는데 없는 걸 발견하고는 개인적으로 굉장히 놀랐다.
일단 top-level 윈도우들을 다 enumerate 한 뒤, 얘들의 owner가 일치하는 놈을 일일이 뒤져 봐야 한다. 그래서 Spy++가 표시해 준 윈도우 리스트가 생각보다 직관적이지 않고 top-level 윈도우가 많은 것이었구나.

이상이다. Windows 프로그래밍을 15년 가까이나 판 본인도 몇 년 전까지만 해도 child는 그렇다 치더라도 popup과 overlapped는 도대체 왜 존재하는 구분인지를 잘 몰랐다. 그리고 parent 윈도우와 owner 윈도우의 관계도 정확하게 모르고 있었고 owned 윈도우는 child 윈도우 조회하듯이 곧장 조회가 가능하지 않다는 것도 미처 생각을 못 하고 있었다. 그러다가 요 근래에야 어렴풋이 이해하게 된 것들을 이렇게 정리해 보았다.

Posted by 사무엘

2017/05/10 08:35 2017/05/10 08:35
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1358

1. 내로남불 이중잣대

내가 하면 로맨스, 남이 하면 불륜 이중잣대.
이래도 X랄, 저래도 지X. 어떻게 대답을 하든 꼬투리 잡아 불평불만 욕하기.
이건 성경에도 정확하게 묘사되어 있는 호모 사피엔스의 종특이다. 정말 무릎을 치지 않을 수 없다. 나 역시 이런 오류를 범하지 않도록 노력한다.

요한이 와서 먹지도 아니하고 마시지도 아니하매 그들이 말하기를, 그가 마귀 들렸다, 하더니
사람의 아들이 와서 먹고 마시매 그들이 말하기를, 보라, 음식을 탐하는 자요, 포도즙을 많이 마시는 자요, 세리들과 죄인들의 친구로다, 하는도다. ... (마 11:18,19; 눅 7:33,34)

이솝 우화에 아주 비슷한 예가 있다. 나귀를 끌고 가는 부자 이야기 말이다. 아버지와 아들 두 사람이 각각 나귀를 타거나 타지 않는 2*2 = 4가지 경우를 어떻게 조합하건 주변 사람들은 욕을 했다. 이건 뭐 답이 없다.

마녀사냥이 괜히 천하의 개쌍놈 짓이라고 지탄받는 게 아니다. 멀쩡한 여성을 물에 쳐박아 넣었는데 안 죽고 버티면 레알 마녀 괴물이니 화형에 처한다. 꼬르륵 익사해 버렸으면 사람이니 마녀 누명은 벗지만, 당사자는 이미 죽고 없다. 뭘 해도 걸린다. 뭐 이런 식의 논리이니까.. -_-;;
destructive testing을 무슨 양산형 제품 중 하나를 무작위로 추출해서 시행하는 게 아니라 사람한테 시행하는 거다.

“난 이 승만은 보도연맹 학살과 국민방위군 사건 때문에 극혐하지만, 마오 쩌둥은 아무래도 좋고 대약진운동이건 제사해 운동이건 상관 안해요.” 같은 부류도 넓은 의미에서는 이런 범주에 속한다.
김씨 부자는 말할 것도 없고 어지간한 흉악 범죄자, 음주운전 교통사고 가해자, 731 부대장,히틀러나 도조 히데키 같은 전쟁광 인간 쓰레기들 한테도 안 쓸 욕과 저주와 악담을.. 좀 희생과 부작용 감수하고라도 정말 수단과 방법을 가리지 않고 남조선이 적화되지 않게 막은 잘못밖에 없는 자국 초대 대통령에게 도대체 무슨 의도로 퍼붓는지 난 잘 모르겠다.

그 시절에 그 욕 안 쳐먹고 곧이곧대로 신사적으로만 일 추진했으면 그냥 대한민국 간판 내리고 김 일성에게 정권 갖다바치는 수밖에 없었을 것이다.
뭐, 자기도 김 일성 싫어는 한댄다. 그러나 눈빛만 보면 안다. 똑같이 싫어한대도 이 승만을 욕할 때와 같은 혼과 진심은 절대 담겨 있지 않다. 이건 정상적인 분별력과 판단력에서 나온 행동이 아니다. 남조선 일부 대통령의 독재랑 북괴의 독재가 아무 차이가 없다는 망발도 사상에 이상한 데에 지독하게 오염된 중증 정신병이다.

그러니 이 정도면.. 그냥 “난 논리고 팩트고 뭐고 아무 필요 없고 특정 정치인은 그냥 괜히 아무 이유 없이 싫어요”가 차라리 솔직하고 정직하고 양심적인 대답이다. 그건 최소한 거짓말은 아니거든. 그러면 나라도 “아~ 그러세요?” 하면서 그 사람 앞에서는 정치 얘기 더 안 꺼낸다. 취향이야 존중해 줘야지?

그렇게 개인적으로 생각하는 건 얼마든지 자유이고, 심지어 그 주장을 자기 개인 사이버 공간에다 올리는 것 역시 자유다. 단지 그 따위 논리 체계를 갖고서 남의 사이버 공간을 더럽히고 오지랖을 놓는다거나, 남에게 적극적으로 영향을 끼치려고 하지만 않으면 된다. 자기와 생각이 다른 사람을 공격하거나 설득하려고 하지만 않으면 된다. (그리고 더 나아가서는 다른 직업은 몰라도 정치인, 외교관, 법조인, 문과 계열 교사 같은 직업은 안 갖고 살면 된다 -_-;; )

애초에 저런 성향의 사람들은 미국 같은 인권과 민주주의(?)를 요구하면서 자기 나라를 욕하고 비관하지만, 정작 추종하고 모델로 삼고 친해지려는 나라는 북한이나 중국처럼 인권이나 민주 따윈 있지도 않은 나라들이다. 똑같이 외국이고 비슷한 잘못을 저질렀을 때에도 비판하는 잣대가 같지가 않다. 쟤들은 원래 저렇다. 그러니 종북 빨갱이라고 백 날 욕 먹어도 할 말 없다.

2. 악마의 편집, 기레기 기질

그때에 그 제자는 죽지 아니하리라는 이 말씀이 형제들 가운데 널리 퍼졌으나 예수님은 그에게, 그가 죽지 아니하리라, 하지 아니하시고 다만, 내가 올 때까지 그가 머물 것을 내가 원할지라도 그것이 너와 무슨 상관이 있느냐? 하셨더라. (요 21:23)

이것도 완전 대박이다.
본문이 무슨 말이냐 하면, 예수님은 “요한은 설령 순교하지 않는다고 해도 그게 너(베드로)랑은 무슨 상관이니? 오지랖 부리지 마라”라고만, 즉 “안알랴줌” 노코멘트라고 대답을 하셨다. 그런데 그게 곧장 “요한은 순교 안 하고 천수를 누릴 거래!”라는 루머로 변한 채로 커뮤니티에 쫙 퍼졌다.

이게 인간의 심성이다. 다른 예로, 구약의 십일조에 대해서 생각해 보자. 신약에서는 성경에 약속된 보상 자체가 영적인 것이지 물질적인 것이 아니다. 그렇기 때문에 십일조는 그 취지나 정신을 빼면 교리적으로 신약 교회와 무관하긴 한데, 그 얘기를 하면 "어 그럼 아예 헌금을 안 내도 되네, 내 물질 안 바쳐도 되네"처럼 원문이 의도하지 않은 내용까지 자기에게 유리한 쪽으로 슬그머니 넘겨짚는 사람이 꼭 있다.

성경 얘기 말고 더 선정적인 예로는, 15년도 더 전에 우리나라에서는 “결혼하고 나서도 너무 바빠서 자녀계획 같은 거 생각할 겨를이 없네요”라는 인터뷰가 어느 찌라시에서 “최 진실 임신 못 한다”라는 제목으로 한 줄 요약되기도 했다. ㅠㅠㅠㅠ 저건 거짓말은 안 한 건가..?? -_-

그러니 예수님이 다시 이 땅에 온대도 언론은 얼마든지 천하에 죽일놈 개쌍놈으로 조작할 수 있다. 전혀 이상한 일도, 놀랄 일도 아니다. 바라바를 풀어 주고 예수님을 처형하라고 날뛰던 백성들 하나도 욕할 자격 없음. 오늘날까지 괴벨스의 후예들이 워낙 많이 날뛰고 있으니 말이다. 여기에 앞에서 언급한 내로남불 이중잣대 테크닉이 합해지면 삼인성호 같은 건 일도 아니다.

성경을 보면 “카이사르에게 세금을 바치는 것은 옳습니까?”(마 22:17), “간음하다 붙잡힌 이 여인을 어떻게 하는 게 좋을까요?”(요 8:4-5)처럼 겉으로는 평범한 정치· 종교 질문 같지만 결국은 Yes/No 뭐라고 대답하든 앞뒤 문맥 짤라서 사람을 매장하려는 의도가 다분한 불순한 함정 질문도 있다.

그러니, 하물며 “성전 헐고 사흘 만에 재건” 운운은 기레기· 선동꾼들이 앞뒤 문맥 떼어내고 집어물기에 이보다 더 좋을 수 없는 선정적이고 자극적인 떡밥이었다.
원전은 요한복음(요 2:19)에 있는데 사람들이 나중에 써먹는 건 다른 책인 마태복음(마 26:61)에서 나온다는 게 흥미롭다.

3. 극단적인 것, 예외적인 것만 부각시켜서 큰 진실 왜곡

(1) 큰 그림: 남자는 여자보다 힘이 세다.
작은 그림: 그런데 장 미란은 어지간한 남자들보다 훨씬 더 힘이 세다.

(2) 큰 그림: 미국은 한국을 군사적으로 정~말 많이 도와줬고 물자 원조도 하고 고아들도 왕창 많이 받아줬다.
작은 그림: 근래에 주한미군에 그렇게 질 좋은 사람이 오질 않다 보니 윤 금이 살해 사건에, 이태원 살인 사건 같은 범죄가 가끔 발생했다. 장갑차 교통사고 때는 가해자가 실실 쪼개고 앉아 있었다.

(3) 큰 그림: 88 서울 올림픽을 우리 민족의 저력으로 아주 성공적으로 개최했다.
작은 그림: 그런데 개막식 때 성화 점화와 비둘기 날리기가 서로 아귀가 안 맞아서 "세계가 지켜보던" 중에 비둘기 몇 마리가 산 채로 통구이가 돼 버리긴 했다. 그리고 미관에 안 좋다고 동선상의 판잣집들이 강제로 철거당하고 개고기는 더욱 음지화하게 됐다.

(4) 큰 그림: 북괴는 끊임없이 남한에 무력 도발을 하고 테러 저지르고 간첩 보내고 땅굴도 팠다. 악랄함의 수위로 따지자면 일제를 능가한다.
작은 그림: 그렇게도 반공 강조하던 박 정희도 김 일성으로부터 선물 받은 적 있고, 그 딸은 한때 평양 가서 김 정일한테 공손히 인사도 하고 온 적 있다.

(5) 큰 그림: 일제는 조선 땅의 물자를 가혹히 수탈했으며, 말기로 갈수록 전쟁 준비와 민족 말살 정책으로 조선인들을 매우 괴롭혔다.
작은 그림: 그런데 조선 말기가 워낙 너무 막장이었기 때문에 일제는 본이 아니게 한반도에다 철도 도로 전기 등 각종 인프라를 설치하고 근대화(?)를 시켜 주기도 했다. 초기엔 일제 순사가 마을 집집마다 파리채를 나눠주기도 했을 정도였다.


이 모든 정황에도 불구하고 남자는 여전히 대체로 여자보다 힘이 더 세며,
미국은 한국의 매우 고마운 우방국이다. 다른 나라라면 몰라도 반도는 반미 할 자격 천하에 없는 나라다.
88 서울 올림픽은 전반적으로 매우 잘 치러서 한국의 리즈 시절 추억을 남겼고,
북괴는 오히려 그렇게 화해하는 척하면서도 호박씨 까면서 더욱 비열하게 도발을 했을 뿐이다.

일제 역시 조선을 조금 근대화시켜 준 건 돼지를 잡아먹기 직전까지 잘 먹이고 살찌우는 것과 같은 목적으로 한 것일 뿐이다. 쟤들이 말기엔 단군의 후손이라는 정체성을 아예 싹 없애려고 창씨개명, 한국어 사용 금지, 신사 참배와 궁성요배 강요 짓거리를 한 걸 생각해 보아라.
이건 사람을 대놓고 독가스실로 보낸 것만 아닐 뿐이지 몸이 아닌 정신에 대해서는 거의 나치 유대인 학살 급의 죄질이다. 이 엄청난 만행이 겨우 1920년대 리즈 시절에 알량한 인구 증가와 식량 생산 증가, 철도와 공장 건설 산업화 따위로 실드 쳐지겠는가?

작은 그림을 의도적으로 부정하고 은폐할 필요는 없다.
그러나 작은 그림에 "만" 꽂혀서 큰 그림을 부정하려 하는 외눈박이 이단들로부터는 반드시 도망쳐 나와라. 그런 애들은 순진하고 멍청하기보다는 사악하고 불순한 경우가 더 많더라.

기독교계에 이런 방식으로 넘어진 이단들은 일일이 열거하기도 어려울 정도로 수두룩하다.
진리의 성경 말씀을 올바로 나눠야 하지만(딤후 2:15), 한편으로 역사 팩트도 올바로 나눌 줄 알아야 한다. 여기서 divide란 분할, 구분, 분간..을 의미한다.

4. 결론

이것 말고 또 무슨 예가 더 있을까?
성경에는 마태복음의 끝부분처럼 로마 정부가 “예수 시체 도난”이라고 여론 조작과 매수를 시도하는 장면도 나오고,
또 고라 일당처럼 자기가 권력욕 대통령병에 걸려 있으면서 말은 “성직 계급 반대, 만민 제사장론” 드립을 치면서 모세를 상대로 반역을 부추기는 장면이 나온다. 사회· 공산주의가 주장하는 “능력껏 벌어서 필요한 만큼 쓰는 세상, 노동자가 주인 되는 세상” 이런 것도 다~ 저런 케케묵은 전략의 후신일 것이다.

아무리 과학기술이 발전해도 인간의 본성이 바뀌지는 않겠지만, 인간이 그래도 뇌가 있고 일말의 지능이 있다면 최소한 옛날 사람들이 겪었던 시행착오를 또 겪는 일은 없어야 할 것이다. 실수를 하더라도 주토피아 OST 가사처럼 새로운 실수를 계속 만들면서 발전이나 변화를 해야지 뻔히 실패가 검증된 길을 또 가서는 꿈도 희망도 없다.

내가 늘 말하듯이 성경은 신약 크리스천의 행실 차원에서는 정교 분리를 명시하며, 기본적으로 정치 중립적인 책이다. 예수님이 재림해서 지구를 직접 다스리기 전까지는 인간이 만드는 완벽한 세상 정부와 지상락원 유토피아 같은 건 있을 수 없다.
성경은 "위의 권위와 주인과 갑에게 순종하라" 같은 보수적인 이념 위주이지만, 누가복음이나 야고보서 같은 매우 좌파스러운 책도 있다. 결정적으로 예수님을 십자가에 매다는 데는 유대인, 로마인, 백성과 지도자와 외세가 공평하게 똑같이 기여했다.

이런 기본적인 균형이 잡혀 있음에도 불구하고 지금 우리나라 현실에서는 소위 좌와 우 중에서 누가 더 크게 잘못하고 있고 더 반역적이고, 더 반성경적인 방법론을 즐겨 사용하는지는 정말 답이 이미 나와 있는 문제인 것 같다. 모두가 공평하게 잘사는 세상 따위야 인간의 힘으로 결코 이룩할 수 없지만 북괴에 안 퍼 주는 세상 정도는 인간의 힘으로 이룩할 수 있으며, 반드시 이룩해야만 한다!

물론 사람이란 게 성장 배경과 관심분야가 제각각이고, 보고 듣고 정보를 입수하는 경로가 제한돼 있다 보니 삼라만상을 보는 관점이 편파적이 될 수는 있다.
누구는 일본이 더 싫지만 누구는 북한이 더 싫고.. 누구는 경제와 안보에 더 관심이 많지만 누구는 약자 인권과 복지에 더 관심이 많을 수는 있다. 혼자만 그렇게 생각하고 자기 일기장이나 SNS에다가만 끄적거리는 거면 그건 아무 문제될 게 없다.

그러나 감히 대통령을 물러나라고 요구할 정도의 강한 결론이 담긴 주장을 하거나, 남의 주장을 반박하고 남의 SNS에다가 오지랖을 부리거나 남을 설득해서 논쟁에서 이기고 내 편을 만들려면 논리가 편파적이어서는 결코 안 된다. 아예 법조인, 정치인, 또는 문과 계열의 교사· 교수처럼 나라의 미래를 좌지우지 하고 남에게 적극적으로 영향을 끼치는 처지의 사람이 사상 체계가 그따구여서는 절대 안 된다.

일관성이 없으려면 차라리 일관성 없게, 랜덤하게 일관성이 없어야(?) 그건 비교적 자연스러운 모습일 것이다. 정말로 그 사람이 생각이 짧거나 식견이 부족했거나, 하나만 알고 둘은 몰라서 편파적으로 생각한 것일 수 있다. 그건 개선의 여지가 있다.
그러나 인권을 얘기하고 나라의 비극과 흑역사를 얘기하면서 오로지 북괴에 대해서만 절~~~대 침묵하고, 꼭 그쪽으로만 "일관되게 일관성이 없는 것"은 우연일 수 없다. 일부러 작정하고 그러는 것이며 매우 불순하고 사악한 태도이다.

그래 가지고는 나 같은 사람은 절~대로 설득을 못 할 것이고 내가 쓰는 글의 논조를 바꿀 수 없을 것이다.
"얻다대고 비겁하게 팩트나 끄집어오다니? 인권 민주 복지 평화 통일 팔아서 거짓 날조와 선동으로 정정당당하게 승부하자!" 이러려는 것 같은데, 그런 속 뻔히 보이는 전술은 나한테는 절대로 안 통할 거다.

Posted by 사무엘

2017/05/07 08:32 2017/05/07 08:32
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1357

박 정희 대통령의 자녀들

1. 박 근혜(1952)

* 주의: 오늘은 시기가 시기이다 보니 오랜만에 정치 얘기 좀 꺼낼 것이고 글 중간에 필터링하지 않은 진지한 욕설도 늘어놓을 것이다. 독자들에게 미리 양해 구함.
나하고 정치 성향이 맞지 않고 북괴는 같은 '우리민족'이니 남조선의 존립에 전혀 위협이나 해가 되지 않는다고 태평스럽게 생각하는 분, 내 글을 팩트와 논리로 반박· 저격할 의향이 없는 분은 박 근혜 얘기는 그냥 건너뛰기 바란다. 난 분명히 미리 주의를 줬다.

서강대 전자공학과를 나온 나름 이공계 출신이고, 잘 알다시피 그냥 독신이다.
이 사람은 바로 얼마 전까지 제18대 대통령을 역임하여 우리나라 최초의 여성 대통령, 과반 당선 등의 기록을 달성했다. 그러나 헌법을 고치면서 18년씩이나 대통령을 한 부친과는 달리, 딸은 예정되었던 임기도 못 마치고 탄핵 인용 파면으로 대통령 생활을 마감했다. 하긴, 만기 퇴임을 못 한 건 부녀가 동일하네..;;

글쎄, 내 소신을 말하자면 본인은 박통이 재임했던 4년 동안 약간이나마 행복했다. 지금은 그 행복이 중대한 위협을 받게 되어 마음이 착잡할 따름이다.
박통을 개인적으로 좋아하거나 싫어한다는 의견에 대해서야 개인 자유이며 내가 더 시비를 걸 여지가 없다. 그러나 이 사람이 무능했다거나, 한 게 아무것도 없다는 주장에는 본인이 결코 동의할 수 없다. 한 게 없긴 왜 없냐? 두 눈 똑바로 뜨고 봐라.

  • 통합진보당 해산
  • 전교조 법외노조화
  • 한미 연합사 전시작전권 전환 무기연기, 전쟁 위협 시 선제 타격 가능
  • UN 북한 인권 결의안 채택
  • 개성공단 폐쇄 및 대북지원 (명목상) 0원

야당 후보가 죽었다 깨어도 절대로 안 하거나 못 할 일을 얼마나 많이 해냈냐? 박 근혜는 애초부터 DO보다 BE의 업적이 더 뛰어난 대통령이었다. 우리나라 적화통일을 한 4년쯤 늦춰서 최소한 시간은 벌어 줬다.

이 정도로 퍼 주고 시행착오를 겪었으면, 이제는 북괴에 대해서 "시키는 대로 할 테니 주민들 해치지 마라"가 아니라
네일건 쏘면서 "두 번 협상은 없어. 한 시간 내로 핵무기 포기해" 이래도 모자랄 판 아닌가?
전쟁? 얼어죽을 북폭 선제공격 같은 건 할 필요도 없다. 그냥 모든 돈줄을 차단하고 가만히 내버려두기만 해도 된다. 급한 건 북괴이지 우리가 아니다. 모든 정황이 우리에게 유리하다.

그런데도 아직까지 대화나 협력으로 북핵을 해결하자 나불대는 인간말종 개새끼들은 정말 대놓고 종북 개빨갱이들 아닌가? (너무 화가 치밀어서 욕설을 가리지도 않았다) 그야말로 Let's make North Korea great again이다.
꼭 저러는 놈들이 일제에게 비굴하게 평화를 구걸했던 구한말 매국노 친일파는 같은 입으로 어째 저렇게 욕을 해 대나 모르겠다.

다시 말하지만 박통 레카는 행적이 분명히 있다. 단지 종북좌빨들이 좋아하는 행적이 아니었을 뿐이다. 레카가 훌륭한 대통령이었던 이유는.. 적들의 평가가 말해 준다. 이 이상 더 말이 필요하지 않다.

사용자 삽입 이미지

로동신문 2016년 3월 16일자라고 함. 그로부터 딱 1년 뒤에 북괴의 "꿈은 이루어졌다."

바보 멍청이들이 꼭 "위수김동 장군님 만세"만 외쳐야 종북인 줄 알어.. 사탄 마귀가 빛의 천사로 나타나지 그럼 반공 포스터에 그려진 것처럼 뿔 달리고 꼬리 달린 흉측한 괴물로 나타날 줄 아냐?

박 근혜가 아들이 비리 저지른 전직 대통령, 부인이 뇌물 받은 전직 대통령 등 온갖 친인척 비리가 얽히고 설켜 있는 다른 사람들보다는 훨씬 더 청렴했다는 건 주지의 사실이다. 저런 거 다 지켜봐 온 사람으로서 지금의 뇌물 수사네 구속이네 하는 거.. 정말 정의를 위해서 하는 건 1도 아니라는 것쯤은 진영논리로 양심과 지능이 마비되지 않은 한 삼척동자라도 알지 싶다. 개돼지가 아니라 과거에 대한 기억이 시퍼렇게 살아있고 학습효과가 있는 사람을 속이고 선동할 순 없지!

레카가 탄핵돼야 하는 이유는 내가 보기에 거의 전부가 탄핵까지 당할 잘못도 아니고 그냥 지가 닭그네가 싫은 이유들(= 좀 심하게 말하면 적화통일에 걸림돌이 되니까) 그 이상도 그 이하도 아니더라.

  • "북괴한테 물어 보는 건 괜찮고 최 순실한테 물어 보는 것만 그렇게까지 죽을 죄냐?" (다른 비정치적인 주제도 아니고 인권 결의안 같은 아주 크리티컬한 것을)
  • "지금이 어느 시댄데 빨갱이 타령이냐고? 그럼 더 오래된 친일파· 위안부 타령은 뭐냐?"
  • "그 무개념녀는 그래도 허접하게나마 승마 단체전 메달이라도 땄지, 수많은 고시낭인 취준생들을 농락하고 아무 스펙 없이 특혜만으로 공기업 합격부터 한 뒤에, 대충 쓴 이력서 달랑 제출한 누구 아들은 그럼 뭐냐? 게다가 뭐 저런 놈이 서민 타령이냐?"

등, 저격할 아이템들은 한도 끝도 없다.

판결문 어딘가에 있던 문장인데.. 헌법 수호 의지가 없다고? 나 참 기도 안 차서.. 외국까지 나가서 북핵 열심히 옹호하고 실드 치던 모 대통령의 짓거리는 씨발 그럼 자국 헌법 수호 의지가 있는 행동이더냐? 사람들이 진짜 큰 위험한 죄가 뭔지 우선순위 분간을 못 한다.
자 그럼.. 흥분은 가라앉히고, 다음 얘기로..

2. 박 근령(1954)

이분은 박 근영, 박 서영을 거쳐서 지금의 이름으로 개명을 어찌 된 일인지 두 번이나 했다. 서울대 음대 나왔으며, 그 이름도 유명한 "새벽종이 울렸네 새 아침이 밝았네" '새마을 노래'의 실질적인 작곡자로 알려져 있다.

이 글을 쓰는 본인은 1980년대생으로 박통은커녕 전대갈 시절을 경험한 기억조차 없다. 서울 올림픽 이전 시기는 직접체험의 기억이 없는 선사시대의 영역이다. 민주화 운동 같은 것도 모름.
허나, 새마을 노래를 동요 테이프에서 들은 적이 있고 엄청 옛날 음악 교과서에서 악보를 보기도 했다.

새마을 노래는 가사 내용대로 "일하면서 싸우고 싸우면서 일하기 좋게", 노동요처럼 참 흥겨운 곡이라는 생각이 들었다. 물론 여기서 싸우는 건 같은 편끼리 치고 받고 싸우는 게 아니라 적군(=북괴)과 싸운다는 얘기다. 성경에서 느헤미야서에 완벽한 예시가 있다. (느 4:15-18)

이 새마을 노래는 공식적으로 박 정희 대통령의 작사 작곡으로 등재되어 있다.
일단 작사는 아랫사람을 시킨 뒤 대통령 이름만 올린 게 아니라 정말로 박통 당사자가 한 것으로 보인다. 저 사람은 젊은 시절부터 교사와 장교를 모두 역임했고 그림과 글씨, 음악 등 예체능에도 두루 조예가 깊은 똑똑한 사람이었다.

작곡에 대해서는 사실은 세월 간격을 두고 조금 상이한 증언이 존재한다. 2004년경 굿데이 인터뷰에서는 작곡을 딸이 다 했다고 나오지만 더 최근 인터뷰에서는 작곡까지 아버지가 했는데 딸은 그걸 악보로 받아 적고 편곡만 한 것으로 나온다(2008년 11월자 인터뷰, 그 뒤 2015년에도). 어떤 형태로든 그 당시 대통령의 영애가 개입을 했다.

박 근령은 훗날 1982년에 대기업 회장 가문 아들과 결혼했으나 6개월 만에 이혼하고 오랫동안 언니처럼 솔로로 지냈다. 그러다 그로부터 30년이 넘은 2007년에 50이 넘은 나이로 무려 13살 연하의 전문대 교수와 재혼했다. 자녀는 없음.

3. 박 지만(1958)

육사까지 나오긴 했지만 잘 알다시피 젊은 시절에 방황 많이 했고, 40대 중반 나이가 된 2004년에야 16살 연하의 변호사와 결혼했다. 그 이듬해에 득남했다가 2014년에 9살 터울의 둘째 아들을 얻었고, 그 다음 2015년에는 쌍둥이 아들을 얻어서 자식은 아들만 넷이다. 부인이 젊다지만, 그래도 58세의 나이에 얻은 아들이니 정말 엄청난 늦둥이이다. 박 정희가 1917년생인데 증손자도 아닌 막내 손자가 2015년생이라니...

박 지만이 학교에 들어가던 1970년대 초중반엔 이제 막 고등학교 평준화가 시행되었으며, 학교 배당에 컴퓨터 추첨이 동원되었다.
KIST가 정부로부터 이거 뺑뺑이를 의뢰받아서 실시했는데, "추첨을 살짝 조작해서 대통령의 아들인 박 지만 군을 그래도 명문 K고에다가 배정하라"라는 외압이 있었다고 한다.

그러나 그 당시 KIST 전산실 실장이던 성 기수 박사가 이에 소신껏 응하지 않고 아무 조작 없이 추첨을 돌려서 그는 J고에 진학하게 됐다... 고 성 박사의 회고록이 전해진다. K와 J가 어디인지는 알 만한 사람들은 다 알 것이다.

이렇듯, 이쪽 가문은 결혼 여부와 시기, 자녀 유무나 시기 같은 가정사가 다들 평범하지 않아 보인다.
사실은 박 정희는 어렸을 때 억지로 떠밀려서 결혼한 전 부인 김 호남에게서 얻은 딸도 하나 있다. 박 재옥(1937)이라고 박 근혜 전대통령의 입장에서는 15살이나 더 많은 이복 언니이다. 이분은 그나마 평범하게 산 듯하며, 친부에게서 그렇게 아주 버림받지는 않고 특혜도 종종 받으며 지냈다.

Posted by 사무엘

2017/05/04 08:30 2017/05/04 08:30
, , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1356

1. 외부 모듈 핵심부의 EXE 분리

오래 전부터 조금씩 풀었던 썰이긴 한데, 마침 최근에 회사에서 유사 개발 업무를 한 적도 있고 해서 다시 얘기를 꺼내 보겠다.
Windows는 타 OS들과는 달리 IME가 EXE가 아닌 DLL 형태이다. 한 프로세스의 주소 공간에 완전히 속해 있는 덕분에 성능이 좋다는 장점이 있겠지만, 한영 상태가 스레드들마다 제각각 따로 놀고 거기에다 memory-mapped 방식으로 로딩된다는 특성까지 겹쳐서 IME의 on-the-fly 업데이트가 몹시 난감하다.

EXE라면 업데이터 하나 띄워서 자신을 종료한 뒤 업데이트 된 놈으로 재시작만 하면 간단하게 끝났을 일인데 Windows용 IME는 업데이트 하려면 자신을 사용하는 프로그램들을 몽땅 종료해야 하고, 그게 여의치 않으면 그냥 운영체제를 재시작/로그오프 해야 한다. 거기에다 32/64비트까지 모두 신경 써야 한다.

그래서 <날개셋> 한글 입력기 외부 모듈도 인제 와서 처음부터 다시 만드는 건 무리이겠지만, 앞으로 덩치 큰 IME를 만들 일이 있으면 DLL은 거의 업데이트 할 일 없는 껍데기만 남겨 놓고 실질적인 문자 조합은 EXE 기반의 '서버'에 담당시키면 어떨까 생각을 해 왔다. 업데이트도 IME가 통신하는 EXE만 하고 말이다.

이렇게 하면 모든 IME들의 설정과 상태 동기화는 자동으로 이뤄진다. 서버와는 함수 호출이 아니라 메시지와 memory-mapped file 같은 간접적인 방법으로 통신을 하니 서버는 굳이 바이너리 구분을 할 필요 없다. 64비트 OS에서는 64비트 서버 하나만 띄워 놓으면 32비트와 64비트 IME가 모두 통신이 가능하니 더욱 좋다.

실제로 실험용 IME를 만들어 본 결과는 흥미로웠다. 서로 다른 프로세스끼리 메시지를 주고받을 때는 단일 스레드끼리 메시지를 주고받을 때에 비해 고려해야 할 점이 더 많았다. 받는 쪽에서 자체적으로 대화상자 같은 걸 출력하고 그 상태로도 자체 메시지를 처리하지 못하는 block 상태가 되지 않으려면 대화상자는 modal이 아니라 반드시 modeless 형태로 만들어야 했다.

SendMessage와 PostMessage를 조심해서 가려 써야 하며, 리턴값을 꼭 받기 위해 Send를 하면서도 신속한 반응성을 보장하기 위해서는 지금까지 머리로만 알고 있던 ReplyMessage 같은 함수를 난생 처음으로 써 보기도 했다. 특히 호스트가 클라이언트로부터 Send된 메시지를 받은 뒤에 대화상자 같은 modal UI를 띄운다면 말이다.

여기까지 생각을 하긴 했으나.. IPC 기법들은 근본적으로 IME들이 쓰라고 만들어진 메커니즘이 아니다 보니 한계도 많다.
가장 먼저 권한 문제가 걸리니, IME 서버는 번거롭게 관리자 권한으로 실행하거나 아니면 애초에 운영체제의 서비스 같은 급으로 만들어야 한다. 메트로와 데스크톱 앱 사이의 소통도 문제이고..
IME가 글쇠 입력을 받은 것을 서버로 요청을 보내는 건 그럭저럭 할 만하나, 반대로 서버가 IME로 문자 입력 요청을 하는 것은.. IME가 제각각 스레드 동기화 오브젝트나 윈도우를 만들어야 가능할 것이다.

서버는 자신과 접속하거나 종료하는 클라이언트들을 파악하고 있어야 하는데 자고로 프로세스라는 건 강제 내지 비정상 종료될 때도 있다. 그렇기 때문에 모든 프로그램들의 근황을 언제나 정확하게 파악하고 있는 것도 훅킹이라도 동원하지 않으면 의외로 쉽지 않더라.

이것저것 가성비를 생각해 보니 서로 장단점이 있고 근본적으로 한 방식이 다른 방식을 완전히 대체 가능해 보이지는 않았다. 안 그래도 날개셋의 경우 EXE 기반의 입력기 개발 실험은 입력 패드를 만들면서 이미 그럭저럭 하기도 했다. Windows에서 어떤 DLL이 타 프로세스에 합법적으로 침투할 수 있는 양대 통로는 미우나 고우나 훅킹 아니면 IME이다.

다만, 지금 MS 일본어 IME가 이미 그런 것처럼 제어판 대화상자만은 EXE로 분리하는 게 나은 점도 있다.
실행되는 응용 프로그램에 따라서는 공용 컨트롤.. 특히 6.0 이상에서만 지원되는 syslink나 split button, 에디트 컨트롤의 풍선 도움말(cue banner) 같은 게 초기화되지 않은 경우가 종종 있어서 내 날개셋 제어판도 그거 영향을 받아 제약을 받기도 하기 때문이다.

뭐 그건 그렇고..
기존 데스크톱 앱인 '제어판' 말고 메트로 앱인 '설정'에서 돌아가는 환경설정은 어떻게 만드는지 모르겠다. MS 한글 IME에는 그런 게 있던데..;;

2. 설치 시스템 개편

예전에도 여러 번 언급한 바와 같이, <날개셋> 한글 입력기는 Visual Studio가 기본 제공하는 Windows Installer 기반 msi 패키지 형태로 배포되고 있다. 이 솔루션은 MS 본가에서 만든 만큼, 프로그램을 설치하거나 제거하는 본연의 성능은 일정 수준 이상의 퀄리티가 보장된다. 프로그램 디렉터리 어딘가에 uninstall stub 프로그램 같은 게 덕지덕지 붙어 있을 필요도 없고 아주 seamless + 깔끔하다. 하지만 개발툴이 제공하는 GUI 템플릿은 customize가 매우 제한적이고 불만족스러운 점이 많기 때문에 다른 솔루션을 써 볼까 생각도 자주 해 왔다.

이상적인 설치/배포 솔루션은 다음과 같은 조건을 만족해야 한다. 다른 프로그램이라면 몰라도 <날개셋> 한글 입력기에 대해서는 내가 보다시피 욕심이 좀 많다.

  1. CPU 통합: 한 exe 파일 단독으로 32비트와 64비트 OS에서 잘 동작하고, 32비트에서는 당연히 64비트 바이너리를 설치하지 않아야 한다. EXE처럼 32/64비트 중 사용 가능한 상위 바이너리 하나만 설치하면 되는 파일은 선별이 옳게 돼야 한다. 필요한 디스크 공간 계산도 이 모든 변수를 감안해서 돼야 한다.
  2. 언어 통합: 한 exe 단독으로 운영체제의 기본 언어가 한국어이면 한국어, 그렇지 않으면 자동으로 영어로 설치 프로그램의 UI가 출력되어야 한다.
  3. 유니코드 통합: 평상시에 유니코드 API를 사용하는 건 너무 당연한 얘기이고, 그럼에도 불구하고 구닥다리 Windows 9x에서도 유니코드만 포기하고 기본적인 실행이 돼야 한다. 이것도 물론 단일 파일로 말이다. <날개셋> 한글 입력기 본제품이 Windows 95/NT4부터 꼬박꼬박 다 지원하는 프로그램이기 때문이다.
  4. known 폴더: 또한 아무 액세서리 없는 깡통 Windows 95 RTM에서 실행되더라도 IE 4~5 이상에서 첫 도입된 ProgramData (Application Data)같은 known 디렉터리를 인식해서 파일을 제 위치에 설치해야 한다.
  5. 원활한 제거: Windows용 IME는 그 특성상 on-the-fly로 업데이트나 제거가 꽤 난감한 물건인데, 당일 제거를 못 했으면 재부팅 요청 같은 후처리를 적절히 수행해야 한다.
  6. 그 밖에: 관리자 권한 드립 치는 UAC 화면은 setup을 실행하자마자 뜨는 게 아니라, 실제로 설치가 시작되어 관리자 권한이 정말로 필요해졌을 때 직전에 뜨는 게 바람직함.

진짜 유명한 세계구급 소프트웨어인 경우, 설치 프로그램이 언어를 선택받는 대화상자부터 띄우는 경우가 있다. 하지만 날개셋의 경우 그렇게 유명한 물건은 아니니 그냥 운영체제의 기본 GUI 언어가 한국어가 아닐 때에만 영어로 동작하는 걸로도 충분할 듯하다. 날개셋은 GetSystemDefaultLangID() 함수를 써서 판별하는데, 이게 GetUserDefaultLangID와 차이가 무엇이 있는지는 개인적으로 궁금하다.

msi는 (1)과 (2)는 전혀 만족하지 않는 것으로 보여서 문제다.
그러나 (3)과 (4)는 Windows installer runtime (non-Unicode 9x용 에디션)자체만 미리 설치하면 그럭저럭 어렵지 않게 충족된다. 2.0 런타임은 의외로 깡통 Windows 95에서도 깔끔하게 설치 가능하다. 이것 때문에 <날개셋> 한글 입력기가 MSI 외에 다른 배포 솔루션으로 갈아타기가 어렵다.

"HKCU 또는 HKLM"\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders라는 레지스트리를 참조하면 known 폴더 위치를 얻을 수 있다. MSI가 이런 것까지도 생성해 준다. 이렇게 레지스트리를 수동으로 뒤지는 방법은 오늘날에는 마소에서 권장하지 않는 방법이지만, The old new thing 블로그의 설명에 따르면 아직도 여기를 참조하는 고집쟁이 옛날 어플 때문에 어쩔 수 없이 호환성 차원에서 레지스트리를 계속 지원해 주는 거라고 한다. 사실, IE 4~5가 없고 SHGetSpecialFolderPath 함수가 존재하지 않는 골동품 Windows 95 환경에서는 여기를 뒤지는 것밖에 선택의 여지가 없기도 하다.

다음으로 (5)의 경우 msi는 딱 기본만 수행한다. "다음 프로그램들이 요 DLL을 사용하고 있습니다" 대화상자도 찍어 주고, 뭔가 못 건드린 파일이 있으면 "재부팅 하시겠습니까?"라는 여운을 남기기도 하는데, 가끔은 안 그럴 때도 있는 듯하다.

msi 말고 3rd party installer 중에서는 오픈소스이기도 한 NSIS가 세계적으로 제일 유명하다. WinAmp는 역사 속으로 사라졌고 개발사인 Nullsoft도 없어졌지만, 그래도 NSIS만은 유용성 덕분에 오픈소스 진영에서 살아남아 있다. Nullsoft의 개발자들이 왕년에 불멸의 작품 하나로 이름을 남겼다.

얘는 어떤가 하면..
(1)과 (2)는 기술적으로 일단 가능하다. msi보다 분명 우월한 점이다. 그러나 그냥 '가능하다'에서 끝일 뿐, 막~ 적극적으로 지원되고 깔끔하고 편한 형태로 가능하지는 않아 보인다.

단적인 예로, 생성되는 installer에 붙는 런타임 바이너리가 기본적으로 32비트 기반이다 보니, 거기 스크립트 언어에서 기본 제공하는 등록 명령만 이용해서는 64비트 DLL에 대해서 DllRegisterServer(시스템 등록) 호출을 할 수 없다. 뭐, 운영체제가 제공하는 regsvr32 /s를 이용하면 되긴 하지만, 사용자가 직접 저렇게 외부 유틸리티나 플러그 인을 끌어들일 필요 없이 NSIS가 내장 명령어 차원에서 저걸 지원하면 더 좋을 것이다.
홈그라운드 운영체제의 지원빨이 있는 msi에서는 반대로 DLL의 등록쯤은 전혀 걱정할 것 없는 사항이다. 64비트용 msi라면 64비트 DLL이건 32비트 DLL이건 불문하고 등록이 깔끔하게 잘 처리되기 때문이다.

(3)은 NSIS가 한동안 정식으로 지원하지 않아서 Unicode NSIS라는 별도의 프로젝트 브랜치가 나돌 정도이다가 비교적 최근에 NSIS가 3.x 버전에 진입하고 나서야 유니코드를 정식으로 수용하게 됐다.
그러나 NSIS는 기술 수준이 그냥 이미 있는 Windows API를 감싸는 정도를 벗어나지 않기 때문에 유니코드와 Windows 9x를 동시에 지원한다거나, 구버전 OS에서 신버전의 known 디렉터리를 만들어 주는 정도의 과잉 친절을 베풀지는 않는다.
(5)의 경우는 NSIS가 어디까지 자비롭게 대처하는지 아직 제대로 확인을 못 해 봤다.

요약하면, 완전한 스크립트 기반인 NSIS가 당장 자유도가 뛰어나 보이기는 하지만, 그래도 레거시 운영체제 지원이나 시스템 차원에서의 융통성은 그래도 msi가 나은 게 있어서 한 솔루션이 다른 솔루션을 완벽하게 대체하지는 못하는 실정이다.
NSIS의 스크립트는 무슨 파이썬이나 Lua 급으로 복잡한 연산식이나 복합 자료구조를 지원하는 본격적인 고급 언어가 아니다. 스크립트의 문법은 반쯤 어셈블리어에다가 C언어의 전처리기를 얹은 것 같은 구조이며 생각보다 제약이 많다.

어셈블리어 같은 문법인데 CPU 인스트럭션이 들어가는 게 아니라 Windows API의 함수와 각종 속성 명칭이나 상수들이 들어간다는 점만 다르다. if-then-else, switch 같은 조건 판단과 분기조차도 언어의 키워드가 아니라 그냥 분기문을 표현하는 매크로 형태로 구현되었을 정도이다.
그나저나, 파일 경로를 많이 다루고 역슬래시를 필연적으로 많이 쓴다는 특성상 \ 자체는 탈출문자로 쓰지 않고 $를 붙여서 $\n으로 개행문자를 표현하는 건 인상적이었다.

설치 스크립트도 당장 필요한 기능만 주먹구구식으로 구현하는 게 아니라 치밀하게 잘 만들려면 끝이 없겠다.

  • 한 스크립트로 몇몇 스위치만 달리하여 동일 제품의 여러 파생형이나 변형 에디션(가령, 셰어웨어 데모/정식 같은)을 조건부 컴파일로 간단히 감당 가능
  • 한 제품에서는 아까 말한 언어와 아키텍처를 단일 출력 바이너리만으로 모두 커버 가능
  • 모든 문자열 값들은 언어 중립적인 값과 언어 종속적인 값으로 나눠서 관리 가능하고, 제품 이름 같은 건 한 곳에서 값을 바꾸면 등장하는 모든 곳에서 값이 알아서 바뀌어야 함
  • 컴퓨터의 상태 파악을 알아서 해야 함. 처음 실행됐을 때 지금이 첫 실행인지, 동일 버전, 구 버전, 또는 동일 버전의 바리에이션이 이미 설치돼 있는지, 이전에 설치를 하다가 만 상태인지, 심지어 자신이 중복 실행됐는지 같은 걸 사용자가 수동으로 파일이나 레지스트리 삽질 안 해도 알아서 감지해야 함
  • 설치할 파일과 삭제할 파일을 NSIS는 수동으로 일일이 써야 하는 것 같던데, 마치 C++ 개체 선언하듯이(생성자, 소멸자) 설치하는 파일, 추가하는 레지스트리 같은 걸 한 곳에다만 명시하면 역순의 제거 작업 역시 자동으로 파악돼야 하며, 작업을 실제로 수행하기 전에 예상 디스크 공간 계산 같은 것도 알아서 돼야 함.
  • 서로 다른 소프트웨어 제품이 동일한 파일을 설치하고 사용하는 경우, 그런 공용 파일은 reference counting을 해서 그 제품들이 모두 제거되었을 때에만 최종적으로 삭제되게 해야 함.
  • 그리고 uninstall 시엔 사용자가 생성한 데이터처럼 이 프로그램이 초기에 설치하지 않은 파일이나 레지스트리도 필요하다면 싹 제거하는 메커니즘이 제공돼야 함. (조건 범위 지정)
  • 최종 생성된 msi 내지 exe 파일에 대한 디지털 서명 후처리도 언어 내지 툴 차원에서 명시해서 자동 처리하기.

오픈소스 프로젝트에 기여한 것도 없는 주제에 불평만 길게 늘어놓은 것 같다만.. 이게 NSIS를 좀 써 보고 개인적으로 느꼈던 아쉬운 점이다. 오죽했으면 반디소프트에서 개발하고 있는 유명 파일 압축 유틸리티인 반디집도 6.0부터는 NSIS 대신 자체 개발한 인스톨러로 갈아탔다. 다만, NSIS는 저 정도 꽤 적지 않은 기능을 제공하고도 exe에 붙는 자기 런타임 stub 크기가 겨우 몇만 바이트에 불과할 정도로 작은 건 굉장히 인상적이었다.

그냥 간단한 파일 몇 개만 복사하고 끝나는 게 아니라 컴퓨터를 좀 깊게 제어하는 설치/제거 패키지를 만든다면 이걸 만드는 툴도 GUI 위주의 가벼운 툴이 아니라 그냥 핵심 기능만 SDK 형태로 만들고, 자주 쓰는 프로그램 패턴은 Visual C++의 프로젝트 마법사 형태로 구축하는 것도 나쁘지 않을 것 같다. 배포 패키지 자체를 그냥 C/C++로 만들라고 말이다. 그러면서 파일 압축 풀어서 복사하거나 지우는 등의 정말 핵심적인 공통 기능만 라이브러리를 쓰라고..

근데 생각해 보니 애시당초 그러라고 만들어진 라이브러리가 Windows Installer이긴 하다. 쟤도 사실은 단순 GUI 껍데기가 아니라 라이브러리가 본질이니까. 하지만 저 라이브러리도 구조가 워낙 복잡하고 설치, 제거, 롤백이 어떻고 알아야 할 사전 배경지식이 많다 보니 그 저수준 함수를 직통으로 쓰면서 배포 패키지를 만들 일이라곤 없을 듯하다.

Posted by 사무엘

2017/05/01 08:30 2017/05/01 08:30
, ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/1355

1. 레거시 부동소수점 MBF

컴퓨터에서 쓰이는 2진법 기반의 부동소수점이라는 개념이야 컴공· 전산에서 기본 중의 기본에 속하는 내용이며 본인 역시 이에 대해서 거의 7년 전에 글을 한번 쓴 적이 있다.
본인은 GWBASIC으로 프로그래밍에 처음 발을 내디딘 세대이다. 그런데 베이직이 PC와는 따로 노는 고유한 부동소수점 체계를 갖춘 언어였다는 사실을 30대 나이가 될 때까지 전혀 모르고 있었다.

쉽게 말해 같은 컴퓨터에서 실행한 다음 프로그램의 실행 결과가 GWBASIC과 QuickBasic이 서로 동일하지 않다는 것이다. 참고로 MKS$, MKI$는 해당 숫자들의 binary representation을 문자열 형태로 되돌리는 저수준 함수이다. C++라면 reinterpret_cast<char *>(&num) 한 방이면 끝났을 일이다.

10 INPUT A!
20 IF ABS(A!)<.01 THEN END
30 C$ = MKS$(A!)
40 FOR I = 1 TO 4: PRINT ASC(MID$(C$, I, 1)): NEXT
50 GOTO 10

사용자 삽입 이미지

하긴, 옛날에 베이직은 DEFINT A-Z 같은 걸 하지 않으면 변수의 기본 자료형이 정수가 아니라 실수였다. 언어를 설계할 때 성능보다 인간적인 면모를 더 추구해서 그렇다. (5/3을 구하면 매정하게 1이 아니라 알아서 1.6666..이 나오게..) 그러니 구조적으로 실수를 지원하는 건 필수였다.

때는 무려 1975년, 빌 게이츠가 폴 앨런과 함께 알테어 베이직을 개발하던 시절에 동료들과 함께 뚝딱 해서 2진법 기반의 부동소수점 표기 방식을 만든 게 Microsoft Binary Format, 일명 MBF라는 스펙이 됐다. 32비트와 64비트 두 형태로 말이다.
이 부동소수점은 알테어뿐만 아니라 BASICA, GWBASIC 등 온갖 플랫폼에서 돌아가는 베이직 인터프리터에 두루 쓰이기 시작했다. 지금도 인터넷에 굴러다니는 GWBASIC은 IEEE754가 아닌 MBF 고유 방식으로 부동소수점을 처리한다.

그랬는데 훗날 1984년경에 IEEE754라고 공신력이 더 높은 표준이 등장하면서 판도가 급격히 그쪽으로 기울었다. 게다가 PC에서는 인텔 80x87이라고 오늘날로 치면 하드웨어 가속에 해당하는 수치 연산 보조 프로세서(코프로세서)도 응당 IEEE754를 기반으로 만들어졌다.

마소는 일찍부터 자체적인 부동소수점 포맷을 먼저 제정해서 이를 퍼뜨려 왔지만 이런 시국에서는 자기도 대세를 거스를 수 없게 되었다. GWBASIC의 후신인 QuickBasic도 80년대 중반에 나왔던 1, 2까지는 MBF를 사용했지만 3.0부터는 IEEE 방식으로 갈아탔다. 그 대신 기존 MBF 방식은 별도의 옵션을 줬을 때에만 지원하게 동작이 바뀌었다. (/MBF) MBF 형태로 저장된 부동소수점을 읽어들이는 레거시 프로그램들과의 호환성도 중요하니까 말이다.

그럼 IEEE와 MBF는 어떤 차이가 있었는가? 몇 가지가 있다.
똑같은 32비트 또는 64비트 공간에다 지수와 유효숫자와 부호 비트를 어느 순서대로 어떻게 분배할지 문제는 한 마디로 그냥 정하기 나름이고 대동소이하다. 마치 철도 궤간을 정하는 문제와 비슷하다.

수 전체의 부호 1비트는 IEEE나 MBF든 공통일 수밖에 없고, 32비트의 경우는 지수 8비트, 유효숫자(mantissa) 23비트라는 비율 역시 동일했다. 다만,

(1) IEEE는 2의 보수 기반인 정수의 관행을 존중해서 부호 비트가 수 전체의 최상위 비트에 있는 반면, MBF는 지수와 유효숫자 사이에 존재했다. 다시 말해 mantissa의 최상위 비트에 있는 셈이다. 이렇게 배치를 함으로써 MBF는 IEEE와는 달리 지수와 유효숫자가 딱 8비트와 24비트로 byte padding이 맞춰지게 했다.

(2) 64비트 실수의 경우 이 비율도 달라진다. IEEE는 지수의 공간도 딱 3비트 더 늘어서 11비트이지만, MBF는 여전히 8비트이다. 그래서 32비트 single 실수를 쓰다가 64비트 double 실수를 쓰면 정밀도는 왕창 심지어 IEEE보다도 더 올라가지만 수의 표현 가능 자리수가 늘어나지는 않는다. 그 대신 바이트 경계는 여전히 1:7 비율로 지켜진다.

(3) 다음으로, MBF는 IEEE처럼 denormal number나 NaN, 무한대/무한소 같은 개념도 없다. denormal이야 숫자 표현과 관련된 내부 디테일이니 그렇다 치더라도 베이직 언어로 수학 함수를 사용하면서 NaN이나 무한대/무한소 같은 걸 접한 경험은 없다. 그런 숫자가 생성될 상황이라면 그냥 "Illegal function call" 에러가 나고 말지.
어쩐지 이런 것들은 본인이 훗날 C/C++로 갈아타면서 처음으로 접했다. 이게 엄밀히 말하면 언어 차이가 아니라 이런 부동소수점 표현 방식 때문에 생긴 차이점이다.

세계적으로 문자들은 언어와 문화권마다 제각각이지만 아라비아 숫자만은 세계 공통이다. 컴퓨터 세계도 사정이 얼추 비슷했는데 그나마 유니코드라는 규격 덕분에 동일한 문자는 세계 어디서나 동일한 방식으로 통용 가능해졌다. 그에 반해 숫자가 부동소수점 한정으로 표현 방식이 파편화돼 있었다는 건 개인적으로 무척 흥미롭게 와 닿는다.

C, 파스칼 같은 언어 이름은 함수 호출 규약 명칭에 등장하는데 베이직은 MBF라는 레거시를 보유하고 있구나. IEEE754의 등장 이전에는 MBF 말고 다른 부동소수점 표현 방식은 존재하지 않았나 하는 의문이 남으며, 파스칼에만 있던 6바이트 실수가 규격이 어떠했는지도 다시 보게 된다. 스펙을 검색해 보니 파스칼도 지수부는 8비트이고 나머지가 부호부(1비트)와 가수부(39비트)이다.

2. MOTOR의 정체는?

이 블로그에서 GWBASIC에 대한 추억들 중에서 지금까지 이걸 거론한 적은 없었던 것 같다.
GWBASIC의 대화식 환경에는 코딩 중에 자주 사용하는 키워드들을 곧바로 입력하는 일종의 키매크로가 있었다. F1부터 F10까지 기능키에 배당된 매크로는 LIST, RUN, LOAD...의 순으로 화면 밑줄에 표시되었으며 KEY라는 키워드(?)를 이용해 사용자가 재정의도 할 수 있었다. 후대의 QuickBasic 계열에서는 없어지기도 할 법도 한 키워드인데 KEY에 그 기능만 있는 건 아니기 때문에 없어지지 않고 남아 있긴 하다.

그리고 매크로가 거기에만 있는 게 아니라 Alt+알파벳에도 있었다. A부터 Z 중 J, Q, Y, Z를 제외한 나머지 22개 알파벳에는 AUTO, BSAVE, COLOR ... WIDTH, XOR까지.. 키워드가 즉시 입력되었다. 이 키워드들은 딱히 재정의 가능하지 않았다. RUN과 SCREEN은 Alt에도 있고 F 기능키에도 있었다. (후자는 엔터까지 자동으로 입력된다는 차이가 있음)

그런데 본인이 주목한 것은 M 자리에 배당되어 있던 MOTOR라는 단어였다. 이거 도대체 뭘까? 경험상 숫자 인자를 하나 받는 것 같던데 도대체 하는 일이 뭘까? 두툼한 GWBASIC 매뉴얼/키워드 레퍼런스를 뒤져봐도 의외로 딱히 제대로 설명돼 있지 않았다. 그러니 궁금증은 더욱 커질 수밖에 없었다.

이 역시 전세계에 존재하거나 존재했던 모든 것들에 대한 정보가 손끝 하나로 검색되는 세상이 온 뒤에야 그게 그런 용도였다는 것을 뒤늦게 알 수 있었다.
MOTOR는 카세트 테이프 장치의 헤더를 올리거나 내리는 명령문이었다. 0부터 255 사이의 숫자를 인자로 받긴 하는데 실질적인 의미는 그냥 zero냐 non-zero냐, 쉽게 말해 그냥 bool이었다. 카세트 테이프가 퇴출된 16비트 이상의 IBM-PC급용 베이직에서는 이 명령은 구현되지 않고 아무 동작도 안 하는 레거시 잉여가 되었다.

옛날에 카세트 테이프에다 소스 코드 저장을 SAVE"FILE" 한 뒤 '녹음' 버튼을 눌러서 쭈루룩 하고, 불러오려면 저장되었던 위치로 정확하게 되감기를 하고 LOAD"FILE"한 뒤, '재생' 버튼을 눌러서 했다던데.. MOTOR는 그런 호랑이 담배 피우던 시절에나 유의미한 기능을 했다는 뜻 되겠다.

그런데 왜 이런 잉여가 한때에는 그 시절에는 자주 쓰이기라도 했는지 Alt+M 매크로에 떡 등재돼 있었다. 현실에서는 모터 따위보다는 MOD 연산자 또는 부분문자열을 구하는 MID$ 함수가 훨씬 더 자주 쓰일 텐데 말이다. 그러고 보니 실제로 Alt+M에 MOTOR 대신 쿨하게 MID$가 배당돼 있던 GWBASIC 구현체가 있기도 했던 것 같다. 베이직은 바리에이션 구현체가 워낙 많으니.. 아니면 그건 그냥 내 기억력의 한계로 인한 착각이었는지는 모르겠다.

※ 기타

(1)
이 외에도 GWBASIC은 그러고 보니 소스 코드의 저장도 고유 방식으로 했고 심지어 후대의 QuickBasic에도 비슷한 관행이 있었다(디폴트 옵션). 베이직 언어들은 그 옛날에도 일종의 가상 기계나 독자적인 개발 환경까지 다 짬뽕으로 추구했던 것 같다.
비주얼 베이직의 중후반대(4정도?) 넘어가서 COM 기반의 BSTR 방식으로 갈아타기 전에는 베이직은 문자열도 자기만의 독자적인 이중 포인터 참조 방식으로 구현돼 있었다. 일단 null-terminate 방식이 아니기 때문에 C와는 다름. 이것도 아마 MBF만큼이나 역사가 왕창 오래 된 독자적인 관행이 아닐까 싶다. (문자열에 대해서도 옛날에 한번 글을 쓴 적이 있다.)

(2)
난 C/C++ 파스칼 같은 타 언어로는 도스에서 텍스트 모드에서 색깔을 바꾸고 표준 VGA 그래픽, 특히 mode 13h를 바꾸는 코드를 작성해 본 적이 없다. 베이직에서는 COLOR 내지 SCREEN으로 곧장 됐을 일이 타 언어에서는 표준 라이브러리에서 지원해 주지 않았기 때문이다.
GWBASIC에서 Q(uick)Basic 계열로 바뀌면서 정말 좋은 것 중 하나가 본격적인 VGA 그래픽이 지원된다는 것이었는데, 16진수를 10진수로 바꿔 버릴 생각을 어째 했나 모르겠다. 실제로는 0x13인데 그걸 그냥 13만 써도 되게..;; 그것까지 초보자를 배려한 것이었나 궁금해진다. 그 초보자가 숙련자로 등급이 바뀌는 순간부터 문화 충격을 경험할지도 모르는데..

(3)
베이직이라는 언어 자체는 다트머스 대학의 컴공 교수가 고안한 것이지만, 저런 구현체는 빌 게이츠 같은 괴짜가 아니면 생각해 낼 사람이 별로 없을 물건이다.마소에서는 처음에는 다양한 8/16비트 컴퓨터를 대상으로 베이직 인터프리터를 개발했지만, 사실 IBM PC용으로는 베이직 컴파일러도 DOS 1980년대부터 만들어 오고 있었다.
그래서 Quick이라는 브랜드를 붙여서 QuickBasic 1.0을 1985년에 내놓았다. 이때 퀵베이직은 지원하는 문법은 GWBASIC과 별 차이가 없지만 대화식 환경이 아닌 명령줄에서 컴파일 + EXE 생성만 가능한 베이직일 뿐이었다.

그러다가 1년 주기로 버전 2와 3을 내놓으면서 기존의 구닥다리 행번호 위주가 아닌 구조화 문법이 차근차근 도입되었다. 베이직이라는 언어가 이때(1980년대 중반) 1차로 마개조된 셈이다. 그리고 4.0에 와서야 비로소 함수의 재귀호출이 가능해지고, 즉석 문법 체크와 실행이 지원되는 IDE가 추가되었다. 사실, IDE 자체는 2에서부터 도입됐고 그때 이미 퀵라이브러리도 도입됐다고 하지만, 그때는 지금과 같은 IDE가 아니었다.

그 뒤 1988년 가을에 출시된 QB 4.5가 장수만세 안정판이 되었다. 퀵베이직은 1990년에 어쩐 일인지 버전 5와 6을 건너뛰고 QuickBasic Extended 내지 MS Basic PDS (전문 개발 시스템)이라는 이름으로 7과 7.1 버전까지 개발된 뒤, Visual이라는 브랜드로 바뀌었으며 이때부터 플랫폼도 Window로 바뀌었다. 5, 6을 건너뛴 이유는 퀵베보다 먼저 개발되어 온 그 전신 컴파일러의 버전 번호를 맞췄기 때문이다. (참고로 Visual C++도 IDE의 버전보다 컴파일러의 버전이 더 높음. 전신인 MS C 의 버전을 계승하기 때문이다.)

이 와중에 1991년에 출시된 MS-DOS 5.0에서는 QuickBasic에서 컴파일 기능을 떼어낸 QBasic이라는 물건을 만들고, 이 엔진으로 MS-DOS 4.0까지 내장하고 있던 GWBASIC과, EDLIN 텍스트 에디터를 동시에 대체했다. 무척 흥미로운 점이다. MS-DOS가 전체 화면 형태로 제공하던 유틸리티는 4.0에서 도입됐던 DOS Shell 이후로 이게 둘째가 아닌가 싶다.

Posted by 사무엘

2017/04/28 08:38 2017/04/28 08:38
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1354

« Previous : 1 : ... 107 : 108 : 109 : 110 : 111 : 112 : 113 : 114 : 115 : ... 232 : Next »

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2026/10   »
일 월 화 수 목 금 토
        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:
4204060
Today:
2047
Yesterday:
2786