Layers in a Spring MVC Application

User Interface Layer

The user interface layer is responsible for presenting the application to the end user. 이 계층은 web layer에서 생성된 응답을 유저가 요청한 양식으로 변환합니다. 예를 들어 휴대폰 사용자들을 위해서는 WML 또는 최소한 특화된 XHTML을 필요로 할 것입니다.

웹 개발자들에게 user interface layer 추상단계는 매우 중요합니다. user interface layer를 weblayer 의 sublayer로 생각하면 쉬울 것입니다. 이 책은 웹 에플리케이션에 초점을 맞췄기 때문에 이 계층을 따로 분리를 했으며 이 계층 만의 관심사와 특징들이 존재한다.

User Interface Layer는 최상위 계층입니다. 개념적으로 이 말은 유저(Client)에게 데이터를 보내기 전 마지막 계층 이라는 것입니다. 이 계층에 다다르기 전에 이미 비즈니스 로직과 트랜잭션이 처리가 되고 모든 자원들이 반환되었었을 것입니다.

이 계층이 마지막에 있는 것은 좋은 것입니다. 이 계층은 유저들에게 보내질 데이터를 원하는 양식으로 바꿔(rendering)줍니다. UI 계층은 다른 계층들과 분리 되어 있기 때문에 시스템은 계속해서 다른 요청들을 처리할 수 있습니다. 유저에게 보낼 응답을 랜더링 하는 것은 응답을 모아오는 행위(DB 커넥션 유지, 비즈니스 로직 처리 등등을 마말하는 거겠죠?? 긴가 민가 하네요. 응답을 처리하는 행위가 더 나르려나..)와 분리 되어 있다는 것입니다.

UI 계층을 분리 시키는 것은 현실적입니다. 여러가지 UI 랜더링을 위한 툴들이 존재하기 때문입니다. JSP, Velocity, Freemarker등에 종속되지 않고 UI 인터페이스를 사용하여 특정 랜더링 기술을 사용하여 UI를 변경하더라도 다른 계층들에 영향을 주지 않을 수 있습니다.

Spring MVC's User Interface Layer

Spring MVC UI 관심사를 몇몇 주요 인터페이스들로 분리시킵니다. org.springframework.web.servlet.View 인터페이스는 에플리케이션의 view 또는 page 를 나타냅니다. 유저가 요청한 작업의 결과를 고객이 볼 수 있는 폼으로 전환하는 역할을 합니다.

[#M_View 인터페이스를 구현한 class들 펼쳐보기|닫기|

org.springframework.web.servlet
Interface View

All Known Implementing Classes:
AbstractExcelView, AbstractJasperReportsSingleFormatView, AbstractJasperReportsView, AbstractJExcelView, AbstractPdfView, AbstractTemplateView, AbstractUrlBasedView, AbstractView, AbstractXsltView, ConfigurableJasperReportsView, FreeMarkerView, InternalResourceView, JasperReportsCsvView, JasperReportsHtmlView, JasperReportsMultiFormatView, JasperReportsPdfView, JasperReportsXlsView, JstlView, RedirectView, TilesJstlView, TilesView, VelocityLayoutView, VelocityToolboxView, VelocityView, XsltView

_M#]

Model은 객체들의 이름의 집합입니다. 어떤 객체든지 Model 안에 있는 View로 랜더링 될 수 있습니다. Model은 일반적인 목적으로 설계되었기 때문에 어떠한 랜더링 기술과도 작업이 가능합니다. View 랜더링 툴킷은 Model안에 있는 각각의 객체들을 랜더링 합니다.

View 인터페이스는 완전히 일반적이고 특정한 뷰 랜더링에 종속되어 있지 않습니다. 각각의 뷰 기술들은 이 인터페이스를 구현한 클래스로 제공됩니다.  Spring MVC는 기본적으로 JSP, FreeMarker, Velocity, JasperReports, Excel, PDF를 지원합니다.

org.springframework.web.servlet.ViewResolver는 인디렉션을 하는 유용한 인터페이스를 제공합니다. ViewResolever는 뷰 개체들과 그들의 논리적인 이름간의 맵핑하는 기능을 제공합니다. 예를 들어 /WEB-INF/jsp/onSuccess.jsp 파일을 success라는 이름으로 참조 할 수 있도록 합니다. 이것은 실제 View 객체와 코드 내에서 그것을 참조하는 것을 decoupling 시킵니다. ViewResolver를 사용하여 보다 유연한 설정을 할 수 있습니다.

[#M_ViewResolver 인터페이스를 구현한 class들 펼쳐보기|닫기|

org.springframework.web.servlet
Interface ViewResolver

All Known Implementing Classes:
AbstractCachingViewResolver, AbstractTemplateViewResolver, BeanNameViewResolver, FreeMarkerViewResolver, InternalResourceViewResolver, JasperReportsViewResolver, ResourceBundleViewResolver, UrlBasedViewResolver, VelocityLayoutViewResolver, VelocityViewResolver, XmlViewResolver, XsltViewResolver

_M#]

Dependencies

View 계층은 일반적으로 domain 계층에 종속됩니다. 항상 그런 것은 아니지만, 보통 도메인 모델에 직접 접근하여 랜더링 하는 것이 편리합니다. Spring MVC를 사용하는 대부분의 편리함은 view가 도메인 객체에 직접 작업을 한다는 것으로부터 생깁니다.

1270538112.bmp

Summary

User interface 계층(View 계층이라고도 합니다.)은 유저를 위한 결과물의 랜더링을 책입집니다. Spring MVC는 다양한 view 랜더링 기술을 지원합니다. 중요한 인터페이스로는 org.springframework.web.servlet.View와 org.springframework.web.servlet.ViewResolver입니다. view기술들에 대해서는 7장과 8장에서 자세히 다룰것입니다.