JAVA/Spring

Spring Legacy Project 개발 환경 구축

하농이 2023. 1. 17. 20:42

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 등

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. 라이브러리 버전 수정

스프링5, JDK 1.8로 설정하여 프로젝트를 진행할 것이기 때문에 pom.xml에서 다음처럼 설정합니다.

자바 버전: 1.8 스프링 버전: 5.2.15
maven-compiler 버전: 3.8.1 (source : 1.8, target : 1.8)

 

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. 프로젝트 설정 세팅

  1. 먼저, 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 등 메소드 자동 생성

  1. 공통 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