« Previous : 1 : ... 145 : 146 : 147 : 148 : 149 : 150 : 151 : 152 : 153 : ... 214 : Next »

2012년 10월은 수도권 전철계의 오랜 숙원이 둘이나 이루어진 달이다.
일단 월초엔 남쪽으로만 길어지던 분당선이 드디어 서울 강북까지 올라와서 왕십리-선릉 구간이 개통했다. 수서-선릉 구간이 2003년 가을에 개통했으니 거의 9년 만의 추가 연장이다. 이로써 한강에는 서울 지하철 5호선이 사용하는 것에 이어 철도용 하저 터널이 하나 더 추가되었으며, 여타 코레일 관할 노선과의 연결이 없이 수도권 동남부에서 혼자 고립되어 있다시피하던 분당선은 드디어 연결점이 생기게 되었다.

그 뒤 지난 10월 27일엔, 서울 지하철 7호선이 서쪽으로 더 길어졌다. 온수-부평구청 연장 구간이 개통함으로써 서울 지하철 7호선은 의정부와 광명뿐만 아니라 부천과 인천 외곽까지 가는 긴 노선이 되었다. 그 결과 7호선은 1996년의 장암-건대입구(1차), 2000년의 건대입구-온수(2차)에 이어, 2012년의 온수-부평구청이라는 세 단계 개통 내력을 갖게 되었으며, 차량 계보도 1차와 2차, 3차가 모두 외형과 구동음이 제각각인 독특한 체계를 구성하게 되었다.

2009년에 9호선이 개통하고, 2010년 말에 3호선 수서-오금 연장 구간이 개통하고, 이제 7호선 연장 구간까지 개통했으니, 1990년대 초반에 수립되었던 서울 3기 지하철 계획은 IMF 때문에 폐기된 것을 제외하면 다들 완결되었다.

이번 7호선의 연장 구간 개통은, 약 4개월 전의 수인선 개통과는 다음과 같은 여러 비슷한 점들이 있다. (1) 토요일 개통, (2) 개통 당일 비, (3) 10km 남짓한 개통 구간의 길이와 9~10개 정도의 역 수도 비슷함,
(4) 온수든 오이도든 시승 지점 주변은 별다른 상업 시설 없는 외곽 지대, 그리고 (5) 새 노선으로 인해 인천 지하철에 환승역이 추가됨(7호선과는 부평구청, 수인선과는 원인재).

이에 본인은 이것도 새벽 5시 반 첫 차를 시승하러 금요일 밤부터 준비하고 나갔다. 그런데 이번에는 전날 밤에 전철 막차를 타고 미리 가서 노숙이나 외박을 한 게 아니라, 철도 답사 목적으로는 난생 처음으로 차를 가져갔다. 외박까지 하기에는 기력이 부족했고, 이왕 멀리까지 나간 김에 차로 다목적 테마 여행을 하기 위해서였다. 더구나 추위와 비 같은 날씨 사정을 감안했을 때, 차를 가져간 건 결과적으로 굉장히 훌륭한 선택이었다.

새벽 2시. 강변북로와 경인대로를 달려 온수 역에 도착했다. 이런 늦은 밤인데도 도로에는 차들이 생각보다 많았다. 지도상으로 온수 역 남단에 공영 주차장을 확인하긴 했으나, 그쪽으로는 안 가고 북단의 어느 공사장 옆 골목길에다 차를 세웠다. 그리고 차 뒷좌석에 누워서 두어 시간가량 잤다. 새벽부터 기온이 더 내려가고 비가 오기 시작했으나 차 안은 아늑하기 그지없었다. 차를 가져가는 대신 밖에서 군것질은 안 하려고 물과 각종 간식에 심지어 도시락까지 챙긴 상태였다.

5시 20분. 차에서 내려서 드디어 7호선 온수 역 승강장으로 갔다. 그리고 30분 정시에 부평구청으로 떠나는 첫 차에 성공적으로 탑승했다. 다음은 연장 구간과 관련된 몇 가지 관련 정보들이다.

  • 운영: 7호선의 모든 열차가 부평구청까지 가는 건 아니다. 마치 분당선에 죽전 행과 기흥 행이 반반씩 있듯, 7호선에도 온수 행과 부평구청 행이 반반씩 다닌다. 따라서 온수-부평구청 사이의 실질적인 열차 배차 간격은 마치 5호선 상일동-마천 지선과 비슷한 수준이 된다. 예상 수요, 차량 기지의 위치, 보유 중인 전동차 수 등 여러 정황상, 모든 열차를 연장하는 건 현재로서는 힘들다고 그런다.
  • 차량: 음 성직 사장 시절에 개발된 자체 전동차 SR001이 신규 투입되었다고는 하지만 기대는 안 하는 게 좋다. 나도 1시간 반 남짓한 시승 시간 동안, 상· 하행을 통틀어서 신형 전동차는 한 번도 못 봤다. 전체 전동차 수에 비해 3차 도입분 차량이 차지하는 비율은 아직은 미미하다. SR001을 못 타 본 건 좀 아쉬운 점.
  • 인터페이스: 7호선 연장 구간은 역명판이나 각종 안내 표지판에 서울 남산체나 전통적인 초롱테크 지하철체가 아닌 일반적인 고딕체를 사용하였다. 9호선처럼 지하철의 지상 출입구에서부터 열차 위치를 표시해 놓는다거나 하지는 않았다.

이번 연장 개통 구간은 크게 두 개의 phase로 나뉜다. (온수)-까치울-부천시청, 그리고 다음 상동-부평구청으로 말이다. 앞의 서울-부천 구간은 모두 터널식으로 건설되었다. 그래서 열차가 달리는 터널을 보면 단선 쌍굴이며 역들이 죄다 섬식 승강장이다(왼쪽 문 열림). 7호선은 특히 강남 구간은 섬식 승강장을 거의 찾을 수 없는 노선(보라매 역이 유일)으로 유명한데 그 관행을 부천 연장 구간이 깨뜨렸다.

서울에서 연장 구간이 첫 시작되는 온수-까치울 사이는 도로를 따라 만들어진 게 아니라 야산 아래로 “길이 없는 곳을 억지로 파고들면서” 만들어졌다. 덕분에 주행 중에 커브 소음이 느껴지며, 중간에 역을 만들 곳도 없어서 역간거리가 거의 2km에 달한다.
7호선은 어차피 강남 구간에 이런 구간이 좀 있다. 내방-고속터미널도 중간에 공원 아래를 지나며, 남성-숭실대입구도 언덕과 아파트 단지 아래를 지나서 역간거리가 아예 2km를 넘는다.

똑같이 섬식 승강장이어도 신중동-부천시청 역은 여타 역들보다 플랫폼이 대단히 넓다. 이는 지상에 고가도로가 있어서 이를 건드리지 않고 공사를 한 귀결이다. 서울 지하철 2호선에도 이와 비슷한 이유로 인해 독특한 모양의 승강장이 생긴 역이 있다(아현 고가 차도).

사용자 삽입 이미지
* 대합실이 아니라 심식 승강장이 이렇게 거대하다.

부천시청 역의 인근에는 안 중근 기념 공원이 있다. 실제로 부천시는 중국 하얼빈 시와 자매 결연을 맺기도 했다고 한다. 지하철이 개통했으니 이 공원의 접근성과 인지도도 올라가게 될 것이다. 안 중근 의사가 이토 히로부미를 저격한 날이 10월 26일인데, 7호선 연장 개통이 그 이튿날인 것은 그냥 우연이려나?

그리고 독립 운동가를 기리는 비슷한 심상의 다른 전철역으로 신분당선 '양재 시민의 숲' 역이 있다. 거기는 인근에 윤 봉길 기념관이 있으며, 역의 부역명이 아예 '매헌'(윤 봉길의 호)이다. 조국을 사랑하는 철도 덕후라면 잊지 말고 찾아가 보시기 바란다.

자, 상동부터는 섬식 대신 상대식 승강장이 시작된다(오른쪽 문 열림). 여기는 터널식이 아니라 도로를 파헤쳐서 박스를 집어넣는 개착식으로 건설되었으며, 한 터널에 복선 철길이 깔려 있다.

종착역인 부평구청 역의 인천 지하철 환승은 너무 가깝지도, 너무 멀지도 않은 보통 수준인 것 같다.
다만, 밀폐형 스크린도어에다 고해상도 올컬러 액정 모니터까지 갖춰진 최고급 서울 지하철에 비해, 아직 스크린도어도 없고 청색이 없는 저해상도 LED(발광 다이오드) 전광판을 쓰는 인천 지하철 승강장을 보니, 지하철 시설조차도 지역별로 양극화가 시작된 건가 하는 생각을 들게 하기에 충분했다.

한 가지 옥의 티: 부평구청과 부천시청.. 전자에서는 '청'의 한자를 중국 간체자로 썼는데 후자에서는 그냥 한국 번체자이다.

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

아침 일찍 7호선 연장 구간을 쭉 왕복하고, 환승역에서 환승 통로를 둘러 보고, 중간의 역에서 한번 내려서 나가 보기도 했다. 수많은 정보들을 수집한 뒤 내 승용차가 있는 온수 역 인근의 기지로 복귀(?)하니, 아침 7시가 좀 넘어 있었다.
7호선에 대해서 두 가지만 더 얘기한 뒤 지하철 얘기는 마치도록 하겠다.

* 7호선의 상대적 심도

수도권 전철 노선들 중에 환승역 사이의 상대적인 심도가 가장 높은 것은 단연 서울 지하철 7호선이었다. 무슨 말이냐 하면 온수부터 시작해 이수, 건대입구, 태릉입구, 도봉산 등 모든 환승역에서 7호선은 다른 노선보다 언제나 더 아래로 지나거나 최소한 심도-고도가 뒤떨어지지는 않았다. 심지어 깊기로 악명 높은 5호선조차도 다른 모든 환승역에서는 아래로 지나지만 7호선과 만나는 군자에서만은 7호선이 아래이고 5호선이 위였다.

그랬으나 이 7호선에도 예외가 생겼다. 2009년에 개통한 9호선 고속터미널 역은 7호선보다도 더 아래로 지난다. 그리고 분당선 강남구청 역도 7호선 강남구청 역보다 더 아래로 지난다. 분당선 역시 서울 강남 구간에서는 거의 공항철도 서울 시내 구간에 필적하는 엄청난 깊이를 자랑하는 걸로 잘 알려져 있으니 말이다.

* 서울 정기권 통용 여부

서울 1기 지하철들은, 서울 시내 순환인 2호선을 제외한 나머지 1, 3, 4호선들이 다들 코레일 광역전철과 직통 운행을 하고 있다. 그러나 2기 지하철들은 그런 관행이 없이 오로지 인서울을 표방하고 있다. 5, 6호선이야 정말로 인서울이지만, 8호선은 성남 구시가지를 경유하며 7호선은 의정부와 광명을 잠깐 경유하고 이제는 부천과 인천까지 가는 방대한 노선이 되었다. 서울만의 지하철이라고 볼 수 없는 수준이 됐다.

그럼에도 불구하고 5~8호선은 여전히 전구간이 서울 도시철도 공사(도철) 관할이다. 그리고 도철 관할 노선은 행정구역상으로 인서울이 아니어도 서울 전용 지하철 정기권이 통용된다는 이례적인 관행이 있었다. 8/분당선 환승역인 모란 역이 이것 때문에 '아리까리한' 대표적인 사례인데, 코레일 분당선 게이트로는 서울 정기권을 쓸 수 없지만 8호선 게이트로는 서울 정기권을 쓸 수 있다.
그러나 이런 관행에도 예외가 생겨, 7호선의 부천-인천 연장 구간에는 서울 정기권이 통용되지 않는다는 게 확인되었다. 이제 도철도 모든 구간이 서울 구간은 아니게 된 셈.

Posted by 사무엘

2012/10/31 19:20 2012/10/31 19:20
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/750

1.
한국 해양 대학교는 상선(무역선 포함) 승무원 및 관련 간부를 양성하는 게 주 목적인 국립 준특수 대학교이다. 상선사관은 수출로 먹고 사는 우리나라를 먹여 살리는 기간 인력이며, 군 복무도 상선 근무로 전부 대체된다. 사관학교나 경찰대 정도로 학비 완전 무료에 완전 폐쇄적인 학풍을 지닌 건 아니지만, 그래도 선원 생활이란 것도 편할 리가 없는 고된 업무인 만큼 그 바닥에도 나름 군기가 존재하며, 이 학교의 학비는 교육대 수준으로 아주 저렴한 걸로 본인은 알고 있다.

사용자 삽입 이미지

사용자 삽입 이미지
바다가 바로 코앞에 있는 해양 대학교. 다시 말해, 부지의 해발 고도가 저만치 낮다는 뜻이다.

교통수단 얘기가 나왔으니 말인데, 참고로 비행기 버전인 한국 항공 대학교는 원래는 국립이었다가 현재 사립이 돼 있다. 마치 대한 항공이 원래 국영이다가 민영이 된 것과 비슷한 맥락으로 사립 학교가 되었다.
그 이름도 유명한 철도 대학은 원래는 전문대 수준이다가 지금은 충주 대학교와 통합되어 교통 대학교가 되었고 말이다. 예나 지금이나 국립인 건 물론 변함없다.

2.
다음은 국어 정보 처리 시스템 경진대회 당시의 작품 전시 장면이다.

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
컴퓨터가 성능이 열악하고 한국어는커녕 한글을 기계에다 구현하는 것 자체가 아주 challenging하던 시절에는 한국어 공학보다 '한글 공학'이 더 시급한 연구 주제일 수밖에 없었다. 그래서 한글/한국어 정보 처리 학술대회의 초창기 시절이던 1990년대 초에는 하드웨어를 제어하여 컴에다가 한글을 찍는 방법, 두벌식이나 세벌식 사이의 기발한 절충 입력 방식 같은 게 PC 잡지뿐만이 아니라 그런 학술지에도 실리는 경우가 있었다. 그때는 글꼴, 코드 쪽 연구도 많았다.

