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. 칭호

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

예수님의 칭호에 대해서는 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)으로 모두 등장한다.

4. 오다/가다 문제

한국어가 영어와 다른 특징 중 하나는 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을 좀 심오하고 거창하게 번역하는 단어로 '임하다'도 있다.

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

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

요한복음 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

30여 년 전에 개최되었던 서울 올림픽은 운동 선수들만 잘 뛰어서 성공한 게 아니었다. 마스코트 호돌이와 주제가 "손에 손잡고" 같은 예술 감성 마케팅도 완벽했다.

개인적으로는 자국의 음악가 대신 일부러 외국인에게 주제가 작곡을 맡기고, 공연도 한국인이지만 외국에서 활동한 그룹에게 맡긴 것이 선견지명이었다고 생각한다. 그래서 음악의 퀄리티가 더욱 올라갈 수 있었다. 고유 모델 자동차를 개발할 때도 첫 단추를 끼울 때 돈 아깝다는 생각을 접고 쿨하게 외국 일류 디자이너에게 디자인을 맡겼으며, 이름도 군사정권이나 북한스러운 시덥잖은 국뽕물 형태로 짓지 않고, 수출을 의식해서 '포니'라고 지었던 것처럼 말이다.

그 뿐만이 아니다. 벤 존슨 선수의 약물 도핑을 잡아낸 기술력, 그리고 자체 개발한 통합 전산 시스템 같은 운영도 아주 성공적이었다. 정말 "우리도 할 수 있다"라는 저력을 세계를 상대로 보이기에 손색이 없었다. 물론 이런 노하우가 갑자기 하늘에서 뚝 떨어진 건 아니고, 자국의 전국체전, 그리고 86년 아시안게임이라는 베타테스트 기회가 먼저 있긴 했다.

오늘은 본인이 서울 올림픽 개막식 동영상을 보다가 문득 떠오른 생각을 좀 열거하고자 한다. 어쩌다 보니 기계 이야기와 사람 이야기가 하나씩 모였는데, 일단 기계 이야기부터 먼저 늘어놓겠다.

1. 전산 시스템의 디지털 서체

본인이 예전부터 강조한 바와 같이, 1953년의 휴전 협정 문서는 한글이 기계식 타자기로 찍혀서 국제적인 역사 기록이 만들어진 거의 최초의 사례이다.
알파벳을 쓰는 서양에서는 학술 논문은 말할 것도 없고 전쟁 중에 삐라 찌라시를 만들 때도 타자기를 써서 일을 아주 신속하게 진행했지만 동양은 아직.. 심지어 펜보다도 더 느리고 불편한 붓을 썼던 것이다.

그런데 그로부터 30여 년 뒤, 서울 올림픽 주경기장 전광판에 떴던 자막은 한글이 디지털 컴퓨터의 화면에 표시되어 국제적인 역사 기록으로 남은.. 완전 최초까지는 아니어도 충분히 초창기 축에 드는 사례이지 싶다. 특히, 내부적으로 단순무식 그림이 아니라 진짜 문자로 처리되어서 출력된 것 말이다.
(화면은 모두 대한뉴스 유튜브 영상들 캡처해서 적당히 짜깁기..)

사용자 삽입 이미지

알파벳· 숫자와 마찬가지로 모든 획을 수평 수직 45도 대각선만으로 구성한 단순한 디자인이요, 확대 계단 현상이 그대로 드러나 보이는 투박한 비트맵이다. 좀 허한 느낌이 드는 ㅅㄷㅈ 같은 초성의 배치를 보면.. 조합 벌수가 그리 많지도 않은 구조로 보인다.

전광판 말고도 그 시절의 대한뉴스 동영상을 열람해 보면 기자나 운영자들이 자료 입력용으로 사용한 전산 시스템의 접속 화면을 볼 수 있다. 일명 GIONS인데.. 난 1980년대의 컴퓨터 프로그래밍 환경은 어떠했을까 아는 게 없으니 신기하기 그지없다. 저 때는 PC 환경에서는 온갖 한글 코드들이 난립하고 조합형이니 완성형이니 하면서 싸우던 때였다. 한글 카드라는 하드웨어(!!)가 있었으며 소프트웨어적으로 한글 입출력을 구현하는 건 고난도 프로그래밍 테크닉이었다.

개인이 단말기 용도로 쓰던 컴은 그냥 IBM XT급인지, 아니면 다 IBM 워크스테이션급인 건지, 16비트인지 32비트인지, x86인지 아닌지(아마 아닌 듯)... 같은 것 말이다. 더구나 GIONS는 그 이름도 유명한 코볼 언어로 작성됐을 거라는 말이 있다.

사용자 삽입 이미지

이 화면에서 쓰인 한글 폰트는 비교적 친숙하다. 글자가 전반적으로 홀쭉하고 영문· 숫자도 전각으로 표현되었던 것 같다.

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

그런데 본인의 고개를 갸웃거리게 하는 것은 이 화면이다. 이건 분명 모니터 화면인데 영문· 숫자는 반각으로 표현되었을 뿐만 아니라 고해상도이다. 화면용 폰트가 아니라 24픽셀급의 도트 프린터 인쇄용 폰트가 쓰였다.
그 시절에 텍스트 모드 화면에서 인쇄용 폰트를 볼 일은 PC 레벨에서는 없었을 텐데.. 이건 도대체 무슨 기기인지 궁금하다.

