« Previous : 1 : 2 : 3 : 4 : 5 : ... 158 : Next »

요즘 근황, 해 본 일들

1. 국대 떡볶이, 태극기 집회

사용자 삽입 이미지

난 떡볶이와 순대는 그냥 이름 없는 길거리 포장마차에서 먹는 음식이지, 이런 번듯한 식당에서 먹는다고 생각한 적이 없었다.
그런데 이 분야를 개척한 식당 브랜드가 있고, 또 창업주가 사상이 올바르고 굉장히 건전한 분이라는 것을 알게 되었다. 그래서 곧장 친구들까지 데리고 여기를 들러서 음식을 마음껏 사 먹었다.

사용자 삽입 이미지

지난 개천절 오후에는 광화문에서 가히 역대 최다 인파가 결집한 태극기 집회가 열렸다. 정말 발 디딜 틈이 없었다. "레카 탄핵 반대"라는 중대한 이슈가 있었던 2017년 삼일절 때의 초창기 태극기 집회도 이 정도는 아니었던 것 같다.

사용자 삽입 이미지

평소에 정치의 정 짜에도 관심 없던 사람들까지 이렇게 많이 모인 이유는 우파 진영이 이쁜 짓을 했기 때문이 아니며, 특히 할 일 없는 늙은 꼰대들이 일당을 두둑히 받았기 때문은 더욱 절대 아니다.
정치색과 무관하게 대통령이 하는 짓과, 그 당시 법무부 장관이던 작자의 조적조 조로남불 꼬라지, 이놈들의 해도 너무한 가식과 위선과 궤변과 변명이 도저히 눈 뜨고 볼 수 없는 지경이었기 때문이다. 딴 이유는 없다. 그 현실을, 그 팩트를 좌좀 대깨문 나팔문 문슬람들만 파악하지 못하고 있다.

2. 이화장

사용자 삽입 이미지

오랜만에 이화장을 또 찾아가 봤는데 이젠 또 내년까지 공사랜다. 도대체 2년, 3년째 날짜를 고쳐 가며 공사만 계속하고, 정식 개장할 기미가 보이지 않는다.
공사 핑계로 무기한 방치하는 것인지 합리적인 의심이 여전히 해소되지 않고 있다.

3. 용마산 등산

그리고 날씨가 좋을 때 용마산을 오랜만에 다시 올라서 정상까지 가 봤다.
첫 개척이 아니고 야영을 한 것도 아니니, 중요도가 별도의 글로 올릴 정도까지는 아니다. 그러니 그냥 근황 소식에다가만 언급하고 넘어가고자 한다.

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

용마산은 서울 시내에서 접근성이 아주 좋으며, 심하게 높지 않으면서 돌산이어서 내부 경치가 좋다.
그리고 등산하는 동안 대부분의 구간에서 산 바깥을 훤히 내려다볼 수 있다. 특히 동부 간선 도로 구간이 몽땅 내려다보인다. 세상에 이런 산은 흔치 않다.
산을 오르면서 저 아래의 팔각정을 거쳐 갔는데, 산행을 계속하니 그 팔각정도 이렇게 내려다보는 대상이 됐다.

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

산 속 풍경은 대략 이렇고..

사용자 삽입 이미지

용마산에서는 근처의 배봉산을 내려다볼 수 있었다. 사실 본인은 배봉산에서도 언젠가 저기 용마산을 다시 올라 보고 싶다는 생각을 했었다.

사용자 삽입 이미지

용마산 정상에는 예나 지금이나 표지석과 옛 측량 시설, 그리고 사진에는 나오지 않았지만 태극기 깃대가 있었다.

사용자 삽입 이미지

저건 아차산 정상이고..

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

산기슭에 파고든 저 마을이 바로 아치울 마을이다. 본인은 아차산을 답사하면서 저리로 하산한 적이 있었다. 그리고 마을 가까이 있는 희고 둥근 모양의 교량은 구리암사대교이다.

4. 노들섬

서울 한강대교는 중앙에 노들섬이라는 하중도를 지난다. 거기는 먼 옛날엔 사유지이다가 국가에서 거금을 주고 매입한 뒤, 해마다 항공 사진 모습이 바뀔 정도로 뭔가를 열심히 짓고 부수기를(...) 반복하는 듯했다.
그러다가 결국은 오페라 하우스(??)가 만들어져서 지난 9월 말에 개장했다. 그래서 본인도 이에 흥미를 느끼고 노들섬을 다녀왔다.

노들섬의 자가용 접근성은 남산과 동일하다. 한강대교에서 노들섬 내부로 들어가는 차도와 주차장이 있긴 하지만, 공간이 비좁은 관계로 등록된 업무 차량만 드나들 수 있다. 일반 방문객이 차를 저기에다 댈 수는 없다.
한강대교에서 제일 가까이 있는 주차장은 이촌 한강 공원에서 제일 서쪽의 제4 주차장이다. 거기는 풀밭이나 편의점 등 공원 본연의 시설과는 멀리 떨어져서 접근성이 안 좋지만, 한강대교와의 접근성은 제일 좋다. 거기서 한강대교를 근성으로 5~10분 내지 걸으면 노들섬에 갈 수 있다.

심야나 이른 새벽.. 그리고 5~10분 정도 잠깐 정차하는 거라면 한강대교의 길가에다 잠깐 차를 세울 수도 있겠지만 그리 권장하지 않는다. 그리고 근처 중앙선의 안전지대에도 차를 세울 수 있지만, 이 역시 원래는 불법이고 다른 대형 트럭이나 견인차가 세워져 있기도 하기 때문에 좋은 방법이 못 된다.
그냥 지하철 9호선 노들(강남) 내지 4· 6호선 삼각지 역(강북)에서 버스를 타고 오는 게 제일 속 편하다.

사용자 삽입 이미지

뭐, 아직 공사가 덜 끝난 부분이 많고 생각만치 볼 건 없었다. 무슨 선유도 정도의 퀄리티는 아니다. (풀밭, 산책로..)
특히 교량의 동쪽 말고 건너편 서쪽은 아직 풀숲 밀림(...)인데 거기도 뭘 더 만들 생각이 있는 건지 모르겠다.
그리고 이 원등 상사 동상도 어디로 사라졌는지 궁금하다.

더 욕심을 내자면, 서강대교의 밤섬도 이렇게 개방됐으면 좋겠다. 믿어지지 않지만 옛날에는 거기에 아예 사람이 살고 마을까지 있었다니 말이다. (교량 따위 없으니 본토와는 나룻배로 드나들었고..;; ㄷㄷ)

Posted by 사무엘

2019/12/09 08:36 2019/12/09 08:36
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1692

우리나라에 지금과 같은 고속도로 번호 체계는 2001년에 전면 개편되어 그 해 8월 24일부터 시행되고 있다.
이 체계는 무식하게 개통된 순서대로 번호를 매기는 게 아니라, 숫자의 번호만 보고도 이 도로가 횡축인지(0부터 시작하는 짝수) 종축(5부터 시작하는 홀수)인지, 대략 어느 위치를 지나는지(대소 비교), 간선인지 지선인지(2~3자리), 지역 순환선인지 같은 것을 얼추 알 수 있게 했다.

그렇기 때문에 이 체계는 첫 도입됐던 당시에는 굉장히 참신하고 합리적이라는 인상을 주기에 충분했다. 마치 2004년 버스 노선 개편처럼 말이다. 홀짝으로 종축· 횡축을 구분하는 것은 기존 국도의 번호 체계도 마찬가지이긴 한데, 이제 고속도로의 번호도 그런 관행을 더 깔끔하게 따르게 되었다. 고속도로도 앞으로 국도처럼 거미줄처럼 촘촘하게 많이 깔릴 것을 미리 염두에 둔 것이다.

이 체계의 큰 특징은 개통 시기나 사업 주체가 다르더라도 같은 선형이면 동일한 도로라고 보고 동일한 번호를 부여했다는 것이다.
그래서 논산-천안 고속도로는 혼자 따로 노는 민자이지만 기존 호남 고속도로와 동일하게 25번이며, 부산-대구 민자 고속도로도 기존 중앙 고속도로와 동일하게 55번이다.

이때 서울-안산 고속도로가 서해안 고속도로(15)로 편입됐으며, 반대로 처음에 서해안 고속도로 소속이던 안산-신갈 구간은 깔끔하게 영동 고속도로(50)의 서쪽 구간으로 넘겨서 각각 종축과 횡축으로 선형을 일치시켰다.

이는 마치 서울 지하철 4호선에다가 코레일 과천선과 안산선을 몽땅 하늘색으로 엮어서 '수도권 전철 4호선'이라고 표기한 것과 비슷한 통합이다. 어차피 열차들이 직통 운행을 하니까 말이다. 지하철과 국철의 구분을 없애고, 서울 지하철 1호선에서 지하철 고유색인 빨강이 사라진 게 2000년 4월부터이다.

그리고 철도계 역시 지금 당장이 아니더라도 미래에 동일선상의 직결 운행이 예정된 전철들은 같은 색깔로 표기하고 있다. 경의선과 중앙선이 대표적인 예이고, 지금 수인선도 분당선과 동일하게 노란색으로 표기하고 있다.
김포 경전철의 경우, 비록 시스템적으로 서울 지하철 9호선과 직결 운행을 할 수는 없지만 개념적으로 9호선의 연장선상이라고 보고 9호선과 동일한 금색/커피색을 내세우는 중이다.

시스템이 그런 식으로 바뀌었는데..
고속도로의 경우 요즘 하도 많이 생기고 있어서 정신이 없다. 옛날의 경부라든가 서해안, 중앙, 중부내륙처럼 장거리 간선들을 작정하고 바둑판 형태로 만들던 시절은 이제 지났다. 그 대신 여기저기 찔끔찔끔, 복잡한 선형으로 개통하는 게 많은지라, 번호를 어떻게 부여하면 좋을지 직관적으로 예상이 안 되는 게 늘었다. 가령, 15 서해안으로도 모자라서 151(서천-공주)에다 17(평택-파주), 171(용인-서울) 등등..
전라선 철도의 고속도로 버전인 순천-완주는 27이고, 구리-포천은 29..

사실, 제2중부 고속도로도 지금 같은 컨벤션이라면 37보다는 351이 더 어울리지 않나 싶다. 결코 짧지 않은 영천-상주조차 301이 됐는데 말이다. 그리고 두 자리 수 번호 중에 x1, x3은 앞으로 쓰일 일이 있으려나 모르겠다.

기왕 이 번호 체계가 깔끔하게 유지되려면 미래에 건설될 고속도로들의 전체 큰 그림에 대한 굉장한 선견지명이 있어야 한다. 하지만 이게 현실적으로는 쉽지 않을 것이다. 프로그래밍에다 비유하면, 미래에 구현될 기능까지 다 염두에 두고 부모 클래스와 가상 함수들을 미리 세밀하게 설계하는 것과도 같은 일이다.

그리고 끝으로, 고속도로의 이름은 기점과 종점 도시를 연결하는 형태로 지어지곤 하는데, 어디가 기점이고 어디가 종점일까? 철도만 해도 역의 번호를 부여하는 순서가(상· 하행) 노선별로 굉장히 케바케 뒤죽박죽인데, 비슷한 문제가 고속도로의 작명 방식에도 존재한다.
가나다 순서인지, 서울에서 가까운 순서인지, 바다에서 가까운 순서인지.. 301은 공식 명칭이 영천-상주가 아니라 상주-영천인 걸 보면.. 도대체 원칙이 무엇인지 난 잘 모르겠다.

옛날에 경부 고속도로가 처음 생겼던 시절에는 '간'이라는 단어까지 있어서 '서울-부산간 고속도로'였는데, 그게 '경부 고속도로'라고 축약되었고, 이후의 고속도로들은 다시 도시 이름을 full로 붙이는 게 유행이 됐다.
가령, 60번 고속도로는 잠시 '경춘 고속도로'라고 불린 적이 있었지만 더 연장된 뒤부터는 '서울-양양 고속도로'가 됐다.

사실, 한국 도로 공사에서는 궁극적으로는 고속도로에도 이름을 없애고 국도처럼 번호만으로 모든 것을 식별하려 하고 있다. 물론 예전의 오랜 관습이라든가 사업 구간의 차이에 따른 구분 때문에 이름이 가까운 미래에 완전히 없어질 것 같지는 않지만 말이다.
그러고 보니 이름뿐만 아니라 재래식 톨게이트도 없애는 게 궁극적인 장기 계획이니.. 우리나라의 교통 시스템은 이것저것 바뀌어야 할 것들이 여전히 남아 있다.

개인적인 생각은 이름 다음에는 '고속도로'라는 칭호를 붙이고, 번호 다음에는 '고속국도'를 붙이는 게 어떨까 싶다. 예를 들어 "호남 고속도로와 논산천안 고속도로는 모두 고속국도 25호선(또는 25번 고속국도)에 속한 구간이다" 같은 식이다.

한편, 도로 말고 서울의 한강 교량들은 처음에는 개통 순서대로 "제n 한강교"라고 이름을 붙여 왔다. 그러다가 다리의 수가 늘어나고 번호가 뒤죽박죽 꼬여 가자, 번호만 상류에서 하류 순으로 오름차순 리넘버링하는 식으로 개편하지 않았다. 번호 자체를 없애고 마포, 반포, 한남처럼 교량마다 고유한 이름을 붙이게 됐다. 1980년대에 한강 종합 개발 사업을 시작하면서 취한 조치이다.

교량이야 도로처럼 선이 아니라 강의 특정 지점이라는 점에 가까운 개념이니, 고유한 이름이 더 설득력이 있을 것이다. 고속도로도 나들목들까지 이름을 싹 없애고 번호만 붙이지는 않으니까 말이다. 다만, 나들목도 외국인이 알아보기 쉽게 번호를 병기하자는 의견도 소수나마 있다.

Posted by 사무엘

2019/12/07 08:33 2019/12/07 08:33
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1691

1. 부활절, 이스터, 유월절 / 주일, 안식일

이전에도 몇 차례 언급한 적이 있지만..
킹 제임스 성경은 지구상의 성경 역본들 중, 행 12:4에서 유월절 대신 '이스터'라는 단어를 사용한 유일한 역본이다.

이건 성경 역본 문제에서 자주 다뤄지는 원문· 본문 계열이 아니라, 번역 단계에서의 문제이다. 말이 통째로 변개되거나 삭제된 건 아니고 똑같이 그리스어 '파스카'인데, 그냥 평범하게 유월절이냐, 아니면 이스터이냐로 번역이 갈린 것이기 때문이다.

KJV의 '이스터'는 예수님의 부활 사건과 타 이교도들이 지키던 이스터가.. 어쩌다 보니 날짜만 좀 가까울 뿐 본질은 서로 무관한 별개의 사건임을 알려주는 "신의 한수"가 가미된 탁월한 번역이다! 내가 이런 성경을 알게 된 건 감사와 경이로움 그 자체이다. 봄의 여신이니, 니므롯-세미라미스 패밀리니 뭐니 하면서 놀던 pagan 이스터가 주님의 부활하고 어찌 같을 수가 있겠는가?

내가 수인선의 복선전철 부활을 기념하는 철도교 신자이고, 아직 구원받은 크리스천은 아니라고 치자. 그런데 나중에 예수를 믿게 됐다.
가만히 생각해 보니 예수님의 부활이랑, 폐선됐던 수인선 협궤 열차의 복선전철 부활이 개념적으로 비슷해 보인다. 그래서 교회에서도 수인선이 개통한 날짜 근처의 주일을 부활주일로 설정하고 부활 찬송 부르면서 예배 드리고.. 이스터 에그 대신 열차 장난감을 나눠 준다고 생각해 보자.

예수님의 부활을 기리는 거니 막 나쁘다고 할 수는 없지만.. 뭔가 짬뽕이 되고 앞뒤가 안 맞고 이상하다는 느낌이 팍팍 들 것이다. 약간 어거지 같은 비유를 동원했지만 부활절이란 게 위상과 의미가 딱 저렇다는 것이다.

사실 신약 크리스천들은 굳이 이스터니 부활절 따위가 없어도 예수님의 부활 기념은 암묵적으로 늘 해 오고 있다. 매주 첫째 날 일요일에 교회에 모이는 것 자체가 주님의 부활한 요일을 기리는 것이기 때문이다.
그리고 이것은 주일/일요일이 유대인의 안식일과도 개념적으로 다른 날임을 분명히 보여준다! "안식일이 끝나고 주의 첫날이 밝아오기 시작할 때에..." (마 28:1; 막 16:2, 눅 24:1, 요 20:1도 참고) 주일은 안식일이 아니다.

KJV에 적대적인 사람들은 나와는 당연히 반대로 주장한다. KJV에만 들어있는 단어들은 원문에 없다가 후대에 추가된 것이고, '이스터'는 오역이라는 식으로 반박한다. 마음대로 생각하시길..
성경에 따르면 베드로는 무교절 기간에 체포됐는데(행 12:3), 무교절은 유월절이 끝난 뒤의 이벤트이다. 그런데 유월절이 끝난 뒤에 베드로를 끌어내는 건.. 그럼 그건 설마 내년 유월절인 걸까? 이것도 생각할 점이다.