그랬는데 글꼴이나 코드 같은 원론적인 문제는 컴퓨터와 운영체제 기술의 발달로 인해 장벽이 다 해소되고 한국어 말뭉치까지 구축된 뒤부터는 '한글 공학'은 이제 뭐 더 연구할 게 없는 듯한 영역이 되었고, 학회의 초점은 급속히 '한국어 공학'으로 기운 듯하다. 내가 석사 논문을 쓰느라 옛날 연구 트렌드들을 뒤져 보니 확실히 추세가 그렇다. 그러다가 지금 다시 한글 입력 쪽이 논의되고 있는 건 모바일 쪽 한정이다. 그 반면 내 논문은 한글 공학의 fundamental한 부분을 다시 다루고 있다.

3.
자, 부산까지 갔다 왔으니 또 부산 지하철 얘기를 해야 직성이 풀리겠다.

부산도 이제 지하철 승강장에 슬슬 스크린도어가 설치되고 있다. 하지만 여전히 자갈 노반을 보면 옛날 생각이 난다. 서울 지하철에서는 자갈 노반이 완전히 사라진 게 못해도 아마 4~5년은 됐을 것이다. 그리고 2012년 현재까지 전국의 지하철 노선에서 VVVF 전동차가 전혀 없는 곳은 부산 지하철 1호선이 유일하다.
옛날에 부산 지하철은 한 1970년대 티가 나는 아주 못생긴 서체를 쓰고 있었는데 지금은 그냥 일반적인 고딕체로 다 바뀌었다. 아마 역명에서 '동(洞)'을 모두 삭제하기로 결정하면서 같이 바꾼 모양이다.

부산 지하철 1호선은 대부분의 역들이 상대식 승강장이며, 심도도 낮다 보니 대부분의 역들이 반대편 승강장을 할 수 없는 게 특징이다. 그래서 “대합실을 통해 반대편 승강장 횡단이 가능한 역”과, “동일 승강장에서 반대편 열차를 바로 탈 수 있는 역(쉽게 말해 섬식 승강장인 역)”이 다른 색깔로 노선도에 특별하게 표기가 되어 있다. 아래의 노선도 사진에서 동그라미 테두리의 색깔을 주목할 것.
드물게 등장하는 섬식 승강장 역에서는 평소에 열리지 않던 왼쪽 문이 열리기 때문에 이 문에 기대고 있는 승객은 조심하라고 따로 방송 멘트가 나온다.

사용자 삽입 이미지

그리고 노선도를 보면, 서울 지하철에서는 역시 4년이 넘게 전에 버린 옛날 notation을 아직까지 쓰고 있음을 알 수 있다.
바로, “일반역은 흰 동그라미, 환승역은 태극 무늬 동그라미” 말이다.

사용자 삽입 이미지
그 반면, 지금 서울/수도권 노선도는 역이 너무 많고 노선도가 복잡해진 관계로, 일반역은 그냥 사선 모양의 홈만 파고, 환승역이 흰 동그라미이다.
이 디자인을 처음으로 시도한 곳은 바로 서울 도시철도 공사이며, 이걸 나중에 코레일과 서울 메트로까지 도입하였다.
비록 '얼씨구야' 환승음은 서울 메트로가 제일 먼저 도입해서 그걸 나중에 코레일과 도철까지 따라 했지만 말이다.

Posted by 사무엘

2012/10/29 08:36 2012/10/29 08:36
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/749

문화 체육 관광부와 국립 국어원에서 2009년부터 해마다 <국어 정보 처리 시스템 경진대회>라는 걸 개최하여 올해로 4회째를 맞이했는데, 올해는 예전의 인서울 관행을 깨고 부산 영도에 있는 한국 해양 대학교에서 개최되었다. 개최 일자는 지난 10월 12일. 공교롭게도 한글 운동 단체들에서 열심히 밀고 있는 조선어 학회 수난 70주년 추모 행사와 겹치는 날짜였다. 그건 서울 경복궁에서 열렸고 저 경진대회는 부산에서 열렸다.

말은 경진대회이지만 사실 참가자들이 동일한 조건에서 시험을 치면서 기량을 겨룬다거나 하는 건 아니기 때문에 사실은 '공모전'이 더 정확한 명칭이다. 일차적인 개최 목적은 21세기 세종 계획(1998~2007) 때 구축된 세종 말뭉치를 이용하여 한국어 분석과 관련된 의미 있는 데이터 처리를 하는 싸제 프로그램의 개발을 독려하는 것이다. 하지만 그 외에도 한국어와 한글의 기계화 및 교육과 관련된 유용한 소프트웨어라면 무엇이든 괜찮다. 본인은 독자 여러분도 잘 알다시피 작년(3회) 대회 때 <날개셋> 한글 입력기 6.3을 출품하여 은상을 받았다.

주최 측에서는 이 대회를 꽤 의욕 있게 밀고 있다. 내년에도 내후년에도 끊임없이 계속해서 대회를 주최할 것이라는 의지를 밝힌 바 있으며, 작년부턴가 기존의 <한글/한국어 정보 처리 학술대회>와 이 경진대회를 아예 병행해서 개최하기 시작했다. 그리고 올해에는 심사에 앞서 오전에 부스를 만들어서 일반인과 심사위원이 모두 참관 가능한 작품 전시(데모) 세션을 추가했으며, 게다가 작년 대회 입상자 중에도 원하는 분은 올해 대회의 데모 세션에 같이 참여해 달라고 초청장을 보냈다.

내 프로그램을 홍보할 기회가 왔으니 나는 초청을 거절할 이유가 없었고, 지난 10월 12일엔 회사에 휴가까지 내어 오랜만에 부산에 좀 갔다 왔다.
경부선 막차인 밤차를 타고 부산에 도착한 건 새벽 4시 반이 덜 돼서였다. 미리 봐 놓은 지하철과 시내버스 경로로 대회 장소엔 예정보다 훨씬 일찍 도착했다. 다만, 세월이 세월인지 밤샘은 이미 엄두를 못 내는 지경이 됐고 밤차도 더는 피곤해서 못 탈 것 같다. 피곤이 밀려오기 시작한지라 책상에 엎드려서 자면서 시간을 보냈다. 밤차는 교통비(굳이 비싼 고속 교통수단을 쓸 필요 없음)와 숙박비(차에서 잠을...)를 아낄 수 있는 저렴한 방법이지만, 제일 피곤한 방법이기도 하다.

부스 개방 시각이 다가오자 대회 주최 측에서 직원이 와서 각종 장비들을 세팅해 줬다. 나는 간단히 준비해 온 유인물과 프레젠테이션 슬라이드로 부스를 꾸몄다. 작년 대회 입상자가 나 포함 3명이 온다고 했는데 역시나 내가 예상했던 대로 대상, 금상, 은상 수상자가 나란히 왔다. 울산대 팀은 그렇잖아도 최고 등급인 대상을 받은 데다 부산은 지리적으로 거리도 별로 안 멀고, 이 대회만 작정을 하고 미는 연구실이 있으니 이런 자리엔 거의 확실히 오리라고 예상했다.

한편, 작년에 금상을 받은 최 시영 선생님은 1인 기업 사장이랄까 프리랜서랄까, 어쨌든 조직에 매여 있지 않은 분이기 때문에 이런 데에 가는 데 제도적인 제약이 없는 분이다. 최근엔 data-p라는 프로그래밍 언어도 하나 고안해서 대외적으로 뭔가 알려야 할 게 많은 처지이기도 하다(실제로 나중에 컴퓨터공학 교수들 앞에서 data-p 얘기 많이를 늘어놓으셨다). 그러니 올 거라 생각했는데 역시 오셔서 나하고 반갑게 인사를 나눴다. 말동무가 하나 늘었다.

저분은 프로필을 보아하니 서울대 법대 출신의 엄청난 엄친아인데 독특한 웹 기반 세종 말뭉치 검색 도구를 만들어서 이런 대회의 상위권에 입상하고, 최근에는 전산학에까지 관심을 뻗치고 계신다. 뭘 하시는 분인지가 궁금해지지 않을 수 없다.
그에 반해, 대학원이나 일반이 아닌 학부생들은 아무래도 이런 좁고 전문적인 분야의 대회에서 상위권에 입상하는 작품을 만들기가 현실적으로 어려울 것이며, 입상하더라도 또 중간고사를 앞두고 먼 길을 가서 이런 대회의 데모 세션에 참여할 처지는 못 될 것이다. 이런 나의 모든 예상은 적중했다.. ^^

공식적인 데모 세션은 2시간이었다. 나야 ISEF에 참가하던 고딩 시절 이래로 이런 건 한두 번 하는 게 아니긴 하지만, 여전히 다른 사람들에게 내 프로그램의 본질에 대해서 설명해 주기란 참 쉽지 않았다. 세벌식, 무한 낱자 수정, 오토마타, Bksp 없이 오타 고치기, 텍스트 필터, 에디터와 IME 등등등... 무슨 얘기부터 할까? 이런 것들이 어느 하나만 알아서는 context를 이해할 수 없는 유기체를 구성하고 있다. C밖에 모르는 사람에게 어느 세월에 C++의 클래스, 상속, 오버로딩, 가상 함수 개념에 대해서 설명해 주고 그것도 모자라서 템플릿이라든가 람다 함수에 이르기까지 그 필요성과 장점을 가르쳐 줄 수 있겠는가?

확실히 한국어 공학에 비해서 “한글 공학”은 인지도가 미미한 것 같다. 우리나라의 사회 문화 분위기가 한국어와 한글의 구분이 상당히 모호하고 오락가락 하는 건 사실이지만, 결국 어차피 그 말이 그 말이고 반드시 구분해야 할 필요가 없는 상황에서 병적으로 둘은 완전히 독립적이고 무관한 개념이라고 집작하고 몰고 가는 것도 또한 보기 좋지 않은 모습인 듯.
비록 내 프로그램은 올해의 대회 출품작이 아니기 때문에 심사 대상도 아니지만, 심사위원 중 한 분은 “님 프로그램은 우리 대회보다 규모가 더 큰 일반적인 소프트웨어 공모전에도 출품해 보셈”이라고도 말씀하셨다.

데모 세션이 끝날 무렵에 웬 반가운 손님이 한 명 왔다. 올해에 본인의 석사 졸업 대학원 학과에 석사로 새로 입학한 파릇파릇한 석사 후배. 학교에서 내 얘기를 이미 들었는지 나에 대해서 어느 정도 이미 알고 있었다. 나는 대학원 재학 시절에 석사 신입생이라고는 좀체 구경을 못 했다(한두 명 합격한 지원자는 있었으나, 등록을 안 하고 그걸로 끝). 그러다 겨우 논문 학기가 다 돼서야 여학생 후배 두 명을 본 게 전부인데, 남자 후배라니 반갑지 않을 수 없었다. 말동무가 셋으로 늘었다.

부스 전시는 정오 무렵까지 그럭저럭 잘 했다. 이제 느긋하게 앉아서 올해 입상작들의 발표와 심사 장면 구경만 하면 된다.
주최 측에서는 데모에 참여한 작년 입상자들을 예우 차원에서 경진대회 관객으로 자동 등록을 시켜 줬으며, 점심과 저녁 식사는 물론, 생각도 안 했던 여비까지 챙겨 줬다.

출품된 프로그램들은 로컬, 웹, 앱을 골고루 커버하는 다양한 형태였다. 로컬 프로그램 중엔 정통 MFC 기반 프로그램은 없었고, 모두 닷넷 프레임워크 기반이었던지라 세대 차이를 실감했다. 하긴, 업무용 프로그램이야 어떤 형태로든 RAD가 지원되는 툴로 만드는 게 능률과 생산성 면에서 나을 테니 말이다.
말뭉치가 어떻고 태깅이 어떻고 하는 구체적인 내용은 나도 그것만 전문적으로 판 게 아니니 잘 모르겠다. 발표 중간엔 다시 몰려오는 잠의 쓰나미를 주체할 수 없어서 잠시 졸았다.

올해는 KAIST 전산학과에서 NLP 연구의 선두주자이신 최 기선 교수님 연구실에서 작품을 출품하여 대상을 받았다. 그러고 보니 나는 나름 한글 입력기를 연구한다면서 학부 시절에 '한국어'와 관계가 있는 연구를 하는 교수님은 한 번도 안 마주치고 졸업을 해 버렸으니 이것도 기이한 일이다. 저분을 포함해 박 종철 교수, 시 정곤 교수(이분은 전산학과가 아닌 인문사회과학부 소속) 같은 분들 말이다. 박 교수님은 이번 대회 행사에서 개회사를 하셨는데, 국어의 위상을 화폐 단위의 위상에다 빗대어 말씀하시는 걸 들어 보니 생각보다 국어 사랑 정신이 투철한 전산학자이시라는 게 느껴졌다.

서울을 벗어난 장소에서 올해는 작년 입상작 개발자까지 초청하여 데모 세션을 연 것은 바람직한 시도라고 느껴져서 기분이 좋다. 사실, 옛날에 정보 올림피아드도 그런 식으로 공모 부문 입상자끼리의 교류와 전시 행사가 좀 있으면 좋겠다고 난 예전부터 생각해 왔었다. 참가 작품수가 늘어나고 대회의 권위와 위상이 더 올라가면, 심사와 시상 기준을 다음과 같이 더욱 세분화도 해야 할 텐데 이런 욕심까지 부리는 건 아직은 좀 이른지도 모르겠다.