서울 올림픽의 통합 전산 관리 시스템(모든 경기들의 진행 상황 파악, 선수들 기록 등록, 기사 전송 등...)인 이 GIONS는 순수하게 국산 기술로 개발되었고 대회 중에 한 번도 오류 없이 성공적으로 잘 돌아갔다. 서울 올림픽의 개최를 성공으로 이끈 숨은 일등공신 역할을 했음은 물론이다.

하지만 올림픽이 끝난 뒤에는 이 솔루션은 전혀 유지보수 되지 못한 채, 완벽하게 잊혀지고 사라져 버렸다. 심지어 후대의 올림픽 개최국 중에서 GIONS를 구매해서 도입하고 싶어하는 곳이 있었는데도 도움을 주지 못했다. 그때 한데 모였던 개발 인력은 각자 자기 먹고 살 길을 찾아 이직하고 흩어졌다. 이거 무슨 거북선도 아니고 뭐냐..

물론 지금이야 최신 웹과 DB 기술을 이용해서 그 정도 SI를 구축하는 것은 30년 전 그 시절만치 대단하고 거창한 일은 아닐지 모른다. 하지만 신기술이 아직 가치가 있던 시절에 그게 더 널리 쓰이지 못한 것은 애석한 노릇이다.

2. 고등학생들의 개회식 매스게임

올림픽의 개회· 폐회식 때는 주최국에서 준비한 온갖 화려 현란한 공연들이 펼쳐져서 흥을 돋우고 관객들에게 잔치 분위기를 내는 것이 관례이다. 서울 올림픽도 예외가 아니었다.
이런 건 주최국에서 내로라 하는 예술가들이 국가로부터 의뢰를 받아서 컨텐츠를 만든 뒤, 전공자 전문 무용수들이 대가를 받고 공연한다. 그런데 서울 올림픽의 경우, 거기에 덤으로 '동대문 상업 고등학교', '서울 여자 상업 고등학교' 이렇게 남녀 실업계 고등학교 두 곳에서 총 1100명이나 되는 2학년 학생들이 소집되어 매스게임을 했다.

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

이 사람들은 처음에 전문 무용수들이 '태초의 빛'이라는 창세기 1장스러운 공연을 할 때는 들러리로 자리 채우는 역할만 했지만, 그 다음 '어서오세요' 편에서는 자기들이 직접 운동장을 뛰어다니고 구르면서 88, WELCOME, 어서오세요, 오륜기 등등 글자 픽셀을 만들고 심지어 색깔띠(?)를 펼쳐서 펄럭이기까지 했다.

아예 체조 선수나 발레리나 같은 레오타드도 아니고 반쯤 운동 선수 같은 희고 짧은 복장에, 색깔띠는 저렇게 머리에 두르고 있는 게 무척 인상적으로 느껴졌다.

사용자 삽입 이미지

매스게임은 그 특성상 민주· 인권이 발달한 나라에서는 잘 안 하고 사회· 공산주의 집단· 전체주의 똥군기스러운 곳에서 체제 선전과 단결력 과시(?)를 목적으로 많이 하는 편이다. 가령, 북한의 아리랑 공연은 그야말로 HD급 해상도를 자랑하는-_- 카드섹션을 선보이는 걸로 유명하다. 그 대가로 침해되는 북한 어린이와 청소년들의 개인 시간과 건강, 학습권 따위는 아웃 오브 안중..

우리나라는 북괴 정도까지는 아니지만 그래도 옛날엔 주변에서 선진 문물이랍시고 보고 배운 게 온통 일본물밖에 없고, 또 생존을 위해서라도 멸사봉공 군대 문화와 전체주의 분위기가 오랫동안 쩔었다. 그렇기 때문에 학교나 대기업 같은 데서 맛보기 수준의 매스게임은 종종 행해졌다. 당장 전국체전 때만 해도 운동부 애들의 운동 경기뿐만 아니라 여학생들 집단군무가 관행이었다는 것을 옛날 대한뉴스를 보면 알 수 있다.

군대는? 제식부터가 일종의 집단군무이다. 카드섹션 같은 건 없겠지만 그 대신 무릎을 안 굽히고 걷는 거위걸음 행군이 있다.
그리고 국군의 날 기념 퍼레이드 연습이 통과의례였다. 퍼레이드에 선발된 부대의 일반 보병들이야 각 잡고 광낸 군장 메고 행군만 하겠지만 사관 생도나 특전사들은 뭔가 더 특별한 걸 보여줘야 하니 연습하느라 고생이 이만저만이 아니었을 것이다. 요즘이야 대규모 특별 행사를 5년마다 한 번씩 대통령이 취임한 해에만 하지만, 옛날 군사 정권 시절에는 그 짓을 여의도 광장과 서울 종로에서 매년 해야 했다.

자, 그런 와중에.. 서울 올림픽 개회식의 매스게임에 참여했었다는 익명의 서울여상 졸업생의 회고 인터뷰가 어째 딴지일보에 올라와 있어서 본인은 재미있게 읽었다. 참고로 딴지일보 기사도 무려 2004년작이니, 올림픽 당시와 지금의 중간 사이인 엄청난 옛날이다.;; "그리스 아테네 올림픽 개회식은 보셨나요?"라는 인터뷰 질문에서 세월의 격차를 느낄 수 있다.

