본문 바로가기

프로그래밍/Spring

Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (1) - 개요

적어도 우리나라에서 Web 개발에 참여를 해본 경험이 있는 사람이라면 Xplatform, Miplatform, Nexacro, Gauce, TrustForm, WebSquare 란 단어들 중 하나 정도는 들어본 경험이 있을것이다. 이 프로그램들은 흔히 X-Internet Tool로 통칭되는 Ria Tool들이다. 과거 Adobe에서 Flex를 출시하면서 이러한 Ria Tool의 유행을 불러일으켰지만 지금은 특정 분야를 제외하고는 사장되고 있다. 그 이유는 이런저런 업체들이 여러 프로그램들을 내놓았지만 이들 프로그램들이 전세계의 표준에 채택되지도 그렇다고 표준을 만족하지도 않기 때문이라 본다. 표준이 없이 이런저런 회사에서 만든 프로그램들로 줄구난방이 되면 개발자 입장에서도 모든 개발툴들의 문법및 동작 원리를 꿰차야 한다는건데 그게 어디 쉬운일인가? 물론 실제 이들 프로그램들에 대한 교육을 받아보면 정말 쉽다고는 느껴질수 있다. 그러나 그 교육이란게 정해진 교육용 템플릿을 가지고 하는 것이다보니 그 템플릿의 범주를 벗어난 개발을 해야 하는 상황에서는 개발자가 이를 풀어나갈 방법이 없다.  그렇다고 개발사에게 문의해보면 지원하지 않는다는 식의 성의없는 답변을 얻는 경우도 있다. 개인적으로 이 RIA Tool들은 사내 인트라넷 차원에서의 사무용 프로그램 개발로는 괜찮은 UI를 제공해주지만 대민서비스용 UI로는 부적합하다는 느낌이 강했다. 이러한 느낌도 이런 프로그램들의 확장에 제한이 되는 요인이 될꺼라 생각한다.

 

이 정도로 RIA Tool에 대한 썰을 고만 풀고 이제 이번 강좌의 개요에 대해 설명하겠다. 아는 지인이 이번에 Xplatform과 Spring 연동 프로젝트에 참여하게 되었는데 내게 템플릿 샘플을 요청하게 되었다. 개인적으로 공부차원에서 만든 어느분이 만든 Miplatform 연동 템플릿을 분석하고 공부해서 만든 것이 있긴 했지만 워낙 오래되어서 내 스스로 다시 분석해야 할 정도였다. 그래서 다시 분석해보니 줄 수가 없었다. 주기에는 범용성이 너무 떨어지는 느낌이 있었다. 그래서 전자정부 프레임워크에서 사용하는 Xplatform 연동 템플릿을 보게 되었는데 이것도 범용성이 떨어지기는 마찬가지였다. 범용성이란 단어가 두 차례나 언급되었는데 이 부분에 대한 언급을 조금은 해야 할 듯 하다.

 

우리가 Controller 에서 URL과 매핑이 되는 메소드는 다음과 같은 형태를 가지고 있다.

 

@RequestMapping("/list")
public void list(Model model, SampleVO sampleVO, @RequestParam(value="pageno") int pageno, HttpServletRequest httpServletRequest) {
	...
}

 

SpringFramework로 MVC Web 개발을 해본 사람이라면 이 코드의 의미는 알 수 있다고 생각한다. 이 메소드에서 넘겨진 파라미터를 보면 Model 객체를 받았고, Request로 넘어온 요청을 분석해서 SampleVO 클래스 객체로 만든 변수인 sampleVO,  pageno 란 파라미터 이름으로 넘어온 값을 int 형으로 받은 pageno 변수, 마지막으로 HttpServletRequest 객체인 httpServletRequest 변수가 있다. SampleVO란 클래스는 자바에서 제공되는 클래스가 아닌 VO 성격으로 만든 클래스이다. 하지만 VO기 때문에 별도의 라이브러리를 요구하지 않는 순수 POJO 스타일의 자바 클래스이다. 그래서 여기까지만 놓고 보면 이 메소드 정의는 Spring을 사용하고 있는 상황에서는 언제 어떠한 경우에서든 적용할 수 있다. 그러면 이제 다음의 코드를 보자

 