종교 개혁자의 신앙을 계승한다면서 정작 종교 개혁자가 전해 준 계열의 성경을 이단시하고, 차이가 나는 내용은 후대에 첨가된 것일 뿐이라고 우기는 건.. 뭐랄까 할배와 원조가카의 공은 다 누리고 편하게 살면서 그 사람들이 못한 것만 욕하는 것과 비슷하고, 고기는 좋아하면서 도축업자들은 천시하는 것과 비슷한 앞뒤가 안 맞는 모습이다.

2. 미스터리와 씨크릿 (신비 vs 비밀)

미스터리란.. 인간의 이성이나 논리로 이해가 안 되는 엄청나게 대단한 불가사의, 미제 사건 같은 걸 가리킨다. 해결되고 풀리는 건 대체로 좋은 현상이다.
그 반면, 씨크릿은.. 그냥 아무나 알 수 없고 특정 계층만이 접근 가능한 정보를 가리킨다. (1) 몰랐을 때는 답답해서 환장하겠지만 알고 나면 별것 아님, (2) 잘못 누설되고 발설되면 누군가가 곤란해질 수 있다는 뉘앙스가 좀 담겨 있다.

물론 자연과학 분야에서는 둘이 별 구분 없이 섞여 쓰이기도 한다.
"퀴즈 탐험 신비의 세계"라든가 "생명 영원한 신비"라는 TV 프로가 있었고,
한편으로 대전 엑스포 주제가 "그 날은"의 2절 가사에는 "우주 안에 감추어진 비밀을 차근차근 벗겨 가 보면"이라는 문구도 있다.

"달 뒷면에는 무엇이 있을까? 달 뒷면의 XX" 안에는 비밀도 들어가고 신비도 들어갈 수 있을 것 같다.
비밀은 인간의 입장에서 무진장 궁금하다는 관점에서, 그리고 신비는 달이 지구와는 완전히 다른 경이로운 장소라는 관점에서 말이다.

하지만 "성서 초등학교 개구리 소년 5명이 정확하게 어떻게 죽은 걸까, 영등포 노들길 살인 사건의 범인은 누굴까?",
이런 건 미스터리라고 하지 비밀 사건이라고 하지는 않는다.
반대로 내 컴퓨터의 로그인 패스워드를 갖고 신비라고 말하지도 않는다.

성경에는 '경건의 신비'(예수님의 성육신, 딤전 3:16), '불법의 신비'(살후 2:7), 이스라엘의 신비(롬 11:25), 큰 음녀 바빌론의 신비(계 17:5-6) 등의 여러 미스터리들이 언급돼 나온다.
하지만 대부분의 성경들은 이 단어가 신비 대신 비밀이라고 번역되어 있다. 저런 것들을 미스터리라고 읽는 사람과 씨크릿이라고 읽는 사람은 이런 어감의 차이가 쌓이면서 성경관이나 신학 노선이 달라지게 될 것 같다. 몇 가지 예를 더 들면 다음과 같은 것들이 있다.

  • 구원받지 못한 사람이 죽어서 가는 곳은 명백하게 hell이지, 스올, 하데스, 무덤 등등의 이상한 곳이 아니다.
  • 성경이 말하는 악한 마귀는 demon이 아니라 devil이다. 흥미롭게도 월트 디즈니 포카혼타스에서는 Savage 노래에 두 단어가 모두 나오더라. 원주민들은 dirty stinking devil, 백인은 pale-faced demon이라고..;;
  • 성경을 호러물처럼 읽는 사람들의 편견과 달리, 성경에는 귀신이나 유령 같은 건 없고(마 14:26, 욥 4:15), 그냥 영이 있을 뿐이다. 한편으로 영과 혼은 서로 다른 개념이다. 이걸 모르면 영적인 영역과, 단순히 정신적인 영역을 구분하기도 어려워진다!
  • 성경에서 단순히 피고용자(employee), 부하, 하인을 가리킬 때 사용한 용어는 노예가 아니라 그냥 종(servant)이다. 엡 6:5, 골 3:22, 딛 2:9 같은 구절 말이다.
  • 끝으로, 성경이 말하는 사색 방법론은 묵상이지, 명상이 아니다. 뉴에이지 같은 데에 너무 심취해 있으면, 창 24:63에서 이삭이 저녁에 무슨 요가나 파룬궁 수행이라도 하러 들판에 나간 것처럼 생각하기 쉽다.;; -_-;;

송명희 "그 이름"에서 가사가 "그 이름 속에 있는 비밀을.."이라고 쓰여진 것도 이 용어의 번역과 결코 무관하지 않을 것이다.

3. 나열과 인과 관계

  • "고통을 늘리고 수태를 늘리고"이다. (창 3:16) multiply thy sorrow and thy conception
  • "물에서 나고 성령에서 나서 총 두 번 태어나고"이다. (요 3:5) be born of water and of the Spirit
  • 예수 믿으면 네가 구원받고, 그 뒤에 복음화가 진행되면 네 집안 사람들도 뒤이어 예수 믿어서 구원받는다. (행 16:31) thou shalt be saved, and thy house

수태의 고통을 늘린다는 얘기가 아니다. (성경이 말하는 건 '합집합'이지, 이런 교집합이 아님)
물과 성령을 동시에 동원해서 태어난다는 얘기가 아니고,
네가 구원받는 덕분에 네 집도 덩달아 자동으로 싸잡아 구원받는다는 얘기도 아니다.
둘을 따로따로 구분해서 봐야 한다.

4. 휴거 몸 부활 관련 찬송

찬송가 책을 아무거나 펴서 분류별 차례를 보면, 끄트머리에는 가사가 미래 시제인 것들.. 즉, 재림, 천국, 내세를 다룬 곡들이 꼭 있다.
사실, 다른 카테고리에 속하는 찬송가 중에서도 '마지막 절'은 그런 미래를 다루는 가사가 써져 있기도 하다.

가령, "내 평생에 가는 길 순탄하여"는.. 전반적으로야 명백하게 지금 현재의 '위로와 평안' 카테고리에 속하지만, 마지막 4절은 "공중 나팔 소리" 운운하면서 예수님 재림을 다룬다. 그러면서 그때도 나는 평안할 거라고 노래한다.
이런 식으로 가사가 총 n절 있는 찬송가라면, 1~n-1절은 평범한 내용이다가 마지막 n절은 그렇게 미래 시제이거나, 혹은 불신자에게 구원을 초청하는 패턴인 것을 어렵지 않게 찾을 수 있다.

그런 찬송가 가사들이 다루는 미래는 크게 두 가지로 나뉜다.
(1) 내가 죽어서 곧장 셋째 하늘로 가서 주님을 뵙는 것 (키워드: 새 예루살렘, 진주 문, 황금 길 등등~)
(2) 아니면 나는 관심 대상이 아니고 예수님이 그냥 공중이든 지상이든 뭉뚱그려 재림하시는 것 (키워드: 천년왕국, 다스림, 심판)

(1)은 그 특성상 기독교식 장례식 때도 즐겨 불린다. 다만, 가사가 묘사하는 장면은 계시록 21장 이후 천년왕국이 다 끝난 영원인 경우가 대부분이다. 한 마디로 먼 미래다. 그 장면이 비주얼이 뽀대가 나기 때문이며, 안식과 소망을 노래하는데 그 전 단계인 그리스도의 심판석 같은 걸 굳이 언급할 필요가 없기 때문이다.

(2)에 속한 곡은 비교적 가까운 미래를 다루지만 가사가 교리적으로 맞는지 잘 분간할 필요가 있다. 가령, "오랫동안 고대하던 천년왕국 이를 때"는 시간 순서가 거꾸로 배열돼 있다. (교회는 천년왕국보다 훨씬 전에 먼저 들려 올라가는데??)

이런 것에 비해.. 살전 4와 고전 15를 근거로 (3) 성도의 몸의 부활(예수님의 부활 말고), 휴거, 예수님의 공중 재림을 직접적으로 묘사한 곡은 드문 편이다. (키워드: 부활, 깨어남, 몸의 변화, 일어남, 나팔 소리, 공중..)

하긴, 잘못된 종말론 미혹이 야기한 각종 병크 때문에 요즘은 종말 자체에 대한 믿음과 소망이 기독교계에서 매우 무뎌져 있다. 그리고 교회 시대 전체를 통틀어서 살아서 몸의 변화와 휴거를 직접 경험할 사람의 비율은 마치 예수님 동시대의 사람만큼이나 매우 미미하기도 할 것이고 말이다.

그래서 본인은 지난 여름에 청년부 특송 때 특별히 (3)에 속하는 곡을 엮어서 불러 보기도 했다. "하나님의 나팔 소리 천지 진동할 때에" + "부활 아침 돌아오면" + "금빛 찬란한 아침에"의 순으로.
혼이 구원받아서 하늘로 간다는 것에 비해, 미래에 "몸도 영광스러운 몸으로 부활하고 변화된다" + "특히 죽음을 아예 맛보지 않고 들려 올라가는 사람도 있을 것이다"까지 늘 염두에 두는 신자는 그리 많지 않은 것 같다.

Posted by 사무엘

2019/12/04 08:35 2019/12/04 08:35
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1690

1. 경부 고속도로 금토 JC

용인-서울 고속도로(171)가 개통한 지도 어언 10년이 넘었다. 2009년 7월이니 서울 지하철 9호선의 1차 개통일과 아주 비슷하다.

근처의 경부 고속도로는 수원 이북으로 서울 TG를 넘어 판교 부근까지 10km가 넘게 곧은 직선이다. (다만, 오르내리막 기복은 이따금씩 있음) 한때 비상 활주로를 표방했을 정도로 직선이며, 게다가 지리적으로도 경도의 변화가 거의 없이 위도만 변하는 그 직선이다.
그에 비해 서쪽의 용인-서울 고속도로는 서수지-서분당 등의 구간도 적당히 구불구불한 곡선인 것이 인상적이다.

또한, 얘는 길이가 어중간하게 짧아서 휴게소가 전무한 건 그렇다 치더라도, 다른 고속도로와 연결되는 분기점이 전혀 없는 것도 이례적이었다. 허나 바로 작년 말에 경부 고속도로와 연결되는 금토 분기점이 개통되면서 이 역시 옛말이 됐다.

두 고속도로는 X자 모양으로 교차한다. 경부 하행에서 용인 하행으로 갈아탈 수 있고, 반대로 용인 상행에서 경부 상행으로 갈아탈 수 있다. 다시 말해, 헌릉 IC를 거치지 않고도 용인 고속도로를 드나들 수 있게 해 준다.
금토 JC는 이 두 길목만 존재하는 아주 자그마한 분기점이다. 하행이 더 만들기 쉬워서 작년 여름에 먼저 개통하고, 상행은 산을 깎고서 270도 꼬부랑 턴을 해야 하는 관계로 어려워서 반 년 남짓 늦게 개통했다.

사용자 삽입 이미지
나머지 방향이야.. 뭐 상행과 하행을 전환하는 건 말할 것도 없고, 용인 하행에서 경부 하행으로 간다거나, 경부 상행에서 용인 상행의 헌릉IC 방면으로 가는 길목도.. 딱히 가성비가 맞지 않다고 여겨져서 만들지 않았다. 정말 최소한의 조치만 취한 셈이다.

금토 JC는 외곽순환 고속도로와 교차하는 판교 JC를 제치고, 경부 고속도로의 최북단에 있는 분기점이라는 타이틀을 획득했다.
뭐, 판교 JC는 X가 아닌 +형이며, 경부에서는 상행만이 저쪽으로 갈아탈 수 있고, 외곽순환에서는 경부의 하행으로만 갈아탈 수 있다는 특징이 있다.

2. 톨게이트가 이원화된 IC

폐쇄식 고속도로에는 고속도로와 일반 도로를 연결하는 IC(나들목)가 있고, 그 길목에는 톨게이트(요금소)가 있다. 일반적으로는 1IC 1TG가 원칙(?)이며, 고속도로에 진입한 차량은 톨게이트를 통과한 뒤에 상· 하행 방향을 선택하여 분기하게 된다.

그런데 드물게 톨게이트가 둘 달린 IC도 있다. 다시 말하지만 한 지역에서 동서남북 접두사가 붙은 IC가 여럿 흩어져 있는 것 말고, 한 IC에 대한 톨게이트가 복수인 것 말이다.
경부 고속도로 수원신갈 IC의 경우.. 교통량의 증가를 감당치 못해서 원래 있던 비스듬한 IC는 고속도로 진입 전용으로 바꾸고, 더 남쪽에 시내 진출 전용 IC를 추가로 만들게 됐다. 즉, 수원신갈 TG 쌍은 각 방향별 일방통행 형태로 바뀌었다. 2010년대의 일이다.

사용자 삽입 이미지

그리고 중앙 고속도로 제천 IC도 톨게이트가 둘인데, 여기에는 좀 더 기괴한 사연이 있다.
지금으로서는 믿기 어렵지만, 처음에 중앙 고속도로의 그쪽 구간은 왕복 2차로에다가 '개방식' 요금제 형태로 건설되고 있었다. 장거리 간선 고속도로를 도대체 무슨 생각으로 그렇게 만들기 시작했나 모르겠다. 중앙 고속도로가 최초로 만들어지던 모습을 보는 건 마치 스타크래프트나 Doom의 먼 개발 초기 알파 버전을 보는 듯한 느낌과 비슷하지 싶다.

그러다가 한창 건설을 하던 중에 감사원의 지적으로 인해 법이 바뀌었다. 1992년 4월엔 앞으로 모든 고속도로는 처음부터 최소한 4차로 이상의 형태로 만들 것이고 지금 당장 건설 중이거나 건설 예정인 고속도로에도 이 원칙을 소급 적용한다는 건설부의 방침이 내려왔다. 그래서 중앙 역시 지금처럼 폐쇄식 4차로라는 정상적인 형태로 뒤늦게 뜯어고치게 됐다.

원래 중앙 고속도로(수직)의 제천 IC 밑으로는 국도 5호선(수평)이 지났으며, 이들은 별다른 톨게이트 없이 평범하게(?) 입체 교차하고 있었다. 하지만 고속도로를 뒤늦게 확장하고 폐쇄식으로 고치면서, 고속도로와 교차하던 국도의 양 옆에 톨게이트가 설치됐다.

이미 입체교차로 자체는 건재하고 있으니 방향별로 단일 톨게이트로 안내하는 길을 따로 또 만드는 수고를 하지는 않은 것이다. 국도의 일부 구간이 톨게이트로 가로막혀 버렸기 때문에 국도 5호선의 기존 구간은 장평천 이남으로 살짝 이설되었다.

뭐, 당연한 말이지만 서쪽과 동쪽의 어느 톨게이트로 진입하더라도 중앙 고속도로의 상· 하행 아무 방향으로 갈 수 있다. 고속도로에서 진출 역시 상· 하행 어느 쪽에서도 동쪽과 서쪽 아무 톨게이트 방면으로 진출할 수 있다.
지도를 보면 인터체인지가 사통팔달 통하는 전형적인 클로버형인데, 서남쪽만(3사분면..;; ) 장평천 때문에 공간이 부족해서인지.. 고속도로 하행에서 국도 동쪽으로 진출하는 연결선의 선형이 좀 다르다.

사용자 삽입 이미지

이렇듯, 교통량 증가 때문이든, 출생의 비밀 때문이든 톨게이트가 2개 이상이 된 고속도로 나들목이 또 있는지 궁금하다.

  • 중부(35): 꽤 옛날에 만들어졌지만 서울· 수도권과 가까운 위치 덕분에 2차로 따위는 고려하지 않고 애초부터 4차로로 만들어졌다. 다만, 이것마저도 너무 비좁아져서 제2중부(37)를 또 만들게 됐을 뿐이다.
  • 중부내륙(45)/통영대전(35)/서해안(15): 역시 처음부터 4차로로 만들어졌거나, 타이밍의 특성상 도중 설계 변경의 타격을 별로 입지 않은 듯하다.
  • 옛 88 올림픽(12): 전구간 2차로로 당당히 만들어졌으며, 알다시피 도로의 저퀄리티와 높은 사고율 때문에 2010년대에 이르기까지 큰 악명을 떨쳤다. 영동 고속도로도 마찬가지였지만 얘는 88보다는 훨씬 일찍 새 도로로 대체됐다.
  • 중앙(55): 얘만 타이밍이 영 좋지 않았는지 거의 혼자 독박 쓰고 낭패를 본 듯하다. 1990년대 초까지 2차로로 길을 한창 닦고 있던 중에 대판 뜯어고쳐야 했다.

그러고 보니 우리나라에 처음부터 6, 8차로급으로 지어진 고속도로는 생각보다 드문 것 같다.
경부 고속도로 서울-수원 구간은 4차로이다가 6을 거치지 않고 곧장 8차로로 확장되고 그 뒤에 서울 구간은 10차로로까지 확장되긴 했지만, 오리지널은 4였다.

외곽순환 고속도로도 지금이야 전구간이 8차로이고 동남쪽의 중부 고속도로와 만나는 일부 구간은 10차로이기까지 하다만.. 먼 옛날에 판교-구리 고속도로 형태로 처음 만들어질 때는 당시 대한뉴스 화면을 보면 역시나 4차로(...)였다. 그나마 용인-서울은 비교적 최근에 그것도 수도권에 건설된 덕분에 처음부터 6차로였다.
철도를 처음부터 복복선으로 부설하는 경우가 거의 없는 것만큼이나.. 기존 도로를 연장· 확장하는 게 아닌 이상 처음부터 왕창 거대하게 만드는 것은 쉬운 일도, 흔한 일도 아닌 듯하다.

