자바(Java)는 어디로 가고 있을까?

이 글은 2015년, Java 20주년을 기념해 마이크로소프트웨어(마소)에서 특집기사 요청이 와 쓰게된 원고입니다.

* 이 글은 자바(Java)의 역사를 한 엔지니어가 자바 기술을 만나 그 변화와 혁신을 경험한 내용으로 꾸민 허구의 이야기 입니다. 본문에 등장하는 한국내 인물과 사건은 어쩌면(?) 사실과 다를 수도 있음을 밝혀둡니다.


“근데 자바가 왜 좋아?”

1998년 어느 겨울밤, 그날도 어김없이 부평 연구소에 함께 남아 있던 입사 동기인 재성이가 내게 물었다 – 현재는 호주에서 머신러닝 기반의 솔루션 개발을 총괄하고 있는 전재성은 프로그래머로서의 나의 인생에 가장 큰 영감을 준 사람 중 한 명이다. 그와 난 부평 연구소을 떠나 자바 기술 기반의 벤처를 거쳐 BEA 연구소도 함께 했다.

그 때 난 새롭게 출시된 자바 2(자바 1.2 부터 자바 2라 부른다)의 새로운 GUI 라이브러리인 스윙(Swing) 데모를 화면에 띄우고는 행복해하던 중이었다…

스윙은 자바가 세상에 나왔을 때 만큼이나 충격적이고 멋졌다. 나는 검은 화면에 하얀 글자뿐이었던 C보다, 촌스럽고 딱딱하게 보이던 파워빌더의 화면보다 스윙이 깔끔하고 멋지게 보였다.

Java SwingSet

그 당시 사람들은 자바가 느리다고 했지만 나는 자바의 이런 변화가 좋았다. 현재 발전된 스윙은 느리지 않으며 유연하다. 스윙은 현재 이클립스(Eclipse)와 함께 가장 많은 개발자가 사용하는 통합개발환경중(IDE, Integrated Development Environment) 중 하나인 넷빈즈(NetBeans)에서 사용되고 있다. 자바의 표준 스윙 컴포넌트로 복잡한 UI 툴킷(Toolkit)을 구현했다. 최근 넷빈즈를 사용하는 개발자들에게서 이 복잡한 통합개발환경(IDE)이 느리다는 평을 들 수 없을 정도로 스윙의 화면은 이제 빠르다.

넷빈즈(NetBeans) IDE

자바의 슬로건은 “한 번 프로그래밍 한 것은 어떤 플랫폼에서도 실행된다(Write Once, Run Anywhere)”이다.

한번 프로그래밍한 코드가 자바 가상 머신(JVM)이 설치된 어떠한 플랫폼에서도 바로 실행된다는 개념은 태생적으로 느리다는 공격을 받았지만 분명히 혁신적이었다. 자바가 프로그래밍 언어로써 근간으로 삼는 객체지향(Object Oriented)이라는 개념은 개발자들에게 좀더 유연하고 유지보수가 쉬운 코드를 만들어 낼 수 있다는 점에서 크게 부각됐다. 그렇게 우리는 당연하게도 자바가 만들어 갈 변화와 혁신에 동참하고 있었다.

“이제 현실을 보는 방법이 완전히 바뀌었습니다. 왜냐하면 움직였으니까요.”

James Gosling, the Father of Java said “Their view of reality had completely changed because it MOVED.”

1995년 초, 미국 서부 몬테레이에서 열린 ‘테크놀로지, 엔터테인먼트와 디자인 컨퍼런스(Technology, Entertainment and Design Conference)’에서 제임스 고슬링(James Gosling)은 영화 ‘블레이드 러너(Blade Runner)의 이름을 딴 ’웹러너(WebRunner)’라는 브라우저에서 애플릿(Applet)으로 만들어진 3D 분자 모형을 시연했다. 고슬링이 분자 모형을 브라우저 상에서 이리저리 돌리자, 그냥 뻔한 텍스트 기반의 모자이크(Mosaic) 브라우저의 클론 쯤으로 생각하고 집중하지 않던 사람들은 모두 “와아아!”하고 탄성을 내뱉으며 다음 데모인 시각화된 정열 알고리즘(Sorting Argorithm) 화면에 집중할 수 밖에 없었다. 그도 그럴 것이 그 때의 웹브라우저는 단순히 텍스트를 화면에 보여주는 것이 전부던 시절이었다.

