DWR은 Direct Web Remoting의 약어로 자바 객체를 기반으로 자바스크립트 코드를 생성하여, 클라이언트 자바스크립트에서 (생성한 자바스크립트를 사용하여) 서버쪽 자바 객체의 메소드를 호출할 수 있도록 해주는 프레임워크입니다.

수많은 Ajax 프레임워크 중에서 DWR이 Spring와 밀접한 관계가 된 것은 DWR 자체에서 Spring을 지원하는 기능을 구현했기 때문입니다. 따라서 매우 간단하게 Spring와 연동하여 사용할 수 있습니다. 연동한다는 의미를 좀 더 구체적으로 서술하면, Spring Container가 관리하는 bean을 DWR을 사용하여 자바스크립트로 노출시킬 수 있다는 것입니다.

Spring MVC를 사용하든, Spring Web Flow를 사용하든 관계가 없습니다. 어차피 요청은 자바스크립트에서 할 것이고, 이 요청을 처리하는 녀석은 DWR Servlet이지, Spring의 Dispatcher Servlet이 아닙니다. 특정 요청들을 한 곳으로 집중한다는 측면에서 둘은 비슷하지만, View Resolving, Hadler Mapping 까지 관장하는 Spring의 Dispatcher Servlet과는 전혀 다른 일을 합니다. DWR Servlet에 등록되어 있는 자바 객체를 바탕으로 요청을 처리할 자바스크립 코드를 생성하고, 그것으로 처리한 결과를 다시 (클라이언트)웹브라우저에게 돌려주는 역할을 합니다.

사용자 삽입 이미지
클라이언트 자바스크립트에서 특정 요청을 호출하면, 해당 요청을 Dwr Servlet이 받아들이고, Dwr Servlet은 drm.xml에 설정된 정보를 바탕으로 해당 요청을 처리할 자바 객체의 자바스크립트(DWR이 알아서 생성합니다.)를 호출하고 그 결과를 다시 돌려주게 됩니다. 그럼 돌려받은 정보로 비동기식으로 화면에 보여주는 것은 클라이언트쪽에서 알아서 하겠죠.

위 그림에서 Spring이 낑겨들어가는 쪽은 바로 녹색 네모 둘을 연결한 빨간 선입니다. creator는 자바스크립트 생성기를 말하는데, 자바스크립트 코드로 생성할 자바 객체를 지정해 주는데, 이 객체를 Spring Container에 있는 bean을 가져와서 생성할 수 있도록 설정할 수 있습니다.

왜? 스프링 컨테이너가 관리하는 bean으로 설정하려고 할까요? 스프링이 제공하는 DI와 AOP와 같은 기능을 사용할 수 있기 때문입니다. 그런 기능들을 사용하지 못한다면, 자바스크립트로 노출하고 싶어하는 자바 객체 내부에 해당 객체가 필요로 하는 모든 것들이 들어있어야합니다.(new를 많이 사용해서 코딩했겠죠.) 스프링을 사용한다면, 그럴 필요가 없어집니다. 이 말은 더욱 유연하고 유지관리하기 편리한 객체를 자바스크립트로 노출 시킬 수 있다는 뜻입니다.

설명은 이만하고, 다음 글에서 코딩을 해보겠습니다.