Spring Legacy Project 개발 환경 구축
Spring MVC를 사용하는 프로젝트를 진행하기 위해 Spring Framework를 구축할 때의 초기설정과 CRUD 기능을 수행하는 간단한 회원 관리 프로젝트를 개발해보았습니다. 이 글에서는 프로젝트 생성 후 초기 설정 과정과 진행하는데 있어서 어려웠던 점, 공부가 필요한 점에 대해서 다룹니다.
✅Spring 버전 정보
- Spring Framework Version: 5.2.15.RELEASE
- IDE: Eclipse 2020-12 (Eclipse EE)
- JDK: 1.8
- Database: MySQL Community 8.0.17
- ORM: MyBatis 3.5.3 (pom.xml에 의존성 추가)
- ORM: Object Relation Mapper
- Persistence Framework: Jdbc Templates, MyBatis 등
- 내부적으로 JDBC 이용
- JPA (Persistence API): Hibernate 등
- Persistence Framework: Jdbc Templates, MyBatis 등
1. STS 다운로드
이클립스 MarketPlace에서 STS를 다운로드합니다.
STS: Spring Tool Suite. 이클립스 기반의 스프링 애플리케이션을 위한 개발 환경
- Help > Eclipse MarketPlace > Find: STS 검색 > Spring Tool 3 (Standard Edition) 3.9.11.RELEASE 를 설치합니다.

2. Spring MVC Project 생성
STS 설치가 완료되면, Spring MVC 템플릿으로 Spring Legacy 프로젝트를 하나 생성합니다.
- File > New > Other
Project name : springtest (자유)
Top-level package : com.moses.springtest ( com.회사.프로그램이름
등의 규칙으로 짓는것이 일반적이며, 모두 소문자로 합니다.)
Spring MVC Project = Model 2 MVC 패턴을 적용한 Spring 프로젝트
스프링 프로젝트 개발에 필요한 라이브러리는 Maven을 이용해 자동적으로 다운로드 됩니다.

3. 라이브러리 버전 수정
- 스프링 최신 버전 확인 : https://mvnrepository.com/ 에서 spring 검색
스프링5, JDK 1.8로 설정하여 프로젝트를 진행할 것이기 때문에 pom.xml에서 다음처럼 설정합니다.


4. 서버 세팅
Server 탭에서 우클릭 -> New -> Server -> Tomcat v8.5 Server 선택 ->
서버 이름 설정 -> 구동할 프로젝트(springtest)를 Configured에 Add

5. Spring .do 설정
- Server.xml 수정 (Tomcat)

- web.xml 수정

36번째 줄처럼 *.do로 수정을 해줍니다. 이러한 형식은 꼭 정해져 있는 것은 아니고 *.anyway 처럼 원하는 형식으로 커스텀을 해서 사용할 수 있는 일종의 패턴입니다.
- HomeController 수정

@RequestMapping을 통해 value 값을 .do로 설정을 해줍니다. 여기서는 [ home.do ] 라고 설정을 해놓도록 하겠습니다.
그 후, 서버 실행후 주소창에 localhost:8080/home.do를 입력하면 home.jsp가 띄워지게 됩니다.
6. 프로젝트 설정 세팅
- 먼저, Maven Repository 에서 프로젝트의 pom.xml파일에 라이브러리 의존성을 추가하여 필요 라이브러리를 다운로드 합니다.
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
</aside>
<!-- <https://mvnrepository.com/artifact/org.springframework/spring-jdbc> -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- <https://mvnrepository.com/artifact/mysql/mysql-connector-java> -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!-- <https://mvnrepository.com/artifact/org.mybatis/mybatis> -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- <https://mvnrepository.com/artifact/org.mybatis/mybatis-spring> -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- <https://mvnrepository.com/artifact/org.projectlombok/lombok> -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
Lombok은 Annotation 기반으로 코드를 자동 생성해 주는 Java 라이브러리입니다.
ex) getter, setter, toString 등 메소드 자동 생성
- 공통 bean을 설정하는 Spring 설정 파일인 root-context.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:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- jdbc 모듈을 이용하여 dataSource 추가. dataSource를 주입하면 jdbc driver를 통해 MySQL과 연동 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- MyBatis와 Spring 간의 Connect를 생성, 처리하는 SqlSessionFactory 객체 주입 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- mybatis-config.xml이 Spring이 시작될 때 같이 실행되도록 설정 -->
<!-- classpath: 'src/main/resources' -->
<property name="configLocation" value="classpath:/mybatis-config.xml"></property>
<!-- MyBatis에서 사용하는 mapper 파일을 인식하도록 설정 -->
<property name="mapperLocations" value="classpath:mappers/**/*.xml"></property>
</bean>
<!-- MyBatis에서 객체를 만들어서 sql을 호출할 때 SqlSesssion 객체를 만듦 -->
<bean id="sqlSession"
class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
<context:property-placeholder
location="/WEB-INF/props/jdbc.properties"/>
</beans>
3. mybatis-config.xml 파일을 생성합니다.
src/main/resoure 디렉토리 아래 mybatis-config.xml 파일 생성
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.cloudmt.practice.model.dto"/>
</typeAliases>
</configuration>
4. 한글 깨짐 문제 해결 방안
해당 프로젝트 web.xml파일 수정
- 인코딩 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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
참고
- Spring MVC란? : https://min-it.tistory.com/7
- Maven이란? : https://mangkyu.tistory.com/8