유혹의 달콤함
마틴 스콜세지 감독의 1988년 작 “그리스도 최후의 유혹”은 많은 논란을 불러 일으킨 영화다. 물론 허구라는 사실을 밝혔음에도 불구하고 신성을 모독한다는 이유로 최초 상영 시 우리나라에 수입이 안 되었다. 그 이후 사회가 좀 널널해진 2002년 쯤 정식 수입 상영되었다. 물론 이 때도 쌍수를 들고 모든 사람들이 반긴 것은 아니었다. 그럼 논란의 핵심이 된 부분은 어디일까? 잠깐 영화 후반부를 살펴 보자. (영화로 보는 인생 - 그리스도 마지막 유혹, 서인석 님의 글을 간추렸다.)
가롯 유다에 의해 로마군에 잡힌 예수는 극심한 고통 속에서 십자가 매달려 있었다. 극심한 고통에 예수는 하나님이 자기를 버렸다고 외친다. 이 때 예수앞에 한 소녀가 나타난다. 이 소녀는 자신을 천사라고 소개하면서 예수가 하나님의 시험을 무사히 통과했다고 전한다. 아브라함이 구원 받았듯이 예수도 구원하려는 것이라고 말하였다. 이 말을 들은 예수는 소녀의 인도를 받아 십자가에서 내려온다.
소녀는 십자가에서 내려온 예수에게 “마음과 세상의 조화가 바로 천국이죠.” 라는 말을 전한다. 예수는 이 말을 증명이라도 하듯이 세상과 조화롭게 산다. 막달라 마리아와 결혼해서 자식도 낳고 행복하게 산다. 이런 평범한 삶을 살면서 세상의 즐거움을 맛 본 예수는 수명을 채우고 죽음을 맞이하게 된다. 이 때 예수의 옛제자인 베드로, 요한 그리고 가롯 유대가 찾아온다. 이들은 예수가 십자가에서 죽은 것으로 믿고 사도와 열심당원으로 살아 왔다. 예수는 이들에게 너무나 반갑고, 그리웠다고 말한다.
그러나 가롯 유다는 몹시 화난 표정으로 예수에게 십자가에서 죽었어야 했다고 말한다. 유다는 예수의 부탁으로 에수를 로마 군인들에게 팔았다. 즉, 예수는 하나님의 나라를 위해 자신을 희생하겠다는 애초의 약속을 버리고, 세상과의 조화를 위해 십자가에서 내려 왔기 때문에, 가롯 유다는 예수를 비판한 것이다. 이 말을 듣고 예수는 기운없는 몸으로 하나님께 부르짓는다. 다시 한번 세상을 구원할 기회를 달라고…
이 외침과 동시에 예수는 십자가에 매달려 있는 젊은 자신으로 돌아간다. 잠깐 동안 꿈에 빠져 있었던 것이다. 그는 천사로 변신한 사탄의 유혹에 빠졌던 것이다. 예수는 사탄의 유혹에서 벗어나 다 이루었다는 말을 남기고 숨을 거둔다.
예수는 “마음과 세상의 조화”라는 말에 사탄에 유혹되었다. 이 말은 언뜻 보기에는 일면 타당하다. 세상을 바꿀 수 없다면 현실에 맞추어서 내 마음을 조화시키는 것이 지상의 천국을 만드는 한 방법일 수 있다.
종교적인 이야기를 꺼내지 않아도 우리는 하루에도 몇 번씩 마음과 세상의 조화라는 사이에서 방황을 한다. 구지 마음과 세상의 조화를 찾지 않더라도, 일신상의 평온함을 위해서 마음을 세상과 조화시키는 경우가 많다. 물론 나이를 먹다 보면, 어느 시점부터는 마음과 세상의 조화라는 화두를 생각하지 않아도, 조화는 습관처럼 굳어져서 고민없이 평화로운 삶을 살게 된다.
얼마전에 약 3년전에 만들었던 시스템의 유지보수를 넘겨 주었다. 지금 몸 담고 있는 부서에서는 1년 무상 유지 보수라는 타이틀을 걸고, 시스템을 만든 후 유지보수를 해주고 있다. 하지만 대부분이 1년 이내에 시스템이 사용되지 않거나 업그레이드 문제가 발생하기 때문에 3년 후에 유지보수를 이관하는 경우는 극히 드물다.
유지보수 이관 작업이 늦어진 이유 중에 하나는 시스템을 잘 만들었기 때문이다. 추가적인 요청 사항이 없다면, 시스템에 문제가 생기기 전까지 유지보수 요청이 없다. 즉, 하자가 발생하지 않는 경우에는 고객쪽에서도 유지보수 요청을 할 필요가 없는 것고, 개발하는 쪽에서도 구지 잘 돌아가는 시스템을 손 봐줄 일도 없다.
어찌되었건, 잘 돌아가는 시스템에 추가 요청 사항이 생긴 것이기 때문에 코드를 바꾸는 작업을 해야한다. 하지만 별도 유지보수 계약을 잡지 않는 이상, 개발팀에서도 별도의 공수를 추가 투자할 필요는 없다. 그렇기 때문에 고객쪽에서 유지보수 팀을 구성해서 유지보수 사항을 인수인계 받게 된다.
개발한 시스템은 상용 프로그램에 회사의 업무를 처리할 수 있게 built-in 형태로 개발된 application이다. 문제는 기존 상용 프로그램이 업그레드된 상태에, 새코드를 추가해야 하는 작업이었다. 따라서 고객쪽에서 온 유지보수팀의 노트북에 컴파일 환경을 구축해 주고 간단히 고칠 부분을 설명해 주면 어느정도 유지보수 작업을 할 수 있는 상황이었다. 일단 잘 만든 코드이기 때문에 고칠 부분은 많지 않았다. 따라서 인수작업의 핵심은 컴파일 환경을 구축해 주는 것이었다.
문제는 상용 프로그램 버전이 올라가면서 상용 프로그램의 api가 바뀐것이다. 사용한 api의 prototype은 바뀌지 않아서 다행이었지만 vector라는 구조체가 추가되었다. 그런데 우리가 짠 소스를 보니 using 키워드를 이용해서 std namespace를 가져왔다.(즉, using namespace std;) 그런데 std 안을 뒤져보니 vector 라는 이름으로 템플릿을 사용하고 있었다. 그렇기 때문에 상용 프로그램의 vector 구조체와 std namespace에 있는 vector 템플릿 이름이 충돌하게 되었다.
using namespace를 사용한 가장 큰 이유는 vector 템플릿을 쓸때마다 std::vetor로 입력해야 하기 때문이다. 즉, 타이핑 작업을 줄이기 위해서 using namespace std; 한줄만 추가하면 std:: 라는 코드를 입력하지 않아도 된다. 개발자로서는 노가다가 줄어드니, 반드시 사용하고 싶은 키워드다. 물론 당시에는 다른 부분에서 vector라는 이름의 구조체나 클래스를 사용하지 않았기 때문에 당연한 판단이었다고 본다.
그러나 이런 코드를 사용할 때는 앞만 보고, 뒤는 보지 않는 경우다. 물론 만든 시스템의 수명이 1년도 안되고 자신이 유지보수를 하지 않을 생각이라면 어떻게든 굴러가는 코드만 만들면 된다. 그러나 분명히 using namespace 키워드가 제공하는 문제점을 인식했다면 using namespace를 가져다 쓰지 않는것이 제일 낫다. 이 문제는 vector 앞에 std:: 를 붙여서 간단히 해결했다.(물론 기존 소스는 이런 사소한 문제를 제외한다면 무척 잘 만든 편이다.)
개발자는 하루에도 여러번씩 세상과 마음의 조화 유혹에 빠진다. 유혹에 넘어간다고 당장에 큰 문제가 있는 것도 아니다. 그러고도 잘 먹고 잘 살 수도 있다. 그러나 계속되는 조화로운 삶이(?) 예수가 숨이 다하는 날 “나 다시 돌아갈래~”를 외치게 만든 것처럼, 당신을 막다른 궁지에 몰아 놓을 수 있다. 물론 몰라서 그럴 수도 있다. 그러나 부처가 말하길 “무지는 더 큰 죄다!”라 하였다. 그러니 모르고, 편하고, 쉬운 것이 전부는 아니다.
February 13th, 2006 at 3:56 pm
말그대로 부조화 라는 생각이 듭니다.
February 13th, 2006 at 7:14 pm
kkung 님 혹시 제가 아는분?