다만, 요즘 세상에 어지간한 오지가 아닌 이상이야 고속도로를 겨우 2차로로 만드는 건, 요즘 세상에 철도를 꼴랑 단선으로 만드는 것과도 같은 소탐대실 단견일 것이다.
가령, 고속도로는 아니지만 '대교'라는 이름이 붙었으면서 왕복 2차로인 교량으로 내가 아는 건, 민통선 안의 교동도를 연결하는 교동대교가 유일하다. 그 정도라면 교통 수요 대비 원가 절감을 위해 2차로로 만든 걸 납득하겠다.;;

3. 천안에 있는 휴게소와 나들목

천안은 철도에서는 장항선이 분기하는 곳이며, 고속도로에서는 호남 방면의 논산천안 고속도로가 분기하는 곳이다.
그리고 북부의 북천안 IC 인근은 수원-신갈과 마찬가지로 과거의 비상 활주로 공용 구간이었기 때문에 도로가 곧은 직선이기도 하다.

경부 고속도로의 행정구역상 천안 구간에는 북쪽에서 남쪽 순으로 나열했을 때 입장, 망향, 천안삼거리, 천안이라는 4개의 휴게소가 있다.
그런데 얘들은 그 순서대로 각각 상행, 하행, 상행, 하행에만 있다. 양방향에 모두 존재하는 휴게소는 없다.
또한, 각 휴게소들 사이에 입장-(북천안)-망향-(천안)-천안삼거리-(목천)-천안의 순으로 IC(나들목)가 등장한다는 것도 주목할 점이다.

입장 휴게소는 자가용보다는 대형 화물차의 운전자들을 염두에 두고 만들어져서 주차 공간이 넉넉하며, 주변의 다른 휴게소들보다 인지도가 낮은 덕분에 상대적으로 덜 혼잡하다는 장점이 있다.
고속도로 휴게소는 건물과 주차장이 도로와 일렬로 나란히 배치되어 있곤 한데, 얘는 휴게소 부지가 도로와는 수직으로 확보되어 있다. 휴게 시설들이 고속도로에서 더 멀리 떨어져 있다는 뜻이다.

망향 휴게소는 인근에 '망향의 동산'이라는 일종의 국립묘지가 있어서 이름이 저렇게 붙었다. 저기는 국가에서 관리하는 묘지일 뿐, 현충원은 아니기 때문에 꼭 국가유공자나 군· 경만 묻혀 있는 건 아니다. 그 대신 타지에서 죽은 재외 동포가 묻히는데, 이런 이유로 인해 1983년 대한 항공 007편 격추 사고 희생자 위령비도 저기 안에 세워져 있다고 한다. (양재 시민의 숲에 있는 건 1987년의 858편 폭발 사고 희생자 위령비)

천안삼거리 휴게소는 이름은 많이 들어 봤지만 다른 특이점은 딱히 없는 것 같다. 저기가 무슨 계기로 언제부터 호두과자로 유명해졌나 모르겠다.

경부 고속도로 천안 북부 구간은 마치 수원-신갈-죽전 일대처럼 도로가 북쪽으로 곧게 쫙 뻗어 있어서 과거에 비상 활주로로도 쓰이던 구간이었다. 하지만 요즘은 고속도로를 활주로로 공용하던 관행이 없어졌으며, 거기에는 북천안 IC까지 생겼기 때문에 비행기가 뜨고 내릴 가능성은 더 확실하게 없어졌다.

끝으로.. 영동 고속도로의 마성 IC가 에버랜드를 위한 IC라면, 남쪽에 있는 목천 IC는 독립 기념관을 위한 IC라 해도 과언이 아닐 것이다. 실제로 마성은 1976년에, 그리고 목천은 1986년에 해당 시설들이 생긴 뒤에 추가로 만들어졌다.

4. 중앙 고속도로 단양 휴게소

지난 추석에 고향을 다녀올 때는 정체 구간을 우회하느라 모처럼 중앙 고속도로를 실제로 달려 보게 됐다.
그 와중에 화장실(급똥...;;ㄲㄲㄲ) 때문에 단양 휴게소를 우연히 들렀는데, 마침 얘도 공교롭게도 평범한 휴게소가 아니라는 걸 알게 됐다.

본선상에서 휴게소 건물이 전혀 보이지 않으며, 휴게소 진입로가 무슨 어지간한 나들목/톨게이트의 진입로 같았다. 거의 ? 모양으로 한참을 꼬불꼬불 올라간 뒤에야 휴게소 건물이 나타났다.
휴게소를 언덕을 깎아서 옆에 가까이 만든 게 아니라, 그냥 언덕 위에다 만들었다. 그래서 본선과의 높이 차이를 극복하기 위해서 진출입로가 불가피하게 길어진 것이다. 이런 휴게소는 태어나서 처음 봤다.

휴게소를 굳이 그런 형태로 힘들게 만든 이유는? 여기 일대는 주변이 온통 산이어서 다른 선택의 여지가 없었기 때문이다. 오죽했으면 상행과 하행이 서로 7km에 가깝게 떨어져 있으며, 둘 다 형태가 저렇다.;; (특히 경부 고속도로 입장 휴게소처럼 휴게소 건물이 고속도로와는 수직으로 배치) 이럴 거면 얘도 상· 하행 통합으로 큼직한 놈 하나만 만들지 싶은 아쉬움이 남는다.

단양 휴게소는 접근하기가 조금 힘든 대신, 다른 여느 휴게소에는 없는 유니크템을 보유하고 있다.
하행 방면의 경우, 건물 뒤에 넓은 풀밭과 '힐링 테마 공원'이라는 게 있다. 자그마한 야외 민속 박물관 컨셉으로 물레방아, 절구, 장승, 각종 뚝배기 같은 게 꾸며져 있어서 쉬어 가기 좋다.

그리고 상행은.. 아예 인근의 언덕 꼭대기에 있는 국보 제198호 "단양 신라 적성비"에 다녀올 수 있다. 휴게소 내부에 저렇게 언덕을 오르는 길과 안내판도 있다.

사용자 삽입 이미지

이건 한때 신라가 여기까지 영토를 확장했었다는 땅밟기 인증 표식이다.
경부 고속도로의 휴게소에서 고속도로 개통 관련 기념비와 위령비를 답사할 수 있다면, 이 휴게소에서는 저런 걸 잠시 보고 올 수 있다는 게 매우 흥미롭다. 공교롭게도 이 휴게소에는 중앙 고속도로 개통 기념비도 있다!
본인은 동선과 스케줄 때문에 깜깜한 밤에야 여기를 방문할 수 있었다. 그러니 주변 풍경은 다른 블로그의 링크로 대체하도록 하겠다.

이렇듯.. 중앙 고속도로는 단순 아우토반 이상으로 재미있는 사연이 많다는 걸 알 수 있었다.
험준한 산악 지형이라 하면 영동 고속도로가 떠오르는 편이지만, 영동 고속도로에서 진짜 영동 산악 지형은 동쪽 끝에 정말 얼마 되지 않는다. 나머지 경기도 구간에서는 넓은 평지가 더 많다.
하지만 중앙 고속도로야말로 온통 산이다. 오르막엔 저속 차량용 전용 차로가, 내리막엔 구간 단속 카메라가 도대체 몇 개가 나오나 모른다.

Posted by 사무엘

2019/12/01 08:38 2019/12/01 08:38
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1689

1. 터빈

터빈이란 직선 운동을 하는 유체로부터 에너지를 받아서 회전력으로 전환하는 기계 장치로, 프로펠러와는 개념적으로 정반대이다. (프로펠러는 회전력으로부터 직선 추진력을 생성)
이 정의에 따르면 물레방아는 수직으로 떨어지는 물로부터 회전력을 내니 터빈의 범주에 든다. 바람개비나 풍차 역시 마찬가지다. 이렇게 생각하면 터빈은 생각만치 별것 아니다.

터빈 기반 엔진은 내연기관과 외연기관 형태로 모두 존재할 수 있다. 그래서 외연인 증기 터빈도 존재하고 내연인 가스 터빈도 존재한다.

2. 가스 터빈 엔진 vs 기존 왕복 엔진

터빈은 유체의 연속적인 직선 운동을 받아들이지만, 왕복 엔진은 말 그대로 피스톤의 직선 '왕복' 운동을 받아서 회전 운동으로 변환한다는 차이가 있다. 그래서 터빈은 크랭크 같은 동력 변환 부품이 필요하지 않아서 구조가 더 간단하며, 진동도 더 작다. 엔진음은 털털털~ 대신 웨에엥~ 같은 소리이다.

왕복 엔진은 각 실린더마다 흡입-압축-폭발-배기라는 행정이 시간 간격을 두고 순차적으로 발생한다. 폭발이 일어나서 피스톤을 누르는 방향.. 다시 말해 생성된 동력을 전하는 방향과, 배기가스가 나가는 방향이 서로 별개이고 무관하다.

그 반면, 터빈 엔진은 연료가 섞인 압축 공기가 쭉 분사되고 폭발하고, 팽창한 배기가스가 분출되면서 터빈을 돌리는 게 행정 구분 없이 선형적으로 늘어서 있다. 한 엔진 내부에서 부위별로 각 행정들이 동시에 연속적으로 발생한다는 뜻이다. 그렇기 때문에 터빈 엔진은 왕복 엔진처럼 실린더를 여러 개 만들어서 각 실린더가 서로 다른 행정 상태를 나타내게 할 필요가 없다.

가스 터빈 엔진은 단순한 구조에도 불구하고 고회전 고출력에 매우 유리하다는 장점이 있다. 그러나 장시간 고온 고압의 배기가스를 맞으면서 초고속 회전력을 줄곧 전할 수 있는 터빈을 만드는 것이 왕복 엔진의 실린더를 잘 만드는 것보다 더 어렵다. 이런 이유로 인해, 가스 터빈은 증기 터빈이나 왕복 엔진보다 훨씬 늦은 20세기 중반에야 등장하고 실용화됐다.

가스 터빈은 꾸준히 시종일관 비슷한 출력으로 돌아가는 곳에서 유리하다. 현실의 자동차처럼 가다 서기를 반복하면서 출력 강도가 널뛰기 하듯이 바뀌고 엔진에 걸리는 부하가 수시로 달라지는 것에 대한 대처는 왕복 엔진보다 불리하다. 연비도 2회전당 1회 폭발인 4행정 왕복 엔진보다 좋지 못하며, 연료 소모가 훨씬 더 많다.

그렇기 때문에 육상 교통수단에서는 왕복 엔진이 여전히 주류이다. 가스 터빈 엔진은 탱크나 철도 차량처럼 덩치가 더 크고 출력 변화의 기복이 상대적으로 작은 물건에서만 제한적으로 쓰인다. 다만, 비행기와 선박 레벨에서는 터빈이 활발하게 쓰이고 있으며, 덩치 걱정 없이 혼자 24시간 꾸준히 돌기만 하면 되는 발전기에서는 아예 외연기관인 증기 터빈이 세상을 완전히 평정해 있다. 오늘날 우리가 집에서 사용하는 전기의 과반· 대부분은 화력이건 원자력이건 증기 터빈이 돌려 준 발전기로부터 생산된 전기이다.

가스 터빈 엔진은 왕복 엔진 같은 실린더가 있지는 않을 텐데 배기량 같은 엔진 덩치를 무엇을 기준으로 나타내는 걸까? 궁금해진다.

3. 자동차의 과급기

자동차의 엔진에서 배출된 배기가스는 환경을 오염시키는 건 말할 것도 없고, 그 압력과 온도 그대로 외부에 배출하는 것 자체부터가 위험하다(소음, 화상, 화재 유발..). 즉, 화학적인 성분뿐만 아니라 물리적인 상태도 좋지 않다는 것이다. 그렇기 때문에 이건 머플러에 통과시켜서 압력과 온도와 배출음을 크게 줄인 뒤에 배출한다.

그럼 요즘 일부 자동차에 달려 있는 터보차저(과급기)는 무엇이냐..?? 피스톤을 누르고도 아직 열과 힘이 좀 남아 있지만 그냥 버려지는 그 배기가스의 분출력을 활용해서 터빈을 돌린다. 그리고 그걸로 공기 압축기를 가동해서 엔진에다가 단위 부피당 더 고농도의 공기를 꾹꾹 눌러 공급하는 역할을 한다.

얘는 순수 가스 터빈 엔진처럼 터빈 자체가 엔진에 연결되어 동력에 기여하지는 않는다. 하지만 공기를 더 많이 눌러 넣음으로써 왕복 엔진의 연소 효율을 올리고 엔진 출력을 크게 향상시켜 준다. 엔진의 물리적인 크기를 키우지 않고도 배기량을 키우는 것이나 마찬가지이니 출력이 올라갈 수밖에.. 관계가 그렇게 된다. 터빈까지 통과하고 난 배기가스는 열과 힘을 더 활용할 여지가 없기 때문에 버려진다.

앞으로는 터빈이라 하면 공기 압축기가 계속해서 따라다닐 것이다. 이것이 내연기관 가스 터빈이 물레방아 내지 증기 터빈하고 근본적으로 다른 점이기 때문이다. 압축기 터빈은 바람개비의 깃이 프로펠러보다 훨씬 더 많고 조밀하다. 얘는 엔진 터빈의 동력을 받아서 공기의 흐름만 바꿔 놓지, 자기가 공기의 흐름으로부터 역으로 동력을 얻는다거나 하지는 않는다.

어느 내연기관이건 처음에 시동을 걸 때는 외력이 필요하지만, 터빈이 한번 돌아가기 시작하면 그걸로 앞쪽의 압축기도 돌려서 자기 자신이 공급받는 공기의 농도가 덩달아 높아지게 된다. 애초에 자동차의 과급기도 비행기용 가스 터빈 엔진에서 쓰이는 원리를 차용한 것이다.

4. 프로펠러 비행기: 터보 샤프트와 터보 프롭

자동차는 구동축과 연결된 바퀴를 굴려서 타이어와 지면의 마찰력으로 주행하는 반면, 비행기는 뒤로 뭔가를 밀어내거나 내뿜어서 얻은 반작용으로 주행한다. 그리고 비행기는 그 역할을 뱅글뱅글 돌아가는 프로펠러가 수행하기 시작했다.
참고로 선박도 과거에 외륜 달린 증기선 시절에는 자동차와 비슷한 방식으로 물을 박차고 나아갔다. 그 반면, 요즘 선박들의 뒤에 달린 스크루는 개념적으로 비행기 프로펠러와 동일하다. 회전면이 동체의 진행 방향과 동일하냐(바퀴), 수직이냐(프로펠러)의 차이가 있다.

초창기의 비행기, 또는 지금도 경비행기 수준에서는 프로펠러를 돌리기 위해 그냥 왕복 엔진이 쓰였고, 현재까지도 쓰이고 있다. 비행기에는 실린더가 자동차 같은 선형이나 V형도 아니라, 불가사리의 팔처럼 주렁주렁 분산된 형태로 달린 성형 엔진이라는 것도 있다. 이런 비행기는 엔진 소리도 자동차 엔진 소리와 비슷하다. (붕붕이)

그러나 같은 프로펠러기여도 왕복 엔진이 아닌 가스 터빈으로 프로펠러를 돌리는 물건이 등장했다. 터빈은 재래식 왕복 엔진보다 출력과 성능이 뛰어난 덕분에 일정 덩치와 속도 이상의 체급에서는 왕복 엔진을 순식간에 대체하게 되었다. 터빈은 워낙 빠르게 돌아가기 때문에 자동차의 타이어가 아닌 프로펠러를 돌릴 때도 감속 기어를 한번 거쳐야 할 정도이다.

고정익 비행기에서는 터보 프롭이 쓰이고, 얘들만치 빠르게 움직이지는 않는 헬리콥터나 탱크 같은 다른 가스 터빈 엔진에서는 터보 샤프트 방식이 쓰인다. 후자는 동력을 전하는 터빈과 공기 압축기 터빈이 따로 돌아가는 것도 가능하다는 차이가 있다. 고속에서의 효율이 터보 프롭보다 더 떨어지지만, 그래도 이렇게 해야 동력비의 변환이 그나마 더 유리해지기 때문이다.

어떤 방식으로 프로펠러를 돌리건, 프로펠러기는 시속 400~600km대의 중속에서 효율적이지, 아음속 정도에만 근접해도 자동차로 치면 '레드존'에 도달하여 출력이 떨어진다.
그리고 프로펠러가 돌아가는 소리는 엄청나게 시끄럽다. 여기서 프로펠러라는 것은 헬리콥터의 로터도 포함하는 개념이다. 헬기 조종사들이 괜히 폼으로 헤드셋과 마이크를 끼고 있는 게 아니다.

프로펠러기는 총 격발 반동만큼이나, 혹은 자동 변속기 차량의 creeping 현상만큼이나.. 조종간을 놓고 있으면 프로펠러의 회전 때문에 동체의 roll이 프로펠러 회전 반대 방향으로 서서히 기울어지는 현상이 있다. 개인적으로는 예전에 시뮬레이터를 한번 만져 보면서 경험했던 기억이 있다. 제트기에서는 볼 일이 없는 현상일 것이다.