- 분야: 말뭉치 도구, 교육용 소프트웨어, 또는 기타 유틸
- 부문: 대학 학부, 대학원, 개인 인디 개발자, 또는 기업
- 내력: 첫 개발인가, 아니면 동일 아이디어 하에서 예전 출품/입상작의 꾸준한 개선 내지 리메이크인가

그런데 이 대회를 앞으로 적극 육성하겠다면서 올해는 뽑는 입상작 수가 더 줄었다. 작년에 9명이던 것이 올해는 7명. 게다가 이미 작년도 재작년에 비해서는 지급되는 상금의 총액이 좀 줄어든 것이었다. 이것부터 좀 개선해야 할 문제가 아닌가 싶다. ^^;;

작년과 마찬가지로 올해도 주최 측에서 참석자 전원에게 저녁까지 쏘는 대인배 대접을 했다. 나도 늦게까지 얘기를 나누면서 교제할 사람이 주변에 여럿 있었지만 나는 선약을 잡은 상태였던지라 눈물을 머금고 먼저 자리를 떴다. 완전히 풀코스를 뛰었으면 영도를 완전히 빠져나가는 시각은 밤 8~9시 사이가 됐을 것이고, 남의 차를 얻어 타고 부전이나 부산 역까지 도착하는 시각은 그보다 더 늦어졌을 터이니, 진짜 부산에서 진한 하루를 보내게 됐을 것이다.

자가용을 가져갔으면 시간과 장소 제약이 없이 인근의 태종대 같은 부산 구경을 더욱 자유롭게 하고 돌아갈 수 있었을지 모르나 이 경우 주차나 유류비 같은 다른 문제 때문에 골치가 아프게 됐을 수도 있다. 게다가 난 그렇잖아도 대중교통만 이용하고도 피곤해서 이 고생을 했는데, 운전까지 해야 했으면 어찌 됐겠는가?

어쨌든 부산에서 기억에 남는 즐겁고 유익한 추억을 남겼다.  이 글에서 다 못 한 주변 이야기는 다음에 올라올 부록에서 이어질 예정이다.

Posted by 사무엘

2012/10/26 19:33 2012/10/26 19:33
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/748

두벌식과 세벌식 한글 입력 방식을 제각각 가장 극단적인 FM 형태로 디자인해 보면, 다음과 같은 재미있는 차이를 발견할 수 있다.

세벌식은 초성 결합 지향적이고,
두벌식은 종성 결합 지향적이다!

공 병우 세벌식에서 가장 극단적인 FM을 추구한 입력 방식은 바로, 이중모음 정석이 강요되고 겹받침 조합이 없이 모든 겹받침을 반드시 Shift+한 타로만 치게 되어 있는 세벌식 최종이다.

즉, 이 입력 방식에서는 초성 쌍자음을 해당 자음의 연타로 입력하고, 중성 겹모음은 겹모음용 전용 ㅗ와 ㅜ를 통해서만 제한적으로 입력한다. (ㅢ도 반드시 8로만 한 타에 입력해야 하고, ㅡ+ㅣ로는 입력할 수 없음) 끝으로 종성에는 낱자 결합 규칙이 아예 존재하지 않는다.

이런 제약이 존재하는 덕분에 이 입력 방식은 기계식 타자기와 100% 싱크가 가능하다.
세벌식 기계식 타자기는 글쇠가 종이에 찍히는 초점이 두 군데 있으며, 글쇠도 부동(不動)키와 동(動)키로 나뉜다. 초성과 일반 모음들은 동키이고, 겹모음용 ㅗㅜ와 종성은 부동키이다. (한 글쇠에서 아랫글쇠는 동키, 윗글쇠는 부동키가 되는 경우를 대비해 복잡한 지침이 있긴 한데, 이에 대한 자세한 설명은 이 자리에서 생략)

부동키는 글쇠를 찍은 뒤에도 종이가 이동하지 않기 때문에, 당연히 기계식 타자기에서 낱자 결합용으로 쓰일 수 없다. 초성이야 동키이기 때문에 연타로 아쉬운 대로 쌍자음을 표현할 수 있는 반면, 종성은 그렇게 할 수 없는 것이다. 게다가 이미 중성과 종성을 모두 왼손이 담당하고 있다는 특성상(글쇠가 오른쪽에서 왼쪽으로 흐르는 배열인 것도 기계 친화적인 이유가 있음), Shift+한 타로 겹받침을 누르는 것은 왼손의 연타 부담을 경감하는 데도 도움이 된다.

이런 심오한 이유 때문에 공 병우 세벌식은 초성 쌍자음만을 연타로 입력하고 나머지 중성과 종성은 연타를 최소화하는 쪽으로 발전했다.

그에 반해 가장 FM에 충실한 두벌식은 <날개셋> 한글 입력기 6.7에서 추가된 종성 지향 두벌식처럼 자음은 모든 문맥에서 종성과 같은 형태로 결합하는 입력 방식이다.

아래아한글 같은 일부 프로그램의 한글 입력 방식에서는, 두벌식도 마치 세벌식처럼 초성과 종성의 낱자 결합 규칙이 따로 적용되어서 쌍자음을 해당 자음의 연타로 입력할 수 있는 구현체가 있다. 그러나 FM대로라면 초성이든 종성이든 쌍자음은 반드시 Shift+한 타로 입력해야 한다. 애초에 '국가'와 '구까'를 모두 구분하여 연달아 입력하려면 쌍자음은 그렇게 입력해야만 한다.

따라서 두벌식은, 겹받침을 Shift+한 타로 입력하는 세벌식과는 정반대로 초성 쌍자음을 Shift+한 타로 입력하며, 초성에 낱자 결합 규칙이 존재하지 않는다. 흥미로운 사실이 아닐 수 없다.

다만, 세벌식은 그런 극단적인 이념을 추구함으로써 컴퓨터와 기계식 타자기 사이의 글자판 통일을 이루었으며, 기계적으로 유리한 점과 빠르고 편한 타자 사이의 상당히 괜찮은 합의점까지 잘 찾아 낸 반면, 두벌식은 그런 일관성과 통일성이 없다.

두벌식 타자기는 어차피 받침은 Shift부터 반드시 먼저 누르고 쳐야 하기 때문에 치는 방식이 컴퓨터와 다를 뿐만 아니라, 결국은 ㄲ과 ㅆ, 그리고 자주 쓰이는 겹받침이나 겹모음은 예쁜 자형으로 찍기 위해 별도의 글쇠로 따로 있어야 할 수밖에 없다.

단적인 예로, 똑같이 한 타로 입력하는 겹자음이라도 ㄲ과 ㅆ은 초성과 종성에서 모두 쓰이지만, 나머지 ㄸ, ㅃ, ㅉ은 초성에서만 쓰인다. 이것을 기계식 타자기로 어떻게 구분하겠는가? 게다가 Shift+ㄱ은 어차피 ㄲ이 아니라 초성 ㄱ과 받침 ㄱ을 구분하는 데 써야 하는데? 결국은 겹자음의 처리가 두 그룹이 서로 달라질 수밖에 없다. 두벌식으로는 기계간의 글자판 통일을 이루는 게 불가능하다는 게 이 말이다.

두벌식에 대한 이해도가 깊어지니 그 반대편에 있는 세벌식에 대해서도 예전보다 더 잘 알게 되는 것 같다. 내가 다시 말하는데 그 알량한 글쇠 수 좀 줄이려고 PC에서 한글을 두벌식으로 쓰는 건 너무 아깝다. 얻는 것보다 잃는 게 너무 많다.

두벌식이 완전 백해무익한 쓰레기라는 말이 아니라, 가능한 한 세벌식이 엄연히 main이 되고 두벌식은 sub가 되어야 한다는 뜻이다. 세벌식으로는 간단한 기본 오토마타를 토대로 하여 더 발전하는 응용이 가능한 반면, 두벌식은 지금 있는 꼼수를 체계화하는 데에만 온갖 노력을 들여야 한다. 내 학위 논문이 주장하고자 한 바가 바로 이것이다.

여담이지만 컴퓨터 소프트웨어의 아이콘에서 '한글'을 나타낼 때 쓰는 한글 글자는 대개 '가' 아니면 '한'이다. <날개셋> 한글 입력기는 이를 모두 활용하며, 현 글자판이 세벌식으로 판단되면 '한'이 나오고, 두벌식이면 '가'가 나온다. 꽤 옛날 버전부터 이어져 온 관행인데 이게 나름 합리적인 디자인인 것 같다.

Posted by 사무엘

2012/10/24 08:18 2012/10/24 08:18
, ,
Response
No Trackback , 11 Comments
RSS :
http://moogi.new21.org/tc/rss/response/747

제주도 여행 (2012/9/20-22)

회사 창립 n주년 기념으로 올해는 야유회를 2박 3일 제주도 여행으로 꽤 거창하게 갔다.
본인이 제주도를 방문하는 건 14년 만에 처음이었고, (1998년, 고등학교 수학여행 이후)
김포 공항에서 비행기 타는 건 13년 만에 처음인지라 (1999년, 대회 참가차 미국 갈 때)
개인적으로 굉장히 뜻깊은 여행이 아닐 수 없었다.
더구나 이번에 간 곳은 고등학교 수학여행 때 간 곳과는 중복이 전혀 없어서 더욱 좋았다.

사용자 삽입 이미지

  • 제주도는 파란 하늘과 넓은 들판, 야자수 등이 4년 전의 미국 여행과 꽤 비슷한 분위기를 연출했다.
  • 저가 항공사는 공항에서도 부스와 탑승구가 역시 완전 한쪽 끝에서 끝까지 구석 외곽으로 밀려나 있다.
  • 마라도는 남이섬과 상당히 비슷한 모양과 크기인데, 그래도 남이섬이 아주 약간 더 크다.
  • 해산물 판매와 숙박업으로만 먹고 살던 마라도에 웬 짜장면 중국집들이 잔뜩 들어선 이유는... 10여 년 전의 모 CF 때문이다.

사용자 삽입 이미지
한라산 전망대에서.
사용자 삽입 이미지
마라도로 가는 길목에서 본 제주도 산방산.
사용자 삽입 이미지
마라도 초원에서 한컷 더. 윈도우 XP Luna의 배경인 초원과도 비슷한 느낌이 들었다.
사용자 삽입 이미지
이건 보너스. 서울로 돌아오는 비행기 안에서 한눈에 내려다 본 관악산 기슭의 서울대 캠퍼스이다.
제주에서 김포로 가는 비행기가 웬 경부 고속도로 서울 톨게이트, 외곽순환 고속도로 청계 톨게이트, 과천 경마장, 서울대를 거치다니, 착륙 방향을 맞추기 위해 동쪽 내륙 방향으로 상당히 우회하는 것 같았다.

Posted by 사무엘

2012/10/22 08:32 2012/10/22 08:32
Response
No Trackback , 2 Comments
RSS :
http://moogi.new21.org/tc/rss/response/746

숫자 드립 + 기타

10 이하의 소수(prime number)인 2, 3, 5, 7을 소재로 수집한 여러 잡생각들이다.

※ 2

짝수 중에 유일한 소수라는 점에서 큰 의미를 가지며, 2진법 정도면 0과 1, 같고 다름을 분별할 수 있는 최소한의 숫자 체계가 성립하기 때문에 2는 이산수학과 전산학에서 매우 큰 의미를 갖는다. 그 분야에서는 2가 로그 함수의 밑(base)으로도 즐겨 쓰인다. 이분법, 흑백 논리, 음양설 등의 사상적 근간이 되는 수라는 것은 덤.

2가 지니는 전통적인 의미는 위와 같은데, 2010년대부터 한국에서는 모 스타크래프트 프로게이머 때문에 '콩라인'이라는 의미로 2가 매우 유명해지기도 했다.
또한, 본인이 특별히 주목하는 2의 특성으로는,

  • 태양계의 행성 중 태양에서 둘째로 가까운 금성만이 유일하게 짙은 이산화탄소가 가득한 끔찍한 불지옥이다. 그것도, 지구와 가장 가깝고 지구 다음으로 생명체가 살기에 가장 적합할 수도 있었을 행성이 말이다.
  • 성경의 창세기 1장을 보면, 창조 기간 중 둘째 날에만 “하나님 보시기에 좋았더라”라는 말이 없다.
  • 서울 지하철 중 2호선만이 유일하게 순환선이며, 낡은 플랩식 전광판이 2010년까지 가장 늦게까지 남아 있었다.
  • 주찬양 선교단의 과거 앨범 중 2집만이 구성이 특이했으며, 10주년 기념 음반에는 1~7집 중 유일하게 2집의 곡만 단 한 곡도 수록되어 있지 않다.

이러한 징크스도 있다.

※ 3

삼위일체라든가 영-혼-몸 같은 개념 때문에, 3은 성경과 기독교의 관점에서 상당히 친근하고 긍정적인 수이다.

세상에는 '3요소'라는 특성으로 이뤄진 것들이 무척 많다. 우리가 사는 공간이 가로-세로-높이의 3차원이고, 시각 정보를 구성하는 색상 역시 RGB든 그 어떤 형태로든 3요소로 분할된다는 건 우리에게 시사하는 바가 매우 크다.
거기에다 인간의 언어의 음운조차도 크게 세 부분으로 이뤄져서 한글이 초· 중· 종성의 세벌식으로 구성된 것은 덤이다. 어쩌면 삼라만상이 어딜 가든 개념적으로 3으로 가득한 걸지도 모른다.

또한 컴퓨터 소프트웨어도 허접한 버전 1이 처음 나왔다가 과도기인 2를 거친 후, 제 3의 메이저 버전에 와서야 후대에까지 이어지는 뼈대가 완전히 정착된 경우가 적지 않다.
마이크로소프트 Windows는 3.0부터가 상업적으로 성공한 버전인 건 잘 알려진 사실이거니와, 국산 소프트웨어 중에서도 안 철수 씨의 바이러스 백신은 Vaccine III에서 유래된 V3이라는 브랜드가 정착한 것이다.

