IE의 추억

10년이면 IT업계에서라면 강산이 변해도 여러번 변했을 만한 기간일텐데, IE가 벌써 10년이나 된 기술이 되었다는 IE팀 블로그의 10주년을 기념하는 포스트가 있었습니다. 1995년 8월 24일 출시된 시카고(Chicago)라는 코드명의 Windows 95의 발표에 맞춰서 스파이글래스사의 모자익을 라이센싱해서 구색을 일단 갖춰놓은 IE1를 애드온(Plus!)으로 제공하면서 시작되었습니다. 당시에는 넷스케이프 내비게이터(NN, Netscape Navigator)의 성공(과 그 달의 상장)이 하나의 붐을 만들면서 인터넷/웹이 대중으로 확산되고 있었고, 개인적인 행운으로 저도 붐에 편승해서 95년 말 제 첫 직장 프로젝트로 웹브라우저를 개발하게 되었습니다. 그해 개봉한 토이스토리(Toy Story)의 우디(Woody)라는 캐릭터 이름을 코드명으로 하기까지한 야심차고자(?) 했었던 한때의 로망이었습니다. W3C등 표준기구등이 표준을 만들때마다 "으악~ 이것도 지원해야하는가!"하고 외치기도 하고, 내비게이터의 바이너리를 리버스엔지니어링해서 컨닝을 하기도 했었고, 나중에야 Netscape의 Mozilla에서도 마의 삼각지대인 것을 알게 되었지만 당시에는 철없이 우습게 봐서 웃기게 만들어진 해괴한 렌더링 엔진으로 머리를 쥐어뜯기도 했습니다. 하지만, 무엇보다도 하고 싶었던 것을 만들었었고 원맨팀이기는 하지만 여느팀들 부럽지 않게 밤낮없이 공부하고 코딩한 그런 적이 있었습니다.

1995년 12월 7일, 마이크로소프트에서는 Internet Strategy Day라는 이벤트를 열면서 Windows에 인터넷 기능들을 추가하는 전략(embrace-and-extend 전략)을 발표했고, 이듬해 3월 12일, 지금처럼 신기술 대거 발표의 장인 PDC(Professional Developers Conference)가 열리고, Sun과의 Java 라이센싱을 발표합니다. IE3에 NN에서는 진작에 지원되고 사랑받고 있었던 Java Applet을 지원한다는 이야기가 되는 것이었고, 1996년 8월 Tech-Ed에서 IE3가 발표되면서 저의 웹브라우저 개발 프로젝트는 영원히 빛을 보지 못하고 끝나버립니다. Java 지원이라는 기술외적인 어려운 난제들을 가지고 경쟁을 할 수 있는 방법은 없었던 것이죠(라고 결론을 내렸죠. 계속 진행했더라면 농담으로라도 "한글" 웹브라우저라는 명목으로 뭔가 애는 써봤을텐데 말이죠). 아무튼  Java 지원과 더불어 여러 기능들의 공격적인 지원으로 1년만에 Windows에 장착되는 IE4로 Netscape과 대등한 Market Share를 가지고 전쟁이 시작됩니다.

IE가 NN보다 좋았던 점 딱 한가지는 렌더링 방식에 있었습니다. NN은 느린 네트웍에서는 감감 무소식을 자랑하고 있었습니다. 반면 IE는 작은 양의 HTML 코드 일부라도 화면에 바로바로 뿌려주었었죠. 정확히는 기억이 안납니다만, NN은 스레딩을 하지 않고 단일 스레드가 소켓의 비동기 루틴으로 렌더링까지 처리를 한 이유였었던 것 같은 생각이 어렴풋하게 듭니다(믿거나 말거나). 94년에 알바하면서 NN을 쇼킹체험하지 않았더라면 이쪽에 관심을 늦게 가졌을지 모를 고마운 프로그램이기는 하지만, 97년 어느날 이제는 NN을 사용하지 않겠다는 선언을 했었던 기억도 납니다. 솔직히 개발자의 입장에서는 보안이 어떻든, 버그가 어떻든간에 IE가 훨씬 더 재미있는 장난감이었습니다. 가져다가 내 프로그램에 넣을 수 있을 뿐만 아니라 내 프로그램을 가져다가 웹브라우저에 넣을 수도 있었습니다. 온갖 재미난 것들을 할 수 있었습니다. 누가 뭐라고 하든 무슨 이데올로기도 아니고 재미있기에 그걸 사용한 것 뿐이죠. 이후에 모질라의 소스코드가 공개되어 분석하면서 ns어쩌구와 구조체들의 늪에서 허우적대다가 서버 쪽으로 직업(으윽, SI)과 관심이 바뀝니다.

웹브라우저를 개발하면서 위에서도 언급했지만, 렌더링 코드가 너무나 어려웠습니다. 경험이 없었던 이유가 첫번째지만 새 기능을 넣을때마다 덕지덕지 붙어가는 코드를 보면서 코드보다는 설계가 우선해야된다는 점을 뼈저리게 깨달았습니다. 특히나 C/C++같은 것으로 코딩하는 경우에는 말이죠. 예를 들어, 일단 HTML을 읽어서 보여줄 수 있게 만들고보니 마우스로 Selection하는 작업을 처리해야하는데 그리고 Selection을 Copy하는 부분도 처리해야하고...이렇게 기능을 고려하지 않고 있다가 나중에 생각하고 추가하는 것은 여기저기 구조체와 코드를 땜빵으로 추가해야했습니다. 처음에 고려했다면 훨씬 깨끗했겠죠. 이래저래 넘어가도 나중에 DOM 지원하고 스크립팅 넣을 생각하니까 이것도 갑갑하더라구요. 뭘해도 나중에 하면 덕지덕지 흉해지는 것은 당연지사였습니다. 가장 골치아플때가 뭔가를 다른데로 옮겨야할 때였습니다. 자료구조(라고 할만하지도 않지만)가 꼬이고 꼬여서 엉망진창이 되는 작업 중 하나였습니다. 코드는 한단계가 두단계가 되고 이래저래 값하나 얻기 위해서 깊숙히 어딘가에 박힌 곳을 찾아 들어가는 모양이 되어버리죠. 당시 작은 회사가 만든 오페라(opera) 웹브라우저를 보면서 얘도 나처럼 짠 것 같군...이라는 느낌이 올 정도로 웹브라우저라면 버그로 엉망 코드의 도를 감잡을 수 있었습니다(믿거나 말거나).

아직까지 잘 살아있는 오페라(opera)도 비슷하게 10주년 기념으로 8월 막날 하루 무료 등록 코드를 나눠주는 이벤트를 했습니다. 이전 버전에서는 코드를 다시 작성하는 큰 투자를 감행하기도 할 정도로 이 분야가 매력이 있나봅니다. 정말 솔직히 이야기하자면, 초기의 오페라 때문에 웹브라우저 개발을 포기한 일을 너무나 가슴아파했습니다. "이렇게 다운 잘되고 제대로 안보이고 안되는 브라우저가 이렇게 오래 살아있다니!"하면서 말이죠^^

벌써 10년이 되었습니다. 그 기억이 기분좋게 떠올라서 포스팅해봅니다.