5. 제트 엔진 (터보 제트)

가스 터빈과 비슷한 20세기 중반 타이밍 때는 내연기관의 배기가스로 터빈을 돌리고 프로펠러를 돌리는 게 아니라, 배기가스 자체를 그대로 세차게 내뿜어서 추진력을 내는 엔진이 연구되고 개발되었다. 이것이 이름하여 제트 엔진이다.

사용자 삽입 이미지

생각해 보면 이건 무척 흥미로운 면모이다.
프로펠러나 압축기를 열나게 돌리는 것만이 목표라면 전기 모터가 내연기관을 대체할 수도 있다. 육상 교통수단인 자동차나 열차처럼 말이다.
하지만 연소 배기가스를 생성해서 내뿜는 것은 전기로 구현할 수 없다. 그렇기 때문에 모터는 가벼운 드론 멀티콥터의 로터를 돌리는 용도로나 쓰이고 있다.

제트 엔진부터는 엔진 꽁무니에 '노즐'이라는 게 필요하다. 호스로 물을 뿌릴 때도 호스 끝을 쥐어짜서 부피를 줄이면 물이 세게 솟구치게 되는데, 노즐이 그와 비슷한 일을 한다. 앞의 터보 프롭/샤프트 엔진도 터빈을 돌리고 난 배기가스를 분출하는 게 있긴 하지만 얘는 추진력에 기여하는 것이 아주 미미하다.

'터보 제트' 엔진에서는 압축기를 통과한 짙은 공기가 연료와 섞인 채 폭발하여 배기가스로 바뀌고, 그게 앞의 압축기를 돌리는 터빈까지 돌린 뒤 노즐을 통해 세차게 뿜어져 나온다. 즉, 이 엔진에서는 터빈이 압축기를 돌리는 용도로만 쓰인다.

사실 로켓 엔진도 본질적인 원리는 동일하다. 로켓을 연구하는 칼텍/NASA 산학 협력 연구소의 이름이 괜히 '제트 추진 연구소'인 게 아니다. 이게 만들어지던 시절에는 '로켓'이야말로 천박하게(?) 들리는 신조어이기도 했고 말이다.
다만, 로켓은 산화제를 자체 내장하고 있어서 주변 공기를 흡입하는 부분을 고려하지 않는다는 결정적인 차이가 있다. 그러니 터빈이나 압축기 따위가 없다.

또한 우주 발사체용 로켓은 추력을 먼저 아래로 발생시켜서 수직 상승했다가 나중에 지구 궤도를 돌기 위해 수평 이동을 하지만, 고정익 비행기는 추력을 뒤로 발생시켜서 일단 기체를 고속으로 수평 전진시키고, 그 와중에 날개를 이용해서 양력을 덤으로 발생시켜서 상승한다는 차이가 있다. 요컨대 수직 이동과 수평 이동이 발생하는 순서가 서로 반대라는 것이다.

이 정도면 자동차와 비행기와 로켓에서 외부 공기라는 게 어떤 역할을 하는 존재인지 관계가 감이 올 것이다. 표로 정리하면 다음과 같다.

구분 연료를 태우기 위한 산소 공급 뒤로 내뿜어서 동체를 전진시키는 매체 양력을 일으키는 매체
왕복 엔진 자동차 O. 그래서 배기가스 기반 과급기가 달려 있으면 출력이 더 향상될 수 있음 X. 자동차는 지면에 타이어를 굴려서 나아감. 배기가스는 과급기 정도에나 쓰고, 대체로 그냥 버려짐 X. 양력이 발생하면 고속 주행 중에 차가 떠서 접지력을 잃음. 스포일러 있음.
고정익 비행기 O. 주행풍 기반 과급기가 선택이 아닌 필수 O. 비행기 엔진이 터빈 친화적인 주 이유임. 엔진 종류에 따라 단순 통과 공기 vs 연소시킨 배기가스의 비율이 케바케이나, 일반적으로 전자가 더 큼 O. 비행기는 뜨기 위해서 날개에 맞바람을 받아야 하며, 굳이 산소가 아니어도 공기 자체가 절대적으로 필요하다.
우주 로켓 X. 산화제를 자체 내장하고 있음 X. 자체 산화제와 연료를 태운 배기가스만을 내뿜음. 공기가 없는 곳에서도 비행 가능 X. 양력이 아닌 추력만으로 비행함. 공기는 그저 저항과 마찰열을 일으키는 존재일 뿐. 날개 없음.
초음속 자동차, 비행선 (비교용) O O X
글라이더 (비교용) X X O
헬리콥터 (비교용) O X O

자전거에게는 변속기가 없어도 상관없고 있으면 오르막과 고속 주행을 더 수월하게 해 주는 부품이지만, 자동차에게는 변속기가 반드시 필요하다.
그것처럼 자동차에게는 터보차저(과급기, 압축기..)가 없어도 상관없고 있으면 출력을 더 올려 주는 부품이지만.. 비행기에게는 무슨 램 제트 급이 아닌 이상 반드시 필요하다고 볼 수 있다.

헬리콥터는 비행기계의 오토바이 같은 물건이 아닌가 싶다. 일반 사륜 자동차보다 더 작고, 자동차로 불가능한 기동이 가능한 반면, 더 불안정하고 위험하다는 점에서 말이다. 뭐, 그렇다고 에어쇼 곡예 비행을 헬리콥터로 하는 건 아니니 회전익-고정익의 관계가 이륜-사륜 자동차의 관계와 완전히 동일한 건 아니다.

이런 기술 디테일을 생각해 보면..
온갖 SF물에서 우주를 날아다니는 전투기가 비행기와 너무 흡사하게 날개까지 달린 채로 묘사되었다거나..;;
심지어 팔· 다리 달린 보행 로봇이 공중에서 합체하는 장면이 현실과 얼마나 극과 극으로 동떨어졌는지를 알 수 있다.

6. 터보 팬

제트 엔진 중에는 오리지널인 '터보 제트' 말고도 바리에이션인 '터보 팬'이라는 게 있다.
얘는 터보 제트와 비슷하지만, 압축기보다도 앞인 제일 앞면에 엔진 자체의 직경보다 훨씬 더 큰.. '팬 블레이드'라고 불리는 바람개비가 있다는 게 차이점이다.

사용자 삽입 이미지
(언뜻 보면 자동차 타이어의 휠 같다..;; 참고로 저 바람개비 하나하나가 평범한 직선이나 프로펠러 같은 선형이 아니며, 유체역학적으로 아주 신경 써서 예술의 경지에 가깝게 디자인된 것이다.)

그래서 엔진의 뒤쪽에서는 (1) 연소까지는 되지 않고 팬 블레이드에 의해 빨려들어가서 밀쳐진 공기가, (2) 중앙에서 엔진에 들어갔다가 연료와 함께 연소되고 뿜어진 배기가스를 감싼 형태로 같이 분출된다. (1)의 양이 (2)의 양보다 훨씬 더 많으며, 그 비율을 일명 '바이패스 비율'이라고 부른다.

물론 같은 크기의 엔진에서 같은 양의 연료를 주입했을 때.. 터보 팬은 더 큰 블레이드를 돌리고 엔진 주변의 공기까지 건드려야 하니 엔진 내부에서 분출하는 배기가스의 속도는 어쩔 수 없이 감소한다. 그러나 분출되는 공기의 총량은 속도가 감소한 것을 보상할 정도로 더 많아진다. 운동 에너지 1/2 mv^2에서 v 말고 m 말이다.

그럼.. 터보 프롭의 프로펠러도 회전 운동을 통해 주변 공기를 뒤로 밀쳐 주는 건 마찬가지인데, 팬 블레이드가 프로펠러와 차이점이 도대체 무엇이냐는 의문이 들 수 있다.
팬 블레이드는 공기를 더 집중해서 끌어모으기 위해서인지, 프로펠러와 달리 주변에 동그란 테두리(덕트)가 감싸져 있다. 그리고 날개깃이 프로펠러보다 훨씬 더 많으며, 회전 속도도 프로펠러보다 더 높다.

뭐, 얘도 프로펠러와 비슷하다면 비슷한 물건이지만, 프로펠러와 동일한 방식으로 공기를 밀쳐내는 건 아니라는 걸 알 수 있다. 팬 블레이드는 본진에 속하는 제트 엔진의 배기가스와 조화를 이루고 엔진 효율을 끌어올리는 방식으로 주변 공기의 흐름을 만드는 역할을 한다.

엔진의 바이패스비를 올리려면 팬 블레이드가 엄청나게 커져야 한다. 하지만 현실적으로 이 크기를 무한히 키울 수는 없다.
터보 팬은 터보 제트와 같은 출력을 가정했을 때, 분출되는 엔진 배기가스의 역할의 일부를 바이패스되는 일반 공기에다가도 분담시킨 형태이다. 그리고 앞서 언급했듯이 속도의 역할을 질량에다가도 일부 분담시켰다.

이런 이유로 인해 터보 팬 엔진은 출력에 비해서, 특히 프로펠러 엔진과 비교했을 때 소음이 적으며 상대적으로 정숙하다. 터보 제트보다 연비도 더 좋다. 저소음 고연비라니, 이건 민간 여객기로서 매우 큰 장점이다. 그래서 오늘날 여객기들은 모두 터보 팬으로 물갈이됐다.

그에 반해 터보 팬의 단점으로는 터보 제트보다 엔진 구조가 더 복잡하고 비싸다는 것, 그리고 질량 지향에다 바이패스 공기에 의존적인 특성상, 오리지널 터보 제트만치 고속 지향적이지는 못하다는 것이다. 터보 제트는 프로펠러로는 가능하지 않던 마하 2~3급의 전투기에도 쓰이고 콩코드 초음속 여객기에도 쓰이지만, 터보 팬은 아음속~마하 1대의 속도에서 가장 효율적이다. 터보 프롭보다는 고속이지만 터보 제트보다는 저속 영역을 접수하고 있다는 것이다.

하지만 비행기가 본격적으로 음속을 돌파하려면 어차피 엔진의 특성이나 성능 말고 다른 영역들에서도 극복해야 할 문제가 한둘이 아니다. 그렇기 때문에 민간 여객기는 30년 전이나 지금이나 시속 900~1000km대의 아음속을 유지하고 있으며, 뒷바람을 제대로 타거나 하강할 때에나 살짝 잠깐 초음속이 나오는 정도이다.

7. 램 제트

끝으로, 제트 엔진 중에는 로켓 엔진에 가장 근접하고 마하 3~5에 달하는 극초음속 최고속 비행에 최적화된 최종 단계의 물건이 있다. 이름하여 램 제트이다.
얘는 로켓 같은 자체 산화제 없이 외부 공기에 의존하지만(= 우주 비행은 불가).. 터빈과 압축기도 없다. 동체의 주행 속도가 워낙 상상을 초월하게 빠르기 때문에 그 압도적인 주행풍만으로도 충분히 많은 공기가 유입되고, 초음속 충격파 발생 구간으로 압축도 자동으로 된다고 가정하기 때문이다.

이렇게 터빈 없는 제트 엔진은 기계 구조가 더 단순하고 산화제 없는 로켓 엔진이라 볼 수도 있는데.. 그 대신 얘는 저속에서는 공기가 부족해서 연소가 제대로 되지 않는 무용지물이 된다.
그리고 램 제트조차도 마하 5 정도를 넘어서면 비실대기 때문에.. 연소실 내부의 공기의 흐름까지 초음속으로 증속시켜서 그 한계를 극복한 '스크램 제트'라는 파생형도 있다. 물론 그 상태로 엔진 점화 상태를 유지하는 건 말처럼 쉬운 일이 절대 아니다.

램 제트급의 엔진이 사람이 여럿 타는 비행기에 적용된 예는 있을 리가... 아직까지는 가벼운 무인기나 미사일 같은 발사체용이다. 그래도 산화제를 안 실어서 더 가볍고 저렴한 상태로 외부 공기를 잘 활용해서 극초음속으로 날아가는 비행체이니.. 이쪽도 수요가 끊길 일이 절대로 없는 연구 분야이다.
아울러, 비행체가 처음부터 초음속 비행을 할 수는 없는 노릇이므로 속도대별로 한 엔진이 터보 제트와 램 제트로 모드를 전환할 수 있는 '하이브리드' 시스템에 대한 연구도 진행되고 있다.

자동차 엔진을 만드는 것도 어마어마한 개발비와 다양한 실험실, 주행 시험장이 필요한데 이런 비행기 엔진의 연구 개발과 실험· 테스트는 어떻게 진행될지 참 신기하기 그지없다.

  • 자동차: 주행하는 동안 언제나 시동이 켜져 있지만(수 시간), 시동 유지를 위한 최소 출력만 내거나 퓨얼컷까지 된 상태로 타력 주행인 시간도 많음. 운전하는 동안 내내 가속 페달을 밟고 있는 게 아니므로.
  • 비행기: 주행하는 동안 엔진 상시 가동이며, 예외적인 활강 상태가 아니면 언제나 일정 수준 이상의 출력을 내고 있음. 고도를 현상 유지하는 것만으로도 자동차로 치면 계속해서 오르막을 주행하는 것과 비슷하기 때문이다. (비행기는 비행선이 아님)
  • 로켓: 지구 궤도에 도달할 때까지, 혹은 궤도 수정이나 이탈 등을 위해 단 몇 분 동안만 가동됨. 그 짧은 시간 동안 그 많은 연료를 다 써 버림. 나머지 시간은 모두 그냥 천체의 중력에 이끌리는 관성 운동.

Posted by 사무엘

2019/11/28 08:33 2019/11/28 08:33
, , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1688

1. 과거의 1바이트 기반 문자 코드

유니코드란 게 없던 옛날에 한중일이야 한자처럼 글자수 많고 획수 많은 정방형의 문자를 사용하다 보니, 코드 길이와 글자수가 잘 맞아 떨어지는 2바이트 기반 문자 코드를 사용했다.
그러나 유럽 각국에서는 1바이트 8비트에서 상위 비트가 1인 수십~100여 자의 문자만 자기 사정에 맞게 customize한 꽤 간단한 문자 코드 바리에이션이 여럿 쓰였다. CJK 2바이트에 쩔었던 채로 어린 시절을 보낸 본인으로서는 이해나 상상이 쉽지 않다.

IBM PC에서 쓰인 미국 원판은 일명 cp437이라고 알려져 있다. 그러나 이것 말고도 1바이트 기반 코드 페이지는 700~800대 번호로 여럿 존재한다. 가령, cp850은 오리지널 cp437과 대부분 일치하지만, 겹줄과 홑줄이 섞인 괘선 문자, 그리고 그리스 문자가 있던 곳에 모음 알파벳의 바리에이션이 더 배당되어 있다. 신기하다.

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

128번 이후 영역에 온갖 알파벳+악센트 문자와 괘선· 기호가 들어가 있는 것, 1부터 31 사이에도 기호가 들어있는 것은 아스키 코드 오리지널 작품이 아니라 일종의 확장 규격인 셈이다. cp437과 파생형의 확장 규격은 최초에 어디에서 유래되었나 궁금해진다.

사실, 2바이트 한글 코드도 단순히 2바이트 문자만 정의한 건 아니다. 도대체 왜 그런 짓을 했는지는 모르겠지만 한국과 일본에서는 역슬래시를 잘 알다시피 원화/엔화 기호로 바꾸기도 했으며, 1~31 사이에 원래 있던 기호 대신에 반각 괘선 문자를 넣기도 했다. 전각 괘선만 있으니 공간 낭비가 심하고 불편했던가 보다. 이런 반각 괘선은 국제적으로 인정된 표준이었던 걸까? 뭐 그렇긴 했을 것이다.

흥미롭게도 과거에 쓰였던 1바이트 문자 코드 페이지들만 나열해 놓은 웹사이트가 있다. 마치 256색 시절에 쓰였던 다양한 팔레트들을 보는 느낌이다. 그것도 256개의 엔트리에다 고안자의 철학과 원칙을 담아서 색을 배당한 것이니까 말이다. 그러다가 색깔은 팔레트 따위 필요하지 않은 트루컬러로 바뀌고, 문자 인코딩은 유니코드 기반으로 다 바뀌게 됐다. 배고프고 암울하던 시절은 다 끝났다.

2. 이모지(emoji)

이모지란 글자처럼 취급되지만 글자를 가장한 각종 아이콘 그림이다. 원래는 기술적으로 갈라파고스화된 일본 내부에서만 문자 메시지나 채팅용으로 통용되었으며, 유니코드에서도 사용자 정의 영역에서나 머물 듣보잡에 불과했다. 그랬는데.. 갑자기 무슨 돈과 빽을 등에 업기라도 했는지 2010년대부터는 이게 유니코드에 정식 잔뜩 등재되고 전세계의 문자 입출력 기술의 변화를 주도하는 거물로 등극했다.

사용자 삽입 이미지

