RadarURL

응용 프로그래밍
2014.05.09 02:43

스트러츠와 스프링의 비교

조회 수 1148 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
  • 번역 및 수정자: 이동국
  • e-mail:fromm0@gmail.com사용자 삽입 이미지
  • msn:fromm0@hotmail.com사용자 삽입 이미지
  • Struts에서 Spring으로의 이주 가이드.

    당신은 이 글을 통해 Struts애플리케이션에서 Spring MVC애플리케이션으로 변형하는 방법뿐 아니라 두 프레임워크사이의 논리적인 맵핑과 Struts개념을 Spring MVC개념에 관련시키는 수단을 배울것이다.

    사실 Struts프레임워크는 기술발전이나 채택이 감소하기 시작하고 있다고 몇몇 사람들이 제기한다. 사실 Struts의 책임 개발자인 Craig McClanahan또한 Struts사용자에게 새로운 웹 프레임워크로의 이전을 권하고 있는 상황이다. 반면에 J2EE웹 공간에서, Spring MVC는 꾸준한 채택과 자바 개발자의 주의를 끌고 있다. 가장 인기있는 Spring프레임워크는 잘 디자인되었으며, 잘 만들어졌고, 혁신적이다. 그래서 많은 Struts사용자는 Struts를 위한 대체 프레임워크처럼 Spring을 MVC를 사용할것이다.

    이 글은 Struts애플리케이션을 Spring MVC로 이전하길 원하는 개발자들을 도와준다. 그리고 다음의 두가지 핵심부분으로 나누어져있다.

    1. Struts와 Spring MVC프레임워크의 기본 개념사이의 논리적인 맵핑.
    2. 이전 대체물을 위한 기본적인 추천사항들.

    논리적인 맵핑 : 다른 프레임워크간의 유사함.

    Struts와 Spring은 MVC패턴 구현에서 본질적으로 유사하다. 둘다 핵심 J2EE컴포넌트인 Servlet과 JSP에 기반한 모델2 타입의 개발방식을 주로 할려는 경향이 있다. Struts에 친숙한 개발자는 하나의 프레임워크에서 다른것으로 개념적으로 쉽게 이주할수 있다. 두가지 프레임워크 모두 View, Controller, Model의 역활을 제공하는 컴포넌트를 명백하게 서술하고 있다. 유사성은 구현레벨에서 멈춘다. Struts디자인은 각각의 사용자지정 action이 Struts Action컴포넌트의 구조적인 상속이 된다는것을 의미하는 견고한 상속에 기반을 둔다. Spring컨트롤러는 인터페이스이기 때문에, 어떠한 컴포넌트도 컨트롤러의 역활을 수행할수 있다. 이것은 애플리케이션 디자이너에게 컴포넌트 디자인의 좀더 나은 유연함을 제공한다.

    프레임워크 컴포넌트 레벨에서 Struts는 Form Beans (정적이거나 동적인), Actions, Action Mappings, Action Forwards, 그리고 Request Processors와 같은 Struts 특유의 객체 사용을 요구한다. Spring MVC는 주요한 컴포넌트가 인터페이스처럼 정의된것처럼 좀더 유연하다.

    Struts는 오직 웹 프레임워크일 뿐이다.

    Struts는 애플리케이션 개발에서 오직 presentation계층에만 할당한다. 반면에 Spring MVC는 비지니스 컴포넌트에다가 Spring 기업용 개발의 다른 부분을 관리하는 Spring 프레임워크의 다른 부분과 완벽하게 통합되는 Spring프레임워크의 주요한 부분일뿐이다. 이제 좀더 상세하게 프레임워크 컴포넌트를 보자.

    Struts Actions는 대략 Spring Controllers이다.

    Struts에서 Action은 프레임워크의 핵심 "processing"객체이다. 그것들은 MVC패턴에서 컨트롤러의 역활을 수행한다. Struts Actions의 Spring이 가진 대안은 Controller인터페이스이다. 반면에 Controller는 Spring에서 사용자 입력을 처리하고 View컴포넌트로 전달한다. Struts Actions과 Spring Controller사이의 가장 명백한 차이점은 Actions는 추상 클래스이고 Controllers는 인터페이스라는 것이다. Spring MVC 컨트롤러처럼 설정되기 위해서, 객체는 오직 다음의 메소드를 구현할 필요가 있을것이다.

    ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;

    이 디자인(인터페이스에 의한 디자인)은 애플리케이션과 프레임워크간의 커플링을 최소화한다. 또한 이것은 Controllers의 디자인에서 구조적으로 좀더 유연성을 제공한다. 이것을 염두해 두고, Struts에서 Spring으로의 가장 간단한 중계역활을 하는 이전(transition) 단계는 Action을 다시 쓰는 것이다. 그래서 그것들은 Controller인터페이스를 구현하고 존재하는 코드를 재사용하는것이다. 이것은 애플리케이션 작동을 유지하는 동안 모든 Struts의존성의 제거를 증가시키는것을 허용한다.

    Spring은 다른 Action대체물도 제공한다. 많은 수의 프레임워크가 제공하는 Controller구현물은 가장 공통적인 웹애플리케이션 작업에 대응된다. 몇몇 제공되는 Controller는 당신이 친숙한 Struts Action에 좀더 특성화된 것에 대응된다. 예를 들어, 당신이 DispatchActions을 사용한다면, MultiActionControllers와 좀더 잘 다듬어진 AbstractWizardFormControllers가 도움을 줄것이다. 다른 Controller구현문은 Spring MVC에 딸려나온다.

    Action Forms이 없다.

    Spring프레임워크내에서 가장 크고 가장 긍정적인 차이점중에 하나는 특성화된 ActionForm객체가 없다는 것이다. 프레임워크는 HTTP폼 값을 직접적으로 POJO에 바인딩하는것을 지원한다. 이 기능은 생성하고 유지할 클래스의 수를 제한하여 애플리케이션 유지관리를 단순화한다. 이 경우, 이전(migration)은 폼빈즈를 삭제하고 직접적으로 도메인 객체를 사용하는것을 의미한다. 어쨌든, 이것은 당신이 폼입력과 도메인 객체간의 맵핑처럼 Form Bean객체를 사용할수 있다면 필수단계는 아니다. Spring MVC에서, AbstractFormController구현물을 확장하는 특수한 목적의 Controllers는 폼을 지지하는 빈즈를 지원한다. AbstractFormController의 사용자지정 하위클래스는 폼객체처럼 폼을 지지하는(Command) Beans를 사용한다. 다시 말해, 이러한 빈즈를 정의하는 요구사항은 없다. Command객체는 java.lang.Object의 어떠한 하위클래스도 될수 있다.

    ActionForwards vs. ModelAndView

    Struts ActionMapping에서, 객체는 표현자원(Actions, JSPs, Tiles, HTML 파일들 등등.)을 가리킨다. Spring MVC에서 ActionMapping에 대해 가장 가까운 의미의 컴포넌트는 ModelAndView인터페이스이다. Spring Controllers는 사용자에 의해 구현될수 있는것처럼 ModelAndView인터페이스의 구현물을 반환한다. 또는 당신이 원한다면 Spring MVC에 의해 제공되는 ModelAndView구현물을 사용할수도 있다. 내포하는 이름처럼, ModelAndView객체는 Model과 View컴포넌트를 가진다. Model컴포넌트는 View컴포넌트를 통해 표시되기 위한 비지니스 객체를 포함한다. 시나리오에 따르면, ModelAndView구현물은 포함된 어떠한 Model컴포넌트를 가지지 않는다. 그것들은 아마도 실질적인 View컴포넌트(JSP, XSLT, Tiles, HTML, XML, 등등)의 몇몇 형태로 이끌것이다. Controller구현물에서 처럼, 나는 Spring MVC가 제공하는 Model의 구현물과 View인터페이스 그리고 View해석자(Resolver)를 조사하는것을 강력히 권한다.

    사용자지정 JSP 태그들

    Spring MVC는 표준 JSP태그 라이브러리의 의미있는 힘을 신뢰한다. Struts와는 달리, Spring MVC는 HTML, logic, 또는 bean처리를 위한 분리된 태그 라이브러리를 제공하지 않는다. 이것은 Command객체에서 Web form으로의 바인딩을 가능하게 하는 작은 태그라이브러리만을 제공한다. 당신은 다른 모든 작업을 위해 표준적인 템플릿 라이브러리(JSTL)를 사용할것이다.

    유효성체크(Validation)

    만약 당신이 Struts의 Commons Validator을 사용한다면, 당신은 Spring내에서 완벽하게 재사용할수 있을것이다. Spring 1.2는 Commons기반 유효성체크를 지원하지 않지만 Spring MVC의 "sandbox"버전은 Commons Validator마크업 (validator.xml 과 validation-rules.xml)으로 쓰여진 유효성체크 정의의 재사용을 지원한다. 유효성체크 선언를 가진 당신의 XML파일을 버리지 마라. 그것들은 Spring내에서 재사용가능할것이다.

    Error 와 Validation Messages

    좀더 좋은 소식이 있다. Spring은 동일한 형태로 Struts message번들을 인식한다. Spring MVC내 존재하는 Message자원들을 재사용하기 위해서, 당신은 Spring MVC 설정파일내 messageSource가 다음처럼 설정한다.

    <bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename">
    <value>resources.ApplicationResources</value>
    </property>
    </bean>

    또한, 당신은 Controller구현물내 messageSource프라퍼티로써 당신의 Controller처럼 이것을 사용할 필요가 있다. 요구되는 변경사항은 없다.

    Dispatcher Servlet

    Spring MVC는 Request Processor/Action Servlet의 자신만의 버전을 가진다. 이것은 URL표시그룹으로 맵핑되는 DispatcherServlet이다. Dispatcher Servlet의 개념을 이해하기 위해서, Controller를 Spring MVC내 설정하는 방법을 보자.

    설정파일들

    Struts사용자라면, 당신은 모든 forward, action mapping, form definition 그리고 플러그인 선언등을 가지는 적어도 하나의 struts-config.xml파일을 사용한다. Spring MVC에서, 모든 웹 애플리케이션관련 컨트롤러 선언은 Spring Beans처럼 설정된다. 하나이상의 Dispatcher Controller는 웹자원을 위한 모든 요청을 적당한 Controller로 보낸다. 예를 들면, 만약 당신이 ".do"애플리케이션을 Spring MVC애플리케이션으로 다시 맵핑시키길 원한다면, 당신은 애플리케이션의 web.xml에 다음처럼 서블릿 맵핑을 등록하라. (나는 당신이 .do 확장자를 사용하는것을 실질적으로 권하지 않는다. Struts만 사용하는 규칙처럼 ".do"를 남겨두라.)

    <servlet>
    <servlet-name>applicationDispatcher</servlet-name>
    <servlet-class>
    org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>

    ...

    <servlet-mapping>
    <servlet-name>applicationDispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    지금 당신은 Spring MVC Controller선언을 가진 Spring 설정파일(applicationDispatcher-servlet.xml)을 가진다. "-servlet.xml"는 applicationDispatcher파일을 위한 접미사이다. 이것은 Spring MVC맵핑파일을 자동 리로드하는 DispatcherServlet을 가능하게 하는 Spring MVC규칙이다.

    Spring MVC내에서 웹 action을 적당한 컨트롤러로 맵핑하는것은 매우 쉽다. 이것은 Spring애플리케이션의 일부처럼 같은 "wiring"형태로 수행된다. 다음의 예제는 URL expression /showCatalog.do를 Controller showCatalog로 포워드하는 방법을 보여준다.

    <bean id="urlMapping"
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
    <props>
    <prop key="/showCatalog.do">showCatalog</prop>
    </props>
    </property>
    </bean>

    Controller showCatalog는 Controller인터페이스를 구현하는 클래스에 의해 구현된 다른 빈처럼 설정될것이다. 이 예제에서, showCatalog는 URL요청을 카테고리로 명명된 ModelAndView컴포넌트로 포워드하는 간단한 포워딩 컨트롤러에 지나지 않는다.

    <bean id="showCatalog" name="showCatalog"
    class="org.springframework.web.servlet.mvc.ParameterizableViewController">
    <property name="viewName" value="catalog"/>
    </bean>

    Struts에서 Spring MVC로의 이전 경로.

    Struts애플리케이션을 Spring MVC로 이전하기 위해서는 3가지 접근법이 있다. 몇몇은 애플리케이션을 점차적으로 이전할것이다. 다른것들은 Struts프레임워크를 완벽하게 포기하고 완전히 다시 쓰는 작업을 수행할것이다. 접근법들은 아래에서 개요를 말하고, 이전의 완벽함 순서대로 정렬된다.

    1. Spring은 Struts컴포넌트를 가능하게 한다. 천천히 이전하길 원하는 사람들을 위해, 첫번째이고 완벽하게 이전에 따른 무리가 없는것은.? Spring Beans처럼 Struts Actions를 가능하게 하는것이다. 이것은 간단한 작업이고, Spring문서에 잘 설명되어 있다. 이것은 Struts코드에 대한 변경을 요구하지 않지만, 이것은 Spring Beans처럼 처리되기 위해 Struts Controller컴포넌트, Actions를 가능하게 한다. 이 처리로, Actions은 Spring Beans의 상태를 상속한다. 그러므로, Spring Controller처럼 많은 것을 보기 시작하라. 늦으면서 단계별로 현명한 이전은 이 처리로 가능하다. 각각의 Action은 애플리케이션 재작성과 현재 웹 연속물의 중단없이 Spring Controller에 의해 한번에 대체될수 있다.

    2. Tiles를 사용하는 Spring Spring프레임워크에 의해 완전히 제공되는 다른 대체물은 순수한 "view" 프레임워크처럼 Tiles를 유지하는 동안 Spring MVC컴포넌트로 Struts Controller과 관련 컴포넌트(Actions, Form Beans, 등등)를 대체하는것이다. Spring MVC는 Tiles에 대한 특정 대안을 가지지 않는다. 그래서 구조는 Tiles에 대한 것을 유지하기로 결정하고 Spring MVC를 통해 그 작업을 하도록 만든다. 이 접근법의 하나의 심각한 단점은 당신이 웹애플리케이션내 두개의 다양한 웹 프레임워크를 효과적으로 유지관리하기 위해 유지관리를 위한 많은 노력과 두가지 프레임워크를 위한 추가적인 학습이 필요하다는 것이다.

    3. 완전한 이전 완전한 이전은 Struts프레임워크의 모든 컴포넌트를 Spring MVC로 교체하는것을 의미한다. 이 처리의 마지막에는 Struts특성의 컴포넌트는 애플리케이션에 남지않는다.

     

    출처 : http://levin01.tistory.com/1513

    ?

    공부 게시판

    공부에 도움되는 글을 올려주세요.

    List of Articles
    번호 분류 제목 글쓴이 날짜 조회 수
    공지 [공지] 공부 게시판 입니다. 처누 2003.08.18 927866
    1746 응용 프로그래밍 Spring MVC 에서 ContentNegotiatingViewResolver를 이용한 단일 RequestMapping 으로 Muilti-View 처리하기 file JaeSoo 2014.05.09 1686
    1745 응용 프로그래밍 Struts와 Spring의 Controller 의 차이는? JaeSoo 2014.05.09 1259
    1744 응용 프로그래밍 Spring MVC file JaeSoo 2014.05.09 1591
    1743 응용 프로그래밍 올바른 자바 프레임워크 선택하기 JaeSoo 2014.05.09 1400
    1742 응용 프로그래밍 스프링 프레임워크(Spring Framework) 버전(version) 확인하기 JaeSoo 2014.05.09 2134
    » 응용 프로그래밍 스트러츠와 스프링의 비교 JaeSoo 2014.05.09 1148
    1740 웹서버,WAS Apache Struts 버전 확인 방법 JaeSoo 2014.05.09 1998
    1739 윈도우즈 Chkdsk.exe에서 사용할 수 있는 새로운 /C 및 /I 스위치에 대한 설명 JaeSoo 2014.05.08 1531
    1738 웹 프로그래밍 PHP MySQL 명령어 실행 함수 mysql_query JaeSoo 2014.04.29 1669
    1737 데이터베이스 mariadb 원격 접속 허용 JaeSoo 2014.04.29 1477
    1736 유닉스/리눅스 vsftp root로 접속하기 JaeSoo 2014.04.29 1491
    1735 유닉스/리눅스 touch (파일의 날짜시간정보를 변경) JaeSoo 2014.04.29 1445
    1734 데이터베이스 오라클 업데이트, 딜리트 쿼리 (oracle update, delete query) JaeSoo 2014.04.19 2031
    1733 웹 프로그래밍 제로보드 XE에서 무분별한 스팸글 등록으로부터 임시 해결 팁 JaeSoo 2014.04.19 2088
    1732 업무 회사 조직 영문표기(Organizational Chart) JaeSoo 2014.04.16 1694
    1731 업무 입찰기초 공부하기 (입찰 안내서) - 입찰준비 과정, 참가등록 방법, 공동도급 관련 내용 등 file JaeSoo 2014.04.14 1748
    1730 윈도우즈 Windows 7에서 자동 로그인 설정하기 file JaeSoo 2014.04.12 1686
    1729 웹 프로그래밍 자주 발생하는 소켓 에러(Socket Error) JaeSoo 2014.04.11 3903
    1728 웹서버,WAS robots.txt를 현명하게 사용하는 방법 JaeSoo 2014.04.11 1481
    1727 웹서버,WAS robots.txt 파일(로봇배제 표준) JaeSoo 2014.04.11 1378
    Board Pagination Prev 1 ... 32 33 34 35 36 37 38 39 40 41 ... 124 Next
    / 124


    즐겨찾기 (가족)

    JAESOO's HOMEPAGE


    YOUNGAE's HOMEPAGE


    장여은 홈페이지


    장여희 홈페이지


    장여원 홈페이지


    즐겨찾기 (업무)

    알리카페 홀릭

    숭실대 컴퓨터 통신연구실 (서창진)

    말레이시아 KL Sentral 한국인 GuestHouse


    즐겨찾기 (취미)

    어드민아이디

    유에코 사랑회

    아스가르드 좋은사람/나쁜사람

    JServer.kr

    제이서버 메타블로그

    재수 티스토리


    즐겨찾기 (강의, 커뮤니티)

    재수 강의 홈페이지


    한소리


    VTMODE.COM


    숭실대 인공지능학과


    숭실대 통신연구실


    베너