공룡호가 사는 세상 이야기

파일 업로드는 오늘날 웹의 기본 기능 중 하나이다.
하지만, 대용량의 파일 업로드를 안정적으로 수행하기 위해서는 ActiveX 따위의 컴포넌트를 필요로 했다.
특히나, 전송 진행 상태를 표시하기 위해서는 더더욱 그러했다.
웹에서 검색을 하고, 필요한 데이터를 내려받기 위해서 특정 웹사이트는 다운로드용 ActiveX를 설치하도록 요구하는데, 다음에 또 방문할지 알 수 없는 일회성인 곳이라면 더더욱 설치하기가 싫어지는 것은 사실이다.
DWR을 사용하여 Ajax기반의 파일 업로드를 작성/이용하면, 클라이언트는 ActiveX와 같은 지저분한 컨트롤을 설치 할 필요가 없을 뿐 아니라, 포틀릿을 통해 서버는 진행 상태를 서버측에서 검색하고, 클라이언트도 진행 상태를 디스플레이 할 수 있다.

사용자 삽입 이미지

물론, 파일 업로드 진행 시 서버와 클라이언트 간 통신은 Ajax를 사용하여 구현된다.
또한 DWR(Direct Web Remoting)는 웹 개발 프로세스를 가져오는데 이상적인 프레임워크로서, 서버사이드 빈과 자바스크립트 그리고 DWR 서블릿으로 구성되어 있는 아파치 라이센스를 가진 라이브러리 이다.
말 그대로 서버에 존재하는 클래스를 마치 로컬에서 호출하듯이 사용하게 해 주는 것이라면 이해가 될런지?
마치 RMI와도 흡사한 DWR은 서버의 자바클래스와, 클라이언트의 자바스크립트의 원격호출기능을 정의한다. 서버에 Cart라는 클래스가 있고, get CartItem이라는 메소드가 있다면, 클라이언트의 스크립트 상에서 똑 같은 객체명 Cart.getCartItem()으로 호출하여 리턴값을 사용할 수 있게 된다.

그러면 DWR 서블릿은 또 무엇이며, 서버사이드 빈은 또 무엇인가?

DWR 서블릿 - 일종의 맵퍼, 후킹 과 같은 DWR만의 컨트롤인데 라이브러리를 연결하고, 초기로딩시 올라올 수 있게 몇몇 설정만 간단히 하면 된다. 주요 기능으로는 스크립트 자동 제네레이션이나, 데이터 이동 등의 역할을 하는 컨트롤러라 생각하면 된다.

서버사이드 빈 - 서버와 클라이언트 사이을 오고갈 빈즈이다. DWR이 서버에 있는 빈을 자바스크립트로 자동 변환작업을 해 주어, 클라이언트 스크립트에서 마치 자신의 클래스를 쓰는 것 처럼, 각종 값들을 가져올 수 있게 한다. 실제로 작성해야 하는 것들 이다. (참고 : 자바사랑 까페)

그럼, DWR을 이용해서 Ajax기반의 파일 업로드 포틀릿(웹 컴포넌트)를 제작해 보자.

IBM developerWorks : DWR을 사용하여 Ajax 기반 파일 업로드 포틀릿 개발하기
http://www.ibm.com/developerworks/kr/library/wa-aj-dwr/