Spring 에서 개발되고 있는 framework 중에 ‘Spring mobile’ 이 있습니다.

본 포스트에서는 ‘Spring mobile’ 에 대해 알아보려합니다.

‘Spring mobile’ 이란?

사용자의 접속 기기에 따른 분기를 Server-side 에서 처리하기 위한 framework 으로, Request Header 정보등을 이용하여 접속 기기를 Normal, Tablet, Mobile 로 분류하고 이에 따른 처리를 지원합니다.

  • Normal – Tablet, Mobile 에 속하지 않는 일반 기기
  • Tablet – 태블릿 종류에 속하는 기기
  • Mobile – 스마트폰과 같이 Mobile 종류에 속하는 기기

사용자 접속 기기 종류 확인

사용자 접속 기기를 확인하는 방법은 Spring MVC Interceptor 를 이용하는 방법과 Servlet Filter 방식이 있습니다.

Spring MVC Interceptor 방식을 이용하기 위해 context.xml 파일에 다음과 같이 설정을 하면 됩니다.

Servlet Filter 방식을 이용하기 위해서는 web.xml 에 다음과 같이 설정을 하면 됩니다.

위와 같이 설정이 되면 HttpServletRequest 의 attribute 에서 다음과 같이 확인이 가능합니다.

Spring MVC context 에 다음과 같이 설정하면 Controller 의 Method argument 로 입력이 될 수 있습니다.

사용자가 선택한 접속 기기 상태 처리

Mobile 기기로 접속하였을 경우 Mobile 에 최적화된 페이지를 제공하게 되나, 사용자가 PC 환경에서의 페이지를 보기를 희망할 경우 이를 위한 처리를 지원하기 위해 Spring mobile framework 는 Site preference management 라는 기능을 제공합니다.

이를 사용하기 위해 context.xml 에 다음과 같은 설정이 필요합니다.

위와 같이 설정이 되면 HttpServletRequest 의 attribute 에서 다음과 같이 확인이 가능합니다.

또한, Spring MVC context 에 다음과 같이 설정하면 Controller 의 Method argument 로 입력이 될 수 있습니다.

접속 기기 설정에 따른 View 분기 처리

예를 들어 PC 용 페이지 View 와 Mobile 용 페이지 View 가 분리되어 구현되어 있는 경우 이를 Spring mobile framework 에서 DeviceResolver 와 SitePreference 의 정보를 기반으로 분기처리 해줍니다.

이를 위해 ViewResolver 를 LiteDeviceDelegatingViewResolver 로 한번 감싸주면 됩니다.

예를 들어, FreemarkerViewResolver 와 같은 경우는 다음과 같습니다.

위와 같이 설정된 경우 viewName 이 index 인 경우 mobile 페이지의 view page 위치는 pages/mobile/index.ftl 이고, 그 외는 pages/index.ftl 이 됩니다.
설정할 수 있는 항목은 mobile prefix, mobile suffix, tablet prefix, tablet suffix, normal prefix, normal suffix 입니다.

enableFallback 는 모바일 페이지 전용 view 를 찾지 못한 경우 기본 view (pages/index.ftl) 를 사용하라는 설정입니다.

Spring mobile framework 은 이 외에 별로의 모바일 페이지가 별도의 URL 로 작성된 경우 이 페이지로 이동할 수 있도록 하는 ‘Site switching’ 이라는 기능이 있습니다.

Spring mobile framework 의 기능이 많이 않아 간단하게 살펴보았습니다. 현재 1.1.2 가 최신 안정화 버젼이고 1.2.0 이 개발중에 있습니다. mobile 페이지에 따른 분기처리시 javascript 로 처리하는 경우가 일반적인데 Spring mobile framework 를 사용하면 server 내에서 처리가 이루어지는 것이므로 네트워크 속도의 영향을 최소화 할 수 있고, 보안적인 측면에서도 좋지 않을까 합니다.