웹러너(WebRunner) 브라우저와 자바 마스코트 듀크(Duke)

이렇게 단 두 개의 데모가 세상을 바꿔 놓았다.

자바는 이렇듯 화려하게 세상에 등장했다. 자바는 단순한 텍스트 기반 정보만 제공하던 기존 인터넷에 애플릿이라는 동적 콘텐츠로 브라우저에 생명을 불어 넣었다. 누군가는 느리다고 했지만, 이제 웹은 단순한 정보 전달을 넘어 세상과 소통하고 모든 것을 네트워크에 연결할 수 있게 되었다.

“새로운 물결을 만들자”

하지만, 자바는 단순히 브라우저에 동적 콘텐츠를 담을 수 있는 애플릿으로 출발한 것은 아니었다. 자바는 1991년 패트릭 노튼(Patrick Naughton), 마이크 세리든(Mike Sheridan), 그리고 제임스 고슬링(James Gosling)에 의해 시작된 비밀스러운 ‘더 그린 프로젝트(The Green Project)’라는 썬마이크로시스템즈의 작은 내부 프로젝트 팀에서 만들어진 프로그래밍 언어이다. 그렇다고 이 프로젝트 팀이 처음부터 새로운 프로그래밍 언어를 만들려고 했던 것은 아니다.

제임스 고슬링과 더 그린 팀 구성원(The Green Team Members)

처음 13명으로 구성된 그린 팀의 목표는 컴퓨팅에서의 ‘새로운 물결’을 만들어내자는 것이었다. 이 프로젝트 팀은 첫번째 주제로 디지털로 작동되는 디바이스와 컴퓨터가 합쳐질 것이라는 결론을 내렸다. 1991년에 말이다. 그리고 그들이 18개월 동안 문을 걸어 잠그고 만들어낸 것이 바로 ‘*7(StarSeven)’이라는 터치스크린으로 동작하는 반응형 홈 엔터테인먼트 컨트롤러 였다. 이 디바이스는 그 당시에는 상상할 수 없었던 기능을 탑재하고 있었다. 손으로 들고 다닐 수 있는 크기로 네트워크에 연결돼 있었고, 컬러 화면에는 현재는 자바의 마스코트로 유명해진 듀크(Duke)가 손을 흔들고 있었다. 모든 기능이 터치스크린으로 동작했고 심지어 사무실의 전화를 당겨 받을 수 있었으며, 네트워크에 연결된 다양한 가정용 홈 엔터테인먼트 디바이스와 전자제품을 제어할 수 있었다. 사물인터넷(IoT, Internet of Things)의 역사를 이야기 할 때, 최초로 네트워크에 연결된 가전 제품이 2000년 발표된 LG전자의 냉장고라는 것을 상기해 볼 때 정말이지 대단한 발상의 전환이었다.

*7(StarSeven, 스타세븐)

처음에는 C/C++로 프로그램을 제작하려 했지만, 심지어 애니메이션을 보여주면서 이렇게 다양한 디바이스를 네트워크로 연결하기에는 너무 어렵고 복잡했다. 이러한 새로운 요구사항에 맞춰 제임스 고슬링은 이기종 디바이스를 손쉽게 네트워크에 연결하기 위한 프로그래밍 언어를 만들었는데, 이것이 바로 자바다. 제임스 고슬링은 사무실 창밖에 서있던 나무를 보고 처음에는 이 언어를 ‘오크(Oak)’라 불렀다.

현재 우리는 세상의 모든 것들이 인터넷에 연결된 IoT 세상에 살고 있다. 자바는 태생적으로 이러한 환경에 매우 적합한 기술이다. 1992년 제임스 고슬링이 자바를 만들 때 그는 이미 이러한 세상을 꿈꾼 것은 아닐까?

이를 증명이라도 하듯, 고슬링은 2010년 오라클을 떠나 지금은 해양정보수집 로봇을 개발하는 벤처기업 ‘리퀴드로보틱스’의 최고 소프트웨어 아키텍트(CSA)로 일하고 있다. IoT, 빅데이터 그리고 클라우드가 바로 고슬링이 꿈꿨던 세상임에 틀림 없을 것이다.

“함께 공부하고 지식을 나누려고 합니다”