하긴, 이모지의 국제화 표준화에는 그 이름도 유명한 소프트뱅크 손 정의 회장이 크게 관여했다는 것이 알려져 있다. 오오~ 그래도 이것 덕분에 SNS나 채팅에서 일일이 번거로운 그림을 새로 올리지 않고도 간단한 표정 정도는 아주 간편하게 주고받을 수 있게 됐으며(특히 복사/붙이기까지!), 이로써 채팅의 편의성이랄까 감성지수도 더 올라갈 수 있게 됐다. 이모지는 온갖 듣보잡 한자들보다는 국제적으로 일상생활에서 쓸 일이 훨씬 더 많을 것이다.

오늘날 PC와 스마트폰에서 이모지 입출력은 필수 기능이 됐다. 이모지 때문에 (1) 만년 마이너 듣보잡 문자들로나 파묻혀 있었을 유니코드 확장 평면에 대한 인지도가 확 올라갔다. 그리고 한편으로 (2) '컬러 폰트'라는 것이 대중화됐다. 이전에도 이런 기술 자체는 있었지만 "그럴 바에야 그냥 전용 그림을 쓰고 말지, 저런 게 있어서 뭐해?" 수준이었다.

그러던 와중에 이모지는 글자와 그림의 경계를 한층 모호하게 만들었다. 마치 가수는 원래 오디오의 영역인 음악 잘 만들고 노래만 잘 부르면 되던 것이 언제부턴가 뮤직비디오 찍는 것에도 신경 쓰고 춤과 안무까지 해야 하는 것과 비슷해진 격이다.

OpenType 글꼴 파일 내부에 새로운 테이블이 추가되어 png 비트맵 이미지나 svg 벡터 이미지가 들어가게 됐다. 아이콘이 색상과 해상도가 올라가면서 png를 내장하게 되긴 했는데, 그 다음으로 글꼴도 뒤를 따르기 시작한 셈이다.
Windows(벡터 위주)와 mac(비트맵 위주), 안드로이드(??) 같은 진영 간에 컬러 폰트를 표현하는 기술이 좀 제각각 따로 노는 것처럼 보이는데, 몇 년 안으로 교통정리가 되지 않을까 싶다. 뭐, 그래 봤자 전부 그대로 표준이 될 듯하지만 말이다.

글꼴에 비트맵이라는 건 과거에 컴퓨터의 메모리가 부족하고 디스플레이의 해상도가 낮던 시절, 안티앨리어싱도 없던 시절에 동아시아 한글· 한자 같은 문자를 처리하기 위해서 존재하던 기술이었다. 허나 그게 쌩 컬러 이미지를 표현하기 위해 다시 쓰이게 됐다. 이제 다음으로는 간단한 애니메이션까지 취급하게 될지 궁금해진다.

맥OS는 별다른 조치 없이 일반적인 라벨 UI 컨트롤이나 텍스트 출력 함수만 쓰면 컬러 이모지가 잘 찍힌다. API가 바뀐 것 없이 기능만 자연스럽게 확장됐다.
그러나 레거시 호환성이 깡패급인 Windows는 그렇지 못하다. GDI, GDI+, Uniscribe 같은 레거시 기술로는 컬러 폰트를 출력할 길이 전~혀 없다. 컬러 폰트를 사용하려면 반드시 Direct2D 내지 그 휘하의 DirectWrite을 동원해야 하니 몹시 번거롭다. 거기서도 컬러 폰트를 사용하라는 옵션을 따로 준 뒤 출력해야 된다..!

이런 이유로 인해, 카톡도 PC Windows용 버전에서 대화창, 특히 입력란에서 컬러 이모지를 보기란 쉽지 않을 것 같다. 운영체제에서 대대적인 업데이트를 하지 않는 한 말이다. 브라우저도 Edge와 달리, IE에서는 컬러 이모지가 지원되지 않는다.

이모지는 인물(얼굴, 손가락), 동물, 음식, 사물, 운동, 여행, 심벌, 깃발 등의 카테고리로 나뉘는데, 이모지의 입력 기능은 그렇게 카테고리별 (1) 문자표 형태로 제공되는 편이다. 이건 워드 프로세서나 IME들이 신경 쓸 필요 없이 운영체제가 보편적으로 기본 제공해 주는 추세이다. 마치 필기 인식 기능과 비슷한 급이다.

이에 덧붙여 단어· 문장 단위의 composition이 발달한 중국어와 일본어 IME에서는 이모지가 (2) DB와 함께 통합되어 있기도 하다. 자기 나라 언어로 '사과'를 입력하면 사과 이모지, '자동차'를 입력하면 자동차 모양 이모지가 같이 뜬다. ^^;; :O 이런 건 당연히 그 표정에 해당하는 이모지로 치환해 주고 말이다.
한국어 IME는 composition이 글자 단위이고 자체 UI가 뜰 일이 없다 보니 이런 관행이 생소하겠지만.. PC가 아닌 모바일 환경에서는 저런 기능도 고려할 만하다.

그런데 이모지 문자표가 단순 유니코드 문자표와 다른 점은.. 그렇게 고유한 카테고리가 존재한다는 것 외에도, 2개 이상의 복합 코드 포인트가 결합된 놈이 무진장 많다는 것이다. 2글자에서 심지어 7글자까지 붙어서 한 개의 이모지가 되기도 한다.
뭐가 붙느냐 하면 주로 variation selector이다. 손가락 이모지 뒤에 이 손가락의 피부색을 결정하는 selector, 사람 얼굴 뒤에 사람의 성별을 결정하는 selector.. 이런 게 그냥 뒤따르는 것도 아니고 U+200D zero width joiner와 붙어 있다.

그러니 이모지는 글자의 컬러화뿐만 아니라 결합에도 옛한글에 준하거나 그 이상의 complex script 기술을 요구하는 셈이다. 채팅 앱에서나 존재할 법한 컬러 그림문자 처리 기능이 웹브라우저와 텍스트 에디터에서까지 볼 수 있게 된 것에는 이런 기술적인 변화가 있었던 것이다. 날개셋 한글 입력기에도 이번 최신 버전에서 이모지 문자표가 간단하게나마 추가됐지만.. 편집기가 애초에 컬러 폰트를 지원하지 않는 환경이기 때문에 거기서는 제대로 된 지원이 근본적으로 불가능하다.;;

3. Windows 기본 한글 글꼴의 변화

이모지 얘기가 좀 길어졌는데, 다음 주제로 넘어가면..
Windows 8인지 아니면 10의 특정 업데이트인지 정확하게 언제부터 이렇게 됐는지는 잘 모르겠다.
시스템 차원에서 기본 한글 fallback 글꼴이 구닥다리 '굴림/바탕' 대신 '맑은 고딕'으로 바뀌었다.
한글 글립이 존재하지 않는 Times, Arial, Verdana 같은 영문 전용 글꼴을 쓰는 상태에서 한글을 찍었을 때 맑은 고딕이 쓰인다는 뜻이다.

그리고 property sheet나 위저드 같은 UI들은 자기 내부에 나타나는 대화상자들에 대해 리소스 템플릿에 지정돼 있는 글꼴을 무시하고 무조건 굴림 9포인트로 지정하곤 했는데(이것을 소프트웨어적으로 따로 금지하지 않는 한..) 그 기본 글꼴도 맑은 고딕으로 바뀌었다.

일본어 글꼴을 베꼈네 하는 논란과 함께 15년을 넘게 존속해 온 오래된 글꼴을 좀 신선한 걸로 대체하려는 그 의도 자체는 인정한다. 그런데 맑은 고딕은 같은 크기일 때 통상적인 정사각형 기반의 글꼴보다 더 홀쭉하며, 내부 metric이 많이 다르다. 그렇기 때문에 같은 포인트에서는 다른 문자나 글꼴보다 작게 보인다.

그걸 무시하고 fallback 폰트를 바꿔 버리면 한글의 가독성은 안드로메다로 가 버린다. 안 그래도 알파벳보다 획이 더 많은데 상대적인 크기까지 더 작아져 버려서 알아보기 매우 어렵기 때문이다.;; 그나마 Times 같은 폰트는 알파벳도 워낙 조밀하고 작기 때문에 한글과 같이 크기를 나란히 키우기 용이하지만, 알파벳이 글자 단위로 납작하고 큼직큼직한 코딩용 불변폭 글꼴은 한글과 도저히 같이 쓸 수 없다.

사용자 삽입 이미지

위의 그림은 Windows 7에서 Lucida Sans Typewriter라는 불변폭 글꼴과 맑은 고딕으로.. 한글과 영문을 찍은 모습이다. 크기, 아니 정확히 높이는 위의 한 쌍은 20을, 아래의 한 쌍은 -20을 주었다. Windows의 LOGFONT 구조체는 높이를 음수로 지정하면 글자 자체의 높이만 그런 것으로 지정되고, 양수를 지정하면 상하의 자체 여백까지 감안한 높이가 그런 것으로 지정된다. 그렇기 때문에 아래의 쌍이 글자 크기가 더 크다.
어느 경우건 Lucida Sans Typewriter가 훨씬 더 납작하고 큼직해 보이며, 한글도 그에 상응하게 바탕체로 그것도 약간 납작하게 찍혔음을 알 수 있다.

사용자 삽입 이미지

그런데 Windows 10에서는..
Lucida Sans에서 fallback으로 쓰였을 때나, 순수 맑은 고딕을 지정했을 때나 한글의 폭이 하나도 다름없이 동일할 뿐만 아니라, 20을 줬든 -20을 줬든 그거 보정마저 없이 글자 크기가 동일하다! 그래서 같은 높이에서도 영문에 비해 한글은 터무니없이, 민망할 정도로 너무 작게 찍힌다. 이 문제를 좀 개선할 수 없으려나 모르겠다.

내 기억이 맞다면 기본 fallback 글꼴은 레지스트리를 통해 변경할 수 있다. 하지만 정확한 방법은 잘 모르겠다.
그나저나, 옛날 구식 글꼴인 굴림체 계열은 20을 주나 -20을 주나 크기에 아무 차이가 없다.

Posted by 사무엘

2019/11/25 08:36 2019/11/25 08:36
, ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1687

성경의 '언어' 관련 이슈들

1. 주기도문

주기도문이란 건 지금 말고 과거에 본인이 다니던 교회에서 예배가 끝났을 때 으레 습관적으로 눈 감고 기도문처럼 암송하던 텍스트였다.
주일 오전 예배는 격이 제일 높기 때문에 마지막에 무려 목사님의 축도로 인증을 꽝 찍어야 끝났다. 그때 말고 목사님이 안 계셔서 축도를 받을 수 없는 모임을 끝내는 절차는 주기도문 암송이었다.;; 끄응..

과거 한글 개역성경은 "나라이 임하옵시며"(마 6:10, 눅 11:2)라고 조사가 어긋난 게 있었다.
중세 국어에 주격조사 '가'가 아직 없어서 '바다이 되어' 같은 문구가 있다는 건 옛날에 학교에서 배워서 알지만.. 성경 본문에 몇 부분만 표기 오류가 있는 건 그냥 편집상의 실수 때문이었다.
시편 23편에는 그 유명한 "물 가으로 인도하시는도다"(시 23:2)도 있다. 이것 말고 또 조사가 어긋난 구절이 있는지는 모르겠다. 개역개정판은 이게 다 바로잡혔다.

그런데 "나라이 임하옵시며"라고 써 놓으니 난 어린 시절엔 "나라에 임하옵시며"라고.. 조사가 '에'인 것으로 오랫동안 착각하고 있었다. 문장의 주어가 뭔지는 모르겠고 말이다. 하나님 아버지가 우리나라에 임하신다는 뜻이겠지..

그리고 주기도문 끝에 나오는 '대개'도 오해의 소지가 아주 많은 단어였다.
저 대개는 大槪, usually, mostly, 대체로, in general이라는 뜻이 아니다..;;;
大蓋 "일의 큰 원칙으로 말하건대"라는 뜻이고, 원래 의미는 영어의 접속사 for (전치사 for 말고)... "이는 ~ 하기 때문" 정도에 대응하는 단어이다.

그리고 여기에 나오는 나라들도 그냥 country, nation이라기보다는 왕정국가 kingdom을 가리킨다. 저건 여호와의 증인들이 좋아하는 용어이기에 앞서 엄연한 성경 용어이다.

마 6:33은 산상설교 중에서 노래로도 굉장히 많이 만들어져 있는 유명한 구절인데.. "하나님의 왕국"이 "그의 나라"라고 바뀌어서 의미 왜곡이 꽤 심하다. 우리말에서 '의'는 발음하기 어렵고 생략도 잘 되는 관계로 아예 '그 나라'라고 곡해되기도 했다. "그 나라 갈 때에 우리들은 예수님과 만나 얘기해" 라는 어린이 찬양도 있으니 심상이 그리로 연결돼 버리는 것이다.

끝으로.. 이 주기도문은 마태복음 6장뿐만 아니라 누가복음 11장에서도 비슷한 형태로 한번 더 등장한다. 누가복음의 "기도 요령"에서까지 나온다는 것은 주기도문의 패턴을 굳이 환란기 유대인으로 국한시키지 않아도 된다는 뜻이다.

그런데 킹 제임스 외의 다른 성경들은 누가복음 버전이 마태복음 버전에 비해 짤린 내용이 많다. '아버지'에 대해 "하늘에 계신 우리"라는 수식어가 빠지고, "아버지의 뜻이 하늘에서 이뤄진 것 같이 땅에서도 이루어지이다" 같은 문구도 몽땅 짤려 있다. KJV 외의 성경을 본다면 누가복음의 기도문은 마태복음 기도문의 속성 요약본(?)처럼 읽힌다.

2. 동음이의어

사도신경 "... 하늘에 오르사 전능하신 하나님 우편에 앉아 계시다가 ..."
진담인데.. 난 초딩 시절에 교회에서 사도신경을 암송할 때는 빨간 우체통 위에 하나님이 걸터앉아 계신 모습을 생각했었다.
이런 걸 꼼꼼히 생각하지 않으면 좀 극단적으로는 "하나님이 사자를 보내셔서"라는 문구를 보고도 messenger일까 lion일까 황당한 오해가 생길 수 있다.

이 21세기에 그것도 한글 같은 문자를 놔두고 굳이 구닥다리 그림문자를 쓰는 법까지 무식하게 익혀야 할 필요는 없을 것이다. 그러나 최소한 이미 있는 동음이의어들이 도저히 대안도 없는 경우, 이것들이 무슨 그림문자에 근거해서 만들어진 단어이고 그 그림문자를 쓰는 다른 단어로는 무엇이 있는지 같은 감 정도는 부디 익혀 놓을 필요가 있다.

신앙만큼이나 언어도.. 일단 무조건 외워야 하는 것 이후로는 체계와 원칙이 있다는 점이 비슷하다. 이것은 언어의 특성 중에 각각 임의성과 체계성이라고 용어까지 정립돼 있으니 말이다.

3. 주홍과 진홍

예전에 한번 언급한 적이 있었지만(☞ 링크), 우리나라 태극기는 건국 이래로 수십 년 동안 동일한 형태가 쓰이다가 1997년 9월경에 살짝 개정된 바 있다. 태극 무늬의 청색· 홍색이 좀 더 산뜻한 색조로 바뀌었다.
옛날 태극기의 빨강은 주홍 scarlet에 더 가까웠다. 그러나 지금은 진홍 crimson에 더 가까워졌다.

개정 시기가 시기이다 보니, 옛날 태극기는 우리나라가 아직 못 살던 시절 내지 개발도상국이던 시절을 나타내고, 새 태극기는 말석 끄트머리나마 선진국 진영에 들어간 위상을 나타내는 것 같다. OECD 가입만 해도 1년 남짓 전인 1996년 가을이지 않던가?

그리고 성경에서 이렇게 주홍과 진홍을 나열하면서 빨간색을 대비시킨 유명한 구절이 떠오른다. 바로 사 1:18이다. "{주}가 말하노라. 이제 오라. 우리가 함께 변론하자. 너희 죄들이 주홍 같을지라도 눈같이 희게 될 것이요, 진홍같이 붉을지라도 양털같이 되리라."

4. 칭호

성경 구절을 노래로 옮긴 찬양들 중에는 예수님 내지 성도의 칭호를 다룬 것이 있다. 교리 공부와 성경 암송의 관점에서 유익해 보인다.

예수님의 칭호에 대해서는 His name is Wonderful (놀라운 그 이름)이라고 꽤 좋은 곡이 있다. Wonderful, Lord, mighty King, God, Great Shepherd, Rock 정도가 나온다. 한국어로 번역된 건 접해 보지 못한 어느 영어권 찬송에서는 Ancient of days (단 7:9)라는 칭호가 나오는 것도 본 적 있다.

하나님/예수님의 칭호 중에는 영어의 입장에서 품사 통용 중의적인 표현이 좀 있다.
앞의 칭호들 중에서도 Wonderful은 이름에 대한 수식어· 관형어가 아니라 그 자체가 명사이다. (사 9:6) Wonderful, Counsellor, The mighty God.

I AM도 명사절 같은 게 아니라 그냥 그 자체가 고유명사이다.
I AM THAT I AM(출 3:14)만 봐서는 해석을 어찌 해야 될지 모르겠지만, 그 다음의 I AM hath sent me unto you를 보면 저거 전체가 명사라는 걸 알 수 있다.

