반응형

 

이번 글에서는 프론트 단에서 백엔드 단으로 API 송신을 할 때, 스프링 프레임워크(Spring Framework)에서 API URL을 매핑하기 위한 RequestMapping URL 설정하는 방법에 대해 글을 작성한다.

 

 

위의 사진을 보자. 위의 사진에서 파란색 박스는 대체적으로 웹에서 클라이언트가 "데이터를 보여주세요"라는 요청을 보내는 경로다. 즉, 우리가 로그인을 할 때 로그인 버튼을 누르면 거기에 대한 요청이 될 수 있다. 여기서, 클라이언트가 요청을 보내는데, 요청을 보낼 때 그냥 보내지 않는다.

 

우리는 요청에 대한 ID 같은 것을 보내야 한다. 프론트 단에서 ID를 보내야 백엔드 단에서 그 ID에 맞는 결과를 줄테니 말이다. 그래서, 이 URL을 보내면 dispatcherServlet이 어떤 URL을 처리할까? 라는 것을 설정해줄 수 있다.

 

httpRequest API URL을 보낼 때, 백엔드 단에서는 web.xml을 통해 servlet 설정을 할 수 있다. 아래는 web.xml의 일부분이다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://JAVA.sun.com/xml/ns/j2ee" 
         xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd" 
         id="WebApp_ID" 
         version="3.0">
  <display-name>web</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
	        /WEB-INF/conf/spring/context/context-*.xml
	</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>common</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
				/WEB-INF/conf/spring/mvc/servlet-*.xml
	  </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>common</servlet-name>
    <url-pattern>*.data</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>common</servlet-name>
    <url-pattern>*.page</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>common</servlet-name>
    <url-pattern>*.json</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>eftpmanager</servlet-name>
    <servlet-class>ezgen.eftpmanager</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>eftpmanager</servlet-name>
    <url-pattern>/eftpmanager</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter>
    <filter-name>xssEscapeServletFilter</filter-name>
    <filter-class>com.navercorp.lucy.security.xss.servletfilter.XssEscapeServletFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>xssEscapeServletFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <session-config>
    <session-timeout>180</session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
  </welcome-file-list>
</web-app>

 

위의 코드에서 우리가 주목해야 하는 부분은 아래와 같다. 아래의 코드는 common이라는 이름을 가진 DispatcherServlet 클래스를 만들고, 이 DispatcherServlet에 URL을 매핑해 준다. 이 매핑해주는 부분은 <servlet-mapping> 태그를 통해, 모든 URL에서 끝이 .data, .page, .json 형식으로 들어온 URL만 컨트롤러와 매핑을 해준다는 설정을 해주는 곳이다.

  <servlet>
    <servlet-name>common</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
				/WEB-INF/conf/spring/mvc/servlet-*.xml
	  </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>common</servlet-name>
    <url-pattern>*.data</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>common</servlet-name>
    <url-pattern>*.page</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>common</servlet-name>
    <url-pattern>*.json</url-pattern>
  </servlet-mapping>

 

즉, 여기서 우리가 프론트 단에서 API URL을 다르게 적용했더라도 위의 web.xml에서 servlet mapping 설정을 추가한다면 특정 URL에 대해서도 컨트롤러와 매핑을 해줄 수 있다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기