본문 바로가기

spring

URI Template


REST 아키텍처에서 가장 기본적인 개념은 바로 모든 리소스에 ID를 부여한다는 것이다. 웹 기반의 어플리케이션에서 리소스는 어플리케이션에서 제공하는 서비스가 될 것이고, 서버에 존재하는 수많은 서비스들을 식별하기 위한 ID는 URI가 될 것이므로 RESTful URI는 다음과 같은 사항들을 고려한 설계가 필요하다.

  • URI path가 계층 구조를 이루도록 설계

  • 상위 path는 하위 path의 collection을 의미하도록 설계

예를 들면, '/movies/MV-00001'의 경우 'movies'와 movieId 값인 'MV-00001'은 계층 구조를 가지고, 상위의 'movies'는 하위 movieId의 collection을 의미하는 형태로 이루어진 RESTful URI이다.

URI Template은 '/movies/{movieId}'와 같이 하나 이상의 변수를 포함하고 있는 URI 형식의 문자열로, RESTful URI를 쉽게 만들고 관리할 수 있게 해준다.

DispatcherServlet URL 매핑

기존에 Spring MVC를 기반으로 개발된 웹 어플리케이션에서는 'xxx.do'라는 형태의 URL을 사용했지만, 위에서 설명했듯이 REST 스타일의 URL은 '/movies', '/movies/MV-00001/edit' 처럼 계층 구조로 사용가능하도록 설계되었다. 따라서 web.xml에 DispatcherServlet을 정의하고 매핑할 URL 패턴을 '/'로 지정해야한다. 이럴 경우 css 나 이미지 등 static 리소스 URL도 DispatcherServlet을 통하게 되어 화면이 정상적으로 동작하지 않는 문제가 있다. 그래서 Spring에서는 URLRewriteFilter라는 것을 이용하여 DispatcherServlet이 처리해야할 URL을 분리하고 있다.

그러나 Restweb Plugin의 경우 Foundation Plugin 등 다른 Plugine들과 함께 섞여서 동작해야하기 때문에 URLRewriteFilter를 사용하지 않고, 기존에 정의된 DispatcherServlet에 아래와 같이 매핑만 추가하도록 설정했다.

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>/restweb/*</url-pattern>
</servlet-mapping>

URLRewriteFilter는 Apache 웹서버의 mod_rewrite와 같은 기능을 하는 것으로, Resin, Orion, Tomcat 등 어떤 J2EE 호환 웹 애플리케이션 서버에서도 사용할 수 있는 자바 웹 필터이다. 자세한 내용은 URLRewriteFilter 웹사이트를 참조하기 바란다.