Model 2 분리의 초기에는 단순히 요청을 서블릿이 받고, 비지니스 로직을 서블릿에서 모두 시행한다음 그 결과를 다시 JSP 로 보내게 했다. 물론 지금에와서는 이 방법도 번거로워 보일 수 있으나, 이전의 Model 1 에 비교했을 때 그 복잡도가 대폭 감소한다.
그러나 이러한 방법도 서블릿의 갯수가 많아지고. 그에 따라 web.xml 설정 파일이 서블릿 갯수만큼 지저분해진다. 지저분해진다는 소리는 곧 남이 보기에(자신이 보기에도)어려워 진다는 소리다.
그래서 나온 것이 Struts다. Struts는 MVC 패턴에서 Controller 역할을 하는 웹 어플리케이션 프레임워크다. 기존에 서블릿마다 가닥 가닥 나누어 보내던 것을 Struts는 우선 모든 서블릿 요청을 하나로 모으고, 그 후에 기능에 맞는 액션으로 보내주는 방식이다.
기능을 분리하면서 많은 이점을 깨닫게 된다. 그래서 java의 기능을 쪼개다 보니 위아래, 즉 상하의 관계가 이루어진다. 그러나 상하관계에서는 하나의 변경이 많은 변화를 가져오게된다. (슈퍼클래스의 라이프사이클도 문제시 된다.) 그래서 상하의 관계가 아닌 옆으로 흩어지는 관계를 생각하게 된다다. 옆으로 픝어지게 되면서 하나만 바꿔서는 무리가 되는 상황이 많이 발생한다. 예를들어 상속을 시키려니 각 기능마다 상속해야 하는 상황이 발생한다. 그때 구성을 생각하게 된다.
하나로 모였다가 흩어짐!
그러나 기존의 was는 하나로 모았다가 각각 흩어지는 기능을 가지도록 수정할 수 없었다.
그런데 was안에 was 비슷한것을 만들면?
이렇게 해서 탄생한 것이 Struts다. 즉 Struts가 was안에서 또다른 was의 역할을 하는 것이다.
was는 기능수정할수 없지만, 그 기능을 빼왔기에 기능을 수정할 수 있다. 그것이 바로 Struts 의 컨셉이다.
Struts가 가지는 기본 흐름도를 그림으로 표현하자면 다음과 같다.
Action은 Servlet과 비슷하다고 보면 된다. 사용자가 요청해서 들어오는 것과 프로그램을 이어주는 가교적 역할을 한다.
프로그램은 될수있는 대로 코드량을 줄여야한다(Servlet도 마찬가지). 코드량이 줄면 줄수록, 개발과 유지보수가 용이해진다. 그런데 이런 코드의 내용이 바뀔 확률은 비지니스로직보다 UI가 바뀔 확률이 더 높다. 플랫폼이 바뀌어도 빠르게 개발이 가능해야지 유지보수성이 높아진다. Action에 코드를 두면 사라질 위험이 커지고, 웹비지니스가 바뀌면 갈아엎을 위험이 커지는 것이다.
변화가능성이 큰 순으로 따지면 Servlet > DataBase > Manager 순이다. 바뀌는 것과 바뀌지 않는 것은 잘 분리해야 한다.
ActionForm 은 "바인딩", 즉 데이터 추출을 해준다. 일반적인 vo(value object)와는 다르다. 보통 text정보를 java클래스로 옮길때, 혹은 java클래스에 있는 것을 HTML로 옮길때 "바인딩한다"라고 말한다. ActionForm은 View와 Controller의 사이에서 Transfer Object의 역할을 한다. MVC의 Model 처럼 데이터만을 나타내는 것이 아니라 데이터 입력 폼 그 자체를 말한다. 하나의 화면에서 하나의 클래스만 받는다(둘이 연관관계에 있을 때나 2개 이상 받는다.)
HTML 입력 객체들의 name 과 ActionForm 의 property 이름이 같음을 바탕으로, request 의 헤더에서 값을 읽고, ActionForm의 property에 담아준다. 이때 반드시 이름과 프로퍼티가 같아야 하며, getter와 setter를 제공해야한다.
ActionForm에서는 validate를 오버라이드 하여 유효성 검사를 할 수 있다.
기존의 개발에 있어서 서블릿을 사용할 때 앞서 말한 어려움을 겪던것을 Struts라는 프레임워크를 사용하여 좀더 개발을 손쉽게 할 수 있게 되었다. 여기서 오해하지 말아야 할 것은, Struts라고 하여 새로운 무엇인가가 아니라는 것이다. 기존에 이미 잘 돌아가는 기능을 좀더 쓰기 편하게 하나의 틀로 만들어 놓은 것이 Struts 프레임워크다.
Struts를 사용함으로써 얻는 장점은 다음과 같다.
○ 단일 진입 서블릿을 사용하여 관리가 용이하다.
○ 확장성을 위주로 만들어졌다.
○ JSTL, JSF 등 표준을 포함하여 버전업 되고 있다.
○ 여러 통합 개발 환경과 서드파티에서 Struts개발을 지원하고 있다
다만 장점이 있다면 그에 따른 단점도 존재한다.
○ Struts 프레임워크를 이해하는데 시간이 많이 걸린다.
○ 프레임워크를 이용해도 프로그램코드가 줄어드는 것은 아니다.
○ Struts 태그 라이브러리가 표준은 아니다.
○ 프레임워크의 변경이 잦다.
○ 규모가 커질수록 struts-config.xml이 방대해지고, 무수히 많은 액션클래스가 생긴다.
이러한 단점이 있다해도, Struts를 많이 사용한다는 것은 그만큼 개발환경에 있어서 단점들을 상쇄할만한 장점이 존재한다는 것이다.
Struts는 그 이후에도 Struts2가 나왔지만 기존의 Struts 와는 많은 차이점을 지닌다.
'framework' 카테고리의 다른 글
struts configuration (0) | 2015.02.11 |
---|---|
struts - struts-config 설정 두번째 (0) | 2015.02.10 |
struts - struts-config.xml 설정 (0) | 2015.02.10 |
struts - web.xml 설정 (0) | 2015.02.10 |
struts - 파일 복사 (0) | 2015.02.10 |