인터뷰 내용에 따르면..

  • 그 아이들은 1학년 2학기에 들어갔을 무렵부터 거의 1년을 연습했다고 한다. 매일 하루도 빠짐없이는 아니었겠지만 그래도.. 연습날은 오전 수업만 하고 오후 내내 해 떨어질 때까지.. 이 때문에 수업 시간이 펑크난 건 방학을 줄여서 메워야 했다.
  • 자기 학교가 뜬금없이 개회식 매스게임에 참여하기로 결정된 것은 자기 반이 배틀로얄 시범 학급으로 지정된 과정과 다를 바 없다. 학생들의 의사는 반영되지 않았다. 그 시절엔 세계가 지켜보고 있으니 그냥 나라와 학교에서 시키면 애국이라는 명목으로 해야 했다. 까라면 까야 했다.
  • 두 학교가 같이 모여서 연습할 때는 연습 장소로 효창 운동장이 주로 쓰였다.
  • 세 번 정도 올림픽 주경기장에서 개막식 폐막식 총연습 리허설이 있었는데, 마지막 '최종' 리허설 때는 학부모들도 공식적으로 초청받았다고 한다.
  • 조금 씁쓸한 얘기이지만, 실업계고가 선택된 이유는 일반 인문계고에서는 애들 공부하는 데 방해 된다고 학부모들 반대가 심했기 때문이랜다. (그 전의 86년 아시안게임 때의 선례)
  • 올림픽이 끝난 뒤에 모든 참가자들은 고생했다고, 수고 많았다면서 나중에 국가로부터 자그마한 기념 훈장쪼가리를 받았다.

그래도 강제 동원된 것치고는 저 클로즈업 영상에 나오는 학생들의 표정은 대체로 밝아 보인다.
개회식 이후에 폐회식 때는 또 다른 실업계 고등학교 학생들이 매스게임을 했다. 학교명은 공주농고, 해성여상이라고 뜨는데, 지금은 두 학교 모두 특성화 고등학교를 표방하며 이름이 바뀌어 있다. 지방에 있는 학교이면 이동하느라 연습하기가 더 어려웠을 것 같은데..

정말 88 올림픽을 소재로 영화 좀 나오는 게 없으려나 모르겠다. 운동 선수, 운영 인력 등 무엇 하나를 집어도 드라마틱한 소재는 만들어질 수 있을 것 같은데 말이다.
참, '태초의 빛'을 지도한 이화여대 무용학과 교수는 성명이 어째 '유 관순' 열사랑 발음이 같다..; 일부러 노린 작명인지 진지하게 궁금해진다.

서울 올림픽은 전세계 지구촌 축제를 표방하며 개최되었고, 실제로 그 목표를 어느 정도 이뤘다. 자유 진영과 공산권 국가들이 모두 참가해서 그 전의 모스크바· LA 올림픽의 한계를 훌륭하게 극복했기 때문이다.
하지만 그 와중에 북괴는 펜대 굴리며 곰곰이 계산을 해 보니.. 결국 자기 주민들에게 미칠 여파를 생각하면 안 되겠다 싶었는지 불참했다. 불참만 한 게 아니라 KAL858편 테러나 일으키면서 남한의 올림픽 개최를 방해하고 해코지나 했다는 것을 우리는 잊지 말아야겠다.

사용자 삽입 이미지

Posted by 사무엘

2019/11/10 08:35 2019/11/10 08:35
, , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1682

본인이 다니는 교회에서는 매년 8월에 자연의 정취가 살아 있는 곳으로 2박 3일간 하계 수련회를 간다.
거기서 대부분의 교인들은 특정 주제를 두고 진행하는 담임목사님의 성경 특강을 시리즈로 듣는다. 하지만 불신자 내지 초신자들을 위한 복음 전도 집회를 따로 진행하는 분도 있고, 어린애들 주일학교를 진행하는 분도 있다. 이분들은 목사님의 특강을 못 듣는다.

그리고 본인은 언제부턴가 주일학교 강사 중 하나 역할을 맡기 시작했다.
작년에는 주일학교 공부 주제가 "하늘나라 heaven", 즉 미래 시제였다. 그랬는데 올해는 이와 대조적으로 주제가 "교회사"로, 어째 과거 얘기가 됐다.
형제들 세 명이 번갈아가며 2, 30분 남짓 강의를 하기로 했다.

신약 교회사에서 대격변에 달하는 큰 사건은 콘스탄틴 (313), 종교 개혁 (1517) 정도이다.
그렇기 때문에 이걸 기준으로 시기를 나누면 별다른 고민할 필요 없이 세 명의 강의 구간이 딱 정확하게 갈라지게 된다.

1부는 침례인 요한, 예수님의 승천과 교회 태동, 사도행전, 네로 황제의 박해, 최근 영화 '바울'의 고증 분석, 로마 제국에 의한 맹렬한 박해, 예수님 제자들의 최후, 초기 교부들.. 이런 게 나올 것이다.
다루는 시기가 상대적으로 짧으나, 첫 타인 만큼 기본 개념을 얘기해 줘야 되는 게 많다. 유대인과 교회의 차이, 세례와 침례의 차이, 기독교 천주교 개신교의 관계 등.

2부는 중세 암흑기, 종교 재판, 위그노· 노바티안· 왈덴시스 등 "개신교가 아닌 계통의" 기독교 크리스천들의 계보, 위클리프 이래로 틴데일 등 킹 제임스까지 영어 성경 번역 역사, 성 바돌로메 대학살, 에라스무스의 공인 본문, 루터가 나올 것이고..

그리고 3부는 미국 건국, 18~19세기의 부흥, 그리고 "한국의 교회사", 성경 변개 내력, 20세기 이후의 거대한 배도의 물결이 다뤄질 것이다.

내가 강의를 전부 맡는다면 내용을 저렇게 편성할 것이다.
본인은 셋 중 하나만 하라면 제일 최근인 3부를 맡아서 어린 꿈나무들에게 특별히 반공 교육을 해 주고 싶었다.

