(1) 스트럿츠1 정리 노트

2012. 9. 18. 19:33

소개

스트럿츠는 자바 서블릿, 자바 빈, 리소스 번들, XML 뿐만 아니라 BeanUtil이나 Chain of responsibility(책임의 연쇄)와 같은 다양한 아파치 커먼즈 팩키지와 같은 표준 기술을 기반으로한 유연한 컨트롤 계층이다. 프레임워크는 표준적인 배포 방법과 검증된 디자인 패턴에 기반하여 응용프로그램에 대한 확장된 개발환경을 만들어 낼 수 있다.

프레임워크는 자신만의 웹 컨트롤러 구성 요소를 제공하고 모델과 뷰를 위한 다른 기술을 통합한다. 모델을 위한 프레임워크는 JDBC와 EJB와 같은 표준 데이터 접근 기술 뿐만 아니라 대부분의 서드파티 패키지들인 Hibernate, iBATIS, 객체관계형 브리지와 상호 작용할 수 있다. 뷰를 위한 프레임워크는 JSTL과 JSF 뿐만 아니라 벨로시티 템플리트, XSLT와 기타 다른 프리젠테이션 시스템을 포함한 Java Server Page와 잘 작동한다.

프레임워크의 컨트롤러는 어플리케이션의 모델과 웹 뷰 사이에서 다리 역할을 한다. 요청이 도착하면 컨트롤러는 액션 클래스를 호출한다. 액션 클래스는 어플리케이션의 상태를 검사하거나 갱신하기 위해 모델과 상의한다. 프레임워크는 모델과 뷰 사이에 데이터를 전송할 수 있도록 ActionForm 클래스를 제공한다.

대부분 모델은 자바 빈의 집합으로 구성된다. 일반적으로 개발자는 ActionForm과 모델 객체(혹은 퍼사드) 사이의 데이터 전송을 위해 BeanUtils 커먼즈 툴을 사용한다. 바람직한 것은 모델은 "heavy lifting"을 할 것이고, Action은 "교통 경찰" 역할이나 어댑터 역할을 한다.

Model : 시스템 상태와 비즈니스 로직 자바 빈즈

MVC 기반 시스템에서 모델은 두 가지의 주요 부분 – 시스템 내부 상태와 그 상태를 변경할 수 있는 작업 – 으로 나눌 수 있다.

마치 명사와 동사에 비유할 수 있을 것이다.

많은 경우 어플리케이션은 하나 이상의 자바 빈즈의 집합으로 시스템 내부 상태를 나타낸다. 빈 속성은 시스템의 세부 상태 정보를 나타낸다. 어플리케이션의 복잡한 정도에 따라 이 빈들은 자신의 상태나 자신의 상태를 유지할 수 있는 방법을 포함하거나, 다른 구성 요소에서 시스템의 상태를 검색하는 방법을 알 수 있다. 이 구성 요소는 데이터베이스, 검색엔진, 엔티티 엔터프라이즈 자바 빈즈, LDAP 서버나 완전히 다른 것이 될 수 있다.

대규모 응용프로그램은 종종 빈이나 시스템 정보를 유지하는 빈을 호출 할 수 있는 메서드와 같은 비즈니스 명령 집합으로 표현된다. 이 빈은 또한 사용자의 신용카드를 승인하고 입고나 출고하는 창고로 주문을 보내는 checkOut() 메서드일 수 있다. 다른 시스템은 세션 엔터프라이즈 자바 빈즈로 별도로 사용할 수 있는 명령을 나타낸다.

반면에 소규모 응용프로그램에서는 프레임워크의 제어 계층의 일부인 Action 클래스들에 사용가능한 명령들을 포함할 수 있다. 이 것은 로직이 매우 간단하거나 비즈니스 로직의 재사용이 필요없는 경우 유용할 수 있다.

프레임워크 아키텍쳐는 다양하게 모델에 접근할 수 있도록 충분히 유연하지만 무엇을 할 것인지에 관련된 Action 클래스와 어떻게 할 것인지와 관련있는 비즈니스 로직을 분리할 것을 강력 추천한다.

View : JSP 페이지들과 표현 구성 요소(Presentation Components)들

스트럿츠 기반의 응용프로그램의 뷰는 종종 Java Server Page(JSP) 기술을 사용하여 구성된다. JSP 페이지는 “템플릿 텍스트”로 불리는 정적 HTML(혹은 XML)로 구성되고, 페이지 요청시 해석되는 특별한 액션 태그 기반의 동적 컨텐츠를 추가할 수 있는 능력을 더한다. JSP 환경은 Java Server Page 명세에 설명된 <jsp:useBean>과 같은 표준 액션 태그를 포함한다. 내장된 액션에 추가로 여러분 자신의 태그를 정의하여 커스텀 태그 라이브러리안에 구성한다.

프레임워크는 ActionForm 빈즈를 통해 완벽하게 국제화되고 우와하게 상호작용하는 사용자 인터페이스를 만들어 내는 커스텀 태그 라이브러리의 집합을 포함한다. ActionForm은 응용프로그램이 요청한 입력을 읽고 유효성 검사를 한다.

Controller : ActionServlet과 ActionMapping

스트럿츠는 응용프로그램의 컨트롤러 부분을 제공한다. 컨트롤러는 클라이언트(일반적으로 웹브라우저)의 요청을 받아서 수행될 비즈니스 로직을 결정하고 사용자 인터페이스의 다음 단계를 적절한 뷰 구성요소에게 만들어 내는 책임을 위임한다. 프레임워크에서 컨트롤러의 주요 구성요소는 클래스 ActionServlet의 서블릿이다. 이 서블릿은 ActionMapping의 집합을 정의하여 구성한다. ActionMapping은 입력된 요청의 URI에 대해 일치하는 Action 클래스 이름을 지정하는 경로를 정의한다. 모든 Action은 org.apache.struts.action.Action의 하위 클래스이다. Action은 비즈니스 로직 클래스의 호출을 캡슐화하고 결과를 해석하여 응답을 생성할 적절한 뷰 구성 요소의 디스패치를 제어한다. 프레임워크가 뷰를 디스패치하는 동안 실제 렌더링되는 뷰는 스코프를 벗어난다.

프레임워크는 또한 컨트롤러를 작동하는 데 필요한 표준들 이외에 추가 속성들을 갖는 ActionMapping 클래스를 이용할 수 있는 기능을 지원한다. 이렇게 하면 응용프로그램에 대한 추가적인 정보를 저장하면서 여전히 프레임워크의 나머지 기능을 사용할 수 있다. 또한, 프레임워크는 논리적인 “이름”을 이용하여 예를 들면 메인 메뉴 페이지에서 액션 메서드에 대응하는 JSP 페이지를 위치 지정없이 전달할 수 있도록 제어할 수 있다. 이러한 특징은 컨트롤 로직(수단)과 뷰 로직(표현)를 분리하는데 도움을 준다.


+ Recent posts