DWR - (1) DWR이란?

Published on: 2010. 12. 29. 11:41 by louis.dev
DWR은 DirectWebRemoting의 약자입니다.

DWR을 사용하기 전 비동기적 서버 통신은 Ajax를 통해서 비동기적인 request를 보내고 서버가 해당하는 데이터를 텍스트(json text도 가능)나, xml을 보내주면 javascript의 callback method를 통해 데이터 데이터를 parsing하여 view에 javascript로 뿌려주는 방식으로 사용하였습니다.

이렇게 web에서 가장 많이 사용하는 비동기 통신은 얼마전까지 ajax가 담당해 왔습니다. 하지만, Ajax를 구현해 보신 분은 아시겠지만, 비동기 통신을 하기 위해선 XMLHttpRequest라는 Object의 인스턴스를 생성해서( 이것도 브라우저마다 지원하는 XMLHttpRequest가 달라 브라우저마다 따로 구현을 해야 합니다.) request를 서버로 날리고 response로 받은 xml이나 text( ajax는 두종류의 return밖에 지원하지 않아요..ㅜㅜ)를 적절히 파싱후 html의 해당 영역에 꽂아 넣어야 하는 엄청 대박 불편한 루틴을 타야 합니다. 

그래서 나온것이 DWR입니다. 이 DWR이란 놈은 Ajax의 XMLHttpRequest를 만들필요 없이, 바로 비지니스로직을 처리하는 JAVA의 class로 직접 접근할 수 있습니다. 그렇기 때문에 request를 날리기 위해 XMLHttpReqeust를 만들 필요가 없을 뿐더러, view에서 자바 method를 call할때 전달 파라미터가 String형이 아닌 Object 형도 가능하다는 장점이 있습니다.

그럼 다음 post에는 실제 DWR을 구현해 보도록 하겠습니다~

*비동기적 통신? 
일반적으로 서버로 request를 보내게 되면 페이지가 이동하면서 서버가 응답을 보내올때까지 먹통이 되었다가,(서버가 응답을 리턴해 줄때까지 기다리다가) 서버가 리턴해준 응답을 통해 다음페이지를 보여주게 됩니다. 이러한 방식이 동기화 방식입니다. 
이와 반대로 비동기적 통신이란 페이지는 이동하지 않은 상태에서 request를 만들어 서버로 요청할수 있고, 그 반응이 올때까지 기다리지 않고 다른 작업을 하다 서버로 부터 응답이 오면 화면에 보여주는 방식을 비동기적이라고 합니다.

Ajax의 비동기 통신에 대해서 얘기 할때 보통 택배의 예를 많이 듭니다. 
만약 택배아저씨가 전달할 물건이 request이고 아저씨가 배달해야 할 집을 server라고 가정하겠습니다. 이때 동기적 통신은 처음 배달하려는 집에 찾아가 문을 두드리고 사람이 없으면 올때까지 기다리는 방식입니다. 정말 비효율 적이겠죠.
반대로 문을 두드렸으나 반응이 없음을 확인한 택배 아저씨는 현관문 앞에 쪽지로 친절하게 "집에 도착했을때 전화주세요" 라고 친절하게 자기의 전화번호를 남겨두고( 실제로 이런 분은 없죠..ㅜㅜ) 다른집의 택배를 열심히 배달하다가, 아까 집에 사람이 없던 곳의 주인이 집에 도착하여 "나 집에 왔어요~" 라고 전화를 주면 다시 택배아저씨는 그집으로 가서 택배를 전달을 합니다.

이처럼 페이지에서 사용자가 서버의 요청을 올때까지 멍하니 하얀 페이지를 보고 있는것이 아니라, 계속 다른 작업을 하면서 서버로부터 response가 도착했을때 처리하는 방식을 비동기적 통신이라고 합니다. (이해가 잘 되셨을지는 잘 모르겠네요..;;;)