우리나라의 1948년 5월 10일 총선거일은 주일을 피해서 일부러 월요일로 정해졌는데 북괴는 1946년 11월 3일 총선거를 일부러 일요일로 정했다는 것을 얘기하고,
제헌 국회 기도문을 북괴의 제2차 로동당 대회와 대조해서 소개하고 싶었다.

일제 말기뿐만 아니라 1950년 가을과 겨울에도 반도에 순교의 피가 얼마나 많이 흘려졌는지, 북괴가 왜 저렇게 기독교를 못 잡아먹어서 안달일 수밖에 없는지 본질적인 이유를 얘기할 생각이었는데..

형제 중 한 분이 사정상 마지막 날 3부 시간대에만 강의가 가능하다고 해서 3부는 그 형제에게 양보하게 됐다. 나는 그 대신 2부를 맡았다.
하지만 그 형제도 나 만만찮은 반공 보수 우파이니 안심이 된다. 사실 크리스천이라면 누구나 이렇게 되는 게 정상이지.. 특히나 요즘 같은 나라 꼬라지라면 더욱 말이다.

좀 수위가 쎈 슬라이드 몇 장만 빼고 대부분을 내 블로그에다가도 공개하도록 하겠다. 도움 되셨으면 좋겠다.
다만, 듣는 애들이 대부분 초등학생이다 보니, 강의를 하던 당시에는 문장들이 전반적으로 여전히 너무 길고 어렵다는 평을 받았다.

사용자 삽입 이미지

제목부터가 '피 흘린 발자취'인데 슬라이드 배경은 응당 어두운 색으로 뽑아야겠다는 생각을 진작부터 했다.

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

3부작의 강사가 모두 다르지만, 강의하는 주제와 내용과 범위를 얼추 합의했기 때문에 '지난 줄거리'를 짤 수 있었다.
교회, 박해, 침례.. 모두 아주 중요한 개념이다.

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

천주교와 기독교는 그저 구원 교리나 마리아나 연옥 같은 교리만 다른 게 아니라 역사관부터가 극과 극으로 다르다.
콘스탄틴의 기독교 공인은 일제 시대 무단 통치가 문화 통치로 바뀐 정도라고 생각하면 된다. 참조할 만한 다른 사건은..

  • 예수님이 받으신 사탄 마귀의 마지막 시험 "내게 절하라. 그럼 내가 이 모든 걸 너에게 주겠다."
  • 파라오가 출애굽과 관련해서 모세에게 제안했던 온갖 타협 절충안들. "애들은 놔두고 성인들만 가라", "가축들은 놔두고 가라" 등등등..
  • 사사기 후반부에서 벌어지던 온갖 성직자들의 타락, 예배의 왜곡
  • 겨자씨가 거대한 나무가 되어 공중의 새들이 가지에 앉는 사건 비유

정도이다.

사용자 삽입 이미지

특히 침례교인들은 유아 세례 반대 같은 이유로 인해, 카톨릭뿐만 아니라 장로교 같은 종교 개혁 개신교 교파들로부터도 박해를 받았다. 쟤들을 가만 놔두면 자기 교리가 틀린 꼴이 되기 때문이다. 물론 그 박해는 스페인 종교재판소 같은 것하고는 규모나 스케일이나 맥락이 좀 다른 박해이다.

사용자 삽입 이미지

그래서 부유한 과부들이 제일 호구였다. 마 23:14 / 막 12:40와 정확히 일치한다.
이교도 마녀로 몰아서 죽여 버리고 재산 몰수하면 끝이다.

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

중세 유럽은 이랬다.

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

종교 개혁은 유익하고 선한 결과물도 있던 한편으로, 한계도 있었다.
성경 번역 내력과 관련된 슬라이드는 생략한다.

사용자 삽입 이미지

이제 강의를 마무리 하는 퀴즈 차례이다.
처음엔 '아닌 것은'이라고 문제를 만들었다가.. 교육학적인 요소를 감안(?)하여 '옳은 것은'이라고 형태를 바꿨다.

사용자 삽입 이미지

교회사를 총망라 정리하는 마지막 문제이다. 나름 머리를 굴려서 만든 문제이긴 한데...

  1. 돌탕질 -- 율법을 어긴 죄인을 처형하는 방법으로, 유대인 동족끼리 행함. (예: 스데반의 순교)
  2. 십자가형 -- 고대 로마 제국에서 행하던 가장 잔혹한 처형 방법. 로마 시민에게는 하지도 않았음. 그래서 로마 시민권이 있었던 바울은 로마 대화재의 주범이라는 극악 죄인으로 몰렸음에도 불구하고 십자가형까지는 아니고 참수형을 당했다.
  3. 화형 -- 이건 뭐.. 종교 재판소가 1순위이고, 로마 제국도.. 인간 횃불이라는 방법으로 행했다고도 볼 수 있다. 다만, 동족 유대인이 행한 건 절대 아니므로 오답이다.
  4. 로마 제국 시절에 콜로세움에서 행해졌으니 이게 정답이고..
  5. 로마 제국은 몽둥이질 채찍질을 하고 잔인하게 처형을 했지만, 중세 종교 재판소만치 별 희한한 변태적인 고문까지 하지는 않았다.
사용자 삽입 이미지
이렇게 다음 강의자의 내용 예고도 해 줬다~ 이상. ㅎㅎ

Posted by 사무엘

2019/11/07 08:31 2019/11/07 08:31
, , , , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1681

등산 답사기: 수락산 #2