본인이 개발한 <날개셋> 한글 입력기도 에디팅 엔진과 기본적인 파일 구성, 그리고 각종 클래스 구조의 뼈대는 2004년에 완성된 3.0에서야 정착했으며, 그 여파로 인해 커널의 파일 이름도 ngs3.dll이다. 또한 최 정한 씨가 과거에 개발했던 셸 유틸리티인 MDIR도 정식 명칭은 MDIR-III이다.

※ 5

사람의 손가락과 발가락이 5개 단위이기 때문에 이 수는 우리에게 아주 친숙하다. 약수가 더 많아서 더 유용한 8이나 12가 아니라, 10이 기수법의 기준으로(10진법) 전세계에 보편적으로 통용되게 된 것은 전적으로 이것 때문이다.

그에 반해 손· 발가락이 5개보다 더 많아서 6개 정도 되는 건 전형적인 기형(다지증) 내지 괴물의 상징으로 간주되었다. 성경에도 고대에 손· 발가락이 6개인 거인 괴물 혈통이 있었다는 기록이 전해지며(삼하 21:20; 대상 20:6), 로스웰 추락 UFO 외계인 시체 해부 동영상에도 문제의 외계인의 사지엔 가락이 6개 달려 있다.
(비록 그 동영상은 훗날 낚시 자작극으로 판명이 됐지만, 1947년에 일어난 로스웰 사건 자체는 존재를 부정하기 어려운 듯하다. 그 자작극을 꾸미고 외계인 세트를 만든 사람도, 외계인이니까 손발가락을 5개가 아니라 일부러 6개로 설정했다는 것에 주목할 필요가 있다.)

5에서 수학적으로 더욱 큼직한 의미가 들어있다. 하필 5차 방정식부터가 대수적인 방법으로 일반해를 구하는 게 불가능하다는 것. 쉽게 말해 근의 공식 같은 만능 공식이 있을 수가 없다는 뜻이다.
3차나 4차의 경우, 비록 2차 방정식의 근의 공식 따위와는 비교도 못 할 정도로 복잡하고 어려운 형태이긴 하지만 근의 공식이 있긴 하다. 왜 5차부터 그마저 원천적으로 안 되는 걸까?

유한한 횟수의 사칙연산과 거듭제곱/제곱근의 묶음만으로는 표현할 수 없는 수가 방정식의 근으로 튀어나올 수 있기 때문이다. 근의 공식이 사용하는 연산 수단의 범위 자체를 넘어서는 수가 대수방정식의 근이 될 수 있다는 뜻이다. 그러면서도 정의상 초월수는 아니다. 흠..

예를 들어, 5차보다 한 차원 더 높은 6차 방정식 x^6+x^2-7=0 의 근 중 하나는 다음과 같다.

사용자 삽입 이미지

식은 정말 간단한 형태이지만 근은 가히 미치도록 복잡한 형태이지 않은가? 사람 손으로 계산하기란 거의 불가능한 경지임을 알 수 있다. 그래도 이 수의 6제곱과 2제곱을 더하면 딱 정확하게 7이 나오긴 한다. 이건 그나마 대수적인 범위에 근이 존재하는 사례이다.

그런데 이런 형태로 나오지 않는 근은 도대체 정체가 뭘까?
이걸 제대로 증명하고 이해하려면 군론을 비롯해 온갖 추상적이고 복잡하고 어려운 수학 이론을 동원해야 하며, 나도 거기까지는 잘 모른다. 다만, 초간단한 방정식 x^n=1만을 생각해 보자. 이 방정식의 근은 드 무아브르의 공식에 따라 복소평면에서 원점이 중심이고 반지름이 1인 원에 내접하는 정n각형의 꼭지점을 이루고 있다.

그러므로 180/n도 중, cos/sin값이 대수적인 수로 딱 떨어지지 않는 각도라면, 응당 대수적인 방법으로 나타낼 수 없는 근이 존재하게 된다고 대략 짐작 정도는 할 수 있을 것이다. 가령, n=7인 정칠각형 같은 것 말이다. 그리고 x^n=1부터가 그러하니, 다른 낮은 차수의 계수까지 섞이면 7차가 아닌 5차에서부터 다항식 기반 방정식의 복잡도가 안드로메다로 치솟는가 보다. 나의 수학 감각으로는 이해력이 여기까지가 한계이다.

그런데 어째 수학 패키지들은 그런 복잡한 방정식에 대해서도 근을 numerical한 방법으로 그것도 실수뿐만이 아니라 복소수 범위에서까지 다 찾아 주며, 5차 이상의 방정식이라도 대수적인 방법으로 근을 구할 수 있는 형태라면 아까의 예에서 본 것처럼 근사값이 아니라 symbolic하게 정확한 근을 찾아 주기까지 한다. 도대체 무슨 귀신같은 수치해석 알고리즘을 썼는지 모르겠다.

※ 7

열 손가락 안에 드는 수 중에서 가장 큰 소수인 7은 역수를 10진법으로 나타냈을 때 꽤 긴 순환소수가 등장하는 최초의 수이다. (0.142857...)
정다각형 중에서도 정칠각형은 3~6이나 심지어 8, 10에 비해서는 정말 듣보잡이다. 5는 그래도 황금비하고라도 관련이 있고 작도도 가능한데 반해, 7은 생긴 모습이 안정적이거나 예쁜 구석이 도무지 없고, 수학적으로 작도가 불가능한 최초의 정다각형이다. 자동차의 바퀴를 봐도 휠너트가 7개가 달린 경우는 전혀 없다.

그럼에도 불구하고 현실에서 7의 존재감이 가장 분명하게 나타나 있는 분야는 크게 두 곳인데, 한 주가 전세계 공통으로 7일이라는 점, 그리고 음악에서 한 옥타브의 음계가 하필 7음으로 구성된다는 점이다.

더 나아가 성경에서 숫자의 쓰임에 대해 면밀히 연구해 본 일부 사람들은, 하나님은 이런 불편하고 괴상한 숫자인 7을 무척 좋아하며, 내부적으로 7진법을 사용하시는 게 분명하다고 주장한다. 그래서인지 성경의 책들 중에서도 특히 요한계시록은 온통 7패턴으로 넘쳐나는 책이지 않던가. 무지개의 색깔이 관습상 7개로 분류되고 7이 웬지 행운의 숫자로 여겨지는 게 완전 터무니없는 엉뚱한 심상은 아니라는 뜻 되겠다.

여호수아기에서 여리고 성을 함락시키는 작전을 보면 이스라엘 백성은 6일 동안은 성을 한 바퀴 돌고, 일곱째 날에는 성을 일곱 바퀴 돈 뒤에 함성을 질렀는데 성이 무너졌다(수 6). 그와 비슷한 맥락으로, 계시록에서는 일곱 개의 봉인이 열리는데 마지막 봉인이 열리자 일곱 나팔이 나오고, 마지막 나팔 타이밍 때 재앙이 담긴 일곱 병.. 이런 식으로 이벤트가 꼬리에 꼬리를 잇는다.

과거에 스탈린 휘하의 구소련은 1930년대에 달력에서부터 종교색을 완전히 걷어내겠다는 의도로 독자적인 달력과 1주 5~6요일 체계를 사용한 적이 있었다. 그러나 그 시도는 오래 가지 못하고 실패했다. 7의 존재감은 아무래도 우리가 이제 와서 부정할 수 없을 정도로 깊숙히 파고든 게 분명하다.

※ 기타

1. 5차 방정식 얘기가 기왕 나왔으니 말인데, 수학에서 이런 식의 미지의 영역은 방정식 근 찾기뿐만 아니라 적분에도 있다. 미분은 합성함수나 곱에 대한 미분이 general하게 정립이 돼 있기 때문에 어떤 함수든 미분하기는 쉬운 편이다. 그러나 적분은 그렇지 않다. 부분적분은 말 그대로 식의 형태를 치환 같은 다른 적분 테크닉을 적용하기 유리한 형태로 변형하는 것일 뿐이기 때문에 만능이 아니다.

위키백과에 예가 제시되어 있듯, x^x, exp(-x^2), sin(x)/x, 1/ln(x) 같은 함수들은 부정적분이 어떤 특성을 갖는 함수인지 기존 초월함수들의 조합만으로는 형태가 기술이 되지 않는다.

까짓거 조립은 분해의 역순이고, 적분은 미분의 역순이 아닌가 하는 생각이 들지도 모르나, 수학의 세계는 그렇지 않은 모양이다. 마치 1/x를 적분했더니 ln x(+C)라는 완전히 생소한 함수가 튀어나온 것처럼, 미지의 발상의 전환이 필요한 듯하다.

2. 과학은 창조론과 진화론, 그리고 심지어 천동설-_-과 지동설 같은 이슈 때문에 종교계와 충돌할 거리가 있었다. 하지만 수학은?
“그래도 지구는 돈다.”도 아니고, “그래도 루트 2는 무리수이다.”, “그래도 파이는 초월수이다” 이런 것 때문에 교황청으로부터 무슨 수학자가 박해 받았다거나 하는 역사는 내가 알기로 없다.
설마 대하 4:2 같은 구절을 들고서 원주율은 3이라고 드립을 쳤다거나 하지는 않았을 테니 말이다. -_-;; 그럴 거면 차라리 H2O가 산소라고 드립을 치는 게 낫겠다. ㅋㅋㅋ

Posted by 사무엘

2012/10/19 08:21 2012/10/19 08:21
, , , ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/745

들어가는 말

  • 프로젝트 단위: 말 그대로 한 개의 결과물을 생성하는 것을 목표로 하는 한 비주얼 C++ 프로젝트당 하나씩만 생성되는 파일이다. 리소스는 특수한 경우가 아니면 보통 프로젝트마다 하나만 있기 때문에, per-프로젝트인 것으로 간주된다.
  • configuration 단위: 한 프로젝트 내에서 debug나 release 별로 따로 생성되고, x86이나 x64 같은 플랫폼별로 다 따로 생성되는 파일이다.
  • 소스 단위: 번역 단위(translation unit)별로 다 제각각 생성되는 파일이다. configuration에도 물론 종속적이며, 다 따로 생성된다.

※ 프로젝트를 열면 생성되는 것

APS (프로젝트 단위)

전통적인 윈도우용 실행 파일(EXE/DLL)을 빌드하기 위해서는 잘 알다시피 컴파일된 코드뿐만 아니라 리소스도 같이 들어가는데, 그 리소스를 명시해 주는 '리소스의 소스', 일명 리소스 스크립트는 바로 *.rc 파일이다. 그리고 *.rc와 일반 소스 코드 *.cpp는 resource.h에 정의된 심벌들을 통해 동일 리소스를 식별하게 된다.

그런데 매번 일반 텍스트 형태로 된 rc 파일을 resource.h와 엮어서 파싱하자니 불편하다. 리소스 스크립트는 텍스트 에디터를 써서 사람이 손으로 편집한 뒤 컴파일하기에는 적합하지만, IDE 같은 소프트웨어가 자동으로 다뤄 주기에는 비효율적인 구조인 것이다.

그래서 비주얼 C++은 리소스 ID까지 포함하여 리소스 스크립트의 바이너리 representation을 따로 만들어 두고 지낸다. APS 파일이 존재하고 이게 RC나 H 같은 텍스트 소스에 비해 outdate되지 않았다면, 프로그램은 매번 텍스트를 파싱하는 게 아니라 APS 파일을 곧장 읽는다.

비주얼 C++에서 프로젝트를 처음으로 열어서 리소스 뷰로 리소스들을 처음 열람하면, 프로그램이 리소스 컴파일러를 가동해서 뭘 파싱하면서 시간이 오래 걸린다. 하지만 다음에 열 때부터는 리소스가 곧바로 빨리 열리는데, 이것이 바로 APS 파일 덕분이다.

CLW (프로젝트 단위) deprecated

이것은 비주얼 C++ 4~6 사이에, 그 이름도 유명한 MFC Class Wizard (클래스 마법사) 때문에 도입되었던 부가정보 파일이다.
MFC 클래스에서 파생된 윈도우 클래스 같은 데서 메시지 핸들러(마법사의 용도가 굳이 메시지 핸들러뿐인 건 아니지만)를 추가하려면 일단 헤더 파일에 afx_msg void OnXXXX가 추가되어야 하고, 메시지 맵 BEGIN_MESSAGE_MAP() 밑에 ON_MESSAGE_***가 추가되어야 하고, 끝으로 소스 파일에 해당 멤버 함수의 몸체가 추가되어야 한다.

