Adobe Flex 2.0 발표와 더불어 공개된 Adobe Flex Data Service 2.0(이하 FDS2)은 그 기가 막힌 성능으로도 여러 사람들에게 놀라움을 안겨주었지만 더불어 기가 막힌 가격으로 또한번 여러 사람들을 경악에 빠뜨린 바 있다.
현재 Adobe는 FDS2의 계보를 이으며 여러 제품군과 통합되고 그 기능이 개선된 LiveCycle Data Service(이하 LCDS)를 공급중이며, 많은 기업에서 기존의 EJB 등의 UI를 Flex로 개선하면서 도입하고 있다. 뭐 가격이 어찌됐건 성능 하나는 죽이니까..
문제는, 개발자들이 가격을 알아버렸다는데 있겠다. 원체 비싼 솔루션이다 보니 엔지니어들에게는 그 금액마저도 부담으로 다가오는 것이다. 어차피 엔지니어가 돈주고 사는것도 아닌데 왜냐고?
그 이유를 디벼줄께
좀 조악한 비유이긴 하지만 타자 역시도 저와 비슷한 느낌으로 LCDS(당시에는 FDS)에 접근하기가 쉽지만은 않았다.
LCDS.. 그 가격에 비해 알고보면 실로 별거 아니다. 지금부터 차근히 디벼보자!!
1. 라이센스 정책
FDS2 시절에는 라이센스 등급이 Express, Community, Enterprise 이렇게 크게 나뉜다. 현재는 Express 대신에 BlazeDS가 1CPU 라이센스로 무료 배포되고 있다. 1CPU는 '물리적으로' 1개의 CPU를 일컫는다. 다만 이 '물리적으로'라는 말에 해석이 엿장수 마음이라 듀얼코어까지만 '물리적 1CPU'로 인정하고 쿼드코어부터는 2CPU로 간주한다. 헥사코어? 옥토코어? 각각 3CPU / 4CPU 되시겠다.
2. 설치
설치야말로 Adobe 홈페이지에 그럴듯하게 예시 및 설명이 되어 있다. 다만, 실제 사용하기 위해서는 flex.war 파일 하나만 있으면 된다는거~ BlazeDS의 경우에는 blazeds.war 파일 되시겠다. 타자는 아래부터는 BlazeDS로 예시를 들어 보겠다.
우선 엔지니어의 윈도우에 WAS를 설치한다. 타자는 Tomcat을 설치했다.
LCDS라면 역시 윈도우에 설치한다. 기존 FDS2에서는 JRun 기반으로 배포를 했던 반면에, 현재는 Tomcat 기반으로 배포한다. 사실 다 필요없다. flex.war / blazeds.war 이 파일만 찾아서 엔지니어가 실제로 사용할 WAS에 deploy해주면 그게 바로 설치작업이다. 설마 war 파일 deploy하는 법까지 설명할 필요는 없을듯 하다.
3. 사용
이제 설정 파일을 열어보자. Tomcat의 경우 {AppRoot}/WEB-INF/flex/service-config.xml 의 경로를 열어보면 되겠다.
service-config.xml을 열어보자
위와 같이 각 기능에 따라 몇개의 파일로 분류되어 있다. RemoteObject 사용에 대한 설정은 remoting-config.xml, Messaging 사용에 대한 설정은 messaging-config.xml을 열어보면 된다.
타자, RemoteObject에 꽂혔다.
remoting-config.xml을 열어보자
굵은 글씨 부분이 타자가 추가한 부분이다.
파란 글씨는 Flex에서 호출할 이름 되겠으며, 붉은 글씨는 호출받으면 실제로 대령할 Java 클래스 경로를 넣어주면 된다. 이게 뭐냐고?
Flex RemoteObject란 말 그대로 Remote(원격) Object(객체). Flex 내에서 new Object 뭐 이런 식으로 생성하지 않아도 WAS에 고이 모셔둔 Java 객체를 마치 Flex 내의 객체인양 사용할 수 있는 기능이다.
Java 샘플 소스
Flex 샘플 소스
그렇다. 전세계 엔지니어들의 총애를 한몸에 받고 계시는 <Hello World> 출력하기 프로젝트인 것이다. Flex 소스 내에 강조표시 된 부분에서 보다시피 Java 클래스 내의 getHelloWorld() 메소드를 호출하고 있다. Flex 주제에. 그런데 더 기가 막힌건, 이녀석이 실제로 나에게 헬로~ 하고 인사를 한다는 것이다.
본 샘플에서는 getHelloWorld() 메소드가 바로 "Hello World !!"를 리턴했지만 <Hello World> 문자열을 JDBC를 통해 Oracle에서 쿼리를 통해 리턴받을 수도 있고 - 이게 바로 Flex의 DB 연동이다 - 소켓 서버 접속 등을 통해 리턴받을 수도 있을 것이고.. WAS에서 Java로 구현 가능한 기능 및 데이터는 위의 샘플과 같은 방식으로 Flex로 구현된 UI에서 사용 및 표시 가능하게 되는 것이다.
백번 보고 들어 뭐하나 얼렁 Copy / Paste 해서 실행해보자.
LCDS가 뭔가요? BlazeDS가 뭔가요? (이 타이밍 쯤에서 '먹는건가요?' 한번 나와줘야 할지도..)
타자가 질문받은 많은 질문자들 중 일부는 LCDS가 하나의 어플리케이션 서버 쯤으로 인식하는 사람들도 있었고, 별도의 중계 프로그램 정도로 인식하는 사람들도 있었다.
그 분들께 어느정도 이해할만한 답변을 드리자면, LCDS, BlazeDS는 위와 같은 Flex-Java 간 데이터 연동 - 사실 이건 일부에 불과하다 - 을 위한 WAS 라이브러리 정도로 받아들이면 크게 틀리지 않는다는 타자의 소견이다.
백골이 진토되어 넋이라도 쫀득쫀득.. [사고뭉치 엉클쪼]