본인은 올해 가을엔 어쩌다 보니 등산 야영을 시리즈로 계속하게 됐다. (1) 예빈산(남양주), (2) 청계산 국사봉+발화산(의왕+성남) 다음으로는 (3) 수락산을 다시 찾아갔다. 한강 근처의 예빈산· 예봉산 일대도 남양주이고 서울 북동부의 수락산 근처도 남양주라니.. 실감이 잘 가지 않았다. 세부 행정구역이 별내면과 와부읍으로 서로 다르긴 하다만 말이다.

지금으로부터 3년쯤 전, 겨울에 장암 역 근처에서 수락산을 올라서 주봉 정상에 도달한 뒤, 남양주의 청학리 수락산 유원지 방면으로 하산한 적이 있었다. 산을 서에서 동으로 횡단한 것이다. 이번에는 차를 가져가서 수락산 유원지에서 등산을 시작한 뒤, 하산도 동일 지점으로 했다.

그러니 등산 경로의 관점에서 보면 이번 산행은 새로운 산이나 등산로를 개척한 것이 없었다.
하지만 시간이 3년에 가깝게 지나니 기존 경로도 충분히 새롭게 느껴졌으며, 수락산은 재방문만으로도 예빈산이나 청계산과는 사뭇 다른 경험을 선사했다. 암반이 많은 돌산이며, 물이 졸졸 흐르는 계곡도 있기 때문이었다. 그리고 무엇보다도...

사용자 삽입 이미지

이 등산로는 꽤 높은 곳까지 자동차 접근성이 좋았으며, 이렇게 차를 댈 만한 곳도 곳곳에 있었다. 내가 굳이 이 경로를 택한 주 이유 중 하나 역시 이것이었다.

경치 좋은 계곡의 주변 공간을 어디선가 무단 점유하고는 방문객에게 바가지 요금을 물리는 식당들의 불법 영업이 어제오늘 일이 아니었다. 그랬는데 올해는 이 관행을 근절하겠다고 경기도에서 주도적으로 칼을 뽑고 나섰다. 언제까지나 생계형 범죄랍시고 오냐 오냐 봐 주지 않겠다고 말이다. 그래서 그런지 여기도 식당들이 상당수 박살이 난 듯한 모습이었다.

한강 공원들만 해도 텐트와 야식 광고 찌라시, 쓰레기 때문에 몸살을 앓다가 지금은 질서를 많이 되찾았듯이.. 저것도 공권력이 마음만 먹으면 얼마든지 금방 바로잡을 수 있었던 일이었던 셈이다.

사용자 삽입 이미지

한참을 올라간 뒤에야 드디어 차도가 끝나고 사람만이 접근 가능한 돌계단과 비좁은 등산로가 나타났다.

사용자 삽입 이미지

이게 '금류 폭포'이며, 요런 게 바로 여느 흙산에서는 볼 수 없는 풍경이다. 흙바닥이 아닌 바위 위로 물이 줄줄..
이렇게 높은 곳에서도 아주 가늘게나마 물이 흐르는 산은 본인은 지금까지 수락산밖에 못 봤다. 이 정도면 물을 그냥 인위로 끌어올리기라도 한 건가 궁금해진다. 수락산 계곡에서 발원한 이 물은 평지에서 청학천으로 이어진다.

금류 폭포의 바로 옆엔 산장이라고 해야 하나 휴게소라고 해야 하나 자그마한 간이 식당까지 있었다.
예전에도 언급한 적이 있지지만, 여기는 국립공원이 아니기 때문에 이런 민간 산장이 들어서는 게 가능하다. 북한산 같은 곳이라면 등산로를 벗어난 계곡 근처는 몽땅 울타리가 쳐지고, 무단 침입 시 과태료가 부과되었을 것이다.

여기서 정상을 향해 더 올라가면 그리 멀지 않은 곳에 '내원암'이라는 바위와 함께 절인지 암자인지가 있다. 차량이 들어올 수 없는 높고 험한 곳치고는 건물과 마당을 포함한 부지가 꽤 넓었던 것으로 기억한다.
게다가 '해우소'라고 불리는 공중 화장실도 있었다. 실제로 이용해 보지는 않았지만 생긴 형태는 마치 수돗물이 여기까지 들어오기라도 하는 것처럼 수세식이었다.

하긴, 나중에 집에서 지도를 확인해 보니 금류 폭포와 내원암 정도는 해발 고도가 아직 300~350m밖에 안 되었다.
지금까지 올랐던 200여 m 고도는 경사가 여전히 굉장히 완만한 편이었고, 내원함 이후부터가 급격히 가팔라졌다. 실제로 빽빽한 계단을 오르고 또 올라야 하는 곳이 계속해서 등장했다.

사용자 삽입 이미지

아직 정상이 보일 기미가 안 보이는데 날은 계속해서 어두워져 갔다. 하긴, 오늘은 등산 자체를 오후 5시가 돼서야 시작했다.
정상에 거의 다 와서야 그 이름도 유명한 '수락 산장'과 함께 약수터도 등장했다. 1리터짜리 통을 다 채우는 데 내 기억으로 거의 1분 가까이 걸릴 정도로 수압이 낮았지만, 그래도 이 높이에서 맑은 물이 나오는 것만으로 어디냐.. 마시는 용도와 씻는 용도로 모두 도움이 됐다.

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

결국 해가 다 떨어진 뒤에야 주봉 정상에 도착했다. 1시간 반쯤 걸렸다.
수락산엔 여기 말고도 능선에 온갖 이름의 기암괴석 봉우리들이 더 있고 다른 등산로도 있는데, 거기는 아직 가 보지 못한 게 아쉽다.

