디트로이트에 있는 내 벽화를 파과한다면 나는 마음 속 깊이 고통을 느낄 것이다.

내 삶의 일 년이라는 시간과 내게 있는 최고의 재능을 쏟아 부었기 때문이다.

하지만 내일이면 나는 다른 벽화를 그리느라 바쁠 것이다.

나는 예술가일 뿐만 아니라 생리적으로 그림을 생산하는 사람이다.

나무는 꽃과 열매를 맺지만 자신이 만들어낸 것을 잃는다고 한탄하지 않는다.

이듬해에 다시 꽃이 피고 열매를 맺을 것을 알기 때문이다.


— 프리다 칼로 & 디에고 리베라


위 인용문은 국내에서도 개봉된 적이 있던 “프리다”라는 영화의 실존했던 주인공이자 유명한 벽화화가인 디에고 리베라가 자신이 의뢰를 받아 그린 디트로이트 예술원의 거대한 벽화에 대한 수많은 비판에 대하여 디트로이트를 떠나며 남긴 글이다. 필자는 4년 전에 사내에서 Win32 시스템 강의를 시작하며 위의 글에서 ‘벽화’를 ‘코드’로 바꾸어 청강생들에게 보낸 적이 있다. 그리고 그 글에서 개발자란 광의적 의미보다는 ‘코더(Coder)’ 라는 좀 더 협의적이고 구체적인 의미로서의 개발자를 규정하고자 했었고, ‘코더’를 창조라는 관점에서 “우리는 코더입니다. 코드를 생산하는 사람들입니다. 코드의 체계들을 엮어 나가는… 감히 참조적으로 엮어 나가는, 그리하여 Translation이나 Clone으로서의 코더가 아니라 Creative Evolution을 이루어 나가는 사람으로서의 ‘코더’들일 것입니다” 라고 주장한 적이 있었다. 지금 와서 보면 요즘같이 개발자란 말 자체가 3D업종 중의 하나로 여겨지는 이런 상황에서 그냥 피식 웃음이 나온다. 그때 말한 코더란 의미는 경험과 이론을 겸비한, 설계란 부분까지 스스로 그려낼 수 있는 그러한 개발자를 의미했었지만 이 ‘코더’ 란 말이 지금은 단순히 코딩을 하는 사람, 쉽게 말한다면 건축설계사는 따로 있고 공사현장에서 “콘크리트 치는 사람”, 속된 표현으로 막노동꾼 정도로 여겨지고 있는 것 또한 사실이다.



필자는 1990년도에 처음 C를 접하게 되었다. 그 당시 C와 포트란을 한 학기에 배우는 전공 기초 수업이 있었는데 그 과목을 F를 받게 되었고, 그때부터 오기로 C를 공부하기 시작했다. C 책을 붙잡고 머리를 싸매고 혼자 공부하기 시작해서 데이터 구조를 보게 되었고, 포인터를 제대로 이해하고자 어셈블리어도 공부하다가 어느덧 C라는 언어에, 그리고 어셈블리어의 매력에 빠지게 되었다. 그렇게 오기로 시작한 C 언어가 나를 사로잡게 되었고 당시 전자공학도였던 필자는 전공을 포기한 채 오로지 프로그래밍에만 전념하게 되었고 그래서 졸업도 너무나 힘들게, 동기들 중에서 몇 안 되는 졸업생을 태운 막차를 겨우 탔던 기억이 난다. 그리고 2004년 현재까지 소프트웨어 관련 업종에서 여전히 프로그래밍을 하고 있다. 그 당시 오기로 시작한 C 언어를 물어볼 사람 없이 혼자서 너무나 어렵게 공부하였고, 그 덕에 프로그래밍 관련 아르바이트도 하고, 잡지사에 연재도 하고, 대학에서 방학 특강도 했었고, 그리고 IMF가 한창이던 98년도에 그리 어려움 없이 취직해서 지금까지 여전히 프로그래밍을 업으로 밥을 먹고 살고 있다. 지금 생각하면 고생을 무지 했었지만 그때만큼 그렇게 열정을 바쳤던 때도 별로 없다는 생각이 든다. 이제 와서 돌이켜 보면 그렇게 어려운 상황들을 극복할 수 있게 만들어 주었던 것이 ‘희열’ 이라는 단어가 아닌가라는 생각을 해본다. 프로그래밍의 희열은 자신의 머릿속에 그리고 있던 어떤 추상적 구조를 구체적으로 눈으로 확인할 수 있는 결과물로 산출해 내어 그 결과를 눈으로 직접 확인할 수 있다는 것, 어떤 기존의 알고리즘이나 자신이 연구한 알고리즘 등에 대한 검증을 다른 어떤 학문보다도 확실하게 할 수 있기 때문이 아닌가라는 생각을 한다. 그래서 며칠 밤을 지새운 코드가 제대로 돌아갈 때의 희열, 그리고 그것 때문에 숨어 있는 버그 하나 잡으려고 며칠 밤을 뜬눈으로 지새우며 새벽에 멍한 눈으로 손에서 담배가 타 들어가는지도 모른 채 모니터만 멍하니 응시할 수 있지 않았나 싶다. 또한 지금도 여전히 올빼미 생활을 하고 있긴 마찬가지이다.



