'FlexMate'에 해당되는 글 1건

  1. [2008/05/22] "FlexMate" Comming Soon!

"FlexMate" Comming Soon!

[작렬허접코딩/Flex]
"FlexMate"
플렉스 메이트는?

히스토리는 이렇다.
기존에 ajax를 사용하기 위한 제품이 있었다.
서버는 java base로 동작하여 어느 플랫폼에나 적용할 수 있었다.
하지만 모두 아는 것과 같이 javascript 기반의 ajax는 코딩량이 작살이다.

3월 18일 Flex3 Launching 행사에 회사의 차장님과 과장님 한분이 다녀오셨다.
사실 그전 까지는 1.5버전때 잠깐 관심을 가졌었고 그 이후에는 무관심 했었다.
그 때 팜플렛 한번 보고 Flex3 쉐어판 설치해서 이것 저것 보다 보니
ajax 기반의 javascript와 동일한 기능을 하는 actionscript를 만들 수 있을까 하는 의구심에 코딩을 시작했다.
서버는 Tomcat을 이용하고(사실 servlet container나 WAS 종류는 가리지 않는다. war 파일로 배포가 되기 때문에)
살짝 발동을 걸었다.
최초에는 Socket방식으로 코딩을 했다.
과거에도 java에서 socket 기반으로 http 통신을 하는 프로그램을 짜본적이 있기에
flex에서도 socket을 이용해서 HTTP 프로토콜에 맞게 요청을 날리고 결과를 받아와서 가공하고....
하지만 실제 로컬에서 개발하고 서버에 탑재하니 보안문제가 발목을 잡더라...
그래서 3일만에 다 갈아 엎었다.
HTTPService를 사용하는 방식으로 급선회했다.
이것은 socket으로 데이터를 주고 받는 방식보다는 코드가 간결했다.
HTTPService가 내부로직을 모두 wrapping 하고 있었기에...
여기서 또 문제에 봉착한다.
기본적으로 flex는 event-driven방식의 언어이다.
다은 4GL기반의 언어도 event-driven방식인 것은 동일하다.
하지만 결정적으로 non-blocking 방식으로 동작을 하므로 선처리 작업의 결과에 따라서
후처리 작업이 진행되어야 하는데 매번 이벤트 리스너를 작성해서 처리해 주어야 한다.
가령 flex에서
select * from ... 를 수행하고 레코드를 수신한 다음 수신한 레코드의 조건에 따라서 insert, update 같은 작업을 처리해야 할 경우 아주 난감한 상황이 발생하더라.(거의 불가능하다고 생각이 든다.)
이럴 경우 데이터를 건바이건으로 처리할 때 마다 이벤트 리스너를 등록해야하는 삽질을 감수해야 한다.
그래서 또 다시 방향 급선회
기존에 javascript 기반에서 작성된 ajax 관련 함수가 엄연히 존재하기에
flex에서 ExternalInterface를 이용해서 인터페이스하는 방식으로 바꾸었다.
ExternalInterface.call()은 기본적으로 자스로부터 결과를 받기전까지 blocking 된다.
자스에서 필요한 정보를 Array타입으로 리턴시키면 flex에서 동일하게 Array 타입으로 사용하면 된다.
아주 간단하면서도 효율적인 방법이다.
하지만 이 역시 완벽하지는 않다.
문제점은
각 브라우저의 버전에 따라서 자바스크립트와 플렉스간의 로딩순서가 달라진다든가
브라우저에서 보고 있는 화면의 자바스크립트에 오류가 발생한 경우에 정상적인 처리가 안되는 것이다.
두번째 문제점은 자스쪽에서 trace를 해서 어느 정도 해결이 되었지만
전자의 경우에는 해결할 수 있는 방식이 조금 다르다.
이 경우를 해결하기 위해 생각해 낸 방법은
어차피 javascript는 보안문제 때문에 현재 자신이 돌고 있는 외부 사이트로는 접속이 되지 않는다.
이 전제를 깔고나니 의외로 해결점이 간단해 진다.
현재 판매하고 있는 솔루션은 /xxx 이렇게 특정 위치에 셋팅이 되게끔 구성되어 있으므로
URLLoader를 이용하여 javascript를 읽어와서 flex에서 사용하기 전에 ExternalInterface.call()을 이용해서
읽어온 내용을 수행하니 로딩순서에 지장을 받는 일은 없어졌다.

그 외 현재 다양한 기능을 추가하고 있다.
현재 거의 버그픽스는 끝났고 마지막 테스트를 수행하고 있다.
주요 기능을 살펴보면

- 사용자 세션생성
- 사용자 세션종료
- 서버의 버전조회
- 클라이언트 버전조회
- 현재 웹서버에 접속한 클라이언트의 IP조회
- 세션에 값 설정
- 세션에서 설정된 값 조회
- 데이터베이스 트랜잭션
- PL/SQL 및 StoredProcedure 수행
- COMMIT/ROLLBACK
- 데이터베이스 내용조회
- 서버의 쉘/커맨드 수행
- 서버의 응용프로그램 수행
- 다른웹사이트에 접속해서 결과를 받아오는 프록시기능
- 내부의 jsp 파일을 호출할 수 있는 기능(세션 유지)
- 서버의 웹리포트 호출 및 결과수신
- Oracle의 CLOB 파일 읽고 쓰기
- 서버에 있는 텍스트 읽기
- 서버에 텍스트파일 쓰기
- flex에서 SQL문 작성가능
- 서버에 등록된 SQL을 flex에서 id를 가지고 참조하기
- transaction 수행시 한번에 여러행을 동시에 처리하기

뭐 대략 이정도의 기능들이다.
서버는 servlet 환경으로 동작하므로
모든 종류의 servlet-container에서 동작한다.
단 j2sdk 1.4.2 이상 버전으로 스펙을 맞췄다.

사실 여담이지만 회사에서는 전통적인 event-driven 방식으로 event listener를 이용한 방식의 모듈을 삭제하라고 했지만 왠지 향후를 대비해 몰래 가지고 있다. 우훗~~

약간의 모험은 있지만 레퍼런스를 위해서 이를 이용해 프로젝트를 시작하게 된다.
잘 될거다. ㅋㅋ

또하나의 장점은
4GL 기반의 랭귀지들을 위해 dll 파일도 제공한다.
결국 javascript, flex, 4GL 언어들이 하나의 미들웨어를 통해서 공통적인 기능을 쓸 수 있다
이올린에 북마크하기(0) 이올린에 추천하기(0)
2008/05/22 19:22 2008/05/22 19:22