사용자 삽입 이미지

성경의 '반석 위에 지은 집'에서 착안하여 '반석 위에 친 텐트' 정도 되겠다. ㄲㄲㄲㄲㄲ
따뜻한 간이 숙소에서 휴식을 취하고 도시락을 먹었다.
산을 오를 때까지만 해도 힘들어서 옷이 땀으로 흠뻑 젖고 물을 다 마실 정도였지만, 날씨는 이내 급격히 추워지고 땀이 식었으며, 바람도 세차게 불기 시작했다.

전에 예영을 했던 산들은 한밤중에 정말 아무도 없었지만 이 산은 달랐다. 새벽 1시쯤에 야간 산행을 하는 일행이 수락산 정상에 왔다가 갔다.
아무도 없을 줄 알았던 산 정상 근처 바위에 텐트가 덩그러니 놓여 있으니 그 사람들도 좀 놀랐을 것 같다. =_=;;
"웬 텐트? 허걱~" 하는 소리를 본인도 듣긴 했지만.. 서로 마주치지는 않았다.

그리고 사실은 아까 전에 저녁을 먹고 있던 중에 텐트 문을 열었을 때는 근처에 웬 고양이 한 마리와 마주치기도 했다.
옛날에 인왕산 정상 부근과 북한산 정상에서도 고양이를 봤던 기억이 있다. 야생일 텐데 어디서 어떻게 먹고 사는지 모르겠다.

바람이 너무 세게 불고 시끄러워서 결국은 숙소를 정상 아래의 숲 속 공터로 옮겼다. 여기가 훨씬 더 조용하고 자기 편했다.
달빛이 밝았던 덕분에 주변도 한 치 앞이 안 보일 정도로 암흑천지는 아니었다.

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

그리고.. 눈을 감았다 뜨니 이튿날 아침이 되었다. 처음에 텐트를 쳤던 곳의 낮과 밤 풍경은 이러했다.

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

탁 트인 정상 주변 풍경은 몹시 멋졌다. 근처의 불암산도 수락산보다 약간 더 낮고 작은 축소판일 뿐, 내부 제원(?)은 수락산의 판박이인 것 같다.

사용자 삽입 이미지

어제 깜깜할 때 지나갔던 길이 낮에는 이런 모습이었다.

사용자 삽입 이미지

하산하고 차가 세워진 공터로 돌아오니, 이제야 여기에 차를 몰고 와서 주차 자리를 찾는 등산객들 일행을 여럿 볼 수 있었다.
본인은 여기 올 때는 용마 터널과 구리-포천 고속도로(29) 같은 유료 도로를 적극 활용해서 갔지만, 귀가할 때는 그냥 순화궁로, 덕릉로, 동부 간선 도로 등의 기존 종축 도로만 타고 갔다. 글쎄, 서울 동쪽의 구리와 남양주 쪽으로는 유료 도로와 관련 진출입로들이 유난히 많이 눈에 띄는 것 같다.

  • 산을 관통하는 유료 터널: 용마(아차산), 별내(불암산)
  • 서울-양양 고속도로(60): 남양주*, 덕소삼패
  • 외곽순환 고속도로(100): 구리남양주, 불암산, 토평
  • 구리(세종)-포천 고속도로(29): 갈매동구릉*, 남별내
  • 수석-호평 도시고속화도로: 이패

서울의 남쪽이야 서해안(서서울), 경부(서울), 중부(동서울)라는 3대 '종축' 간선 고속도로가 시작되는 요금소가 있으며, 좀 더 생각하면 관악산 아래를 지나는 유료 도로인 남부순환로, 그리고 유료 터널인 우면산 터널 정도가 떠오른다.

그런데 서울의 동쪽에는 서울-춘천-양양이라는 '횡축' 간선 고속도로가 시작된다. 남양주는 마치 경부의 서울, 서해안의 서서울처럼 폐쇄식과 개방식을 전환하는 톨게이트이다. 그리고 덕소삼패는 남양주보다 전인 개방식 구간에 있지만 경부의 판교 톨게이트처럼 고정된 요금을 징수하는 톨게이트이다.

그리고 서울의 북동쪽으로는 구리(세종)-포천이라는 '종축' 간선 고속도로가 시작된다. 공식 명칭은 세종이지만 과연 그 길고 먼 구간이 모두 개통하는 때는 과연 언제가 될지 모르겠다. 얘는 갈매동구릉 톨게이트가 폐쇄식과 개방식이 전환되는 곳이며, 여기 근처에서는 북중랑 톨게이트를 통해 고속도로를 드나들 수 있다.
폐쇄식 요금소와 개방식 요금소가 뒤섞여 있으니 구조가 더욱 복잡하게 느껴진다. 폐쇄식과 개방식 요금제는 열차로 치면 지정석과 자유석의 관계와도 비슷해 보인다.

서울 북쪽 외곽의 노고산, 사패산, 수락산, 불암산은 모두 터널이 뚫려 있다. 그 중 수락산 아래를 지나는 덕릉 터널만이 무료이고, 나머지는 다들 유료 터널이거나 유료 도로인 외곽순환 고속도로 구간에 포함돼 있다.
이에 덧붙여 수석-호평 고속화도로는 고속도로도, 터널도 아닌 마치 제3 경인 고속화도로와 비슷한 급의 유료 도로이다.

Posted by 사무엘

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

1. 흡연과 재떨이