지금도 여전히 밤을 지새우면서 계속 연구와 개발에 매진하는 이유를 들라면 소프트웨어의 가치가 땅에 떨어져버린 이 한국 사회에서 어떻게든 개발자로 살아남기 위해서 일 것이 아닐까 생각한다. 대한민국이 IT 강국이라고 한다. 하지만 껍데기뿐인 IT 강국이란 사실을 이 업계에 오래 계신 분들은 다 알고 계시리라. IT의 하드웨어적인 인프라는 튼튼히 갖추어져 있다고 치자. 하지만 소프트웨어적인 인프라는 거의 갖추어져 있지 못한 현실… 그리고 소프트웨어라면 거저먹으려는 현실… 외국산 소프트웨어는 비싸도 제돈 주고 사지만, 국산 소프트웨어는 오래된 갑을 관계를 바탕으로 헐값에 구입하려고 하는 마인드를 국산 소프트웨어를 장려해야 할 정부부처나 공기업부터 가지고 있는 게 우리나라의 현실이다. 또한 신기술이나 표준을 개발하기보다는 항상 외국으로부터의 그것들을 따라가기 바쁜 현실이며, 그럼에도 불구하고 개발자로 출발해서 어느 정도 경력이 쌓이고 진급하면 할수록 관리나 영업쪽으로 방향을 돌려야 살아남을 수 있는 기업 풍토… 이런 풍토에서 어떻게 신기술이나 표준을 주도할 수 있는 그런 인프라가 구축될 수 있을 것인가? 따라서 IT 강국이란 작금의 현실은 제대로 된 하드웨어적인 인프라를 갖춘 시장 또는 테스트 베드를 제공할 뿐이라는 사실이다. 물론 필자도 회사 내에서 기술적 마인드를 버리라고 강요받고 있는 상황이기는 하지만 이러한 척박한 상황에서도 끝까지 개발자로 남기 위해 지금도 노력하고 있으며 이러한 노력의 과정에서 나온 결과물이 본 저서라고 감히 말하고 싶다. 이런 상황에서도 여전히 날밤을 지새우며 새로운 분야에 대하여 계속 연구하고, 알고리즘을 파고들고, 코드를 생산해 내고, 헥사 덤프를 플러스펜으로 마킹해 가면서 분석하고 있을, 예전에 필자가 그렇게 며칠 밤을 지새우면서 느꼈던 희열의 경험을 함께 공유할 수 있는 숨어 있는 수많은 개발자들이 있으리라 믿어 의심치 않는다. 어느 순간부터(무엇 때문이라고 언급은 하지 않겠다) 프로그래밍이라는 것이 쉬운 것, 만만한 것이라는 풍토가 번지면서 이 분야로의 공급이 넘쳐흐르더니 이젠 프로그래밍이라는 직업이 고생만 많이 하고 보수는 별로 안 되는 3D업종으로 전락해 버린 것 같다. 하지만 어렵게, 치열하게 스스로 해결책을 찾아가면서 공부하고, 프로그래밍을 했었고, 어떻게든 끝장을 보지 않으면 잠을 못자는, 아직은 인정을 받지는 못하지만, 그래도 여전히 개발자라는 말에 최소한의 의미를 부여하고자 지금도 날밤을 지새우고 있을 많은 언더그라운드들 ? 그들이 진정한 실력자이자 개발자이고, 그들이 있기에 아직은 희망이라는 끈을 놓지 않을 수 있다는 생각을 하며, 이 책은 그러한 언더그라운드들에게 바치는 헌사이기를 바라마지 않는다.



끝으로 이책을 탈고하기까지 도움을 주신 많은 분들에게 감사를 드려야 할 것 같다…

이하 생략


2005년 5월, 이호동


위 글은 2005년에 출간된 'WINDOWS 시스템 실행파일의 구조와 원리' 라는 책의 머리말입니다.

중학생 때 멋모르고 도서관에서 뽑아들고 보다가 침흘리며 잤던 추억이 담긴 책입니다.

리버싱 내용이 추가된 개정판도 나와 윈도우즈의 실행파일 구조와 리버싱에 대해 공부하고 싶은 깃붕이들에게 책을 소개해드립니다.


개정판의 제목은 '윈도우 실행 파일 구조와 원리로 배우는 리버스 엔지니어링' 이고 1권 파일 구조 편, 2권 디버거 편 두권입니다.