카테고리 없음

[쇼핑몰 리팩토링] 07 App호환을 위한 수정(URI Pattern)

Yeji Heo 2024. 3. 19. 17:40

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/" />