@RequestMapping("/list")
public void list(Model model, VariableList variableList) {
	...
}

 

위에서 보여준 코드와는 차이가 있다. 파라미터 갯수가 줄었어요..머 이걸 듣자고 차이가 있다는 얘길 하는건 아니다 ㅎㅎ..여기서 보면 VariableList 란 클래스가 있다. 처음보는데 어디서 제공되는 클래스지 라고 생각하는 사람들이 있을텐데 이 클래스는 Xplatform 프로그래밍을 할때 정의해놓은 변수명과 그 값들이 들어가게끔 되어 있는 클래스이다. 즉 사용자가 Xplatform에서 서버에 전달하기 위한 변수를 선언하고 여기에 값을 설정하면 VariableList 클래스 객체에서 이를 받아서 처리할 수 있게 된다. 여기까지 머 느낀거 없을까? 머 Xplatform 연동하는 프로젝트에서 하는 방식이니까 당연 이렇게 코딩하는게 맞지 않을까? 하고 생각하는 사람들이 있을것이다. 그러나 개인적으로는 이렇게 생각하는건 잘못된거라 생각한다. Xplatform같은 RIA 툴은 전적으로 클라이언트 UI 화면을 제작하는 툴이다. 클라이언트 화면이란 여러가지 다양한 존재가 있다. 우리가 흔히 아는 HTML 화면도 있을수 있고, 또 VisualBasic 같은 C/S 프로그램 화면도 존재할 수 있다. 지금 현재는 Xplatform을 사용할 수는 있겠지만 차후에 Xplatform을 사용하지 않을수도 있다. Xplatform이 아닌 다른 RIA 툴을 사용할 수도 있다. 그러면 그때 서버가 방금 위에서 보여준 코드 예와 같이 클라이언트 환경에 종속이 되는 설계를 하게 된다면 어떤일이 벌어질까? 서버쪽도 같이 수정해야 하는 상황이 발생하게 된다. Xplatform을 사용하지 않게 되었기 때문에 VariableList 클래스 객체는 빼고 다르게 구현해야 한다. 그러기 때문에 메소드 내부의 코딩도 바뀌게 된다. 이렇게 클라이언트의 환경에 종속적인 설계를 하게 되면 범용성은 떨어지게 되는 것이다. 그리고 이 점은 전자정부프레임워크에서도 이런 구조로 되어 있다. 여러가지 RIA 툴을 붙이기 땜에 중간에 어댑터 계증을 넣어서 공통화시킨 부분은 있지만 Controller에 DTO로 받는 클래스의 내부 코드를 보면 Xplatform 클래스를 그대로 사용하고 있다. 

 

그래서 이번 연재를 통해 Xplatform과 Spring 연동시 이런 Xplatform 의존적인 설계가 아닌 POJO 기반의 범용적인 설계를 목표로 한 템플릿 제작에 대해 얘기를 해볼까 한다. 관련 소스는 github에 올려져 있기 때문에 자신이 사용하는 IDE에서 받아서 적용하면 된다. 그리고 개인적으는 Xplatform 개발자가 아니어서 Xplatform의 이런 저런 상황에 모두 다 대응되는 소스는 아닐수도 있겠지만 그래도 상황이 닥쳤을때 그걸 풀어가는 방법에 대한 설명은 진행할 것이기 때문에 이런 방법을 알아두면 풀어가는데 도움이 될 수 있으리라 생각한다.

 

 1. Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (1) - 개요

 2. Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (2) - 사전지식

 3. Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (3) - HttpServletRequestWrapper

 4. Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (4) - Spring Controller에서 하려는 것

 5. Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (5) - HandlerMethodArgumentResolver 분석(1)

 6. Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (6) - HandlerMethodArgumentResolver 분석(2)

 7. Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (7) - HandlerMethodArgumentResolver 분석(3)

 8. Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (8) - HandlerMethodArgumentResolver 분석(4)

 9. Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (9) - XplatformView 분석

 10. Xplatform과 Spring Framework 연동 템플릿으로 보는 HandlerMethodArgumentResolver와 ViewResolver (10) - 예외처리