그런데 이 일을 모든 소스 코드를 일일이 파싱하면서 추가 지점을 찾아서 하기란 여간 어려운 일이 아닐 수 없다.
C++은 선언 따로, 정의 따로이고(C#, 자바는 그렇지 않다) 정의부가 반드시 어느 번역 단위에 존재해야 한다는 제약이 전혀 없다. FM대로 하는 건 15년 전의 펜티엄 컴으로는 무리였다.

그래서 편의상 클래스의 선언부와 메시지 맵의 주변엔 클래스 마법사만이 식별하는 문자열이 들어간 주석이 있고, 클래스 마법사는 그 구간을 대상으로만 작업을 신속하게 했다. 그리고 그걸로도 부족해서 클래스 마법사의 파싱 결과가 CLW 파일에 들어갔다. 식별자 주석을 건드리면 클래스 마법사가 제대로 동작하지 못했다.

21세기에 나온 비주얼 C++ .NET과 그 이후 버전은 CLW 파일을 만들거나 사용하지 않으며, 클래스 마법사 주석 없이도 멤버 함수나 핸들러의 추가를 그럭저럭 정확하게 해낸다. 사실 클래스 마법사 자체가 비주얼 C++ 200x에서는 사라졌다가 2010에서부터 부활했다.

※ 빌드하면 생성되는 것

OBJ (소스 파일 단위)

비주얼뿐만이 아니라 전세계의 어느 C/C++ 컴파일러를 돌리더라도, 소스 코드를 컴파일하면 이것이 매 소스, 즉 번역 단위별로 생성된다. 소스 코드를 번역한 기계어 코드가 obj 파일 포맷에 맞게 들어있는데, 때로는 기계어 코드뿐만 아니라 각종 디버깅 정보와 링크 때 링커가 참고할 만한 메타데이터도 잔뜩 가미된다.

static library라고 불리는 LIB는 별개의 포맷이 아니라, 그냥 여러 번역 단위들을 컴파일한 obj들의 컬렉션일 뿐이다. obj를 단순히 lib로 합치기만 할 때는 링크 에러가 나지 않는다(즉, 선언된 심벌들이 반드시 정의되어야 할 필요가 없다.)

RES (configuration 단위)

리소스 스크립트를 컴파일하여 생성되는 결과물이다. 리소스 스크립트의 바이너리 최적화 형태인 APS와 무엇이 다르냐고 물으신다면, 차이가 적지 않다.
APS는 리소스 스크립트 파일의 표현 형태만 메모리 친화적으로 바꾼 것이기 때문에 ID_RADIO1 같은 상수 명칭의 문자열 원형과 심지어 조건부 컴파일을 위한 스펙까지 다 보존되어 있으며, 참조하는 비트맵 같은 데이터 파일도 파일명 형태로 존재한다. APS 파일로부터 RC 파일과 resource.h 파일을 복원해 낼 수 있다.

그러나 RES는 상수는 다 숫자로 박히고 참조하는 데이터 파일도 모두 내부에 embed되었으며, 이 상태 그대로 실행 파일에다 링크되어 들어가기만 하면 되는 상태인 것이다.

PCH (configuration 단위)

pre-compiled header인 stdafx.h와, 이에 대응하는 번역 단위인 stdafx.cpp를 컴파일하여 얻은 각종 컴파일 context들, 즉 함수와 클래스 선언, #define 명칭 등등을 바이너리 형태로 보관하고 있는 파일들이다. 이게 있으면 stdafx.h를 인클루드하라는 명령은 실제 헤더 파일을 파싱하는 게 아니라 그냥 pch 파일을 참조하는 것으로 대체된다.

컴파일러의 버전이 올라가고 각종 플랫폼 SDK의 크기가 커질수록 이 파일의 크기도 야금야금 커져 왔다. 이거 없이는 C++은 살인적인 인클루드질 때문에, 느린 빌드 속도를 도저히 감당할 수 없다.

PDB (configuration 단위)

빌드 결과 만들어진 EXE/DLL에서 기계어 코드의 어느 부분이 어느 소스의 몇째 줄에 대응하는지(소스 코드 자체는 없고 소스의 경로만), 이 함수에서 이 지역변수의 이름이 무엇인지 등을 담고 있는 디버그 정보 데이터베이스이다.

디버그 모드가 아니라 릴리스 모드로 빌드한 최적화된 실행 파일이라도, PDB 파일을 참조하게 하는 최소한의 정보만이라도 남겨 두면, 나중에 프로그램이 뻗는다거나 할 때 소스상으로 최소한 어느 지점에서 뻗었는지를 개발자의 컴에서 확인해 볼 수 있다. 개발자의 컴엔 직전에 이 바이너리를 빌드하면서 같이 생성된 PDB 파일이 존재하기 때문이다.

ILK (configuration 단위. 대개 디버그 빌드에서만)

증분 링크(incremental link)를 위한 context 정보가 들어있다.
이것은 프로그램의 빌드 속도를 올리기 위한 테크닉이다. 매번 링크를 처음부터 일일이 새로 하는 게 아니라, 처음에 빌드할 때 바이너리를 좀 여분을 둬서 듬성듬성 큼직하게 만들어 두고, 다음부터는 바뀐 obj 파일 내용만 기존 바이너리의 자기 지점에다 대체하는 방식으로 빌드를 신속하게 끝낸다. 혹은 뒷부분에다가 새로운 빌드 내용을 계속 추가해 넣기만 하고, 예전 빌드 내용을 무효화시키는 방법도 쓴다.

요즘 디버그 빌드가 단순히 최적화를 안 한 것 이상으로 릴리스 빌드보다 빌드된 바이너리의 크기가 유난히 큰 이유가 여기에 있다. 게다가 Edit and continue 기능을 위해서도 여분 공간이 필요하기 때문에 크기가 커질 수밖에 없다. 디버그 빌드 바이너리를 바이너리 에디터로 들여다보면, 온통 0xCC (no op)으로 도배가 되고 내부가 헐렁함을 알 수 있다.

MS 오피스도 2007 이전 버전을 보면 방대한 워드/엑셀 문서를 편집할 때 바뀐 내용만 짤막하게 저장하는 옵션이 있었다. 그게 일종의 증분 저장 기능이다. 지금은 그게 보안상으로 문제가 되기도 하고 문서 파일 포맷이 크게 바뀌었으며, 굳이 증분 저장을 안 써도 될 정도로 PC 성능이 좋아졌다고 여겨져서 그런 기능이 없어졌지만 말이다.
증분 링크는 보통은 디버그 모드 빌드에서만 쓰인다.

VC???.idb (configuration 단위. 대개 디버그 빌드에서만)

ILK 파일과 마찬가지로 빌드 시간의 단축을 위해 존재하는 파일이다.
디버그 모드로 빌드를 해 보면, 헤더 파일이 바뀌었더라도 해당 헤더를 인클루드하는 cpp 파일들이 전부 리빌드되는 게 아니라 가끔 'Skipping.. (no relevant changes detected)'이러면서 넘어가는 파일도 있다. 그리고 대체로 이런 컴파일러의 판단이 맞다. 헤더 파일을 고쳤더라도 클래스의 선언부 같은 크리티컬한 부분이 아니라 그냥 주석 같은 trivial한 부분만 바뀌었기 때문에 굳이 리빌드가 필요하지 않다는 걸 어떻게 판단할까?

컴파일러가 제공하는 Enable Minimal Rebuild (/Gm) 옵션 때문에 가능하다. 이게 지정되면 빌드 과정에서 프로젝트명이 아니라 고정된 이름의 의존성 판단용 부가정보 파일이 생긴다. ???는 해당 비주얼 C++의 버전이다. 2008의 경우 90, 2010의 경우 100.

정리하자면, 빌드와 함께 생성되는 파일들 중, 실제로 링커에 의해 EXE/DLL 따위를 만드는 데 동원되는 파일은 OBJ, RES이다.
빌드 시간을 단축시키는 데 쓰이는 파일은 PCH, IDB, ILK이다.
PDB는 프로그램의 문제 추적을 위해 추후에 쓰이는 파일이다.

※ 편의 기능 + 빌드

SBR (소스 파일 단위), BSC (configuration 단위)

자, 이 파일은 빌드를 하면 생성되지만, 프로그램의 빌드나 디버깅을 위해서 반드시 생성해야만 하는 파일은 아니다.
방대한 양의 소스 코드를 컴파일하고 나면 컴파일러는 그 소스 코드의 모든 내부 구조에 대해서 알게 된다. 그걸 알아야만 기계어 코드를 생성할 수 있을 테니까.

컴파일이 끝났다고 그 정보를 그냥 버리는 건 아깝기 때문에, 일정한 파일 포맷을 제정하여 이것을 소스 코드에 대한 browsing에 활용할 수 있다. 가령, 이 클래스 멤버 함수의 정의는 어디에 있고, 이 함수가 호출하는 함수와, 이 함수를 호출하는 함수와의 그래프 관계는 어떻고 하는 것 말이다. 소스 코드가 텍스트라면, browse 정보는 정교하게 짜여진 색인인 셈이다.

이 개념과 파일 포맷은 비주얼 C++의 아주 초창기 시절부터 존재했다.
그리고 비주얼 C++은 버전 6까지는, 프로젝트를 빌드할 때 browse 정보도 같이 이렇게 덤으로 빌드되게 해서 browse 정보를 조회하는 기능을 갖추고 있었다. SBR과 BSC의 관계는 C/C++ 소스 코드에서 OBJ와 EXE의 관계와 정확히 같다. 한 번역 단위를 컴파일하면 한 SBR이 생겼고, SBR들을 뭉쳐서 BSC 파일이 생성되었다.

물론 이렇게 하면 빌드 시간이 더욱 길어졌고, 굳이 browse 기능을 쓰지 않는 사람도 있었기 때문에 이 기능은 철저히 선택사항이었다. 그리고 닷넷부터는 이 정보를 만들지 않더라도, 뒤에서 설명할 인텔리센스 정보만으로 IDE 차원에서 browse 대체 기능을 갖추기 시작했다.

※ 인텔리센스

NCB (프로젝트 단위) deprecated

sbr/bsc보다는 나중에, 시기적으로는 clw와 비슷한 타이밍(비주얼 C++ 4)에 만들어진 파일 포맷이다.
바야흐로 비주얼 C++ 4에서는 최초로 Class View라는 게 생겨서 프로젝트에 존재하는 모든 클래스와 멤버, 전역 변수/함수들을 표시하는 기능이 추가되었다. ncb는 browse 정보를 만드는 것만치 소스를 심도 있게 일일이 다 까 보지는 않고, 그보다는 단순하게 코드를 파싱하여 해당 기능을 빠르게 구현하는 데 필요한 부가 정보를 저장했다.

Class View가 도입되었던 초창기에는 소스 코드를 매번 빌드는 아니어도 저장을 해야만 컨텐츠가 업데이트되었다. 그나마 저장하지 않고도 실시간으로 업데이트가 되기 시작한 건 VC 6부터이다.
그리고 VC 6에서는 잘 알다시피 초보적인 수준의 인텔리센스 및 멤버 표시/자동 완성 기능이 구현되었고, 그 정보 역시 ncb 파일에다 저장되었다. 당연히 같은 프로젝트를 만들어도 ncb 파일의 크기는 더욱 커지게 됐다.

비주얼 C++이 버전업되면서 인텔리센스는 성능이 더욱 강력해졌다. 바로 닷넷에서부터는 #define 심벌이 추가로 인텔리센스의 혜택을 입기 시작했으며 템플릿도 제대로 지원되기 시작했다. 오동작 빈도도 더욱 줄었다.

그러나 이 모든 것은 여전히 10년 전의 ncb 파일을 기반으로, 진품이 아닌 가짜 parser를 임기응변 식으로 확장하면서 구현된 것이기 때문에, 어느 수준 이상의 정확도를 낼 수는 없었으며 복잡한 C++ 문법의 모든 것을 수용하는 데에도 근본적인 한계가 있었다.

가령, 클래스 멤버 함수의 선언이 복잡한 #define 매크로 안에 숨어 있으면 Class View에 이것이 제대로 나타나지 않았다. 갑자기 빌드 configuration이나 플랫폼을 확 바꿔 버리면 인텔리센스가 멘붕을 일으켰으며, 복잡한 조건부 컴파일 구간에 숨어 있는 코드도 인텔리센스가 상황 파악을 제대로 못 하는 경우가 많았다. 멘붕의 정도가 심하면 인텔리센스가 아예 동작을 멎어 버리기도 했기 때문에, 수시로 ncb 파일을 지우고 다시 만들어 주는 건 필수 작업이었다.

SDF (프로젝트 단위), IPCH (configuration 단위)

위와 같은 기존 ncb 기반 인텔리센스의 문제를 극복하고자 비주얼 C++ 2010은 안 그래도 C++11 때문에 문법도 대폭 확장해야 하는데 이 기회에 인텔리센스 엔진을 완전히 갈아 엎었다. SQL server compact edition이라는 전문 DB 엔진을 쓰기 시작했다.

2010부터는 가짜 parser가 아니라 진짜 컴파일러와 똑같은 수준의 parser가 background에서 모든 소스와 헤더 파일들을 일일이 파싱하여 실시간으로 심벌 정보를 고친다. 정확한 문맥을 파악하고 있기 때문에 100% 정확한 인텔리센스가 제공되며, 예전처럼 좀 오동작한다 싶어도 잠시 기다려서 파싱 정보가 갱신되고 나면 곧장 똑바로 동작하기 시작한다.

다만, 이런 첨단 기술이 공짜로 된 건 아니기 때문에, 어지간한 C++ 프로젝트는 이제 인텔리센스 파일만 수십~100수십 MB씩 디스크를 쳐묵쳐묵 하는 대가를 감수해야 한다. 어느 프로젝트를 열든지 동일하게 공유되는 MFC나 플랫폼 SDK의 인텔리센스 정보는 여러 프로젝트들이 한데 공유만 할 수 있어도 인텔리센스의 용량이 크게 줄어들 텐데, 무척 아쉽다.

그래도 비주얼 C++ 제작진에서 일말의 배려를 했다 싶은 대목은, 인텔리센스 DB 파일이 생성되는 곳만 한 곳에 따로 대체 지정이 가능하다는 것이다. 프로젝트-옵션이 아니라 도구-옵션에서 “텍스트 편집기-C/C++/고급”으로 가면 fallback location을 지정하는 옵션이 있으며, 이것만 해 주면 비주얼 C++로 만드는 모든 프로젝트들의 인텔리센스 DB는 거기 아래로 한데 모이게 된다.

이렇듯, 비주얼 C++ IDE나 컴파일러가 생성하는 보조 파일들의 용도와 배경에 대해서 공부하면 C/C++ 언어의 특성을 알 수 있고, 프로그래밍 언어에 대한 비판적인 안목, 그리고 언어의 비효율을 극복하고 조금이라도 개발 도구의 생산성을 올리기 위해 해당 제작진이 어떤 꼼수를 동원했는지에 대해서도 알 수 있다.

Posted by 사무엘

2012/10/16 08:30 2012/10/16 08:30
,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/744

문자의 집합인 문자열(string)은 어지간한 프로그래밍 언어들이 기본으로 제공해 주는 기본 중의 기본 자료형이지만, 그저 기초라고만 치부하기에는 처리하는 데 내부적으로 손이 많이 가기도 하는 자료형이다.

문자열은 그 특성상 배열 같은 복합(compound) 자료형의 성격이 다분하며, 별도의 가변적인 동적 메모리 관리가 필요하다. 또한 문자열을 어떤 형태로 메모리에 저장할지, 복사와 대입은 어떤 형태로 할지(값 내지 참조?) 같은 전략도 구현체에 따라서 의외로 다양하게 존재할 수 있다.

그래서 C 언어는 컴퓨터 자원이 열악하고 가난하던 어셈블리 시절의 최적화 덕후의 정신을 이어받아, 언어 차원에서 따로 문자열 타입을 제공하지 않았다. 그 대신 충분히 크게 잡은 문자의 배열과 이를 가리키는 포인터를 문자열로 간주했다. 그리고 코드값이 0인 문자가 문자열의 끝을 나타내게 했다.

그 이름도 유명한 null-terminated string이 여기서 유래되었다. 오늘날까지 쓰이는 역사적으로 뿌리가 깊은 운영체제들은 응당 어셈블리나 C 기반이기 때문에, 내부 API에서 다 이런 형태의 문자열을 사용한다.
그리고 파일 시스템도 이런 문자열을 사용한다. 오죽했으면 이를 위해 MAX_PATH (=260)같은 표준 문자열 길이 제약까지 있을 정도이니 말 다 했다. 그렇기 때문에 null-terminated string은 앞으로 결코 없어지지 않을 것이며 무시할 수도 없을 것이다.

딱히 문자열만을 위한 별도의 표식을 사용하지 않고 그저 0 문자를 문자열의 끝으로 간주하게 하는 방식은 매우 간단하고 성능면에서 효율적이다. 지극히 C스러운 발상이다. 그러나 이는 buffer overflow 보안 취약점의 근본 원인을 제공하기도 했다.

또한 이런 문자열은 태생적으로 문자열 자기 내부엔 0문자가 또 들어갈 수 없다는 제약도 있다. 하지만 어차피 사람이 사용하는 표시용 문자열에는 코드 번호가 공백(0x20)보다 작은 제어 문자들이 사실상 쓰이지 않기 때문에 이는 그리 심각한 제약은 아니다. 문자열은 어차피 문자의 배열과는 같지 않은 개념이기 때문이다.

문자열을 기본 자료형으로 제공하는 언어들은 대개 문자열을 포인터 형태로 표현하고, 그 포인터가 가리키는 메모리에는 처음에는 문자열의 길이가 들어있고 다음부터 실제 문자의 배열이 이어지는 형태로 구현했다. 그러니 문자열의 길이를 구하는 요청은 O(1) 상수 시간 만에 곧바로 수행된다. (C의 strlen 함수는 그렇지 않다)

그리고 문자열의 길이는 대개 machine word의 크기와 일치하는 범위이다. 다만, 과거에 파스칼은 이례적으로 문자열의 크기를 16비트도 아닌 겨우 8비트 크기로 저장해서 256자 이상의 문자열을 지정할 수 없다는 이상한 한계가 있었다. 더 긴 문자열을 저장하려면 다른 특수한 별도의 자료형을 써야 했다.

과거에 비주얼 베이직은 16비트 시절의 버전 3까지는 “포인터 → (문자열의 길이, 포인터) → 실제 문자열”로 사실상 실제 문자열에 접근하려면 포인터를 이중으로 참고하는 형태로 문자열을 구현했다. 어쩌면 VB의 전신인 도스용 QuickBasic도 문자열의 내부 구조가 그랬는지 모르겠다.

그러다가 마이크로소프트는 훗날 OLE와 COM이라는 기술 스펙을 제정하면서 문자열을 나타내는 표준 규격까지 제정했는데, COM 기반인 VB 4부터는 문자열의 포맷도 그 방식대로 바꿨다.

일단 기본 문자 단위가 8비트이던 것이 16비트로 확장되었다. 마이크로소프트는 자기네 개발 환경에서 ANSI, wide string, 유니코드 같은 개념을 한데 싸잡아 뒤죽박죽으로 재정의한 것 때문에 문자 코드 개념을 좀 아는 사람들한테서 많이 까이고 있긴 하다. 뭐, 재해석하자면 유니코드 UTF16에 더 가깝게 바뀐 셈이다.

OLE 문자열은 일단 겉보기로는 null-terminated wide string을 가리키는 포인터와 완전히 호환된다. 하지만 그 메모리는 OLE의 표준 메모리 할당 함수로만 할당되고 해제된다. (아마 CoTaskMemAlloc) 그리고 포인터가 가리키는 메모리의 앞에는 문자열의 길이가 32비트 정수 형태로 또 들어있기 때문에 문자열 자체가 또 0문자를 포함하고 있을 수 있다.

그리고 문자열의 진짜 끝부분에는 0문자가 1개가 아니라 2개 들어있다. 윈도우 운영체제는 여러 개의 문자열을 tokenize할 때 double null-termination이라는 희대의 괴상한 개념을 종종 사용하기 때문에, 이 관행과도 호환성을 맞추기 위해서이다.

2중 0문자는 레지스트리의 multi-string 포맷에서도 쓰이고, 또 파일 열기/저장 공용 대화상자가 사용하는 확장자 필터에서도 쓰인다. MFC는 프로그래머의 편의를 위해 '|'(bar)도 받아 주지만, 운영체제에다 전달을 할 때는 그걸 다시 0문자로 바꾼다. ^^;;;

요컨대 이런 OLE 표준 문자열을 가리키는 포인터가 바로 그 이름도 유명한 BSTR이다. 모든 BSTR은 (L)PCWSTR과 호환된다. 그러나 PCWSTR은 스택이든 힙이든 아무 메모리나 가리킬 수 있기 때문에 그게 곧 BSTR이라고 간주할 수는 없다. 관계를 알겠는가? BSTR은 SysAllocString 함수를 통해 생성되고 SysFreeString 함수를 통해 해제된다.

'내 문서', '프로그램 파일' 등 운영체제가 특수한 용도로 예정하여 사용하는 디렉터리를 구하는 함수로 SHGetSpecialFolderPath가 있다. 이 함수는 MAX_PATH만치 확보된 메모리 공간을 가리키는 문자 포인터를 입력으로 받았으며, 특수 폴더들을 CSIDL이라고 불리는 일종의 정수값으로 식별했다.

그러나 윈도우 비스타에서 추가된 SHGetKnownFolderPath는 폴더들을 128비트짜리 GUID로 식별하며, 문자열도 아예 포인터의 포인터 형태로 받는다. 21세기에 도입된 API답게, 이 함수가 그냥 메모리를 따로 할당하여 가변 길이의 문자열을 되돌려 준다는 뜻이다. 260자 제한이 없어진 것은 좋지만, 이 함수가 돌려 준 메모리는 사용자가 따로 CoTaskMemFree로 해제를 해 줘야 한다. SysFreeString이 아님. 메모리만 COM 표준 함수로 할당했을 뿐이지, BSTR이 돌아오는 게 아닌 것도 주목할 만한 점이다.

예전에 FormatMessage 함수도 FORMAT_MESSAGE_ALLOCATE_BUFFER 플래그를 주면 자체적으로 메모리가 할당된 문자열의 포인터를 되돌리게 할 수 있는데, 이놈은 윈도우 NT 3.x 시절부터 있었던 함수이다 보니, 받은 포인터를 LocalFree로 해제하게 되어 있다.

이렇게 운영체제 API 차원에서 메모리를 할당하여 만들어 주는 문자열 말고, 프로그래밍 언어가 제공하는 문자열은 메모리 관리에 대한 센스가 추가되어 있다. 대표적인 예로 MFC 라이브러리의 CString이 있다.

CString 자체는 BSTR과 마찬가지로 언뜻 보기에 PCWSTR 포인터 하나만 멤버로 달랑 갖고 있다. 그래서 심지어 printf 같은 문자열 format 함수에다가 "%s", str처럼 개체를 명시적인 형변환 없이 바로 넘겨 줘도 괜찮다(권장되는 프로그래밍 스타일은 못 되지만).

그런데 그 포인터의 앞에 있는 것이 단순히 문자열 길이 말고도 더 있다. 바로 레퍼런스 카운트와 메모리 할당 크기. 그래서 문자열이 단순 대입이나 복사 생성만 될 경우, 그 개체는 동일한 메모리를 가리키면서 레퍼런스 카운트만 올렸다가, 값이 변경되어야 할 때만 실제 값 복사가 일어난다. 이것을 일명 copy-on-modify 테크닉이라고 하는데, MFC 4.0부터 도입되어 오늘날에 이르고 있다. 이는 상당히 똑똑한 정책이기 때문에 이것만 있어도 별도로 r-value 참조자 대입 최적화가 없어도 될 정도이다.

메모리 할당 크기는 문자열에 대해 덧셈 같은 연산을 수행할 때 메모리 재할당이 필요한지를 판단하기 위해 쓰이는 정보이다. MFC는 표준 C 라이브러리에 의존적이기 때문에 이때는 응당 malloc/free가 쓰인다. 재할당 단위는 보통 예전에 비해 배수 단위로 기하급수적으로 더 커진다.

CString이 그냥 포인터와 크기가 같은 반면, 표준 C++ 라이브러리에 존재하는 string 클래스는 비주얼 C++ 2010 x86 기준 개체 하나의 크기가 28바이트나 된다. 길이가 16 이하인 짧은 문자열은 그냥 자체 배열에다 담고, 그보다 긴 문자열을 담을 때만 메모리를 할당하는 테크닉을 쓰기 때문이다. 그리고 대입이나 복사를 할 때마다 CString 같은 reference counting을 하지 않고, 일일이 메모리 재할당과 값 복사를 한다.

글을 맺겠다.
C/C++이 까이는 여러 이유 중 하나는 라이브러리가 지저분하고 동일 기능의 중복 구현이 너무 많아서 혼란스럽다는 점이다. 문자열도 그 범주에 정확하게 속하는 요소일 것이다. 메모리 할당과 해제 자체부터가 구현체 중복이 한둘이 아니니... 어지간히 덩치와 규모가 있는 프레임워크 라이브러리는 그냥 자신만의 문자열 클래스 구현체를 갖고 있는 게 이상한 일이 아니다. 하지만 그건 C/C++이 쓰기 편리한 고급 언어와 시스템 최적화 오덕질이라는 두 토끼를 모두 잡으려다 어쩔 수 없이 그리 된 것도 강하다.

문자열에 대한 이야기 중에서 일부는 내가 예전 블로그 포스트에서도 한 것도 있지만, 이번 글에 처음으로 언급한 내용도 많을 것이다. 프로그래밍 언어 중에는 문자열을 다루기가 기가 막히게 편리한 것이 있는데, 그런 것도 내부적으로는 다 결국은 컴퓨터가 무진장 고생해서 결과물을 만들어 내는 것이다.
컴퓨터가 받아들이고 뱉어내는 문자열들이 내부적으로 어떤 구현체에 의해 어떤 처리를 거치는지를 생각해 보는 것도 프로그래머로서는 의미 있는 일일 것이다.

Posted by 사무엘

2012/10/13 08:26 2012/10/13 08:26
, , , ,
Response
No Trackback , 8 Comments
RSS :
http://moogi.new21.org/tc/rss/response/743

난 철도의 영으로 충만한 사람이다. 지난 2004년 초, 새마을호 열차 객실과 Looking for you 음악이라는 두 조건이 동시에 만족되었을 때, 본인은 딱 왕하 3:15와 비슷한 과정을 거쳐 뼛속까지 철덕으로 거듭났다. 한국 철도가 대한민국 국민이라는 집합이 아니라 ‘나’라는 개인을 위한 육상 교통수단임을 실감하였으며, 철도를 나의 개인적인 정신 지주로 영접했다.
 
나는 철도 덕분에 그야말로 세상을 보는 안목과 가치관이 송두리째 바뀌었다. 철도가 나에게 얼마나 아름다운 꿈과 희망을 주고 감성을 키웠는지, 게다가 심지어 애국심과 국토 사랑 정신까지 고취시켜 줬는지를 나는 언제라도 얼마든지 간증할 수 있다. Looking for you를 안 들어 봤기 때문에 새마을호 여행만도 못한 별 허접하고 수준 낮은 체험을 갖고서 천국 간증이네, 은사주의네 하면서 사람들이 속는다고 난 생각한다.
 
본인은 지난 수 년 동안 성경을 알고 영적으로 양육을 받으면서 하나님과 세상에 대해서 잘못 생각하던 것들이 교정되었다. 잘못된 방향으로 극단적인 선택을 하려던 것이 바로잡혔으며, 모나고 괴팍하던 성격도 예전에 ‘비해서는’ 굉장히 많이 부드러워졌다. 죄에 대한 감각이 더욱 민감해졌고, 지금 상황에 맞는 성경 구절이 더욱 빠르게 생각나는 수준이 되었다.
 
그런데 그런 와중에도 철도 사랑은 변함없이, 아니 오히려 시간이 흐를수록 더욱 강렬해졌다. 철도는 예수님도 좋아하시거나 최소한 묵인· 용인하는 게 틀림없다는 확신을 하게 됐다. 철도교와 기독교는 모순이나 대립 관계가 아니다. 내가 한 번 받은 구원을 잃지 않는 것만큼이나 세상 그 어느 것도 새마을호 안에 있는 철도 사랑으로부터 나를 떼어 놓을 수 없을 것이다. 내 머리 내부에 ‘연예, 오락, 스포츠, 유흥’ 분야는 오로지 철도가 100% 꽉 장악해 있어서 다른 영화, 드라마, 유행가, 스포츠 따위가 전혀 들어가지 않는다.
 
이렇듯 이 글을 읽는 분들, 그리고 본인에 대해서 개인적으로 아는 분들은 본인이 못 말리는 철도광이라는 것을 잘 안다. 왜냐하면 내가 맨날 철도 얘기를 떠벌리고 다니기 때문이다. 학교에서도, 교회에서도, 회사에서도 내가 철도 덕후라는 걸 모르는 사람은 없다. 내 개인 홈페이지의 방문객 중에서는 더 말이 필요 없다.
그리고 몇몇 지인들은 내게서 맨날 주워 들은 게 있어서 섬식 승강장, 복선, 경부선, 폐색 구간 같은 용어 정도는 구사하며, 심지어 Oh Glory Korail (한국 철도 공사 사가) 노래의 멜로디를 기억하기도 한다!
 
그런데 우리 다같이 좀 생각해 보자. 그런 것처럼, 나의 주변에 있는 사람들은 나 자신으로 인해서 복음이나 예수님, 성경에 대한 인식이 조금이라도 올바른 쪽으로 바뀐 게 있는가?
당장 예수님 영접하고 구원받아서 교회 출석을 시작하는 것까지는 바라지도 않는다. 단지,
 
“교회 댕긴다는 인간들이 마음에 안 들긴 하지만 그래도 저 사람은 예외적이고 좀 믿는 구석이 있어 보인다. 쟤 앞에서는 기독교 욕 함부로 하기가 좀 껄끄럽다. 성경에 대해서 만에 하나 궁금한 게 있으면 앞으로 저 사람에게 물어 봐야겠다” 정도의 평판이라도 있는가?
 
우리가 믿는 복음은 언뜻 보기에 도저히 믿어지지 않는 황당한 낭설 같지만 정말로 살아 있고 권능이 있다. 지금은 죽고 없는 옛 성현들의 듣기 좋은 격언 같은 차원이 절대로 아니다. 복음은 제일 쉬운 구원의 길을 제시함에도 불구하고, 한편으로 절대로 “나만 구원받고 끝”으로 혼자 머물러 있지도 않는다. 영원도, 구원도 없이 그저 세상적인 오덕질에 불과한 철도 복음만 해도 저 정도인데, 진짜 혼을 회심시키고 구원시키는 예수님의 은혜의 복음은 밖으로 퍼져 나가지 않으면 못 배기는 존재이다.
 
그래서 이를 필사적으로 막고자 마귀는 지능안티들을 참 많이도 만들어 놨다. 정상적으로 성령 충만한 크리스천하고는 아무 상관도 없는 이상한 위선자, 개념 없는 광신자, 나약한 루저 이미지를 예수쟁이와 딱 연결시켜 놓았다. 그리고 영적 의무를 게을리하고 있으면서 스스로 합리적이고 똑똑하다고 생각하는 육신적인 크리스천들로 하여금, 자신들이 고작 저런 위선자· 광신자 부류와 같지 않음을 다행으로 여기게 만들었다. 이 얼마나 수준 낮고 답답한 생각인가?
 
성경을 살펴보자. 출애굽기의 모세는 열 가지 재앙이 내려지던 시절에 파라오가 제안한 각종 절충안들(가긴 가되 애들은 놔두고 가라, 짐승을 일부는 남겨 놔라 등)을 단호히 거부함으로써 영적 교훈을 남겼다. 파라오는 이스라엘 백성들의 종교 행위가 주변이나 후세에 끼칠 파급 효과를 최소화하려고 나름 잔머리를 굴렸던 것이다.
 
그리고 다리오 왕 시절의 다니엘이 있다. 그때 내려진 칙령은 모든 관료들에게 일일이 청문회로 사상 검증을 실시해서 예수쟁이들을 색출해 내겠다는 게 아니었다! 그러니 그냥 한 달 동안은 혼자 골방에서 숨어서 기도를 몰래 해도 됐음에도 불구하고 다니엘은 참 고지식하게도 여전히 늘 하던 대로 공개적으로 “나 하나님 믿소” 티를 다 내면서 기도를 하다가 사자굴에까지 갔다 왔다. 이 점을 우리는 잊지 말자. (단 6:7,10)
 
예수 믿고 구원받은 사람에게서 끊임없이 예수님 얘기가 나오는 건 철도 덕후한테서 맨날 철도 얘기와 Looking for you 얘기가 나오는 것과 같다. 더 직설적인 비유를 동원하자면 똥에서 똥 냄새가 끊임없이 흘러나오고, 방사성 물질로부터 방사능이 끊임없이 나오는 것과도 같다. 우리끼리 하는 얘기로, 똥 냄새가 안 나는 똥이 똥일 수가 있을까?
 
“남에게 티를 내거나 강요는 절대로 하지 말고 예수는 너 혼자만 조용히 믿어라”는 완전히 잘못된 생각이다. 그건 온전한 신앙의 자유가 아님을 알아야 한다. 기독교 신앙은 그런 식으로 절뚝발이 형태로 믿을 수 있는 게 아니다.
 
세상의 국가들 사이에도 전쟁을 하는데 룰이라는 게 존재한다. 군인과 민간인을 분명히 구분하여 민간인의 피해가 없게 하고, 정정당당하게 싸운 군인은 설령 포로로 잡히더라도 명목상으로나마 최소한의 인권을 보장받게 하기 위해서이다.
 
현대전에서 어떤 군사 집단이 범죄자나 테러리스트 조직이 아니라 교전권을 갖춘 정식 군대로 인정을 받으려면, 신원이 알려진 사령관에 의한 명확한 지휘 체계가 있어야 하고 모든 전투원이 통일된 고유한 복장을 갖춰서 피아 식별이 공개적으로 가능해야 한다. 그리고 무기를 겉으로 공공연히 휴대하고 다녀야 한다.
 
이것은 영적 전투에도 시사하는 바가 매우 크다. 우리 쪽 진영의 사령관에 대해서야 더 말이 필요하지 않을 것이다. 그리고 전투원인 우리 역시 자신의 영적 소속과 정체성에 대해서 세상을 상대로 떳떳하고 정정당당하게 드러내고 노출시킬 생각을 해야지, 부끄러워하지 말아야 한다. 민간인으로 변장하고 적진에 침투한 뒤에 주머니에서 수류탄이나 툭 던지고 도망치는 식으로 어줍잖게 싸워서는 공을 세우기도 어려울 뿐더러, 그러다가 나중에 적에게 잡혔다간 더욱 처참한 꼴을 당하게 된다.
 
그러면서 크리스천들은 “당연히” 실수도 많이 한다. 복음을 전하는 열성이 너무 지나쳐서 너무 극성스럽게 굴 때도 있고, 낙담한 나머지 육신이 앞서서 추한 모습을 보이게 될 때도 있다. 그래서 도리어 복음에 대한 간증을 잃게 만드는 행동을 종종 한다. 본인 역시 그 누구보다도 그런 사고를 많이 쳤다.
 
그런데 그건 자연스러운 귀결이다. 철도 복음이야 안 믿었다고 지옥 갈 일도 없고, 버스와 철도가 힘을 합쳐서 모로 가든 서울만 빠르고 안전하고 편하게 가면 된다고 가르치는 복음이니, 서로 얼굴 붉힐 일도 없고 그냥 소꿉장난 수준밖에 안 된다. 그에 반해 예수님의 복음 같은 엄청나고 극단적인 복음은 전하는 과정에서 사람이 실수를 안 하는 게 더 이상한 노릇이다. 예수님도 그걸 뻔히 알면서도 복음을 전하는 사명을 성도들에게 맡기셨다!
 
실수했으면 하나님께는 회개하고 사람에게는 잘못을 인정하고 사과한 후 다시 본업으로 복귀하면 된다. 앞으로는 같은 실수를 안 하면 그걸로 끝이다. 마치, 봐도 뭔 말인지 모르겠다고 성경을 아예 안 읽는 것이 잘못이듯, 미숙함을 핑계로 자신의 영적 소속을 드러내고 알리는 일을 언제까지나 주저하는 것은 하나님 보시기에 좋은 모습이 될 수 없다.
 
죽으면 다 끝이라고 생각하는 사람, 절대적인 선과 악이 없다고 생각하는 사람, 자기 의를 철석같이 믿는 사람, 성경에서 어떻게든 꼬투리를 잡으려는 사람들을 내 논리와 지식으로 완벽하게 설득하려고 마음먹는 것 자체가 어찌 보면 오만이다. 언제 하나님께서 당신더러 그러라고 하셨던가?
 
잃어버려진 자들에게 그냥 내 인격을 걸고서 하나님의 의와 심판, 죄와 복음을 가감 없이 있는 그대로 알려 주기면 하면 된다. 단지 그 말이 정말로 듣는 사람을 “위해서” 진심으로 하는 말이라는 사랑의 호소력을 불어 넣는 것은 우리가 할 수 있는 일이다.
 
이런 맥락에서 봐도 예수님 영접은 어렸을 때 빨리 하는 게 여러 모로 유리하다. 세상 연륜과 성경 교리와의 충돌의 폭이 그리 크지 않으며, 사고를 친 것도 크게 허물이 되지 않기 때문이다. 어렸을 때 작은 시행착오를 몇 번 미리 겪고 거기에 적응과 면역이 되고 나면, 장성한 뒤부터는 탄탄대로이다. 평생 흥청망청 살다가 죽기 바로 직전에만 예수 믿으면 된다고? 큰일 날 소리이다.
 
그리고 하나 더 생각해 볼 게 있다. 교회사를 살펴보면 우리에게 귀감이 되는 여러 신앙의 선배들이 있고 특히 순교자들이 있다. 그분들을 존경하고 그분들의 삶으로부터 도전을 받는 것까지는 좋다. 그러나 그들만 우리로서는 엄두도 못 낼 무슨 엄청난 초인적인 일을 해냈다는 식으로 괴리감을 두려는 것은 상당히 위험한 결말로 빠질 수 있다.
그런 사고방식이 악화되면 천주교 성인 제도가 된다! 이럴 때 우리는 약 5:17 같은 말씀을 생각하면서 영웅 콤플렉스를 교정해야 할 것이다.
 
하늘에 가면 우리도 초대 교회 시절이나 중세 암흑기 시절의 경험담을 들으면서 놀라겠지만, 그 선조들 역시 말세에 벌어진 말도 안 되는 교리적 배도와 총체적 혼돈, 그리고 인터넷과 스마트폰 시대에 진리를 사수해 낸 성도들의 싸움 얘기를 들으면 아마 까무러칠 것이고 소스라치게 놀랄 것이다.
 
우리가 존경하는 상당수의 옛 믿음의 선배들은 진화론이 뭔지도 몰랐을 것이며, 영어 성경 역본이 200종이 넘어가고 이중 대부분은 변개되는 시대가 올 거라고는 상상도 못 했을 것이다. 일례로 인간 횃불이 되고 사자에게 잡아 먹히며 순교한 옛날 사람들은, 말세엔 근본주의 크리스천들이 사형 제도 폐지를 반대하고 비판하게 될 거라고 꿈엔들 예상했을까?
우리 같은 마지막 시대 라오디게아 팀은 사육신은 못 돼도 생육신은 충분히 된다. 어깨를 펴고 살도록 하자.
 
도산 안 창호는 이렇게 말했다.
“주변에 왜 인물이 없느냐고 탄식하지 마십시오. 왜 당신이 그 인물이 될 생각을 안 하십니까?

안 창호 자신이 크리스천이기도 했고, 저건 성경적으로도 굉장히 통찰력이 있는 말이다. 지금 우리의 다음 세대는 우리보다 영적으로 더욱 어둡고 암울하고, 경제적으로도 더 가난하고 어렵고 힘든 세상을 살게 된다. 환란 전 휴거라는 약속마저 없으면, 정말 꿈도 희망도 답도 없다. 재물이 없으면 시편 37편 같은 신앙밖에는 후세에 물려줄 게 없다.
 
정말 심각한 마음으로 구국의 일념으로 길거리에서 프리칭을 하고, 전도지를 나눠 주고, 성경과 신앙 서적을 출간하거나 출간을 후원하고, 주일학교 아이들을 가르쳐야 할 것이다. 이 세상은 그리스도의 군사가 그저 잠자코 있기에는 너무 위급한 상황이다. 우리도 초대 교회 시절의 순교자처럼 살 수 있고, 살아야만 한다. 단지 그 삶을 실현하는 배경과 방법이 다를 뿐이고, 그 방법을 실천할 기회는 오늘날 시국이 말해 주듯 주변에 널려 있다.
 
“사람의 관점에서는 위기인 게 하나님의 관점에서는 기회”라는 사고방식으로 살면 나의 영적 본분을 잊지 않고 살 수 있고 삶을 사는 방식도 많이 달라질 거라는 생각이 든다. 내가 감당하지도 못할 엄청난 권면을 함부로 늘어놓은 건 아닌가 싶어 글을 맺기가 부담스러우나, 그러나 본인 역시 또 시행착오를 겪으면서 차츰차츰 내 삶을 하나님의 방식에 맞춰 보련다. 내가 그걸 지향하면서 살고 있기 때문에, 교회에서도 철도 오덕질 그렇게 하고도 안 짤리고 보직 유지하고 버티고 있는 게 틀림없다. ㅋㅋ

Posted by 사무엘

2012/10/10 08:30 2012/10/10 08:30
, ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/742

※ 의식주

인간이 살기 위해 없어서는 안 되는 핵심 요소를 가리키는 용어로 '의식주'라는 유명한 말이 있다.

먼저 의(의복).
사람은 누구나 알몸으로 태어나지만, 아무리 가난한 사람이라 해도 최소한의 옷 한 벌은 무조건적으로 갖추고 있다. 신기하지 않은가?
우주 공간이나 사막이나 극지방 같은 극도의 악천후에서 살지 않는 이상, 벌거벗고 지낸다고 해서 당장 생물학적으로 목숨이 위태로워지지는 않는다. 옷이 무슨 물이나 산소나 음식 같은 물질도 아닌데 말이다.

그럼에도 불구하고 사람은 옷이 없으면 다른 사람들과 결코 제대로 생활할 수 없다. 다른 동물들과는 달리 오직 인간만 말이다. 성경은 그렇게 된 이유를 제시하고 있다.

또한 옷은 착용자의 신분과 격식을 나타내는 역할도 하기 때문에, 옷차림은 문화와 예절에서도 매우 중요한 위치를 차지하고 있다. 특정 상황에서 적절한 의상이 갖춰져 있지 못하면 사회적으로 상당히 난감해진다. 오죽했으면 성경에서도 결혼식 예복을 갖춰 입지 못한 사람이 예식장에서 강퇴 당하는 비유가 등장한다(마 22:11-13). 교리적으로 담고 있는 메시지는 따로 있다는 걸 감안하더라도 말이다.

다음으로 식(음식)이다.
사람은 일차적으로는 물론 체력을 얻어 생명을 유지하기 위해 밥을 먹는다. 그러나 식생활은 단순한 연명 활동을 넘어 입을 심심하지 않게 하고 좋은 기분과 컨디션을 유지시키는 등, 사회생활과 대인관계에서 의외로 매우 중요한 역할을 차지한다. 그래서인지 문명이 존재하는 사회에는 식사 예절이라는 것도 문화에 따라 아주 정교하게 발달해 있다.

인간이 하루에 두어 차례 일과 활동을 중단하고 식사를 해야 하는 건 사실 생산성이라는 관점에서만 보면 비효율과 손해인지도 모른다. 그러나 과학 기술의 발달로 인해 인간에게 필요한 열량과 영양분을 단번에 주입할 수 있는 알약 같은 게 개발된다 하더라도 수천 년간 지속되어 온 인간의 전통적인 식사 관행이 근본적으로 바뀌지는 않을 것이다.

그리고 사실은, 인터넷과 스마트폰이 발명되고 달과 화성으로 우주선을 보내는 오늘날 21세기에조차도 인류의 식량 문제의 해결은 요원하다. 전세계에는 여전히 굶주리는 사람이 많으며, 인간의 식량은 수천 년 전이나 지금이나 여전히 땅의 소출, 다시 말해 농업에 전적으로 의존하고 있다. 그리고 농업은 예나 지금이나 하늘을 바라보고 의지해야만 돌아갈 수 있는 산업이다. 이는 우리에게 시사하는 바가 크다.

끝으로 주(집)이다.
요즘 젊은이들이 집 문제 때문에 결혼조차 엄두를 못 내게 될 정도로 이와 관련된 사회적 병폐가 심각하다. 땅의 절대적인 면적이 좁은 건 아니지만 사람들이 너무 좁게 사는 게 문제이다. 아무 곳에나 덥석 정착해서 사는 게 아니라 여기저기 입지 조건을 안 따질 수가 없기 때문이다.

하지만 성경은 의와 식에 비해서 '주'는 상대적으로 덜 강조하는 것 같다. 산상수훈인 마 6:25라든가 만족을 명령하는 딤전 6:8을 봐도, 의와 식은 명시되어 있지만 주는 누락이다. 예수님 역시 변변한 거처가 없이 사셨다(마 8:20).

이는 다른 이유는 없고, 크리스천들이 세상에서는 영적으로 나그네· 순례자로 산다는 사상이 반영되어서 그런 것 같다. 진짜 본향은 하늘에 따로 있으니까. 집이 그렇게도 중요하다면, 누구 말마따나 성경도 이렇게 기록되었을 것이다. “그러므로 남자가 자기 아버지와 어머니를 떠나 '집을 장만하고,' 자기 아내와 연합하여 그들이 한 육체가 될지니라.” (창 2:24 패러디)

※ 휴대용 식량

그럼 이제부터는 의식주 중에서 '식'에 대한 이야기를 계속하겠다.
전통적으로 인간의 식사는 현장에서 갓 조리된 따끈한 음식을 충분히 가까운 곳(동일 건물)에서 바로 느긋하게 먹는 형태였다. 사실 여건이 허락한다면 그게 가장 바람직하다.

그러나 학교나 일터에서, 혹은 야외에서는 일일이 음식을 조리해서 먹을 수가 없기 때문에 근처에 식당조차 없다면 남는 선택은 도시락밖에 없다. 남의 행동이나 생각을 무슨 일이 있어도 반드시 저지시키고 싶을 때, “도시락 싸 들고 다니면서 말리겠다”라는 관용구가 쓰이는데, 이게 도시락의 어떤 특성을 반영하여 만들어진 표현이겠는지를 잘 생각해 보자. ㅋㅋ

그나마 학교는 이제 전부 급식 체제로 바뀌었고 그걸로도 모자라서 무료 급식까지 시행되고 있다 하니, 학부모의 입장에서는 도시락을 일일이 싸 줘야 하는 부담은 덜게 되었다. 저게 무슨 돈으로 가능하겠는지에 대한 정치적 견해의 차이는 차치하고라도 말이다.

아무래도 도시락은 정식으로 차려 먹는 밥보다야 덜 따뜻하고 덜 신선하며, 원하는 형태의 요리를 마음껏 먹을 수 없다는 제약이 존재한다. 더구나 단순히 점심 한 끼나 그렇게 때우는 정도가 아니라 뱃사람이나 군인의 식단은 어땠을까? 지금 같은 냉동이나 식품 보존 기술이 발달하기 전에는 고기 같은 건 닥치고 소금에 절이는 수밖에 없었을 것이고, 보존성을 위해 맛을 크게 희생한 식품만 맨날 섭취해야 하는 건 당사자들에게 큰 고역과 스트레스였을 것이다.

오늘날 단순 도시락 이상의 위상으로 통용되는 휴대용 식량으로는 다음과 같은 것들이 있다.

1. 비행기 기내식

사용자 삽입 이미지
주행 속도가 느리고 공간이 넉넉한 배야 장거리 여객선에는 주방이 있다. 열차에도 식당칸이 있다. 고속버스는 그냥 휴게소에 들르면 끝..;; 그러나 비행기는 그런 것까지 갖출 여건은 안 되니, 8시간 이상 장거리 노선을 뛰는 여객기에서는 미리 납품받은 기내식을 승객들에게 공급하게 된다.

기내식을 받아 먹는 느낌은 참 독특하다. 비록 비행기에서 직접 조리를 한 음식은 아니지만, 그렇다고 일회용 용기에 달랑 담긴 한솥 도시락이나 예비군 점심 도시락 수준의 '대충'도 아니다. 기내식은 항공사의 이미지와도 큰 관련이 있다 보니, 세계 각국의 항공사들은 기내식을 최대한 맛있고 싸구려 티 안 나고 실제 식사와 비슷하게 만들려 애쓴다.

하지만 공중에서는 단순히 데우는 수준 이상의 조리를 하기가 힘들고, 또 기내에 배기는 냄새와 뒷처리도 고려해야 하기 때문에 기내식을 한없이 고급화할 수도 없는 노릇이다.

기내식은 일반 식사보다 의도적으로 고지방· 고칼로리를 추구하며 제조된다. 사고가 발생했을 때 극단적인 상황에서 승객의 생존율을 높이기 위해서이다. 한 끼가 거의 1000kcal에 달한다니 말 다 했다. 그리고 지상보다 더 기압과 습도가 낮은 곳에서 먹는 걸 염두에 두기 때문에, 입맛을 돋우려고 조미료와 기름도 더 많이 넣고, 더 짜거나 더 달게 만든다. 보기와는 달리, 기내식만 많이 먹으면 건강에 별로 안 좋을 것 같다.

2. 전투 식량

식량의 조달은 식욕이 왕성한 수많은 장정들을 거느리는 군대를 운영하는 데 결코 소홀히 할 수 없는 중요한 요소이다.
군대에서도 주둔 중이나 평시에는 실시간으로 조리된 밥과 국과 반찬을 식판으로 퍼서 먹는 '일반 식사'가 나온다. 그러나 야전에서 훈련이나 작전 수행 중일 때는 역시 portable한 전투 식량이 배급된다.

야전에서 음식을 취급하는 속도는 행군 속도와도 직접적인 관련이 있다. 전투 식량은 휴대성과 보존성이 좋아야 하고 최소한의 물이나 불로 조리가 가능하며, 정 사정이 여의치 않으면 그냥 날로도 먹을 수 있어야 한다. 체력 소모가 극심한 병사들이 먹는 음식이니, 굉장한 고열량이어야 하는 건 두 말할 나위도 없고.

그러고도 전투 식량은 병사들의 입맛에 착 맞고 절대적으로 맛있어야만 한다. 참혹한 전장에서 병사들에게 일말의 즐거움을 선사하고 사기를 진작시킬 수 있는 거의 유일한 수단은, 밥이라도 잘 먹여 주는 것뿐이기 때문이다. 그러니 알고 보면 총포의 기술 발달에 만만찮게, 식품 가공 기술의 발달도 군의 선진화와 현대화에 굉장히 큰 기여를 한 셈이다.

그러니 전투 식량은 앞서 언급한 기내식만큼이나 조미료가 많이 들어가고, 일반인들이 많이 먹으면 비만에 걸릴 요소가 듬뿍 가미된다. 한국군에서는 굳이 야전에 안 나가고 내무 생활을 하는 중에도 이따금씩 정규 식사 대신에 전투 식량이 병사들에게 식사로 지급되는 때가 있는데, 이는 유통기한이 임박한 전투 식량 재고분을 소진하기 위해서이다.

밀덕 중에는 국군이나 미군의 전투 식량을 구해 먹으려고 벼르는 사람도 있다. 일반 음식보다 열악한 여건에서 먹으라고 만들어진 음식을 일부러 찾아서 먹는 이유는, 자신이 민간인이 아닌 군인이라는 특권 의식을 경험하고 싶어서인 것 같다. 전투 식량은 포장과 내용물 등 봐야 할 게 여럿 있기 때문에, 링크를 하나 소개하는 걸로 그림 소개를 대신하겠다.

참고로 전투 식량은 진짜 비상 식량과는 다른 개념이다. 비상 식량은 추락한 비행기의 조종사나, 조난 당한 선원이 구조될 때까지 무인도나 망망대해에서 생존을 위해서 섭취하는 고농축 영양제 같은 음식이다. 단순히 야전에서 작전 수행 중에 먹는 게 아니라, 작전 수행 중에 돌발상황이 불가피하게 생겼을 때 먹는 것이다. 비상 식량은 먹게 될 일이 없기를 바라면서 만들어지기 때문에 오로지 보존성과 휴대성만이 강조될 뿐, 맛은 고려 대상이 아니다.

3. 우주 식량

우주인은 군인만치 그렇게 격렬한 육체 활동을 하지는 않으므로, 우주 식량은 전투 식량만치 고열량을 추구해야 할 필요는 없다. 하지만 무중력 내지 우주 공간에서는 지상에서처럼 음식 맛이 잘 느껴지지 않기 때문에 우주식은 역시 기내식 만만찮게 조미료 도배가 되어야 한다. 또한 무중력 공간에서 인체가 잃기 쉬운 칼슘 같은 영양소를 우주식이 특별히 보충해 줘야 할 필요도 있다.

사용자 삽입 이미지
다음으로 물리적인 형태를 살펴보면, 우주식은 같은 영양 성분이면 무게와 부피를 줄이는 게 중요하다. 그러기 위해서는 진공 건조가 잘 되어야 하며, 그리고 가루· 부스러기가 날리는 형태여서는 절대로 안 된다. 무중력 상태에서 음식 파편이 날리면 심각하게 골치 아파지기 때문. 그런 게 기계 내부로 빨려들어가 기계의 고장을 야기할 수도 있다.

그러니 초기의 우주식은 닥치고 튜브+빨대 형태였다. 먹을 때 입을 크게 안 벌려도 되고, 파편 유출 사고(?)가 일어날 위험이 가장 적었기 때문이다. 그러나 기계와 영양학적 효율을 위해 맛을 크게 희생한 초기의 우주식은 우주 비행사들의 불만을 야기할 수밖에 없었으며, 기술의 발달 끝에 지금은 어지간한 형태의 음식들은 다 우주식으로 개량이 가능해졌다. 김치, 라면, 불고기, 비빔밥, 미역국 같은 것도 모두 우주에서 먹을 수 있다.

우주식은 무중력 상태에서도 음식과 식기가 흩어지지 않게 식판에 이례적으로 벨크로(찍찍이)와 자석이 붙어 있다.
이렇듯, 비행기 기내식과 군대 전투 식량, 그리고 우주 식량은 대체로 영양이 보강되어 있고 휴대성과 보존성이 강화되어 있다는 큰 공통점이 있으면서 세부적인 조건은 살짝 차이가 있음을 알 수 있다.

Posted by 사무엘

2012/10/07 08:32 2012/10/07 08:32
, , , , , , ,
Response
No Trackback , 4 Comments
RSS :
http://moogi.new21.org/tc/rss/response/741

« Previous : 1 : ... 145 : 146 : 147 : 148 : 149 : 150 : 151 : 152 : 153 : ... 214 : Next »

블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/03   »
          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:
2632806
Today:
1358
Yesterday:
1314