하얀말의 미투데이 - 2008년 7월 17일 Computing에 관한 독백2008. 7. 18. 04:31
이 글은 하얀말님의 2008년 7월 17일의 미투데이 내용입니다.
이 글은 하얀말님의 2008년 7월 17일의 미투데이 내용입니다.
1995년 Java라는 언어가 생겼고, Web의 부흥과 맞물려 초창기에는 Java Applet, 현재는 Java Platform EE(Enterprise Edition)로 IT의 한 축을 그었다. Applet은 잠깐 반짝 하다 말았지만, 특히 Java Platform EE의 성공은 경이적이어서, 기업 전산 환경의 필수 middleware인 Web Application Server(이하 WAS)는 당연히 Java Platform EE 명세서에 준하는 것으로 생각하고(예전엔 Netscape Application Server라는 C/C++ 기반의 WAS도 있었지만 지금은 모두 Java Platform EE 명세를 따르는 WAS만 있는 것 같다), 따라서 기업/조직 전산 환경에서 Java는 가히 예전의 COBOL의 위치를 차지한다 해도 과언이 아니다. Embedded System 쪽으로는 특히 휴대전화 쪽으로 Java Platform ME(Micro Edition)이 널리 퍼졌고, Desktop이 조금 빈약하지만 Sun Microsystems가 Swing 다듬기에 여념이 없고, 특히 Eclipse의 SWT/JFace, RCP의 출현으로 말미암아, Platform 독립적인 Desktop Application 개발에도 Java가 세를 늘리고 있다(겪어보면 알겠지만 compile도 필요 없이 내가 짠 application이 Windows에서도 돌고 Linux에서도 돈다는 것은 정말 대단히 매력적인 일이다).
분명 Java는 문법이, 특히 C++에 비하면, 깔끔하다. Java 이전에 OOP를 한다고 하면 C++로 coding한다는 이야기였던 때가 있었는데, C도 그렇지만 이 C++도 code 자체가 대단히 난잡하다. 특히 MFC로 짠 Windows program code는 지금 봐도 그 너저분함에 질린다(그래서 개인적으로 C#의 등장을 환영한다. 최소한 Windows program도 깔끔하게 짤 수 있으니까). 그런데 이 Java는 C++에 비하면 상당히 우아한 code가 나올 수 있다. 그러다보니 요새는 'Java로 된 자료 구조', 'Java로 된 algorithm', 'Java로 된 OOP' 등, 학계에서도 교육용 목적으로 Java를 많이 가르치며 S/W 공학 같은 것을 논할 때 예제 code도 Java로 짠 것을 심심찮게 볼 수 있다.
또한, Java는 open source 개발자들에게도 매력적이었는지 Apache 재단, Eclipse 재단 등을 위시한 수많은 곳에서 Java 관련 제품을 개발하고 정보를 교류하고 있으며 이러한 산출물들은 Java 개발을 편리하게 하고, 새내기 개발자들이 참고할만한 교재 역할을 하며, Sun Microsystems 같은 Java 명세에 칼자루를 쥐고 있는 자들이 명세를 재정할 때 idea를 주고, 아울러 독단에 빠지지 않고 실질적으로 개발자들이 원하는 바를 잘 반영하게 하는 일종의 압력으로도 작용하여, 궁극적으로 Java의 세 확산을 일조하는 선순환 구조를 만들어냈다.
즉 현재 Java는 Thomas Kuhn이 '과학 혁명의 구조'라는 책에서 말한 바로 그 Paradigm이다.
Java의 비대화
위에서 살펴본 바와 같이 Java는 정말 성공적인 가도를 달려왔다. 그러나 요즈음 일종의 이상 징후가 나오는 것도 사실이다.
2004년에 나온 Java Platform SE 5는 꽤 큰 문법 추가가 있었다. 하나는 Generics요, 또 하나는 Annotation이다. 그런데 이것이 좀 code를 난잡하게 만들었다. 예를 들면,
public EnumMap(EnumMap<K, ? extends V> m)
java.util.EnumMap이라는 class의 생성자이다. JDK 1.4 이전 code였으면 public EnumMap(EnumMap m)이라고 끝났을 code이다. 물론 Generics를 도입한 결과 Type 확인을 compile 시에 할 수 있게 되어 ClassCastException 꼴은 덜 보게 되어서 결과적으로 program 안정성 향상에 기여한 것은 사실이나 위 code를 보면 "먼 소린지~"다. Java 문법도 간결했던 문법이, 슬슬 사용자의 요구를 수용하다 보니 점점 난잡해지고 있는 한 예라 하겠다. API적인 측면은 더하다. 지금 Java Platform SE 6의 API는 JDK 1.2의 API에 비하면 훨씬 방대하다. 즉, 기술이 복잡해지고 있다. 그리고 이 복잡도를 사용자들이 수용하기 어려울 때, Java는 스스로의 무게에 비틀댈 것이다. 많은 기술들이 그랬었던 것처럼. Java도 entrophy의 증가라는 열역학 법칙에 자유롭지 못한 것은 아닐까.
sciprt 언어들의 도전
Java Platform이 Web 개발에는 거대하고 복잡하여 부적절하다는 말들이 여기저기서 나오고 있다. 이들 주장은 주로 PHP나 Python, Ruby와 같은 script 언어를 좋아하는 사람들에게서 많이 나오는데, 그동안 Java 진영은 그런 언어로 개발한 Web은 고가용성 등에 문제가 있어 mission-critical한 기업 업무 개발에는 부적절하다고 주장했다(재미있는 것은 이러한 주장은 이제는 한 물 간 것으로 취급하는 TP Monitor 진영, 더 한 물 간 것으로 여기는 Mainfram 진영이 Java를 폄하할 때 하는 주장이다). 확실히, script 언어들은 개발 생산성은 좋다. 그러나 Java 진영은 IBM, Sun Microsystems, BEA, Oracle 같은 IT 업계 거물이 버티고 돈은 받지만 동작을 보증함에 비해, 동적 type 언어들은 open source 진영에서 나온 것이다 보니, Do-it-yourself인 이런 open source 결과물을 자신의 업무 환경에 턱 적용했다가 문제 생기면 본인이 스스로 뒷감당을 해야 하므로, 혁신보다 보신이 중요한 (거대) 기업 조직 생리 상 이런 것들을 채용하기는 어렵다. 실제로 그러한 언어로 된 Web 개발은 기업 규모의 전산 환경에서는 underground 취급당했다. 그러나 RubyOnRails로 대표하는 쾌속 Web 개발이 개발자들의 이목을 끌고, Google이나 Wikipedia 같은, 무시무시한 traffic을 견디는 동적 type 언어들로 개발한 site들이 출현하다 보니, 과연 고가용성 때문에 거대함과 복잡함을 감내해야 하는지, 과연 그런 것들이 고가용성에 문제가 있는지에 대한 회의가 많이 늘었다. Java는 이러한 도전에 대한 응전으로 이번 Java Platform SE 6부터 JVM 상에서 script 언어를 돌릴 수 있는 길을 열어놓았다. 하지만 script 언어라는 것이 Java를 제치고 Paradigm의 영예를 순식간에 대체할 수 있는 가능성은 적지 않다.
Java 새 version의 비활성화
요새 Microsoft는 Windows Vista를 열심히 팔고 있다. 그런데
이 Windows Vista 판매의 걸림돌은 Linux나 Solaris 같은 다른 운영체제가 아니라 바로 Windows XP,
Windows 2000 같은 이전 version의 Windows이다. 그런데 이 현상이 Java에도 나타나고 있으니, Java
Platform SE 6가 나오고 Java Platform EE 5가 나왔건만 아직도 현장에서는 JDK 1.4와 J2EE 1.4
기반의 WAS가 판을 치고 있다. 또한 WAS 제작사들도 Java Platform EE 5 인증 받는데 그닥 열의가 없다.
TmaxSoft는 Java SE Platform EE 5 기반 WAS인 JEUS 6을 개발했지만, 현재 그 회사 site는
JEUS 5 위주로 소개하고 있다. BEA는 Java Platform EE 5 기반 WAS로 이제서야 WebLogic
Server 10을 내놓았고, IBM 또한 J2EE 1.4 기반인 WebSphere Application Server 6.1에
머물러 있다. Open Source WAS의 대표 주자인 JBoss Application Server도 J2EE 1.4 명세에
일부 Java Platoform EE 5를 이루는 명세의 구현체 몇 개를 추가 탑재하는 식이다. 즉, 시장의 평가는 어떻게 보면
J2EE 1.4 기반 WAS로도 충분하다는 신호를 보내는 것이다. 또한 J2EE 1.4 명세는 JDK 1.4를 명시하므로
Java Platform SE 6은 고사하고 5도 각광을 덜 받는 것이다(이것은 위에서 언급한 문법 변화를 개발자들이 잘
수용하지 않기 때문이기도 하다).
Paradigm, 그리고 변곡점
아까도 말했듯 Java는 확고한 Paradigm이다. 그러나 현재 이 Paradigm이 현실과의 괴리를 보이는 징후가 여기저기서 포착할 수 있다. 어쩌면 우리는 Intel의 전 CEO였던 Andrew Grove가 쓴 책, "편집광만이 살아남는다(Only Paranoids Survive)"에서 나온 변곡점을 지나는 중인지 모른다. 어떤 미분 가능한 함수에서 변곡점은 기울기가 급변하는 지점인데 재미있는 것은 그 변곡점에 처해서는 그 부분이 변곡점인지 인지하기가 쉽지는 않다. 그러나 함수의 독립변수를 계속 진행시키다 보면 그 기울기가 점점 급변한다.
어차피 Java도 현상의 문제를 타파하기 위한 도구일 뿐이다. 가끔 어떤 computing platform에 대해 종교적인
믿음을 가진 신자들을 볼 수 있는데, 그러한 자세보다는 이러한 잘 드러나지 않는 변곡점을 기민하게 인식하고 새로운
Paradigm에 신속하게 자신을 적응시키 것이 현명하다 보여진다. 즉 적자생존(適子生存)이라는 말은 우리에게도 들어맞는
말이다. 그리고 또 하나, Thomas Kuhn이 과학 혁명의 구조에서 말한 것이 잘 들어맞는지 통사적(通史的)으로 살펴 보는
것도 재미있는 일일 것이다. 그리고 Java가 entrophy의 증대를 언제까지 성공적으로 제어할 지 지켜보는 것도 역시 흥미로울 것이다.
그나저나 Ruby랑 RubyOnRails를 공부해야겠다.
==================
정육면체의 검은색 몸체를 가진, 80년대 후반 ~ 90년대 초반의 꿈의
컴퓨터, NeXTCube입니다. 멋지지 않나요? 본체와 모니터 뿐 아니라 시리즈로 팔리는 레이저 프린터(요새는 레이저 프린터가
개인도 쓸 정도로 대중화된 프린터이지만 당시만 해도 개인들은 지금은 보기도 힘든 9핀 도트 매트릭스 프린터라도 있으면 정말
호화로운 장비의 소유자였답니다. 그러니 레이저 프린터는 가공할만한 꿈의 프린터였죠)까지도 검은 색으로 통일한, 디자인 측면에서
보아도 보석 같이 빛났던 컴퓨터입니다(실제 가격도 당시 달러로 1만 달러가 넘었다 함).
아까도 말했듯 당시의 스티브 잡스는 꿈의 기계를 만들 꿈을 가지고 있었고,
그래서 값 생각은 안하고 그야말로 초호화판 기계를 만듭니다(당시 레이저 프린터가 무지막지하게 비싼 물건이라는 것은 말씀드렸죠?
이런 레이저 프린터를 기본 프린터로 턱하고 채용할 정도였으니 가격 생각은 정말 눈꼽만큼도 안했다고 볼 수 밖에 없습니다).
그것이 바로 이 NeXTCube입니다. 저는 이것을 1988년도 '월간 과학'이라는 과학 잡지에서 사진으로 봤는데(당시 중학교
2학년), 보자마자 뻑이 갔죠. 디자인도 디자인이려니와 당시 개인용 컴퓨터로는 엄청난 성능~ 크~.
그러나 기술적으로 우수한 것이 상업적으로도 성공한다는 보장은 없는 법.
시장에서는 실패했는데 그 이유는 당시 가격으로 1만 달러가 넘는 높은 가격입니다. 스티브 잡스는 이 컴퓨터를 만들면서 교육용
시장을 겨냥했으나 교육용 시장은 애플의 매킨토시 벽을 넘는데 실패했고(미국 이야기입니다), 엔지니어링 워크스테이션으로 팔기에는
프로세싱 파워가 썬이나 아폴로(HP에 흡수된 지 꽤 되었죠)의 엔지니어링 워크스테이션에 비해 딸린 편이면서도(모토롤라
MC68000 계열의 CPU를 썼는데 썬이나 아폴로의 엔지니어링 워크스테이션의 RISC CPU보다는 프로세싱 파워가 딸리긴
했습니다) 값은 비쌌죠. 즉 값은 비싼데 성능이 약간 어정쩡해서 연구소 같은 곳에 조금 파는 정도로 끝나버리고 맙니다.
결국 NeXT사는 일본 캐논의 지분 참여로 근근히 버티다, 결국 하드웨어
사업은 일본 캐논에 팔아버리고, NEXTSTEP 판매에만 주력하기로 합니다. 즉, MS 같은 운영체제 전문 회사로 돌아선
것이죠. 그리고 NEXTSTEP을 인텔 CPU에도 포팅합니다. 제가 대학 2학년 때였나요, 당시 한국에서도 신명시스템즈(지금도
있는지 모르겠지만)라는 회사가 이 인텔 CPU용 NEXTSTEP을 팔았었습니다. 컴퓨터 전문지도 상당히 비중있게 이 사실을
다루었었고요. 제가 다니던 학교에도 신명시스템즈 사람들이 와서 세미나 하고 홍보하고 그랬었고, 그 덕에 저도 당시 꿈의 PC였던
펜티엄(펜티엄 2도 아니고 펜티엄 3도 아닌 펜티엄)에서 돌아가는 아름다운 NEXTSTEP을 침 질질 흘리며 구경했던 기억이
나는군요. 당시 신명시스템즈는 NEXTSTEP의 완벽한 화면 출력 기능을 무기로 하여 DTP 시장을 파고들려 했던 것으로
기억합니다. 매킨토시가 해당 분야를 꽉 잡고 있긴 했지만 NEXTSTEP은 PC에서 도는 운영체제라는 것을 강점으로 생각한
것이겠죠. 그리고 당시 그 비싼 펜티엄 PC를 사서 NEXTSTEP을 돌린 동기 녀석이 있었는데, 친구들의 부러움을 상당히
받았더랬습니다.
아울러 옆길로 새는 이야기이지만, 이 OPENSTEP을 발표하면서 NeXT사는
또 하나의 혁신적 제품을 출시하는데 바로 'WebObject'라는 제품입니다. 그당시에는 이 제품이 무슨 용도인지를 알지
못했으나 지금 생각해 보니 이것은 바로 요새 말 많은 Web Application Server(이하 WAS)였더군요. 요사의
WAS의 표준처럼 되어 있는 J2EE 기반은 아니지만, OPENSTEP의 객체 기술을 이용하여 90년대 중, 후반에 이미
NeXT사는 WAS를 내놓은 것입니다. 정말 대단한 선견지명이라 아니할 수 없습니다. WebObject는 바로 NeXT사가
OPENSTEP을 기업용 시장에도 진출시키겠다는 전략의 표현인 셈이죠. 그리고 이 WebObject는 현재 애플이 계속 출시하여
애플이 노리는 기업용 시장 진출 중 소프트웨어 분야의 첨병 노릇을 하고 있습니다(현재 기업용 시장 진출의 하드웨어쪽 첨병은
XServe라는 제품).
'Web 창시자가 말하는 WWW의 미래'라는 글은 WWW의 창시자 팀 버너스 리에 대한 글인데, 읽어보면 아시겠지만 WWW이 최초로 구현된 컴퓨터가 바로 NeXTCube였습니다. 만약 당시에 팀 버너스 리가 NeXTCube를 쓸 수 없었다면 아마 WWW은 한참 뒤에나 발명되었을 것입니다. 당시 GUI도 희귀한 시절에, 팀 버너스 리가 명령행 프롬프트나 깜빡거리는 컴퓨터를 썼다거나 후져빠진 윈도우 3.0도 아니던 시절의 윈도우, 혹은 프로그래밍하기 엄청 어려운 X Window(당시엔 GTK+나 QT 같은 것이 아닌 Xlib을 가지고 직접 X Window용 프로그램을 짰던 것을 기억하세요)를 접했다면 제 생각엔 절대 WWW을 발명하지 못했을 것 같습니다.
써 놓고 보니 NeXTCube 이야기보다는 NEXTSTEP 이야기를 더 한 것
같네요. 어찌 되었던 비록 시장에서는 실패한 하드웨어였지만, 이렇게 우연히 NeXTCube는 자신의 진보적인 기능
덕택에 WWW의 자궁 역할을 제대로 하게 되었습니다. 세상은 그래서 참 재미있습니다. 하핫!
이 글은 ryudaewan님의 2008년 1월 8일의 미투데이 내용입니다.