20121031 개발일지 : Spring MVC와 jQuery와의 통신

 어제의 그 밤샘 작업의 여파인지 오늘은 운동을 못한게 조금 한스럽다. 날씨는 추워지고, 그 만큼 따뜻한 커피 한 잔의 향이 정말 나를 손쉽게 취하게 만든다. 따뜻함을 찾게 만들고, 그래서일까. 예전에는 겨울에도 줄곧 잘 입던 반팔티는 올 겨울부터는 절대 입지 못하게 되었다. 왜냐면, 추우니깐.

 그렇게 나는 오늘도 출근을 했다. 학생임과 동시에 회사를 다니는 일은 생각보다 쉽지 않지만 그래도 나는 회사를 다니는 것이 좋다. 내가 할 수 있는 일이 있다는 것은 곧 나를 살아있게 만들어 주는 것 같다. 

 오늘은 어제의 예상처럼 jQuery의 Ajax를 통해 구축해 둔 Spring MVC 의 컨트롤러와의 데이터 통신 작업을 했다. 최초에는 그냥 $.ajax로 하면 되것지 싶었는데 이상하게 안된다. 자세히 보니 /xxx.do 이런 식으로 Ajax에서 호출을 했는데, 루트 경로를 톰켓이 서버로 물려있는 이 이클립스에서는 제대로 인식하지 못하는 것이었다. 

 그래서 ./xxx.do 로 경로를 설정하니 일단 성공인 것 같은데, 전부터 Ajax통신에는 인코딩된 JSON데이터를 통해 통신하자는 생각을 했다. 아 물론 Ajax에서 받는 부분만. 그래서 보니 또 JSON으로 데이터를 보내기 위해서는 root-context.xml 등 web.xml에서 설정해 둔 컨텍스트 빈 설정 파일에서 “<context:component-scan base-package=”com.izect.fiamm.login.controller” />” 이런 식으로 JSON을 view로 사용할 컨트롤러가 있는 패키지를 선택해 주고 나서 아래와 같이 @ResponseBody로 된 컨트롤러를 만들면 된다.  

// 로그인 처리

@RequestMapping(value = “/doLogin.do”, method = RequestMethod.GET)

public @ResponseBody Entity doLogin( @RequestParam(“userId”) String userId,

@RequestParam(“passwd”) String passwd,

@RequestParam(“smsKey”) String smsKey,

@RequestParam(“outLogin_yn”) String outLogin_yn,

HttpServletRequest request,HttpSession sess) throws Exception {

logger.info(“HomeController – doLogin”);

Entity result = new Entity();

// Parameter 세팅

Entity param = new Entity();

param.setValue(“userId”, userId);

param.setValue(“passwd”, passwd);

param.setValue(“smsKey”, smsKey);

param.setValue(“outLogin_yn”, outLogin_yn);

int errMsg = loginService.doLogin(sess, request, param);

logger.info(“errMsg : “+errMsg);

result.setValue(“errMsg”, errMsg);

return result;

} 

그러면 신기하게도 Ajax로 받은 data.errMsg는 위의 맵에서 넣어준 데이터가 들어가 있다. 위에서 Entity는 HashMap을 상속받아 새로 구현해 준 내가 가지고 있는 개체이며, jQuery의 내장 함수 중 $.get을 사용하였다. 

 뭐 여튼 그래서.. 결론적으로는 오늘 드디어 서버를 구현하고 그곳에서 모든 스프링과 관련된 의존성에 대한 세팅을 끝낸 후, Mybatis와 Velocity를 연동하고 컨텍스트와 viewResolver세팅을 마무리 한 후 드디어 클라이언트와 서버와의 통신이 일차적으로 끝났다. 참으로 감회가 새롭다. 일전에 포스팅에서도 썼지만, 약 4년 전 나의 사수였던 모 선임 프로그래머는 내게 이러한 스프링 세팅에 대한 기술을 가르쳐 주지 않았는데, 이유인 즉 자신의 밥줄이 사라진다는 이유에서였다. 나름 자바 엔터프라이즈 웹 쪽에서는 꽤나 어려우면서도 고 수준의 프레임워크인 스프링을 물론 아직까진 자유자제로 다룰 수는 없다만, 예전의 세팅 그대로 성공했다는 것이 어딘가..

 여튼 이제서야 나는 클라이언트쪽의 작업, 즉 YUI와 jQuery 작업을 할 수 있게 되었다. 여기서 또한 얼마나 많은 삽질이 유발될 지 모르겠지만 여튼 빨리 작업을 끝내야 한다. 그리고 결론적으로는 이러한 기술이 내가 구상중인 서비스를 구현하는 데에 있어서 큰 힘이 될 것이다.