자바는 1996년 초반 1.0버전 출시 이후 급속히 보급되었다.
메모리 관리, 포인터 등 복잡한 C/C++ 언어를 대신할 새로운 프로그래밍의 언어를 원하던 시기였기에 타이밍은 좋았다.
많은 개발자가 금세 자바 프로그래밍을 시작했고, 이들을 자바로 전환시킬 일등공신은 애플릿(applet)이었다.
애플릿은 웹 브라우저에서 별도 프로세스로 실행 가능한 작은 애플리케이션으로 HTML/CSS만으로는 불가능한 일을 웹 사이트에 추가할 수 있었다.(예 실시간 반응하는 그래프나 스트리밍 비디오 피드)
인터넷이 빠르게 팽창하면서 정적 웹 페이지는 낡고 따분한 유물로 전략했고 사람들은 더 빠르고 화려한 웹 서핑을 원했다.
애플릿을 쓰면 사용자와 대화하면서도 정적인 월드 와이드 웹(WWW)에 유려하고 멋진 효과나 액션을 넣을 수 있었지만, 인터넷 상은 뭐든 오래가는 법이 없다. 사용자는 더 많은 것을 바랐고 애플릿은 그런 요구를 충족시키지 못해 인기는 시들해졌다.
그래도 애플릿은 자바 플랫폼을 세상에 빠르게 전파하고 인기 반열에 올려놓은 주역이다.
자바에서 엔터프라이즈 자바로
자바 스탠다드 에디션(SE)출시 이후 1997년 IBM은 EJB 기술은 선보였고 1999년 선 마이크로시스템즈는 이를 엔터프라이즈 자바 플랫폼(Enterprise Java Platform)(J2EE) 1.2에 편입했다.
선은 J2EE(자바 EE 5 버전이 나오기 전 이름)가 나오기전에 1998년 JPE라는 이름으로 자바 전문가용 버전을 발표했지만, EJB 출시 이후 되어서야 업계와 개발자는 엔터프라이즈 자바에 주목하기 시작했다.
J2EE 1.3 버전이 2001년 출시된 이후 자바는 엔터프라이즈 영역에서 중요한 위치를 선점했고 2003년 J2EE 1.4 버전 출시를 계기로 자리를 굳혔다.
J2EE 1.4는 자바 역사틀 통틀어 가장 위대한 족적으로 손꼽힌다.
새 버저 이후에도 J2EE 1.4는 수년동안 두루 인기를 누렸는데 웬일이지 업계는 불평불만도 많았지만, 새 버전을 빠르게 수용하지 않았다.
가족형 세단보다 13톤 화물 트럭을 모는 듯한 느낌? J2EE 1.4는 강력한 기능을 탑재했지만 XML 파일이 너무 길고 복잡했고 프레임워크와 컨테이너 모두 결코 가볍지 않았다.
그럼에도 J2EE는 이런 특성 덕분에 가장 인기 있는 엔터프라이즈 개발 플랫폼이 되었다.
이식성-자바 코드는 운영체제에구애받지 않고 JVM으로 실행할수 있었다.
개발자가 윈도에서 개발하고 리눅스에서 테스트한 다음 UNIX 시스템에 완성품을 배포하는 것도 가능하다.
보안- J2EE는 롤-기반(role-base) 보안 모델을 자체 제공한다.
트랜잭션-트랜잭션기능이 내장되어 있다.
J2SE언어 특성- J2SE는 구문이 쉽고 가비지 컬렉션(garbage collection)을 대신하는 멋쟁이 객체지향 프로그래밍 언어이다.
하지만 J2EE는 완벽하지 못했다. XML 설정을 남발하는 복잡한 구조 탓에 개발 환경은 문제 투성이로 점철되었다.
엔터프라이즈 자바 패턴의 출현
J2EE 특유의 프로그래밍 모델은 너무 복잡해서 많은 프로젝트가 난국에 빠졌다.
J2EE로 개발하다보니 JNDI 룩업(lookup)코드, XML 설정파일, JDBC 리소스를 얻고 해제하는 try/catch 블록 등의 "연결(plumbing)"코드가 애플리케이션을 채우기 시작했다. 또 이런 코드를 개발/유지 보수하는 일이 리소스 누수를 비롯한 수많은 버그와 성능 이슈의 요인으로 밝혀졌다.
EJB 컴포넌트는 비즈니스 로직의 구현 복잡도를 낮추려고 개발된 모델인데 끝내 그 목표를 달성하지 못했다.
너무복잡한데다가 과용하는 일도 다반사였다.
2000년 자바원 컨퍼런스에서 J2EE가 첫선을 보인 몇년 뒤 디팍 알루어, 존크루피, 댄막스는 "J2EE 플랫폼을 위한 패턴 프로토타이핑"을 주제로 강연하면서 J2EE 애플리케이션 설계시 흔히 발생하는 문제점에 관한 패턴을 몇가지 소개한다.
그리고 이듬해, 이들은 <코어 J2EE 패턴>이라는 책을 출간한다.
15개의 패턴 외에도 새로운 J2EE 디자인 패턴 6개(프레젠테이션 레이어의 컨텍스트 객체와 애플리케이션 컨트롤러, 비즈니스 티어의 애플리케이션 서비스와 비즈니스 객체, 통합 티어의 도메인 저장소와 웹서비스 브로커 등)가 있다.
6개 패턴 중에는 "고전" GoF 패턴에서 출발한 것도 있지만 J2EE의 결점을 해소한 새로운 패턴도 있다.
그 다음해 아파치 카멜 등 몇몇 프로젝트와 프레임워크가 나오면서 엔터프라이즈 개발자가 한결 일하기 편해졌고 로드 존슨은 한달 더 나아가 J2EE와 결별하고 스프링 프레임워크를 세상에 내놓았다.
스프링은 곧 대세로 굳혀지며 열열한 인그를 등에 업고 자바 EE가 근본적으로 새로운 프로그래밍 모델로 혁신하는데 상당한 영향을 주었다.
이 패턴들은 아직도 많이 쓰고 있지만, 갈견해진 자바 EE 프로그래밍 모델 덕분에 더 이상 필요하지 않는 패턴도 있다.
디자인 패턴과 엔터프라이즈 패턴의 차이점
엔터프라이즈 패턴은 엔터프라이즈 소프트웨어를 대상으로 하며 테스크톱 애플리케이션과는 사뭇 다른 엔터프라이즈 문제 해결에 초점을 둔다는 점에서 일반 디자인 패턴과 다르다.
서비스 지향 아키텍처(SOA)라는 새로운 사상에 따라 잘 조직된 재사용 가능한 엔터프라이즈 소프트웨어를 제작하려면 몇가지 기본 원칙을 따랴야 한다.
돈박스는 엔터플아ㅣ즈 프로젝트의 작은 요건을 해결하기 위한 근본 원리를 제시했다.
SOA의 4대원칙
1.경계가 분명하다.
2.서비스는 자율적이다.
3.서비스는 스키마와 규약을 공유하나 클래스는 공유하지 않는다.
4.서비스 호환성은 정책에 따라 결정한다.
자바 EE 5이후 엔터프라이즈 자바는 다시 각광받기 시작하지만 이미 스프링, 스트럿츠 등의 서드파티 프레임워크가 너무 오래 군림해온 터라 자바 EE 6이후에야 이들보다 더 경쟁력 있는 진보된 플랫폼이 마련됐다.
자바 EE 7은 GoF책의 디자인 패턴이 대부분 플랫폼 내부에 잘 정돈되어있어 언제라도 꺼내쓸수 있고 J2EE 시절과 달리 XML 파일을 복잡하게 설정하지 않고 애노테이션만 붙여 패턴을 간단히 구현할 수 있다.