Spring으로 방명록 애플리케이션을 구현하는 시리즈입니다.



이번 주제에서는 JSP/Servlet에서 만들었던 방명록 애플리케이션을 스프링으로 구현하려 합니다.

이 글에서는 방명록 애플리케이션을 구현하는데 필요한 환경 설정을 하겠습니다.




아래의 설정 파일들은 스프링의 동작 과정을 살펴보면서 말씀 드렸던 코드입니다.

설정 내용이 이해가 안되시면 이전 글을 참고해주시기 바랍니다. ( 링크 )

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0    http://maven.apache.org/xsd/maven-4.0.0.xsd">


         <modelVersion>4.0.0</modelVersion>

         <groupId>com.victolee</groupId>

         <artifactId>guestbook</artifactId>

         <version>0.0.1-SNAPSHOT</version>

         <packaging>war</packaging>


         <!-- 변수 -->

         <properties>

                  <org.springframework-version> 4.2.1.RELEASE </org.springframework-version>

         </properties>


         <!-- 라이브러리를 추가 -->

         <dependencies>

                  <!-- Spring core -->

                  <dependency>

                           <groupId>org.springframework</groupId>

                           <artifactId>spring-context</artifactId>

                           <version>${org.springframework-version}</version>

                  </dependency>


                  <!-- Spring Web ( Servlet / Anotation ) -->

                  <dependency>

                           <groupId>org.springframework</groupId>

                           <artifactId>spring-web</artifactId>

                           <version>${org.springframework-version}</version>

                  </dependency>


                  <!-- Spring MVC -->

                  <dependency>

                           <groupId>org.springframework</groupId>

                           <artifactId>spring-webmvc</artifactId>

                           <version>${org.springframework-version}</version>

                  </dependency>

         </dependencies>



         <build>

                  <plugins>

                           <plugin>

                                   <artifactId>maven-compiler-plugin</artifactId>

                                   <version>3.7.0</version>

                                   <configuration>

                                            <source>1.8</source>

                                            <target>1.8</target>

                                   </configuration>

                           </plugin>

                           <plugin>

                                   <artifactId>maven-war-plugin</artifactId>

                                   <version>3.0.0</version>

                                   <configuration>

                                            <warSourceDirectory>webapp</warSourceDirectory>

                                   </configuration>

                           </plugin>

                  </plugins>

         </build>

</project>




web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

         id="WebApp_ID" version="3.1">


         <display-name>guestbook</display-name>

         <welcome-file-list>

                  <welcome-file>index.html</welcome-file>

                  <welcome-file>index.htm</welcome-file>

                  <welcome-file>index.jsp</welcome-file>

                  <welcome-file>default.html</welcome-file>

                  <welcome-file>default.htm</welcome-file>

                  <welcome-file>default.jsp</welcome-file>

         </welcome-file-list>


         <!-- Context parameter ( 전역 파라미터 ) -->

         <context-param>

                  <param-name>contextConfigLocation</param-name>

                  <param-value>/WEB-INF/applicationContext.xml</param-value>

         </context-param>


         <!-- Context Loader Listner -->

         <listener>

                  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

         </listener>

         <!-- Front Container - DispatcherServlet -->

         <servlet>

                  <servlet-name>spring</servlet-name>

                  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

         </servlet>


         <servlet-mapping>

                  <servlet-name>spring</servlet-name>

                  <url-pattern>/</url-pattern>

         </servlet-mapping>

</web-app>




applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"


xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd    http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd    http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd    http://www.springframework.org/schema/jee

http://www.springframework.org/schema/jee/spring-jee.xsd    http://www.springframework.org/schema/lang

http://www.springframework.org/schema/lang/spring-lang.xs    http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd    http://www.springframework.org/schema/util

http://www.springframework.org/schema/util/spring-util.xsd    http://www.springframework.org/schema/task

http://www.springframework.org/schema/task/spring-task.xsd">



         <context:annotation-config />


         <context:component-scan base-package="com.victolee.guestbook.repository">

                  <context:include-filter type="annotation"

                           expression="org.springframework.stereotype.Repository" />

                  <context:include-filter type="annotation"

                           expression="org.springframework.stereotype.Service" />

                  <context:include-filter type="annotation"

                           expression="org.springframework.stereotype.Component" />

         </context:component-scan>

</beans>




spring-servlet.xml

<?xml version="1.0"    encoding="UTF-8"?>

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns="http://www.springframework.org/schema/beans"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation="http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd    http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd    http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd    http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">


         <!-- 설정을 어노테이션 기반으로 하겠다는 설정태그 -->

         <context:annotation-config />

         <!-- 스캐닝 기준 패키지 -->

         <context:component-scan base-package="com.victolee.guestbook.controller" />

</beans>





GuestBookDAO 와 GuestBookVO 파일은 JSP/Servlet 에서 방명록 애플리케이션을 만들 때 사용했던 파일 그대로 입니다.

( GuestBookDAO 클래스에는 추가적으로 @Repository 어노테이션만 작성해주세요. )

링크를 참고하셔서 테이블 구조와 코드를 확인하셔야 이후의 내용들을 그대로 적용이 가능할 것입니다.





src/main/java/com.victolle.guestbook.controller / GuestBookController.java

@Controller
public class GuestBookController {
	@Autowired
	private GuestBookDAO guestbookDAO;
	
	@RequestMapping("/main")
	public String main() {
		return "/WEB-INF/views/index.jsp";
	}
}

간단하게 views/index.jsp 파일을 만들어서 아무 내용이나 작성해주시고

http://localhost:8080/guestbook/main 을 요청하셔서 잘 응답이 되면, 방명록 애플리케이션을 만들 준비가 된 것입니다 !





Encoding Filter

추가적으로 설정해둘 것이 있는데, 이 부분은 별도의 설명이 필요할 것 같아서 따로 분리했습니다.


JSP/Servlet에서 요청 객체 request의 문자열 encoding을 위해 Servlet에서 아래의 코드를 매 번 작성했었습니다.

request.setCharacterEncoding("utf-8");


꼭 필요하지만 매 번 반복되는 상투적인 코드는 한 번에 처리하는 것이 좋습니다.

그래서 문자열 인코딩 같은 경우는 요청이 올 때 필터( Filter )를 한 번 거쳐서 인코딩하면 좋을 것 같습니다.

스프링에서는 문자열 인코딩을 해주는 클래스가 존재하기 때문에, 설정 파일에서 설정을 해주기만 하면 요청 문자열에 대한 인코딩 처리가 됩니다.


web.xml에 코드 추가

<!-- Encoding Filter -->

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

        <init-param>

               <param-name>forceEncoding</param-name>

               <param-value>true</param-value>

        </init-param>

</filter>

<filter-mapping>

        <filter-name>encodingFilter</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

이렇게 설정을 해주면 일일이 인코딩을 할 필요 없이 스프링의 CharacterEncodingFilter 객체가 모든 요청에 대해 UTF-8로 인코딩을 해줍니다.





이제 기본 설정 파일을 모두 작성했습니다.

다음 글에서는 방명록 애플리케이션을 구현하기 위해 필요한 스프링의 기본 기능들을 알아보도록 하겠습니다.