벌써 12월 10일 릴리즈 됐기 때문에 보름이나 지난 일이 됐지만 Sun 사에서 드디어
Java EE 6를 내놓았다.
스프링의 창시자 Rod Johnson 이 이미 2007년에 이 Java EE 6 (JSR 316) 에 참가를 했고 그 결과물이 이제서야
등장을 하게 된 것이다.
더보기
Java Specification Requests (JSRs) :
자바 명세 요구 정도로 해석이 될 수 있는 이 용어는 자바 플랫폼에 대한 제안 및 최종 사양의 실제 설명이고,
JCP(Java Community Process)에서 개발자들이 모여서 재정하는 것이다.
정식 명세가 등장을 했기 때문에 앞으로 Tomcat 부터 시작해서 여러 서버관련 플랫폼들이 EE 6 에 맞춰서 나오게
될 것이다.
자 그럼 기존 릴리즈 날짜까지 늦춰가면서 사람들 애를 태웠던(?) Java EE 6 의 주요 특징이 뭔지 알아보자~
자 우선 Java EE 6 의 아키텍쳐가 되겠다. 바탕 색깔이 회색인 것들이 Java EE 6에서 새롭게 추가된 것들이다.
Web Beans(JSR-299), JASPIC(JSR-196), JAX-RS(JSR-311) 이렇게 세개다.
우선 Web Beans(
JSR-299)를 살펴 보자면 Contexts and Dependency Injection for the Java EE Platform (CDI) 가
정식 명칭이고, 명세 개발의 주 Leader 가
Gavin King(Red Hat) 이란 사람이다.
저 킹이란 사람이 Seam 프레임워크라고 JBoss 에 탑재되어 있는 프레임워크의 주 개발자인 모양이다.
결국 내 예상과는 다르게 Web Beans 는 스프링식의 빈을 일컫는 것이 아니라 개념이 좀 더 포괄적인데
킹이 밝힌 내용에 따르면(
InfoQ.com 인터뷰 참고)...
Web Beans 란 Java Beans 및 Enterprise Java Bean(EJB)을 포함하는 기존의 Java 컴포넌트 타입에
향상된 수명 주기(life cycle) 및 상호 작용(interaction) 모델을 적용시켜주는 계층(layer)이라 한다.
간단하게 말하자면 빈을 관리하는 스프링의 IoC 컨테이너와 같은 역할을 하는 놈을 만들었다는 거다.
결국 이놈이 추구하는 방향은 Spring의 IoC 컨테이너의 개념과 아주 흡사하다.(그럼 스프링 쓰면 되는거 아닌가?)
단 인터뷰에서도 얘기하는 것이 decorators, stereotypes, deployment types, type safe event/observer bindings and
interceptor binding annotations(이부분은 해석하기 보단 그냥 가져오는 것이 낫다고 판단) 같이 다른 솔루션(스프링을
얘기하는 듯)에선 제공하지 않는 것들을 제공한다고 한다.
더보기
이 Gavin King의 인터뷰와 Web Beans 라고 하는 놈의 태생을 보면 아주 재밌는 점이 있는데 거의 대놓고
스프링을 견제하고 있다는 사실이다. 또한 로드존슨은
블로그를 통해서
'JBoss 가 스프링 tc, dm 서버 때문에 걱정이다.' 식의 글과
'JBoss 가 잘못된 길을 가고 있고, 따라하기 식의 모방품으로는 원본을 따라올 수 없다.' 식으로
서로 티격태격하는 모습이 가관이다. (하하 거의 애들식의 싸움이다. ㅋㅋ)
여하간 로드존슨과 같이 내 생각에도 JBoss 의 Seam 프레임워크가 스프링을 따라 잡기는 영 힘들 것 같다.
단 우리나라는 아니지만 미국에서 JBoss의 입지도 무시할 것은 아니기 때문에 앞으로의 싸움을 즐겁게
감상할 수 있을 것 같다 ^^
결국 Web Beans 혹은 CDI(어째 정식명칭인 CDI 보단 Web Beans 가 더 입에 붙는듯)는 JSF환경이라던지,
EJB 환경에서 다른 프레임워크 같은 것들을 깔지 않고 스프링의 DI 개념을 도입시키고자 할때에 (딱 JBoss환경)
유용할 것으로 보인다.(내 생각엔 Spring이 거의 표준으로 잡혔기 때문에 많은 개발자들이 외면하지 않을까?^^)
이에 대한 구현이나 내용은 Sun의
Java EE 6 소개글이나 http://www.theserverside.com의
아티클을 참고로 하는 것
이 좋을 것 같다.
다음으로 JASPIC (Java Authentication Service Provider Interface for Containers) 에 대해 알아보자.
저 이름에서 보듯이 이건 컨테이너를 위해서 제공되는 인증 Service Provider Interface(SPI) 이다.
더보기
SPI : 컴포넌트의 교체가 가능한 매커니즘을 제공하는 말 그대로 인터페이스이다. 예를 들자면 JDBC 같이 거의
대부분이 interface로 이루어져서 결국 벤더사(오라클, IBM, MS와 같은)에서 모든 것들을 인터페이스에 적힌
대로 구현을 해줘야 하는 방식이다. 이렇게 하면 개발자는 로직의 개발에 대한 것은 거의 똑같이 쓰고, 해당
라이브러리만 교체해주는 방식으로 할 수 있기 때문에 좋지만 벤더사 입장에서는 귀찮은(^^) 것이 되겠다.
이전까지는 각 컨테이너(예를 들어 톰캣)에서 제공하는 것으로만 인증을 했었다면 이제는 어플리케이션 수준의
메세지를 통한 인증 방식도 제공하기 시작한 것이다. 그에 따라 개발자가 직접 SAM(Server Authentication Module)을
작성할 수 있게 되었다.
GlassFish 에 적용하는 방법을 알려주는 글이 있으니 참고하길 바란다.
마지막으로 JAX-RS(Java API for RESTful Web Services) 에 대해 알아보자.
더보기
REST : Representational State Transfer 이란 말의 약자로써 일종의 소프트웨어 아키텍쳐의 한 형식이다.
모든 자원이 URI 로써 접근이 가능하게끔 만들어야 하는 일종의 제약조건인데, RSS와 같이 특정 주소로써
계속해서 정보를 얻을 수 있는 방법 또한 RESTful(REST의 규칙을 잘 지켜서 만든 어플리케이션)이라고 할 수
있겠다. 그에 따른 여러가지 제약이 존재하는데 예를 들어 session을 이용해도 안되고, 쿠키를 이용해도 안된다.
자세한 내용은
위키를 참고하시라.
JAX-RS 는 REST 에 부합하는 가벼운 웹 서비스를 만들 수 있게 해주는 스펙이다. 이번 Java EE 6 에서 특히나
많이 쓰이게 된 각종 Annotation을 이용 웹 서비스를 구축할 수 있게끔 도와준다. 원래 웹 서비스 구축을 위해서
해야했던 제반 코딩이 정말 확 줄어들었으니 궁금하신 분들은
이곳에 가서 소스를 확인해보라.
이상이 우선 알아본 Java EE 6 아키텍쳐에 있어서 새롭게 추가된 스펙들이 되겠다.
다음번에는 실제로 개발자들의 주 관심사가 될 Web Profiles과 Servlet 3.0, JSF, EJB Lite 등에 대해서 알아보겠다.