테크 로그포스 Tech Log Force
[쇼핑몰 리팩토링] 07 App호환을 위한 수정(URI Pattern) 본문
1. 웹의 *.do 형식 URI 패턴
지금까지는 .do로 들어온 request를 컨트롤러로 매핑했다.
웹에서는 struts의 영향으로 .do형식의 uri를 사용하는 경향이 있기 때문이다.
그런데 스마트폰, 앱이 등장했다.
앱이라는 새로운 개념이라고 해서 브라우저, 앱서버, 프로토콜 등을 다 새로 개발 할 건가?
2~30년간 크게 발전한 웹의 시스템을 그대로 갖다 쓸 방법을 많은 개발자들이 고민했다고 한다.
2. 웹 구조를 앱에 적용하기
- Web의 경우
(브라우저req -> Servlet -> JavaBeans->DB->JavaBeans->Servlet->JSP(View)->브라우저 res)
절차를 거쳐 브라우저에 렌더링했다.
여기에서는 브라우저, WAS, 프로토콜 등이 제공되므로 다운로드해서 쓰기만 하면 됐다.
- App의 경우
반면, App은 사용자가 View(UI)를 이미 가지고있다.(앱 설치)
그러므로 서버에서 HTML을 내려보내줄 필요가 없다. Model(Data)만 전달해주면 된다.
이 Data가 바로 App에서 'API'라고 부르는 것들이다.
- 웹 구조를 활용
Web의 설계를 App에서 쓸때는, JSP와 같은 화면단을 거칠 필요가 없는 것이므로
(앱 Request -> Servlet -> JavaBeans->DB->JavaBeans->Servlet->앱 Request )
와 같은 순서로, Model(Data)만 클라이언트에 주면 된다.
3. URI Pattern
웹 구조를 그대~로 사용하면서, Model만 내려보내주도록 바뀐 것이므로
서버단에서 수정할 내용이 많지는 않다.
단지, web Request와의 구분을 위해
web.xml에서 url-pattern을 /*.do에서 /app/*형식으로 바꿔보았다.
(사실 어떻게 하든 개발자 마음!)
==> 변경 전 /*.do (기존에 Web만 서비스 할 때)
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/*.do</url-pattern>
</servlet-mapping>
==> 변경 후 /app/* (App에도 서비스 한다고 가정하고 변경)
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
이에따라 컨트롤러 매핑부분에서도 .do를 모두 지워주었으며,
jsp에서 form을 전송했을때도 .do로 Request하던 게 있다면 그 부분을 지워주었다.
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
그런데 사실 그냥 위와 같이 모~든 request를 DispatcherServlet이 처리하도록 할 수도 있다.
다만, 이렇게 받을 경우 HTML뿐만 아니라 Image, javascript파일과 같은 모든 정적파일들이 들어올 수 있으므로
이들Request에 대해서는 따로 처리를 해주어야 한다.
==> 컨드롤단의 Meta-Data인 common-servlet에 아래 내용을 기술하였다.
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/javascript/**" location="/javascript/" />
이렇게 css, images, javascript등을 구분해줘도 되고,
실제 PJT에서는 resources폴더에 이들을 모두 넣어 아래와 같이 관리하는 경우가 많다고 한다.
<mvc:resources mapping="/resources/**" location="/resources/" />