오늘날은 옛날에는 상상도 할 수 없었을 정도로 금연이 당연한 사회 풍조로 정착했다.
군대에서 보급 담배는 진작에 없어졌으며, 담뱃갑에는 끔찍한 사진과 함께 경고문이 반드시 일정 크기 이상으로 부착되는 게 의무가 됐다.

버스 정류장을 포함한 모든 공공장소와 대중교통 내부에서는 담배를 일체 피울 수 없다. TV 드라마 같은 데서 담배를 뻑뻑 피우는 모습을 내보내는 것조차도 금지됐으며, 부득이하게 흡연 동작이 포함된 영화 장면 따위를 인용할 때는 담배가 무슨 흉기이기라도 한 것처럼 모자이크 처리를 하게 됐다.

하지만 그렇게까지 강하게 규제를 걸고 금기시해도.. "흡연은 폐암을 유발합니다", "당신이 지불한 담뱃값은 국회의원들 월급 주는 데 쓰입니다" 등의 온갖 기발한 문구로 경고를 해도..
그래도 담배를 피울 사람은 여전히 피운다.. =_=;; 수 년 전에 담뱃값이 2500원에서 4500원으로 폭등했어도 담배 판매량과 매출은 이내 예전 수준을 회복했다고 하니 말이다.

옛날에는 그런 풍조를 반영하여 승용차에도 앞쪽 대시보드의 아래엔 시거라이터 잭(...)과 재떨이가 있었으며, 좀 고급 승용차는 뒷좌석 도어의 안쪽에도 재떨이가 비치되어 있었다.
그에 반해 요즘 차는 뒷좌석 재떨이까지는 없다. 전국 지도(< 내비게이션)라든가 돌돌이 닭다리 창문 개폐 크랭크(< 파워윈도우)만큼이나 이제는 찾아볼 수 없어진 물건이다.

그래도 내 차를 살펴보니 시거라이터는 있다. 지금까지 동전통으로 사용했던 자그마한 통이 알고 보니 재떨이였구나..;; 물론 지금까지 이 통에는 담뱃재가 담긴 적은 단 한 번도 없었다.
그 옆에 하이패스 단말기를 연결해 두는 소켓은.. 자동차에만 존재하는 전자기기용 플러그이기라도 한가 모르겠다.

자, 비행기와 관계 없는 서론이 좀 길어졌는데..
이런 강력한 금연 트렌드에도 불구하고 여객기의 화장실 안에는 재떨이 비스무리한 물건이 2019년 현재까지도 의외로 여전히 남아 있다.
기내엔 흡연은커녕 액체 연료 라이터조차도 반입을 못 할 텐데, 그리고 기내 금연은 여객기의 내구연한보다 더 오래 전부터 시행되었을 텐데?
심지어 금연 표지판 바로 옆이나 밑에 재떨이가 버젓이 비치되어 있기도 하다. 왜 그런 걸까? 그 이유는...

사용자 삽입 이미지

아무리 화장실에다 연기 감지기를 설치하고 제발 화장실에서 담배 피우지 말라고 계도를 해도 말 안 듣고 담배를 몰래 피우는 사람이 수많은 탑승객들 중에 꼭 한둘씩 있기 때문이다. 장거리 노선이면 그 긴 시간 동안 담배를 전혀 피울 수 없으니 괴로울 법도 하다. 비행기에 고속버스처럼 휴게소가 있는 것도 아니고..

그래서 기어이 피울 거면 일말의 양심을 발휘해서 담뱃재와 꽁초를 아무 데나 버리지 말고 여기에다가 버리기라도 하라는 자포자기 심정으로 재떨이를 남겨 놓은 거라고 한다..;; 버릴 곳이 없어서 담배 꽁초가 휴지통을 포함한 아무 데나 떨어지면 최악의 경우 다른 쓰레기에 불이 붙어서 기내에 화재가 발생할 수 있기 때문이다.

이 재떨이는 기내에서 흡연이 가능하던 시절의 잔재 레거시가 아니며, 새로 만들어진 비행기도 반드시 갖춰야 하는 법적 의무 사항이다. 마치 자동차에 법적으로 방향지시등과 헤드라이트, 안전벨트가 반드시 있어야 하는 것만큼이나 말이다. 흡연자들을 배려해서가 아니라 화재 예방을 위해서 갖다 놓은 거라고 생각하면 정확하다.
육해공 대중교통 중에서 그나마 흡연이 제일 자유로운 곳은 역시나 선박인 것 같다. 갑판이 있으니까..;;.

여담이지만, 극장에서 영화 본편이 끝나고 엔딩 크레딧이 올라올 때 불이 켜지는 것도 '금연 비행기 내부의 재떨이'와 비슷한 맥락에서 존재하는 관행이다. 영화 제작자들이 엔딩 크레딧을 아무 이유 없이 만드는 게 아니고, 도의적으로 원칙적으로는 모든 관객들이 이것까지 다 진지하게 봐야 영화가 완전히 끝나는 게 맞다.

하지만 현실에서는 불을 켜건 말건 엔딩 크레딧이 나오기 시작하면 자리를 뜨고 나가는 관객이 적지 않으며, 이때 조명이 없으면 깜깜한 계단에서 넘어지는 사고가 발생하기 쉽다. 그런데 이러다 사람이 다치면 극장에 대한 고소로 이어지기 때문에(...), 시빗거리를 없애기 위해 "조기 조명 ON"이라는 권장되지 않는 관행이 극장에 존재하게 되었다.

2. 비행기 이모지

유니코드에는 U+1F6EC Airplane Arriving이라는 이모지가 있는데..
본인은 이걸 보니 피식 웃음이 나왔다.