신의 칭호뿐만 아니라 신약 성도의 칭호도 있다.
어린이용 동요급인 "주 나의 사랑 나 주의 사랑"도 칭호가 여럿 담겨 있어서 유익하며, 일명 축복송으로 알려진 "때로는 너의 앞에"는 2절에 이례적으로 '택한 족속, 왕 같은 제사장'(벧전 2:9)이라는 칭호가 나온다.

칭호를 소재로 더 창의적인 찬양이 또 만들어졌으면 좋겠다.
참고로 가지(branch)는 예수님의 칭호(렘 33:15)와 성도의 칭호 내지 비유 대상(요 15:2,4)으로 모두 등장한다.

5. 오다/가다 문제

한국어가 영어와 다른 특징 중 하나는 1인칭 자기 자신이 '오다'의 주체가 되지 않는다는 것이다. "너 좀 이리 와 줄래?" / "응, 가는 중이야"(I'm coming)이지, "오는 중이야"가 아니라는 뜻이다.
그런데 이건 성경 번역에서도 꽤 미묘한 차이를 만들어 낸다.

지면 관계상 모든 예를 다 열거할 수는 없지만, 마 8:7에서 예수님은 백부장의 종을 치료해 달라는 부탁을 받았을 때 "ㅇㅇ, 내가 가서 고쳐 주마"라고 대답하셨는데.. 이거 영어 원문은 "I will come to him"이다. 그런데 NIV를 비롯해 일부 구어체 현대어 영어 성경은 go to him이라고 써 놓기도 했다.

이것 말고 고전 4:19 "내가 곧 너희에게 가서" (But I will come to you shortly)
계 2:5 "내가 속히 네게 가서" (I will come unto thee quickly)
이런 건 괜찮은 반면..

  • 요 14:18은.. "내가 너희를 위로 없이 버려두지 아니하고 너희에게로 오리라." (I will come to you.)
  • 계 22:7 "보라, 내가 속히 오리니" (Behold, I come quickly)
  • 계 22:20 "내가 반드시 속히 오리라" (Surely I come quickly)

뭔가 발로 걸어서 물리적으로 이동하는 게 아니라 심오하고 거창한 재림 문맥이어서 그런지.. 이런 건 흠정역도 옛날 개역성경의 표현을 그대로 차용했다. 게다가 come을 좀 심오하고 거창하게 번역하는 단어로 '임하다'도 있다.

생각보다 골치 아픈 문제 같아 보이지 않는가? "진리가 너를 자유케 하리라 / 두려워 말라"처럼 성경에만 존재하는 시적 허용이 될지, 아니면 이로 인해 한국어도 번역투 영향 때문에 '가다/오다'의 구분이 문란해질지도 모르겠다.
공동번역이나 표준새번역은 그래도 국어 전문가가 많이 개입해서 그런지 저런 원초적인 비문은 존재하지 않는다.

6. 마리아와 예수님 사이의 높임 관계

요한복음 2장에는 가나의 혼인 잔치에서 예수님이 물을 포도즙으로 변화시키는 기적이 기록되어 있다. 우리말로는 여기서 포도즙이냐 포도주냐 하는 wine의 번역 문제가 불거지곤 하는데, 이 글에서는 그건 논의하지 않겠다.

예수님은 자라서 성인이 되면서 단순한 아기· 어린이이다가 성육신한 하나님으로.. 자신의 원래 지위가 서서히 드러났다. 육신의 모친인 마리아와의 관계도 자연스럽게 역전되었다. 쉽게 말해, 마리아가 아들을 부르는 호칭이 "얘야, 예수야"이다가 어느 샌가 "예수님, 주님"이 된 것이다. 그런 드라마틱한 전환이 어떻게 진행되었으며 느낌이 어떠했을지에 대해서는 성경이 딱히 자세히 기록하지 않으며, 우리 역시 당사자의 기분을 상상하기가 쉽지 않다.

가나의 혼인 잔치가 벌어질 무렵에 마리아는 이미 예수님의 지위와 권능에 대해 잘 인지하고 있었던 듯하다. 그래서 포도즙이 다 떨어지자 "지금 잔치의 흥이 다 깨지게 생겼는데 너님이 좀 어떻게 도와줄 수 없을까(요)?"라고 물었다.
그러자 예수님은 이미 공과 사를 철저히 구분하여, 모친인 마리아에게도 "여자여"라고.. 한국어로 치면 "자매님, 아주머니", 군대 용어로 비유하면 '아저씨' 같은 남 취급하는 호칭을 사용했다(4절). 이 호칭은 나중에 십자가에서도 다시 등장한다(요 19:26).

사실, '여자여'라는 호칭 자체가 성경 전체에서 사복음서에서만 등장하며, 그 중에 요한복음이 제일 많이 등장하는 책이라는 게 흥미롭다. 간음하다 붙잡힌 여인 장면도 포함해서 말이다(요 8:10).
이런 식으로 대부분이 예수님 말씀의 인용이지만, 베드로의 말 "어허, 이 여자가 정말.. 난 진짜로 저 사람이 누군지 모른다니까(요)?"에서도 동일 호칭이 한 번 쓰였다. (눅 22:57)

다시 가나의 혼인 잔치 장면으로 돌아오면.. 4절 다음으로 5절에서 마리아가 하인들에게 "그분(예수님이)이 말씀하시는 대로만 그대로 하세요"라고 지시한다. 이 기적은 구원이 하나님의 말씀을 통해 이뤄진다는 영적 진리를 내포한다. 참조 구절로 벧전 1:23을 보시라.

기독교에서 사용하는 성경들은 마리아의 말이지만 예수님에 대해서 높임법을 사용했고, '말씀하시다'라는 용언을 꼭 살려 놓았다. 이게 맞다. 그 구닥다리 한글 개역성경도 저렇게 돼 있다.

그러나 천주교용 성서 내지, 별 생각 없이 의역 현대어 문체만 추구한 성경 역본에서는 이 상황에서 높임법을 절대로 사용하지 않았다. 하나님의 어머니인 마리아가 예수보다 서열이 더 높은데 왜 굳이 예수님에게 높임법을 사용하겠는가? 공동번역이나 표준새번역 같은 걸 직접 보시기 바란다. "그가 시키는 대로 하세요."
또한, '말씀하시는 대로'(say)도 함부로 '시키는 대로'라고 바꿔 버리면 당장 이 문맥에서 본문을 읽는 건 문제가 없겠지만, 앞서 얘기했던 벧전 1:23 '말씀'과의 연결 고리가 깨지게 된다.

성경의 근간이 된 히브리어, 그리스어, 영어 같은 언어는 하나님조차 you라고 간단히 부를 수 있을 정도로 높임법 따위 신경 안 쓰는 언어이다. 그 반면, 하나님끼리는 존댓말을 썼을까 말을 놨을까(히 1:8; 10:5-7) 하는 문제는.. 수학에다 비유하자면 마치 ∞ - ∞의 극한과 비슷한 문제이다. 한국어 번역을 위해서는 그런 데서 근본적으로 번역자의 주관과 해석이 들어갈 수밖에 없으며, 천주교와 기독교는 십계명뿐만 아니라 이런 데서도 차이가 존재한다는 걸 알 수 있다.

* 마리아가 성경에서 마지막으로 등장하는 곳은 행 1:14이다. 하나님의 어머니고 뭐고 그런 거 없이, 그냥 여러 신실한 여성 크리스천 중 한 명으로서 말이다.
또한, 예수님이 자신의 육신의 어머니나 이복(?) 형제라고 해서 딱히 특별 대접을 하지 않았다는 것은 눅 8:20-21, 눅 11:27-28 같은 다른 구절에서도 거듭 확인 가능하다. (꼭 찾아서 확인해 보시라)

Posted by 사무엘

2019/11/22 08:34 2019/11/22 08:34
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1686

1. 성경에 담긴 좌우 이념

(1) 성경에서 좌파적인 시각이 제법 느껴지는 책

  • 누가복음: 정치인 디스(헤롯 13:32, 3:19-20), 민생 안정 권고(3:14), 여성의 활약 부각, 시사 평론(13:1-5), 예수님의 인간적인 면모 등
  • 야고보서: 부자들 디스, 임금 착취 폭로(5:1-5), 선행 강조(2:14-24)
  • 미가서: 사회악과 진실 폭로(3:8), 귀족과 제사장들의 횡포 비판

(2) 성경에서 우파적인 책

  • 요한복음: 예수님을 외세나 종교 지도자뿐만 아니라 평범한 일반 백성들도 믿지 않고 배척했음을 유난히 부각시킴
  • 로마서: 부자나 정치인뿐만 아니라 모든 사람이 죄인임, 위의 권위에 순종하라. 오로지 믿음으로 구원

보다시피.. 기독교의 핵심 교리는 굳이 인간의 사상· 이념 성향에다 투영시켜 본다면 명백히 오른쪽에 자리잡고 있다. 오른쪽이 괜히 옳은쪽이 아니다.

저 좌파 우파 이념은 비행기로 치면 무슨 대등한 양 날개 관계(좌익 우익??)가 아니다. 굳이 따지자면 "우파가 주익이고 좌파는 미익(꼬리날개)에 가까운 관계"이다. 고정익이건 회전익이건 말이다.

양력을 생성해서 비행기를 뜨게 하는 것은 주익이 담당하고, 미익은 기체의 방향을 잡고 안정화시켜 주는 역할이기 때문이다. 신앙의 균형도 그런 구도가 되는 게 바람직하다.
(비행에선 미익도 물론 아주 중요하다. 미익이 박살나서 조종 불가 상태가 되자 JAL123 추락 같은 사고도 났었다)

하물며 나라 정체성을 부정하고 거짓 평화 명목으로 적에게 다 갖다바치는 건 좌도 진보도 아닌 개 쓰레기 반역질일 뿐이고 말이다.

2. 크리스천과 율법의 관계

(1) 일반인 민간인이라도 군대식으로 살아서 나쁠 것은 없다.
매일 일찍 자고 일찍 일어나고 규칙적으로 생활하고, 모든 물건을 철저하게 각 잡고 정리정돈하고 절도 있게 살면 몸과 정신 건강에 좋다.
더구나 나라 지키느라 고생하는 군인들을 평소에도 생각하며 감사하는 것은 매우 바람직한 태도이기도 하다.

그러나~~ 민간인이 아무리 군기 빠져서 헬렐레 지내고 심지어 군대와 국방에 대해 온갖 무개념 헛소리를 내뱉는다 하더라도.. 너 그랬다가는 군대에 다시 끌려갈 거라고 거짓말을 해서는 안 된다.
민간인이라도 국가 안보와 관련된 중대한 죄를 지으면 군법에 따라 처벌받는다는 황당한 소리를 해서도 안 된다.

(2) 100년 전에 3·1 운동은 고종 황제의 급사 때문에 흉흉해진 국내 분위기에다가 1차 세계 대전 종전과 '민족 자결주의'라는 일면 희망적인 국외 분위기가 맞물려서 벌어졌다.

그러나 민족 자결주의는 알고 보면 1차 세계대전 패전국들의 식민지들이나 각자 제 갈길 찾아가라는 소리였으며, 일본은 1차 대전 당시에는 연합국 승전국 진영에 속해 있었다.
고로 그 당시 조선은 일본의 아주 합법적인 식민지였으며, 국제 사회는 조선의 해방과 독립에는 아무 관심이 없었다.

그럼 3·1 운동은 아무 의미 없이 숱한 인명과 재산 피해만 야기한 헛된 희망고문 개뻘짓일 뿐이었는가..;; 그건 또 아니다.
조선은 국제법과 별개로 기를 쓰고 일본의 식민지 살이를 거부한다는 게 외신으로 타전됐고, 일제의 무식하고 잔학한 탄압 만행도 보도되어 대 일본 여론을 악화시켰다.

도저히 이해가 안 되는 상또라이 급의 집요하고 끈질긴 만세 시위는 안 그래도 식민 지배 노하우가 없던 일본의 입장에서 큰 트라우마를 안겼다. 조센징들은 이렇게 무식하게 다스려서는 안 된다는 게 각인됐다.

"우린 안 될 거야 아마"라고 자포자기했다면.. 나중에 일본이 태평양 전쟁에서 핵폭탄 맞고 '졌더라도' 조선은 독립이 못 됐을 수도 있었다. 조선은 1차 대전 이전부터 식민지였기 때문이다.
계란으로 바위 치기 같아 보여도 끊임없는 독립운동 자체는 필요했다. 단지, 그 사상적 근거를 민족 자결주의에다가 둘 수는 없었을 뿐이다.

위의 (1), (2) 예화에는 모두 "법적 지위"라는 개념이 들어있다.
크리스천에게 구약 율법이 지니는 의미, 효력, 관계도 이 개념을 동원해서 비유하고 설명할 수 있다. 또한 구원의 영원한 보장을 설명할 때도 동일한 방법론을 동원할 수 있다.
(탈북자 비유.. 아무리 큰 죄를 지어도 법적으로 엄연히 대한민국 국민임. 교도소나 사형장에 갈지언정 북송은 절대 되지 않음)

마 11:11에서 "하늘의 왕국에서 가장 작은 자가 침례인 요한보다 더 크니라"는.. 아주 거칠게 비유하자면.. "광나는 A급 전투복 전투화 차림의 초 S급 특등사수 모범병사보다도 차라리 전역한 껄렁껄렁 민간인이 더 낫다"와 비슷한 소리이다. 어떤 점이 더 낫다는 말인지는 알아서 상상하시고..

3. 성경과 과학· 논리와의 관계

수학· 논리적으로는 어떤 명제(p → q)에 대해서 이(~p → ~q)는 성립하지 않는 것으로 여겨진다. 논리적으로 동치라고 100% 보장되는 것은 이가 아니라 대우(~q → ~p)이니까 말이다.
하지만 일상생활에서는 어떤 주장이나 규칙이라는 명제에 이가 "대체로, 암시적으로" 포함되는 것으로 간주된다. "이런 짓 하면 처벌받는다"에는 "그런 짓을 안 하면 처벌도 없다"도 포함됐다고 생각하는 게 일반적이고 자연스럽지 않은가? 단지, "그런 짓 대신에 다른 죄를 짓는다면 그건 여전히 처벌 대상이다"가 포함되어 있을 뿐이다.

성경도 마찬가지이다. 신 18:22 "예언이 이뤄지지 않았으면 거짓 가짜 대언자이다"라는 진술에는 '이'에 해당하는 "예언이 이뤄졌다면 진짜 대언자이다"가 포함돼 있는 셈이다. 왜냐하면 이것이 21절 "진짜/가짜 말씀을 분별하는 방법이 무엇이죠?"의 완전한 답변이며, 성경의 용례가 거짓 대언자의 예언이 적중하는 경우는 고려하지 않고 기록됐기 때문이다.

물론 현실에서는 사람을 미혹하는 가짜 거짓 대언자의 예언도 아주 부분적· 제한적으로나마 적중할 수 있다.
그리고 성경에도 요일 2:23 같은 구절은 "아들 부정 → 아버지 없음, 아들 인정 → 아버지 있음"처럼.. 강조를 위해서 동일 명제의 이를 꼼꼼히 친절하게 써 준 경우가 있다. 이건 KJV가 후반부를 이탤릭 처리까지 하면서 꼼꼼히 써 준 부분이기도 하다.

성경에는 우리가 보편적으로 생각하는 선에서 되도 않은 황당무계한 과학· 논리 오류가 존재하지는 않는다. 그러나 그렇다고 오로지 과학· 논리 체계와 그 관점에만 얽매여서 기록된 책도 아니다.
그러니 "고래는 포유류인데 fish라고 묘사한 것은 오류이다, 토끼를 되새김질 하는 동물이라고 분류한 건 오류이다" 이런 식의 트집에 너무 얽매일 필요 없다. 일부는 과학적으로 반박되기도 했지만, 어떤 건 굳이 과학적으로 반박하는 것 자체가 무의미하기도 하기 때문이다.

또한, 성경이 온전하게 보전되었다는 말이 무슨 문법 parse tree 차원에서 의미가 고지식하게 싹 보전되었음을 의미하지도 않는다. 성경의 원어에도 중의성이 있다. 어휘 의미의 중의성은 말할 것도 없고, and/or/not/of로 둘러싸인 A and B and C of X 같은 논리식에서 of가 어디까지 걸리는지, not A and B는 전체 부정인지 부분 부정인지, 수식으로 치면 괄호를 어떻게 쳐야 하는지 같은 문법적 중의성도 있다.

성경이 단어 단위로 보존되고 정확하게 번역되었다는 말은 원어에 담겨 있던 그런 중의성과 함축성마저 정확하게 전수되었다는 뜻에 가깝다. 추상적인 것은 모호하다는 말이 아니다.

4. 교회가 해야 할 일의 우선순위

(1) 예배, 그리고 이미 구원받은 성도를 양육시키기

성경의 최우선 기록 목적은 복음과 구원이 아니다. 기독교 음악의 주요 존재 목적도 찬양, 경배, 교리 암송이지 불신자를 대상으로 하는 복음 전파는 순위가 한참 낮다.
이런 것처럼 교회 역시 불신자가 아니라 신자가 우선인 곳이다. 신자들에게 성경을 가르치고 그리스도의 심판석을 대비하게 만들기. 하늘나라에서의 삶을 이 땅에서 리허설 하기. 이게 교회가 수행해야 할 제~일 중요한 임무이다. "닭이 먼저냐 계란이 먼저냐"라는 질문에서 성경의 답변은 '닭'이다.

(2) 복음 전파, 선교

정말 FM대로 원칙대로라면.. 나가서 전하는 게 원칙이다. 교회로 사람들을 부르는 게 아니라. 교회는 예외적으로 초대받은 경우를 제외하면 일단 구원은 받은 사람만이 모이는 곳이다.
박해가 극심했던 옛날 초대 교회는 아무나 개나 소나 받기는커녕, 다른 교회 지도자의 보증 추천서가 있어야 새로운 사람을 받아 줬다. 끄나풀 첩자를 잡아내는 일이 급선무였다는 걸 기억하라.

(3) 세상 복지

고아원· 양로원, 벼룩시장 바자회, 노숙자 식사, 불우이웃 구제 등... 이런 건 선교를 자연스럽게 병행할 수 있는 좋은 일이긴 하지만, 그보다 훨씬 더 중요한 일부터 한 뒤에 여력이 남아 있을 때에나 해야 한다. 우선순위가 바뀌어서는 안 된다. 바른 교리에 입각한 하나님 사랑이 이웃 사랑보다 먼저이다.

난 이들 비중이 9:3:1 정도 돼야 하지 않나 생각한다. 공비가 최소한 3~4는 넘는 등비수열 급의 차이가 나야 한다.
교회라는 건 여느 세상 동호회나 비영리 단체들과 달리, 세상 사람들이 도무지 이해할 수 없고 상상조차 할 수 없는 괴상망측(?)한 교리를 믿고 가르치고 실천하는 곳이다. 그렇기 때문에 자기 정체성과 순수성을 유지하는 게 그야말로 0순위 급선무가 돼야 한다.

이름· 껍데기만 남은 채 영적 생명력을 완전히 잃고 여느 NGO/자선 단체처럼 변질되는 것은 교회에게 일어날 수 있는 최악의 상황이다.

5. 크리스천의 정치 참여

"크리스천은 하늘나라에 소속돼 있으니 그 어떤 세상적인 일에도 관여하지 말아야 한다"는 매우 잘못된 극단이다. 저걸 문자적으로 실천하느라 집총까지 거부하면서 물의를 빚고 있는 유명한 이단 교파가 국내에 이미 있다. 허나 저건 "기도만 열심히 하면 공부 안 해도 시험 100점 맞는다"만큼이나 잘못된 사고방식이다.

그리고 반대로 "사탄 마귀 권세 물리치고 이 나라를 복음화하자, 반공 기독교 정당 만들자..!" 이것도.. 취지와 의도는 일면 이해가 가지만 반대편의 잘못된 극단에 근접해 있으며, 대체로 불신자들에게 간증 상실하고 병신 소리 듣는 짓으로 귀착된다.

하나님이 크리스천들끼리의 모임을 교회라는 비영리 조직으로 따로 분리시키고 한정시킨 이유를 생각해 보아라.
지금 이 상태로 크리스천들만의 정치 공동체(국가), 경제 공동체를 만들어 보자. 교회 안에서 신자들끼리 돈거래를 시작하고, 공통된 사업 아이템 하나 발굴해서 이윤을 내는 고용주/직원 관계를 만들어 보자. 과연 세상 불신자들이 만든 조직보다 잘 돌아갈까?

네버.. 모임만 폭파되는 걸로 끝나면 다행이고, 아마 얼마 못 가 온갖 소송에 살인도 나지 싶다.
교회는 눈에 보이지 않는 영적 진리를 다루는 본분에만 충실하면 되지, 하나님께서 그런 것까지 요구하지는 않으신다.

물론 반공은 매우 건전하고 성경적인 이념이다. 좌우 균형이라는 건 국가 정체성과 관련된 게 아닌 단순 경제· 정치 성향 수준에서나 필요한 개념이다.
크리스천은 기독교 세계관을 가진 건전한 정치인에게 표를 줘야 할 권리와 의무가 있다.

예수쟁이들은 기본적으로 세상 권위에 순종하고, 나라를 지키기 위해 전쟁터에서 적군을 기꺼이 죽인다. 그건 "살인하지 말라" 내지 "혈과 육에 속한 싸움은 악한 싸움이니 하지 말라" 등등이 적용되지 "않는" 열외 영역이다.
또한, 예수쟁이도 교회 바깥 세상에서는 얼마든지 사업가나 정치인이 될 수 있고, 그 커리어를 전· 현직으로 유지하면서 목회도 할 수 있다.

단지 교회에서 따로 세상에서 따로 위선 부리지 말고, 불의한 멍에를 지지 말고(결혼, 단순 취업 이상의 사업 동업), 태극기 집회 같은 데는 그냥 개인 명의로만 가면 된다. 태극기 집회가 아니라 3· 1 운동 만세 시위라 해도 그냥 개인 명의로만 참여하면 된다.

세상 정부가 해야 할 일을 교회 명의로 하지 말고, 개인이 해야 할 일에 굳이 교회를 내세우지 않으면 된다.
반공을 하되, 북괴 정권을 아직 존속시키고 계시는 하나님이 나빠 보일 정도로 오버하지만 않으면 된다.

지금 대통령이 빨갱이인 것을 입증하려면 세상 일에서의 각종 의혹이나 팩트를 들춰야지, 성경 구절을 펴야 하는 건 아니다. 그러니 태극기 집회에서 굳이 예배니 기도니 하는 말을 꺼낼 필요는 없을 것이다. 이런 게 정교분리이다.
"주여 저 새끼를 구원하소서"처럼 "저 빨갱이 대통령이라도 주께서 허락하신 권위이니 임기 중에 제발 적당히 대충만 깽판 치게 인도해 주소서" 이런 기도라도 할 게 아니라면 말이다.

Posted by 사무엘

2019/11/19 08:36 2019/11/19 08:36
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1685

C/C++은 어떤 명칭에 대해 선언과 정의의 구분이 명확한 축에 드는 언어이다. 정의는 선언도 같이 포함하지만 그 역은 성립하지 않는다. 전자는 심판의 선고이고, 후자는 집행이라고 봐도 되겠다.

(1) 함수: 실행되는 코드를 담고 있기 때문에 {}에 둘러싸여 정의된 몸체의 존재감이 압도적인 물건이다. 또한 함수의 선언부는 자신의 프로토타입(인자의 개수와 타입, 리턴값의 타입)을 나타내기도 한다. 그렇기 때문에 얘는 소형 인라인 형태가 아닌 이상, 선언과 정의의 구분이 가장 명확하다.

(2) 자료형: 구조체나 클래스는 함수보다야 선언 따로 정의 따로일 일이 훨씬 드물다. 하지만 헤더에서는 포인터 형태만 사용하는데 쓸데없는 #include 의존성을 또 만들지 않기 위해 class Foo; 같은 불완전한 타입을 선언만 하는 게 가능은 하다. 마치 함수 선언처럼 말이다.
선언만 존재하는 불완전한 타입은 sizeof 연산자를 적용할 수 없으며, 포인터형의 경우 *나 ->로 역참조해서 사용할 수도 없다.

(3) static 멤버/전역 변수: 변수는 선언하는 것 자체 말고 딱히 {}로 둘러싸인 세부 정의가 존재하지 않는다. 생성자 인자라든가 초기화 값(initializer)이 쓰이긴 하지만 그건 definition, body와는 성격이 완전히 다른 정보이니 말이다.

다만, 지역 변수 말고 클래스의 static 멤버에 대해서는 static int bar와 int Foo::bar 같은 선언/정의 구분이 존재한다. 그리고 전역 변수도 extern이라고 선언된 놈은 정의가 아닌 선언 껍데기일 뿐이다. (실제 definition은 다른 translation unit에 존재한다는..)
사실, global scope에서 함수의 선언도 앞에 extern이 생략된 것이나 마찬가지이다. 지역 변수의 선언들이 모두 구 용법의 auto가 생략된 형태인 것처럼 말이다.

함수건 변수건 선언은 여러 군데에서 반복해서 할 수 있지만 몸체 정의는 딱 한 군데에만 존재한다. 이는 마치 분향소와 빈소의 관계와도 비슷해 보인다.
이런 선언부에서는 배열의 경우 그 구체적인 크기를 생략할 수 있다. * 대신 []을 써서 얘는 정확한 크기는 모르지만 어쨌든 포인터가 아닌 배열이라고 막연하게 선언할 수 있다는 것이다. 그리고 const 변수는 초기화 값이 선택이 아니라 필수인데, 이 역시 선언 단계에서 생략될 수 있다.

1. 함수와 구조체: 상호 참조를 위한 불완전한 전방 선언

(1) 함수나 (2) 구조체/클래스는 상호 참조를 할 수 있다. A라는 함수에서 B를 호출하고, B도 A를 호출할 수 있다. 또한, X라는 구조체에서 Y라는 구조체의 포인터를 멤버로 갖는데, Y도 내부적으로 X의 포인터를 갖고 있을 수 있다.

요즘 프로그래밍 언어들은 구조적으로 같은 소스 코드를 두 번 읽어서 파싱하게 돼 있기 때문에 한 함수에서 나중에 등장하는 다른 함수를 아무 제약 없이 참조할 수 있다. C++도 그런 요소가 있기 때문에 한 클래스의 인라인 멤버 함수에서 클래스 몸체의 뒷부분에 선언된 명칭에 곧장 접근할 수 있다. 즉, 다음과 같은 코드는 컴파일 된다.

class Foo {
public:
    void func1() {
        func2();
    }
    void func2() {
        func1();
    }
};

하지만 global scope에서 이런 코드는 적어도 C++ 문법에서는 허용되지 않는다.

void Global_Func1() {
    Global_Func2();
}
void Global_Func2() {
    Global_Func1();
}

맨 앞줄에 void Global_Func2(); 이라고 Global_Func2라는 명칭이 껍데기만이라도 forward(전방) 선언돼 있어야 한다. 파스칼 언어에는 이런 용도로 아예 forward라는 지정자 키워드가 있기도 하다.
매우 흥미로운 것은..

struct DATA1 {
    DATA2* ptr;
};
struct DATA2 {
    DATA1* ptr;
};

이렇게 구조체끼리 상호 참조를 하기 위해서는..
심지어 클래스 안의 구조체라 하더라도 앞에 struct DATA2는 반드시 미리 전방 선언이 돼 있어야 한다는 것이다. 클래스 안에 선언된 멤버 함수와는 취급이 다르다. 왜 그런 걸까? 멤버 함수의 몸체는 클래스 밖에 완전히 따로 정의될 수도 있지만 구조체의 몸체는 그럴 수 없다는 차이 때문인 듯하다.

원래 파스칼과 C는 옛날에 컴파일러의 구현 난이도와 동작 요구 사양을 낮추기 위해, 소스 코드를 한 번만 읽으면서 곧장 parsing이 가능하게 설계되기도 했다. 모든 명칭들은 사용되기 "전에" 정의까지는 아니어도 적어도 선언은 미리 돼 있어야 컴파일 가능하다. 아무 데서나 '정의'만 한번 해 놓으면 아무 데서나 그 명칭을 사용할 수 있는 그런 자유로운 언어가 아니라는 것이다.

함수와 전역 변수의 경우, 그 다음으로 몸체 정의를 찾아서 실제로 '연결'하는 건 잘 알다시피 링커가 할 일이다. 단지, 구조체/클래스는 몸체가 당장 컴파일 과정에서 그때 그때 쓰이기 때문에(멤버의 타입과 오프셋...) 링크가 아닌 컴파일 단계에서 실제 몸체를 알아야 한다는 차이가 있다.

불완전한 타입에 대해서 거기에 소속된 구조체/클래스를 불완전한 형태로 또 중첩 선언하는 것은 가능하지 않다.

class A;
class A::B;

A의 몸체를 모르는 상태에서 연쇄적으로 B를 저렇게 또 선언할 수는 없다는 것이다. 그걸 허용하는 건 C++을 동적 타입 언어급으로 만드는 너무 사악한(?) 짓이 될 것 같다. 특히 이미 자유도가 너무 높은 템플릿을 구현하는 것까지 생각했을 때 말이다.
실체가 없는 저런 자료형의 포인터를 무리하게 만들 바에야 아예 void* 포인터를 그때 그때 캐스팅해서 쓰고 말겠다. 아니면, 저런 식으로 다단계 scope 구분만 하는 게 목적이라면 클래스 대신 namespace라는 훌륭한 대체제가 있다.

2. 구조체: 전방 선언과 다중 상속 사이의 난감함

이렇게 몸체를 모르는 클래스를 불완전 전방 선언만 해서 쓰는 것은 일면 편리하지만.. C++이 제공하는 다른 기능 내지 이념과 충돌해서 난감한 상황을 만들 때도 있다.
즉, class X와 class Y라고 이름밖에 모르던 시절에는 X와 Y는 서로 완전히 남남이며, 포인터 형변환도 오프셋 보정 없이 단순무식한 C-style로만 하면 된다.

그런데 알고 보니 X와 Y가 다중 상속으로 얽힌 사이라면.. 몸체를 모르던 시절과 알고 난 뒤의 컴파일러의 코드 생성 방식이 서로 달라질 수밖에 없다. 특히 X 내지 Y의 멤버 함수를 가리키는 pointer-to-member 타입의 크기와 구현 방식도 달라지게 된다. X가 전방 선언만 돼서 아무런 단서가 없을 때가 제일 복잡하고 까다롭다.

Visual C++의 경우, 얘가 전방 선언만 됐지만 다중/가상 상속 같은 것 안 쓰는 제일 단순한 형태이기 때문에 pointer-to-member도 제일 단순한 형태로만 구현해도 된다고 단서를 제공하는 비표준 확장 키워드를 자체적으로 제공할 정도이다. 그만큼 C++의 스펙은 복잡 난해하고 패러다임이 서로 충돌하는 면모도 존재한다.

이렇듯, 명칭의 선언과 정의라는 간단한 개념을 고찰함으로써, C/C++ 이후의 언어들은 선배 언어의 복잡 난해함을 어떻게든 감추고 사용자와 컴파일러 개발자의 입장에서 다루기 편한 언어를 만들려고 어떤 개량을 했는지를 알 수 있다. 당장 Java만 해도 헤더/소스 구분 없이 한 클래스에서 각종 함수나 명칭을 수정하면 번거로운 재컴파일 없이도 그걸 다른 소스 코드에서 곧장 사용 가능하니 얼마나 편리한가 말이다.

3. 함수: extern "C"

앞서 살펴본 바와 같이 extern은 static library 형태이든 DLL/so 방식이든 무엇이건, 외부로 노출되는 전역 함수 및 변수 명칭을 선언하는 키워드이다. 그런데 기왕 대외 선언을 하는 김에 노출을 하는 방식도 옵션을 줘서 같이 지정할 수 있다.
모르는 사람에게는 굉장히 기괴해 보이는 문법인 extern "C"가 바로 그것이다. 이건 함수 명칭을 C++ 스타일로 decorate를 할지, 아니면 예전의 C 시절처럼 원래 이름을 변조 없이 그대로 선언할지를 지정한다.

C++에서 변조니 decorate니 해서 굳이 언어의 ABI 차원에서 호환을 깨뜨려야 하는 이유는.. C++에는 C와 달리 함수 인자를 기반으로 오버로딩이 존재하기 때문이다. 그러니 argument의 개수와 타입들에 대한 정보가 이름에 첨가돼야만 이 함수를 그 이름으로 유일하게 식별할 수 있다.

뭐, static 함수는 대외 노출이 아니니 한 번역 단위 안에서 함수 이름이야 어떻게 붙이건 전혀 상관없으며.. C++ 클래스 멤버 함수는 애초에 C언어에서 접근 불가능한 물건이이고 무조건 C++ 방식으로 decoration을 해야 한다. 그러니 extern "C" 옵션이 필요한 곳은 C와 C++이 모두 접근 가능한 일반 전역 함수 정도로 한정된다.

"C" 말고 쓸 수 있는 문자열 리터럴은 "C++".. 요 둘뿐이다. 그리고 "C++"은 디폴트 옵션이므로 signed만큼이나 잉여이고, 오늘날까지도 사실상 "C"만 쓰인다.
만들고 있는 라이브러리가 자기 제품 내부에서밖에 안 쓰이거나, 어차피 소스째로 통째로 배포되는 오픈소스여서 특정 컴파일러의 ABI에 종속되어도 아무 상관 없다면.. 함수를 C++ 형태로, 아니 C++ 클래스 라이브러리 형태로 선뜻 만들 수 있을 것이다.

그게 아니라면 외부 노출 함수 이름은 어느 언어에서나 쉽게 import 가능한 extern "C" 형태로 만드는 게 일반적이다. extern "C" 다음에는 이 구간에서 선언되는 명칭들을 모두 C 방식으로 노출하라고 중괄호 {}까지 줄 수 있으니 생소함과 기괴함이 더해진다.

이건 컴파일러의 구문 분석 방식을 변경하는 옵션이 아니다. {} 안의 코드는 C 문법으로만 해석하라는 말이 절대 아니다. extern "C" 방식으로 선언된 함수의 안에서도 템플릿, 지역 클래스 등 C++ 문법은 얼마든지 사용할 수 있고 타 C++ 객체를 참조할 수 있다. 단지 이 함수는 동일 명칭의 여러 오버로딩 버전을 만들어서 대외적으로 제공할 수 없을 뿐이다.

또한, 컴파일러의 최적화나 코드 생성 방식에 영향을 주지도 않는다. stdcall, pascal, cdecl 같은 calling convention이야 인자를 스택에다 올리는 순서 내지 스택 주소 복귀를 하는 주체(caller or callee)를 지정하는 것이니까 코드 생성 방식에 영향을 준다. 언어 문법 차원에서의 프로토타입이 동일하더라도 calling convention이 다른 함수끼리는 포인터가 서로 호환되지 않는다.
그에 반해 extern "C" 지정이 잘못되면 obj와 lib 사이에 공급된 명칭과 요청한 명칭이 일치하지 않아서 끽해야 링크 에러가 날 뿐이다. 개념이 이렇게 정리된다.

Posted by 사무엘

2019/11/16 08:32 2019/11/16 08:32
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1684

1. 문법 함정

C/C++에서 연산자로 쓰이는 토큰(문자)들 중에는 문맥에 따라서 의미가 중복될 수 있는 것이 있다.
예를 들어 * () [] 같은 토큰은 값을 계산하는 수식에서 쓰일 때와, 변수를 선언할 때 의미가 서로 다르다. 한쪽에서는 인근의 변수가 배열· 포인터· 함수 타입임을 나타내지만, 다른 쪽에서는 실제로 배열 첨자나 포인터를 역참조하고 함수를 호출하는 역할을 한다.

심지어 =조차도 int a=5; 와 그냥 a=5; 에서 =는 문법적인 의미가 서로 동일하지 않다. 똑같이 =를 썼더라도 중괄호를 동원하여 배열이나 구조체를 초기화하는 것은 일반 수식에서는 가능하지 않기 때문이다.

이런 것 말고도 콤마(,)의 경우.. 함수 인자 구분자와 쓰임이 완벽하게 겹친다. 그렇기 때문에 함수 인자에서 콤마 연산자를 쓰려면 수식을 괄호로 싸야 한다.

그리고 <>로 둘러싸인 템플릿 인자에서 부등호 내지 비트 이동 연산자를 쓸 때도 상황이 좀 난감해진다. 템플릿 인자에 typename만 올 때는 <>가 모호성을 전혀 일으키지 않지만, 문제는 템플릿 인자로 정수도 들어올 수 있다는 것이다. 그리고 값이 컴파일 타임 때 결정만 될 수 있다면 정수값을 만들어 내는 각종 연산자들도 당연히 쓰일 수 있다.

template class Foo<size_t N> { .... };

Foo<(a>b ? 5:3)> bar1;
Foo<(MAX>>3)> bar2;

그러니 위와 같은 상황에서는 수식 전체를 괄호로 싸야만 한다. 괄호가 단순히 같은 수식 안에서 연산 우선순위를 조절할 때만 쓰이는 게 아니라는 점이 흥미롭다. 수식 영역과 함수 및 템플릿 인자 영역을 구분할 때도 쓰인다.

std::vector<std::list<int>> vl;

요렇게 중첩되었던 템플릿 인자들이 한꺼번에 종결될 때 > 사이를 강제로 띄우지 않아도 되게 컴파일러의 동작 방식 지침이 달라진 때가 내 기억이 맞다면 C++03과 C++11사이였지 싶은데.. 정확하게는 모르겠다.

그 밖에 2[a]가 가능하다는 C/C++의 변태적인 특성상, 람다와 관련해서 또 변태 같은 중의성을 만들 수 있지는 않으려나 궁금한데, 너무 머리가 아파서 더 생각해 보지는 않으련다.
요즘 C++은 auto라든가 using, delete를 보면 =를 사용하는 새로운 문법이 여럿 생긴 것 같다.

2. 비표준이지만 표준처럼 쓰이는 함수

C언어 라이브러리에 있는 모든 함수들이 100% 표준이고 어느 플랫폼에서나 동일하게 사용 가능한 게 아니다.
본인은 평소에 Visual C++만 쓸 때는 이런 걸 전혀 의식하지 않고 지냈는데.. strlwr과 심지어 내 기억이 맞다면 strdup도 macOS에서는 지원되지 않는 걸 최근에 확인하고는 놀랐었다.
물론 저런 함수들이야 하는 일이 워낙 간단하니 3분 만에 직접 짤 수도 있다. 하지만 핵심은 저건 universal한 표준이 아니라는 것이다.

Visual C++도 세월이 흐를수록 '표준 준수'를 강조하는 쪽으로 라이브러리의 디자인이 바뀌다 보니, 관례적으로 제공되긴 했지만 엄밀히 말해 표준이 아닌 함수들에 대해서는 앞에 밑줄을 붙여서 구분하는 추세이다.
하긴 그러고 보니, Visual C++을 업그레이드 한 뒤에 기존 코드가 컴파일되지 않아서 수정하던 내역 중에도 멀쩡한 함수 앞에다가 _를 붙이는 게 많았다. 일례로, 이분 검색 함수는 bsearch가 당당히 표준으로 등재돼 있지만, 그에 상응하는 선형 검색 함수는 표준이 아니어서 그런지 _lfind이다.

3. 스택 메모리의 임의 할당

그러고 보니 비표준 함수 중에는.. malloc의 변종으로서 가변 길이(= 크기가 런타임 때 정해지는) 메모리를 heap이 아닌 무려 현재의 스택 메모리에서 얻어 오는 alloca이던가 malloca인가 하는 물건도 있었다. 옛날 16비트 Turbo C에만 있는 줄 알았는데 현재의 Visual C++에서도 지원은 하는가 보다. 물론 앞에 밑줄은 붙여서 말이다.

얘는 C에서 문법적으로 가능하지 않은 동적 배열을 heap이 아닌 스택 메모리에 구현해 준다. 메모리 할당 속도가 heap을 다루는 것보다 훨씬 더 빠르며, 함수 실행이나 scope이 끝날 때 해제도 자동으로 되어 memory leak 걱정을 할 필요 없으니 편리하다. 지금 실행 중인 함수의 stack frame을 조작하는 물건이니, 겉으로는 함수 호출 같지만 실제로는 컴파일러 인트린식 형태로 구현되지 싶다.

이렇게 생각하면 얘는 장점이 많아 보이지만.. 일단 할당 장소가 장소인 관계로 (1) 수 MB 이상급의 대용량 메모리를 할당할 수 없으며, (2) 할당 방식의 특성상 heap 메모리처럼 할당과 해제를 무순으로 임의로 자유자재로 할 수 없다. (3) C++ 언어의 보조를 받는 게 없기 때문에 해제와 C++ 객체 소멸을 한데 연계할 수도 없다.

이런 한계로 인해 스택에서의 동적 메모리 할당은 생각만치 그렇게 유용하지 않다. 본인도 지난 20여 년 동안 C/C++ 프로그래밍을 하면서 이걸 전혀 사용해 본 적이 전혀에 가깝게 없었다.
저 함수가 괜히 비표준이 아닌 셈이다. 마치 정수 기반 고정소수점과 비슷한 위상의 이단아인 것 같다. 다만, 그럼에도 불구하고 본인은 이런 상황은 어떨까 하는 생각을 해 보았다.

생성자에서 문자열을 인자로 받아들여 적절한 처리를 하는 기반 클래스가 있다.
이걸 상속받아 파생 클래스가 만들어졌는데, 얘는 자주 쓰이는 문자열 패턴을 손쉽게 생성하기 위해 여러 개의 문자열이나 숫자를 숫자를 인자로 받으며, 이로부터 단일 문자열을 생성하여 기반 클래스의 생성자에다가 전달한다. 즉, 이런 꼴이다.

Derived::Derived(string arg1, string arg2, int num):
 Base( prepareArgument(arg1, arg2, num) ) {}

예시를 보이기 위해 편의상 string이라는 자료형을 썼지만, 실제로 저기서 쓰이는 것은 const char * 같은 문자열 포인터이다.
즉, 나는 Derived의 생성자에서 char buf[128] 같은 스택 기반 지역변수 배열을 선언한 뒤, 거기에다 arg1, arg2, num의 정보를 담고 있는 문자열을 담고 그걸 Base의 생성자에다가 전달하고 싶으나.. 문법 구조상 그건 가능하지 않다. 기반 클래스는 파생 클래스의 생성자가 실행되기 전에 초기화가 완료돼야 하기 때문이다. 그러니 파생 클래스의 생성자 함수에서 확보해 놓은 스택 변수의 공간을 받을 방법도 존재하지 않는다.

이럴 때 prepareArgument(_alloca(len), arg1, arg2, num) 이런 식으로 static한 보조 함수를 만들면 굳이 힙 메모리 할당과 생성자· 소멸자가 뒤따르는 범용 string을 쓸 필요 없이 스택에다가 문자열을 담을 공간을 임시로 확보하여 소기의 목적을 달성할 수 있을 것으로 보인다.

4. 쓰레기값

'초기화되지 않은 변수, 쓰레기값'이라는 건 내가 아는 프로그래밍 언어들 중에는 C/C++에만 존재하는 개념이다. 물론 컴퓨터라는 기계에 본질적으로 존재하니까 C/C++에도 존재하는 것이지만 말이다.
이것 때문에 야기되는 버그의 황당함과 막장스러움은 뭐, 이루 말로 형용할 수 없다. 같은 소스 코드가 release 빌드와 debug 빌드의 실행 결과가 달라지는 건 애교 수준이다. 프로그램이 미묘하게 삑사리가 나고 있어서 몇 시간을 끙끙대며 디버깅을 했는데 원인이 고작 이것 때문인 일이 비일비재하다.

개인적으로는 부모 클래스의 멤버가 초기화되지 않았는데 그걸 자식 클래스에서도 초기화하지 않은 것, 처음에는 0 초기화가 보장되는 static 영역에 있던 오브젝트를 별 생각 없이 스택/힙으로 옮긴 것, 심지어 한 멤버를 초기화할 때 아직 초기화되지 않은 다른 멤버를 참조해서 망한 것이 기억에 남아 있다.

간단한 int 지역변수가 초기화되지 않은 건 컴파일러 차원에서 잡아 주지만 위와 같은 사항들, 복잡한 구조체의 멤버가 일부 초기화되지 않는 것, 스택이 아닌 힙에서 할당하는 동적 메모리가 돌아가는 사정은 컴파일러도 일일이 다 챙겨 주지 못하기 때문에 더 복잡한 정적 분석의 영역으로 가야 한다.

그런데 개인적으로 의문이 드는 건 초기화되지 않은 쓰레기값이란 건 어느 정도로 무질서하냐는 것이다. 무슨 수학적으로 균일한 난수 수준일 리는 없을 것이다.
그 쓰레기들의 값에 영향을 주는 것은 정확하게 무엇일까? (스택이냐 힙이냐에 따라 다르게 생각해야 할 듯) 컴파일 시점에서 결정되어서 한번 빌드된 프로그램은 동일한 동작 조건에서는 불변인 걸까? 혹은 운영체제에 따라 달라질 수 있을까?

마치 중간값 피벗 기반의 퀵 정렬이 최고 시간 복잡도가 나오게 공격하는 방법을 연구하는 것처럼 저것도 뭔가 컴퓨터공학적인 고찰이 필요한 의문인 것 같다.

5. 메모리 주소의 align 문제

"어..? 구조체의 크기가 왜 각 구조체 멤버들의 크기의 합보다 더 크지? 컴파일러의 버그인가?"
본인이 이렇게 크게 놀랐던 게 벌써 20여 년 전, 고딩 시절에 도스용 DJGPP를 갖고 놀던 때였다.
그때는 지금 같은 구글 검색도 없고 네이버 지식인도 없고.. 이런 시시콜콜한 이슈를 다루는 C언어 서적도 없었으니, 궁금하면 물어 볼 만한 곳이 PC 통신 프로그래밍 관련 동호회 게시판밖에 없었다.

메모리 취급에 매우 관대한 x86 물에서만 놀던 사람이라면 word align이라는 개념이 더욱 생소할 수밖에 없다. 더구나 그 경계에 맞지 않은 단위로 메모리 접근을 시도할 경우, CPU가 귀찮아서 예외까지 날린다면??
본인은 포팅이라는 걸 할 때 word align을 조심해야 한다는 것을 머리로는 들어서 알았지만 그 문제를 회사에서야 실제로 겪었다.

이제 네이티브 코드는 반드시 ARM64 기반으로 빌드해야 하니 해당 부분을 64비트로 다시 빌드했다. 그런데 동일한 엔진을 얹은 안드로이드 앱이 어떤 기기에서는 잘 돌아갔는데 다른 기기에서는 뻗었다.
죽은 지점이 어딘지는 stack dump를 통해 알아낼 수 있었지만 거기는 null pointer, buffer overflow 등 그 어떤 통상적인 메모리 문제가 발생할 여지도 없는 곳이었다.

알고 보니 거기는 파일 형태로 기록하는 조밀한 버퍼에다 wcsncpy( reinterpret_cast<wchar_t*>(buf+1), str, len) 이런 짓을 하고 있었으며, 타겟 포인터가 한눈에 보기에도 wchar_t의 크기 대비 word align이 되어 있지 않았다(buf 는 char* ㄲㄲㄲ).
그래서 wcsncpy를 memcpy로 교체함으로써 문제를 해결할 수 있었다. wchar_t는 long과 더불어 포팅을 어렵게 하는 주범이며, reinterpret_cast는 align과 관련된 잠재적 위험성을 발견하는 용도로도 쓰일 수 있다는 점을 알게 됐다.

복잡한 포인터 메모리 조작 코드에서 잠재적인 align 문제를 잡아내는 건 사람의 디버깅만으로는 한계가 있을 텐데, 정적 분석으로 가능한지 궁금하다. 그리고 반대로 레거시 코드를 돌리기 위해 컴파일러가 성능이 떨어지는 걸 감수하고라도 최소한 뻗지는 않게 align 보정 코드를 집어넣어 주는 옵션도 있을 텐데 그것도 궁금해진다.

6. 32비트 단위 문자열

C/C++에서 wchar_t 크기의 파편화로 인해 야기된 혼란과 원성이 워낙 장난이 아니었기 때문에 C++11에서는 아예 크기를 직접 명시하고 고정시킨 char16_t와 char32_t라는 자료형이 built-in으로 추가되었다. int는 32비트 시대에 크기가 변했고 long은 64비트 시대에 플랫폼별로 삐걱거리기 시작했다면, wchar_t는 유니코드와 함께 새로 등장하면서 저 지경이 된 셈이다.

개인적으로 인상적인 것은 char32_t는 U""라고 문자열 리터럴을 나타내는 접두사까지 언어 차원에서 새로 등장했다는 점이다. 드디어 확장 평면 문자도 취급하기 더 수월해지겠다.
그런데 그러면 Visual C++이라면 ""는 1바이트, L""는 2바이트, U""는 4바이트라고 자연스럽게 연결되는데, 처음부터 wchar_t가 4바이트였던 맥에서는 L과 U가 모두 4바이트이다. char16_t에 대응하는 2바이트 문자열은 리터럴로 표현하는 방법이 없나 궁금하다. 오히려 Objective C에서 사용하는 NSString의 @""가 2바이트 문자열 리터럴이다.

char32_t가 언어 차원에서 이렇게 지원되기 시작했는데 str*, wcs*처럼 32비트 문자열 버전에 대응하는 strlen, strcpy, sprintf 등도 있어야 하지 않나 싶다. C++이라면 char_traits 템플릿으로 땜빵할 수도 있겠지만 C에는 그런 게 없으니까..
그리고 템플릿이 없는 저쪽 동네 Java는 32비트 단위 문자열을 취급하는 string class 같은 것도 있어야 하지 않을까? 문자 하나도 확장 평면까지 감안해서 얄짤없이 int로 표기하는 건 직관적이지 못하고 불편하니 말이다.

7. 레퍼런스 사이트

C/C++은 마소의 C#, 애플의 Swift, 썬-오라클의 Java처럼 한 기업이 주도해서 개발하는 언어가 아니다. 그래서 C++ 라이브러리 레퍼런스 같은 걸 검색해도 딱 떨어지는 개발사의 홈페이지가 곧장 나오지는 않는다.
하지만 수 년 전부터 구글 검색에서 상위권으로 노출되고 있는 유명한 사이트는 아래의 딱 두 곳인 것 같다.

http://www.cplusplus.com
https://en.cppreference.com/w

얘들은 개인? 단체? 어디서 운영하는지 모르겠다. C++17, C++20 같은 최신 정보도 곧장 올라오는 걸 보니 유지보수도 활발히 되고 있고 만만하게 볼 퀄리티가 아니다.
마치 Doom 게임 관련 자료를 듬뿍 얻을 수 있는 위키 사이트가 doomwiki와 doom.fandom.com 요 두 계열로 나뉘듯이 말이다.

Posted by 사무엘

2019/11/13 08:33 2019/11/13 08:33
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1683

« Previous : 1 : 2 : 3 : 4 : 5 : ... 158 : Next »

블로그 이미지

철도를 명절 때에나 떠오르는 4대 교통수단 중 하나로만 아는 것은, 예수님을 사대성인· 성인군자 중 하나로만 아는 것과 같다.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2019/12   »
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:
1294662
Today:
84
Yesterday:
561