1999년, 나는 자바 기술 기반의 “OO/OR DB 구축기술 내재화”라는 연구과제에 지금은 한 통신사에서 클라우드를 담당하고 있는 장현춘 선배와 함께 참여하고 있었다. 후에 썬마이크로시스템즈의 자바 팀에서 함께 일하게 된 장현춘 선배가 던졌던 선문답은 언제나 나를 잠못들게 했고 새로운 기술과 개념에 접근하는 계기를 만들어줬다.

그 날도, 그는 내게 “이 자바 코드는 thread-safe 한가?”라는, 그 당시 나의 지식으로는 매우 어려운 질문을 던졌다. 우리의 이야기를 재미있게 듣고 있던 또 다른 회사 선배가 그날 저녁 우리에게 “함께 공부하고 지식을 나누려고 합니다”라는 제목의 메일을 보내왔는데, 그 선배는 후에 ‘제니퍼’라는 국산 APM으로 유명해진 이원영 선배였다. 그는 연구소 내에서도 단연 뛰어난 엔지니어였는데, 메일의 내용은 회사에서 자바를 시작한 사람들이 함께 커뮤니티를 만들어 지식을 공유하고 함께 아키텍처를 고민하자는 이야기였다. 객체지향 언어인 자바에서 관계형데이터베이스(RDBMS)에 접근하기 위한 DB Wrapper 개념을 설명해준 그의 제안에 나는 망설임 없이 가장 먼저 자바 서비스넷(http://www.javaservice.net/)의 회원이 됐다. 후에 이 커뮤니티를 시작으로 국내에는 자바누리, 자바스터디, JCO 등 많은 정보 공유의 장이 만들어졌다. 커뮤니티를 통한 이러한 지식의 공유는 오픈 소스 기반 자바의 특징이자 가장 큰 장점으로, 자바가 빠르게 발전하고 혁신할 수 있는 근본적인 힘의 원천이 됐다.

2000년도의 Java Service Net

세계 커뮤니티의 활동, 특히 자바 커뮤니티 프로세스(JCP)를 통해 극적인 발전을 경험한 자바는 현재 해마다 10억건의 다운로드가 일어나며, 기업용 데스크탑의 97%에서 사용 중이다. 또한, 자바는 개발자가 가장 선호하는 프로그래밍 언어이자 기술로써 9백만 개발자를 보유하고 있고, 자바 카드와 스마트 TV, 게이트웨이 등과 같은 디바이스는 70억개나 자바를 실행하고 있다.

“The Network is the Computer”

처음 자바는 멋지고 쉬운 데스크톱PC용 프로그래밍 언어로 빠르게 세상에 퍼져 나갔다. C/C++과 유사한 모습이라 친근했으며, 개발자의 실수를 자주 만들던 복잡한 포인터 조작이 없고, 메모리 관리도 대신한다는 개념은 개발자를 매료시켰다. 또한, 스윙으로 멋진 GUI 프로그램을 만들 수 있었다. 네트워크 프로그래밍은 너무나도 쉬었다. 1990년대 말에서 2000년대 초에 유행했던 네트워크 기반 게임들은 대부분 자바로 만들어졌다. 느리다고 비판받았지만, 웹브라우저에 플러그인된 애플릿으로 다른 언어로로는 개발하기 어려웠던 다중사용자 환경의 게임을 손쉽게 개발할 수 있었기 때문이다.

조금은 가볍게, 또는 친근하게 시작한 자바 기술은 1998년 자바2 마이크로 에디션(J2ME)이 발표되면서, 세 개의 플랫폼으로 나뉘어졌다. 소형 디바이스와 임베디드 환경을 위한 J2ME(현재는 Java ME라 불린다), 데스크톱PC 환경에 최적화한 자바2 스탠다드 에디션(J2SE), 그리고 기업용 애플리케이션을 위한 자바2 엔터프라이즈 에디션(J2EE)이 그것이다. 이 분리는 당시 디바이스의 컴퓨팅 한계와 분산환경, 고가용성, 트랜잭션 보증 및 신뢰성, 확장성과 같은 기업용 애플리케이션의 요구사항을 수용하기 위해서는 어쩔 수 없는 선택이었다. 이로 인해 자바가 가진 최대의 장점 중 하나인 이식성 즉, WORA(Write Once, Run Anywhere)라는 최초의 개념이 플랫폼 단위로 분리되는 결과를 낳았다.

2000년대 초 썬에서 사용했던 발표 자료

하지만, 이러한 분리는 결과적으로는 자바의 엄청난 성공을 가져왔다. 안드로이드(Android)가 등장하기 전까지 ME는 당시 많이 사용됐던 플립형 휴대폰 산업에서 대단한 입지를 구축했다. 우리가 기억하는 대부분의 피처폰(feature phone) 화면, 메뉴와 동적아이콘, 서비스가 대부분 자바 ME 위에서 구축됐다. 유일하게 ME만 라이선스 비용을 지불하는 자바의 플랫폼으로 썬마이크로시스템즈에게 큰 수익을 가져다줬다. 세계에 막대한 양의 휴대폰을 공급하는 굴지의 전자회사를 다수 보유한 한국은 썬마이크로시스템즈에 매우 중요한 나라였는데, 2005년 4월 6일 한국에 자바 리서치센터(Java Research Center)가 설립되고 4년간 5천만 달러 이상이 투자됐다. 한국 자바 리서치센터 개소 당일엔 본사 회장인 스캇 맥닐리(Scott McNealy)가 방한하는 중요한 이정표도 남겼다.

안드로이드의 등장은 자바로 스마트폰용 모바일 애플리케이션을 개발할 수 있다는 점에서 자바 진영에게 매우 긍정적인 효과를 가져왔으나, 반대로 자바 ME에는 커다란 상처를 남겼다. 최근 오라클과 구글의 소송 결과는 안드로이드가 자바의 권리를 침범했음을 보여주고 있다. 하지만, 어쩌면 안드로이드의 성공은 썬의 ME 전략에 실패가 있었음을 반증하기도 한다. 하지만, 최근 긍정적인 소식도 있다. 오라클의 자바 담당 수석 부사장인 카메론 퍼디(Cameron Purdy)가 자바 9에서는 모든 플랫폼이 모듈화를 통해 다시 통합된다고 발표한 것이다. 처음 자바가 지향했던 플랫폼 독립(Platform Independence)라는 이상적인 개념이 모듈화를 통해 다시 주목받고 있으며, 클라우드와 IoT 시대에 자바가 디바이스에서 클라우드까지 광범위하게 사용될 것임을 확실하게 보여주고 있다.

썬의 슬로건, “The Network is the Computer”

자바가 가는 길을 따라 온 나는 2003년 여름, 자연스럽게 자바가 태어난 곳 ‘썬마이크로시스템즈’의 자바 팀에 합류했다. 처음 회사에 출근해 인상깊었던 것이 바로 ‘스윙의 그 보라색’이 선명한 회사 로고 아래의 “The Network is the Computer”라는 썬의 테마이자 슬로건이었다. 어쩌면 “네트워크가 바로 컴퓨터”라는 이 단순한 문장을 이해하는 것이 자바가 태어나 어디로 가고 있는지 확실히 알 수 있는 것은 아닐까?

최근까지도 한국 오라클 사무실에는 썬의 슬로건 남아 있었다. 굿바이 썬~

“나는 J2EE에 집중할까 해”

썬에 입사하기 전인 2000년 초, 나는 벤처에서 웹사이트에 접속한 고객의 구매의사(Buying Intention)를 실시간으로 파악하고 오퍼링(Offering)을 하는 고성능 CRM 엔진을 자바로 개발하고 있었다. 어느날 오랜만에 장현춘 선배에게 전화가 왔고 이런 저런 자바 이야기를 나눴다. 그는 J2EE(지금은 Java EE라 부른다)가 얼마나 중요하고 주목해야 하는지 설명했다. 그는 내게 “나는 J2EE에 집중할까 해”라고 말하며 나도 곧 그 길을 따라올 것이라고 웃었다. 그의 예견처럼 몇 년이 지나지 않아 나는 서비스지향아키텍처(SOA) 담당자로 썬마이크로시스템즈의 자바 팀에 합류했으니, 그의 안목은 예나 지금이나 내게 많은 영향을 주고 있다.

1999년 12월 공식적으로 J2EE 1.2라는 기업용 버전의 자바 플랫폼이 발표됐다. J2EE는 빠르게 기업용 애플리케이션 시장에 변화를 줬다. 다른 의미에서 J2EE의 등장은 BEA의 웹로직(WebLogic)과 같은 웹애플리케이션서버(WAS, Web Application Server)라는 미들웨어(Middleware)의 등장을 의미했다. WAS 또는 앱 서버(App Server)로 불리우는 이 미들웨어는 기업용 애플리케이션이 제공해야할 분산환경(Distributed Environment), 신뢰성(Reliability), 고가용성(High Availability), 확장성(Scalability) 등을 지원하며 빠르게 턱시도(Tuxedo)와 같은 TP-Monitor의 자리를 대체해 나갔다. 국내 거의 모든 기업이 앞다퉈 자바 프로젝트를 수행했고 빠르게 자사 애플리케이션을 웹 기반으로 변경하던 시기였다.

단순히 프로그래밍 언어로 알려진 자바는 이렇듯 기업용 애플리케이션을 위한 플랫폼으로 빠르게 진화했고, 그 결과는 매우 성공적이었다. WAS에 이어 엔터프라이즈 아키텍처를 지원하기 위한 다양한 미들웨어가 등장했는데, 대표적인 것으로는 SOA의 근간이 되는 ESB( Enterprise Service Bus)와 BPM(Business Process Management)이 있고, 비동기 메시지 전송을 위한 MOM (Message Oriented Middleware)에 해당되는 JMS(Java Messaging Service)가 있다. 이 외에도 다양한 디바이스가 연결되는 환경인 RFID(Radio-Frequency Identification)와 USN(Ubiquitous Sensor Network)을 지원하기 위해 RFID 미들웨어 제품군이 등장했고, 최근에는 IoT와 빅데이터 환경에서 발생하는 실시간 이벤트를 초고속으로 처리하고 분석하는 CEP(Complex Event Processing)와 방대한 양의 빅데이터를 분산 파일 시스템상에서 병렬적으로 처리하기 위한 맵리듀스(MapReduce) 같은 빅데이터 관련 기술도 자바로 제작되고 있다.

Middleware의 종류와 특징

2006년 어느날, 나는 썬의 RFID 미들웨어에 한참 빠져 있었다. 이 제품은 지금은 시들해졌지만 그 당시 “플러그 앤드 워크(Plug & Work)”라는 콘셉트로 유명했던 지니(Jini) 기술로 만들어 졌는데, OSGi(Open Service Gateway initiative)와 마찬가지로 모듈화가 가능했고 가벼웠으며 RFID 리더와 같은 이기종 디바이스를 연결하는데 최적의 기술이었다. 지니의 최초 데모가 네트워크 프린터가 설정 없이 연결되고 인쇄버튼을 누르자 이 프린터를 네트워크 상에서 찾아 듀크를 인쇄하는 것이 었으니, 이미 그 시절 자바 기술은 지금의 IoT 세상을 향해 나아가고 있었음에 틀림없었다.

“EJB is DEAD!”

썬의 기업용 플랫폼인 자바 EE의 발전은 웹의 발전과 함께 그리고 MS의 닷넷(.Net)과 경쟁을 통해 기업용 애플리케이션을 웹 기반으로 전환하는 계기를 마련했다. Java EE는 이에 따라 기업이 요구하는 다양한 기능을 추가하며 발전하게 됐는데, 문제는 이러한 다양한 기능의 추가가 결과적으로 WAS를 매우 무겁고(Heavy -weight) 어려운 플랫폼으로 만드는 역설이 일어났다. 대표적인 예로 분산환경 아래 자바 애플리케이션과 RDBMS간 트랜잭션, 그리고 영속성(Persistency)을 지원하기 위한 EJB의 복잡성 문제다. EJB(Enterprise JavaBeans)의 스펙은 방대했으며 복잡한 콜백(call-back) 체계는 개발자가 이해하기에 매우 난해했다.

썬의 자바 팀에는 장현춘 선배가 먼저 합류해 있었다. 그 때부터 함께 일하게된, 현재는 NHN에 Lab장으로 근무하고 있는 이성진 선배도 빼놓을 수 없는 자바 전문가이다. 그는 매우 중요한 여러 기업용 자바 프로젝트의 아키텍처를 담당했다. 엔지니어라면 누구나 그렇겠지만, 이성진 선배와 나는 상업용 제품을 개발하고 싶은 공통된 열망이 있었고 후에 우리는 BEA 연구소에 SOA 제품군(당시에는 아쿠아로직 ‘AquaLogic’ 이라 불렀다)을 개발하는 엔지니어로 함께 참여했다. BEA 연구소에서는 현재 Google에서 클라우드를 담당하고 있는 정명훈이란 뛰어난 자바 엔지니어를 만났다. 그는 왜 BEA가 한국에서 뛰어난 결과를 가져왔는지 증명해준 친구로 나와는 지금도 다양한 주제로 이야기를 나누는 친구가 됐다.

세 명은 자주 모여 여러 자바 이야기를 나누곤 했는데, 어느날, 장현춘 선배가 충격적인 기사를 읽었다며 그 이야기를 들려 주었다. 무시무시한 그 기사의 제목은 “EJB는 죽었다”였다. 이제 더이상 EJB가 사용되지 않으며 그 이유는 복잡성과 너무 무거운 특성 때문이라고 했다. 우리 모두 그 사실에 동의할 수 밖에 없었지만, 사실 EJB는 죽지 않았다. 역설적으로 이러한 EJB의 문제는 J2EE 컨테이너 기반이 아닌 POJO(Plain Old Java Object) 기반 경량 프레임워크와 경량 컨테이너(Light-weight Container) 기술의 발전을 가져왔다. 스트러츠(Struts)와 하이버네이트(Hybernate)를 거쳐 최근의 스프링(Spring), 마이바티스(MyBatis)와 같은 POJO 기반 프레임워크의 발전과 함께 OSGi와 RESTful 컨테이너를 결합하는 형태의 경량 컨테이너 기술의 발전을 가져왔다. 이러한 변화는 결국 EJB 3.0도 다시 POJO 기반의 프레임워크로 변화되는 결과를 가져왔다.

“이거 봐, 5%나 느리네!”

2004년 어느날, 한 증권사에서 iSAM 파일 읽기/쓰기에 대한 자바와 C 프로그램의 품질성능평가시험(BMT) 결과를 발표하고 있었다. 결과적으로 자바의 NIO(Non-blocking IO)가 C 기반의 기존 프로그램보다 5% 정도 느린 성능을 나타냈지만, 그 결과는 시스템 운영에 문제가 없는 수준이었다. 하지만, 자바로 전환을 반대하는 한 고객은 이 결과를 “5%나 느린 기술”이라고 깎아내렸다. 이에 대한 대답으로 나는 어셈블리보다 느린 C 언어를 고수하는 이유를 물었다. 머뭇거리던 고객에게 나는 5% 부족한 성능을 채우고도 남을 자바의 장점들, 예를 들어 개발 생산성, 유지 보수성, 이식성, 확장성, 안정성 등 자바가 제공하는 가치를 설명하고 이해를 구했다. 그 이후로도 많은 저항에 부딪혔지만, 결과적으로 이 고객사는 자바를 선택하고 정보계를 자바 기반으로 전환했다.

I/O와 함께 지적받는 유명한 자바의 문제는 GC(Garbage Collection) 매커니즘으로 인한 성능 저하와 메모리 누수(Memory Leaks)다. 자바는 기본적으로 메모리 상에 생성된 객체(인스턴스, Instance)에 대한 메모리 해제(Deallocation)를 JVM에게 위임하는 모델이다. 이는 개발자의 오류로 야기될 수 있는 메모리 관리의 문제를 근본적으로 해결할 뿐만 아니라, 코드를 단순화해 개발 생산성과 유지 보수성을 높일 수 있는 장점이 있다. 하지만, 마크 앤드 스윕(Mark and Sweep)의 개념을 근간으로 하는 자바 초기 GC의 매커니즘은 메모리 해제 작업 중에 애플리케이션의 모든 쓰레드의 동작이 멈추는 현상, 소위 말해 ‘Stop the World’의 문제를 내포하고 있었다. 결과적으로 ‘Stop the World’란 애플리케이션이 응답없이 지연(Latency)이 발생한다는 것을 의미 한다.

초기의 이 문제는 비교적 짧은 시간의 Full GC로 인해 큰 문제로 부각되지는 않았다. 하지만, 자바가 기업용 애플리케이션으로 사용되면서 매우 빈번한 호출을 감당해야 했고, 보다 많은 물리적 메모리를 사용하게 됨으로써 Full GC로 인한 “Stop the World” 시간 지연이 미션 크리티컬(Mission Critical)한 기업용 애플리케이션에서 큰 문제를 야기했다. 불특정 다수의 고객에게 서비스를 하고 있던 WAS가 무려 몇 초 동안 동작을 멈추는 상황을 상상해본다면 이 문제가 얼마나 큰 이슈였는지 알 수 있다.

지금은 작고하신 썬의 자바 팀 수장이셨던 당시 황성훈 이사께서 2004년 겨울 어느날, 다급하게 나를 불렀다. 광양의 한 제철소에 GC 관련 이슈로 지원을 해야 한다는 요청이었다. 다양한 센서로부터 실시간으로 들어오는 센싱 데이터(Sensing Data)를 처리하고 있던 자바 애플리케이션은 썬의 WAS위에서 동작하고 있었는데 GC로 인한 “Stop the World”로 인해 장애가 발생하는 상황이었다. 이러한 애플리케이션을 지금은 IoT 또는 M2M으로 부르지만, 그 당시 기술로는 이를 해결하기 매우 힘든 상황이었다. 다행히도 때마침 출시된 멀티쓰레드 GC 방식의 ‘Parallel GC’ 그리고 “Stop the World” 시간을 최소화 할 수 있는 ‘CMS(Concurrent Mark and Sweep)’을 통해 이러한 문제를 해결할 수 있었다. 재미있는 것은 그 당시 WAS 인스턴스에 할당된 메모리가 겨우 256MB라는 걸 생각해보면 참으로 IT의 발전 속도가 얼마나 빠른지 다시 한번 느낄 수 있다.

현재의 자바 성능은 어떤가? 아직도 자바는 느리다는 편견을 가지고 있는 독자가 있다면 다음 이야기에 귀를 기울이길 바란다. 오라클의 많은 미들웨어 제품 중에서 CEP(Complex Event Processing) 제품으로 오라클 스트림 익스플로러(Oracle Stream Explorer, 현재는 Oracle Stream Analytics라 부른다)가 있다. 이 제품은 2007년 발표된 BEA의 웹로직 이벤트 서버(WebLogic Event Server)에 그 뿌리를 두고 있는데, 재미있게도 BEA 웹로직의 기반이 아닌 OSGi 기반의 경량 컨테이너 제품이다. 이 제품이 OSGi를 채택한 이유는 간단하다. 매우 빠른 속도로 이벤트를 처리하고 자바가 처음 그랬듯 다양한 이기종 디바이스를 유연하게 연결하기 위해서다. 그 속도는 어떨까? C보다 느리다는 자바는 1초에 몇 개의 이벤트를 처리할 수 있을까? 놀랍게도 오라클 스트림 익스플로러는 오라클 엑사로직(Exalogic)의 1개의 노드(Node, 24 cores)에서 초당 100만 건의 이벤트를 처리하고 최신 오라클 SPARC T5 서버에서 초당 400만 건의 이벤트를 처리한다. 이 값을 역산하면 밀리초(millisecond) 보다 작은 마이크로초(microsecond) 단위로 데이터를 처리한다는 것을 의미한다. 그래서 이 제품이 IoT와 빅데이터의 실시간 이벤트 처리 엔진으로 사용되는 것이다. 이 벤치마크 테스트의 절차와 그 결과 데이터는 오라클 홈페이지에 공개돼 있다.

이렇듯 자바는 그 성능을 향상하기 위해 다양한 방법으로 노력을 기울여 왔다. 자바 7부터 공식적으로 사용가능하게 된 G1 GC는 기존의 GC 개념을 획기적으로 발전시켜 놓았다. G1 GC는 멀티 프로세서 환경에서 대용량의 메모리가 사용되는 현대 애플리케이션을 목표로 새롭게 개발된 GC 메커니즘으로 간단히 말해 메모리 영역을 작은 단위(Region)로 나눠 CMS를 수행한다. 즉, 작은 영역별로 나뉘어진 메모리에 병렬로 GC를 수행해 지연이 최소화된 최적의 중단 없는 고성능 자바 실행 환경을 제공한다.

“자바 is DEAD?”

자바의 운명이 언제나 순탄했던 것만은 아니었다. 썬마이크로시스템즈는 운명을 다하고 2010년 1월 27일 공식적으로 오라클에 인수됐다. 오라클의 썬 인수 후 몇 년간 자바는 모회사의 운명처럼 큰 난관에 직면했는데, 그 것은 바로 유명한 제로데이 취약성(Zero-day vulnerability) 문제였다. 2013년에는 미국 국토안보부(Department of Homeland Security, DHS)가 정말 불가피한 상황이 아니라면 자바를 사용하지 말라고 권고하는 사태에 까지 이르렀다. 이 문제에 관해 그 당시 자바의 아버지 제임스 고슬링은 다음과 같이 말했다.

“내 판단으로는 분노와 위안이 교차하고 있었다. 상당 부분은 오라클의 자바 인수와 관련이 있었다. 자바와 같이 인터넷에서 주로 사용되는 제품은 문제를 그 즉시 해결할 의지와 능력이 있어야 한다”

이로 인해 그 당시 많은 사람들이 자바의 생명력이 다했다고 주장했다. 구글에서 “Java is dead”를 검색해보면 22,000,000건 이상의 결과를 볼 수 있으니 그 당시 얼마나 큰 이슈로 부각되었는지를 알 수 있다.

구글 트렌드의 “Java is dead” 검색결과. 아무도 의심하지 않던 자바의 운명을 2009년 말 오라클 인수 때부터 많은 사람이 걱정하기 시작했다. 출처: 구글 트렌드(trends.google.com)

하지만 자바는 죽지 않았다. 이 글을 쓰고 있는 순간에도 당연히 살아 있다. 자바 6 시절의 시련을 이겨낸 후 변화하며 새로운 혁신을 만들어 내고 있다. 오라클을 떠난 제임스 고슬링도 이 점을 인정했다. 최근 그는 “아주 만족한다. 오라클이 기대 이상으로 잘하고 있다. 사실 자바가 생명력을 크게 잃을 것이라고 생각했었다. 그런데 오라클이 자바를 잘 관리했다”고 말했다.

보안 취약성으로 야기된 문제를 해결하기 위해 오라클은 많은 노력을 기울였다. 그 결과 2014 폰투오운(Pwn2Own) 해커 콘테스트에서 유일하게 해킹할 수 없었던 표적이 자바였다. 2015 콘테스트에서는 자바가 아예 표적에서 제외됐다. 해킹을 성공시킬 수 있는 해커가 없기 때문이다.

“Java is ALIVE!”

오라클은 2014년 자바 8을 출시하면서 자바의 릴리즈 사이클(Release Cycle)을 다시 2년으로 되돌릴 것이라고 공식 발표했다. 8의 가장 큰 변화 중에는 함수형 언어로써 람다(Lambda)를 지원하고, 콜렉션(Collection) 처리를 멀티 프로세서 기반 하에서 빠르게 처리할 수 있도록 도와주는 스트림(Stream)의 지원이 있다. 그리고 최근 오라클은 자바 인수 후 가장 큰 혁신인 자바 9를 발표했다. 자바 9의 기능 중에 가장 중요한 것 중에 하나가 바로 자바의 내부 API 들을 모듈화해서 관리하는 프로젝트 직소(Project Jigsaw)다. 퍼즐과 같은 모듈화를 통해 자바는 다시 한번 플랫폼의 통합을 가져올 것으로 기대되고 있다.

Java Development Kit (JDK) 9 is set for release on 21 September, 2017

앞서 살펴본 것 처럼, 자바는 태어날 때 부터 다양한 디바이스를 네트워크에 연결할 수 있고 통신할 수 있으며, 분산환경에 적합한 솔루션이었다. 이렇듯 세상의 모든 것들이 인터넷에 연결되는 IoT에 가장 적합한 것이 바로 자바 기술이다. IoT를 통해 다양해진 채널로부터 방대한 양의 데이터가 발생되는데 이를 분석해야 하는 곳에도 바로 자바가 있다. 바로 빅데이터 그리고 패스트데이터(Big Data and Fast Data) 분석 영역이다. IT 인프라스트럭처를 구매해 유지하던 시대는 저물고 필요한 컴퓨팅 자원이나 플랫폼 그리고 소프트웨어를 사용한 만큼 임대하는 클라우드(Cloud) 시대에 자바는 반드시 필요한 기술이 됐다.

Java, 1# Development Platform is Now in the Cloud

2015년 6월, 오라클은 클라우드 벤더로 새롭게 태어났음을 선언했다. 그 중심에 오라클의 DBMS, 웹로직, SOA 제품군, IoT, 빅데이터를 아우르는 자바 기술 기반 PaaS인 ‘오라클 클라우드 플랫폼’이 있다. 자바는 이렇듯 혁신을 통해 세상에 건재하다.

1998년 그날 밤, 나는 그의 물음에 이렇게 답했다.​

“그냥…. 이 스윙의 보라색이 좋아. 다르잖아”


우리 모두는 알고 있다. 자바는 계속해서 놀라움을 주는 기술로 발전할 것임을… 처음 세상에 등장한 후 20년을 혁신한 것처럼!

“Happy Birthday, Java!”

20 years of Java Innovation!
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.