사용자 삽입 이미지

현실의 비행기는 다들 아시다시피 착륙할 때도 이륙할 때와 마찬가지로 기수가 위를 향하고 있다. 뒷쪽이 앞쪽보다 먼저 착지한다.
이와 달리 저 그림처럼 기수가 아래를 향한 채로 하강하는 건 아무리 봐도 착륙이 아니라 추락하는 모습이다..;;;

일출 노을 풍경과 일몰 노을 풍경을 일반적으로 서로 구분할 수 없듯이.. (그림자 방향이나 지형 같은 단서가 없다면)
정지 사진만으로 비행기의 이륙과 착륙을 구분하는 건 내가 알기로 불가능하다. 굳이 따지자면 이륙이 착륙보다 미세하게나마 더 고각이긴 할 것이다.

그래서인지 이모지에서는 그냥 편의상 기수의 방향과 랜딩기어의 수납 여부로 이륙과 착륙을 구분시켜 놓은 것 같다.

3. 우주 발사체와의 차이

고정익 비행기와 우주 발사체(인공위성? 로켓?)는 모두 지표면에서 끊임없이 수평 이동을 해야 고도가 유지되며, 속도가 너무 느려지면 추락한다는 공통점이 있다. 그러나 이 둘은 당연한 말이지만 요구되는 속도의 수준과 추락 조건이 서로 완전히 다르다. 급이 다르고 차원이 다르다.
마치 육상 교통수단들이 고속으로 갈수록 더 가속하기가 어려워지는 건 공기 저항 때문일 뿐이지, 무슨 광속에 가까워지면서 상대성 이론에 따라 질량이 증가하기 때문은 전혀 아닌 것과 같은 이치이다.

비행기가 빠르게 이동하는 이유는 날개의 상하로 공기의 압력 차이를 만들고 이로부터 양력을 얻어야 뜰 수 있기 때문이다. 자동차는 연료를 연소시키기 위해서 공기 중의 산소가 필요하지만, 비행기는 엔진을 돌리는 것뿐만 아니라 뜨는 것 자체를 위해서도 공기라는 유체가 필요하다. 이걸 유지할 만한 속도를 못 내어 비행기가 양력을 잃고 조종성까지 상실하는 것을 실속(stall)에 빠졌다고 말한다.

한여름에 날씨가 너무 더워지면 공기가 부피가 커지고 밀도가 낮아지는데, 이러면 비행기도 뜨기가 어려워져서 활주거리가 길어진다. 그래서 작은 공항에서는 폭설도 아니고 폭염 때문에 큰 비행기가 뜨지 못해서 결항될 수 있다. (이륙 활주 공간 부족)
또한, 이륙 후에도 공중에서 공기가 갑자기 희박해지는 곳을 지나면 비행기가 고도를 유지하지 못하고 아래로 주저앉게 된다. 이건 폭염으로 인한 레일의 팽창 때문에 고속철이 서행 운행하는 것만큼이나 비행의 악재로 작용한다.

이런 비행기와 달리 지구 궤도를 도는 우주 발사체는 공기와 전혀 무관하게 움직인다. 실속이고 상승 기류고 난류고 나발이고 없다. 애초에 공기를 받는 날개가 있지도 않으며, 로켓은 양력이 아니라 전적으로 추력만으로 날아간다. 비행기의 제트 엔진과 달리, 로켓은 주변의 공기를 빨아들이지 않으며 오히려 연료와 함께 산화제를 자체적으로 내장하고 있다.

그리고 로켓은 그야말로 공기와의 마찰을 걱정해야 할 정도로, 초음속 여객기 콩코드가 그나마 돌파해 봤다는 지구 적도 표면의 자전 속도보다도 10배 이상 빠르게 이동한다.
지표면으로 수직으로 떨어지는 속도보다 수평 이동하는 속도가 커야 지구를 향해 "한없이 추락"하는 게 가능하기 때문이다. 이게 바로 우주 발사체가 추락하지 않고, 그리고 연료도 거의 쓰지 않으면서 비행(?)하는 비결이다.

달로 가는 로켓이라고 해서 무슨 위를 바라보고 달을 향해서 한없이 쭉쭉 올라가는 게 아니다. 우주로 나가는 모든 로켓들은 단별로 가동 시간이 보통 겨우 몇 분, 길어야 10분을 채 넘기지 않는다. 그 짧은 시간 동안 그 많은 연료를 몽땅 소모하면서 수직으로는 겨우 수십~수백 km 위로만 올라가며, 발사체가 지상의 시야에서 사라질 즈음에는 기수를 기울여서 수평으로 필사적으로 가속한다. 지구 궤도를 도는 상태를 만드는 것이 로켓의 목적인 것이다.

쉽게 말해 비행기는 한국에서 미국까지 날아가는 10몇 시간 내내 엔진이 켜져 있다. 그러나 로켓 내지 우주 발사체는 그렇지 않다는 것이 핵심이다. 달로 갈 때는 지구를 도는 타원 궤도의 이심률을 키우고 달 궤도로 끌려가기 위해서 또 가속을 하지만, 그 가속 시간 역시 단 몇 분에 지나지 않는다. 나머지 며칠 동안 날아가는 건 전부 관성 무동력으로 행해진다.
비행기와 로켓이 서로 얼마나 다른 존재인지를 알 수 있다.

Posted by 사무엘

2019/11/01 19:34 2019/11/01 19:34
,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/1679


블로그 이미지

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

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2019/11   »
          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

Site Stats

Total hits:
2620252
Today:
3251
Yesterday:
1544