java, spring

[Spring framework] 스프링 MVC 프로젝트의 기본 구성

isaac.kim 2021. 6. 7. 22:43
728x90
반응형

[Spring framework] 스프링 MVC 프로젝트의 기본 구성

 

스프링 MVC를 이용하는 프로젝트의 구성을 이해하는 일은 전체 데이터의 흐름 보고 이해하기 위해서 입니다.

 

일반적으로 웹 프로젝트는 3-tier(티어) 방식으로 구성합니다.

 

Presentation ↔ Business ↔ Persitence tier

https://slidetodoc.com/data-persistence-layer-petr-admek-content-persistence-i/

■ Presentation Tier (화면 계층)는 화면에 보여주는 기술을 사용하는 영역입니다. Servlet/JSP나 스프링 MVC가 담당하는 영역이 됩니다.

 

Business Tier (비즈니스 계층)는 순수한 비즈니스 로직을 담고 있는 영역입니다. 이 영역이 중요한 이유는 고객이 원하는 요구 사항을 반영하는 계층이기 때문입니다. 이 영역의 설계는 고객의 요구 사항과 정확히 일치해야 합니다. 이 영역은 주로 xxxService와 같은 이름으로 구성하고, 메서드의 이름 역시 고객들이 사용하는 용어를 그대로 사용하는 것이 좋습니다.

 

■ Persistence Tier (영속 계층 혹은 데이터 계층)는 데이터를 어떤 방식으로 보관하고, 사용하는가에 대한 설계가 들어가는 계층입니다. (이 영역은 MyBatis와 mybatis-spring을 이용해서 구성합니다.)

 

계층에 대한 설명을 스프링 MVC와 맞춰 보면 다음과 같은 구조가 됩니다.

 

1. 각 영역의 Naming Convention(명명 규칙)

프로젝트를 진행할 때 다음과 같은 네이밍 규칙을 갖고 작성합니다.

 

* xxxController : 스프링 MVC에서 동작하는 Controller 클래스를 설계할 때 사용합니다.

 

* xxxService, xxxServiceImpl : 비즈니스 영역을 담당하는 인터페이스는 'xxxService'라는 방식을 사용하고, 인터페이스를 구현한 클래스는 'xxxServiceImpl'이라는 이름을 사용합니다.

 

* xxxDAO, xxxRepository : DAO(Data-Access-Object)나 Repository(저장소)라는 이름으로 영역을 따로 구성하는 것이 보편적입니다. (많은 예제에서 별도의 DAO를 구성하는 대신 Mybatis의 Mapper 인터페이스를 활용합니다.)

 

* VO, DTO : VO와 DTO는 일반적으로 유사한 의미로 사용, 데이터를 담고 있는 개체를 의미한다는 공통점이 있습니다. 다만, VO는 주로 Read Only 목적이 강하고, 데이터 자체도 Immutable(불변)하게 설계하는 것이 정석입니다. DTO는 주로 데이터 수집의 용도가 좀 더 강합니다. 예로, 웹 화면에서 로그인하는 정보를 DTO로 처리하는 방식을 사용합니다.

 

2. 패키지의 Naming Convention

 

com.project

com.project.config 프로젝트와 관련된 설정 클래스 보관 패키지
com.project.controller 스프링 MVC의 Controller들의 보관 패키지
com.project.service 스프링의 Service 인터페이스와 구현 클래스 패키지
com.project.domain VO, DTO 클래스들의 패키지
com.project.persistence MyBatis Mapper 인터페이스 패키지
com.project.exception 웹 관련 예외처리 패키지
com.project.aop 스프링의 AOP 관련 패키지
com.project.security 스프링 Security 관련 패키지
com.project.util 각종 유틸리티 클래스 관련 패키지

 

 

 

3. 프로젝트 구성

Spring Legacy Project로 생성합니다. 생성 후에는 pom.xml의 수정, 데이터베이스 관련 처리, 스프링 MVC 처리 순서로 진행합니다.

 

1. Spring Legacy Project 생성

2. pom.xml 수정 (Library 설치)

3. 데이터베이스 관련 처리

4. 스프링 mvc 처리

 

 

Spring Legary Project 생성

File > New > Spring Legacy Project

pom.xml 수정

1) java version 수정

2) spring version 수정

 

스프링 관련 라이브러리 추가

3) spring-tx 라이브러리 추가

4) spring-jdbc 라이브러리 추가

5) spring-test 라이브러리 추가

 

MyBatis를 이용할 것이므로 HikariCP, MyBatis, mabatis-spring, Log4jdbc 라이브러리들도 추가합니다.

6) HikariCP

7) MyBatis

8) mybatis-spring

9) Log4jdbc

 

테스트와 Lombok을 위해서 jUnit 버전을 변경하고, Lombok을 추가합니다. jUnit의 경우 4.7로 설정되어 있으므로 기존 설정을 변경해 주도록 합니다. (junit version 4.7 → 4.12)

 

10) junit

11) lombok

 

Servlet 3.1을 제대로 사용하기 위해 서블릿 2.5버전이 아닌 3.0 이상으로 수정합니다.

12) servlet

Servlet 3.1버전을 제대로 활용하고, JDK8의 기능을 활용하기 위해서 Maven 관련 Java 버전을 1.8로 수정합니다.

13) maven-compiler-plugin

 

마지막으로 사용하고 있는 데이터베이스 JDBC Driver를 프로젝트의 Build Path에 추가하고, Deployment Assembly에도 추가합니다. (권장되는 방법)

 

저는 jdbc driver도 dependency를 사용해 라이브러리를 설치했습니다.

14) mariadb-java-client

pom.xml 수정이 완료되었다면 프로젝트를 선택하고 'Maven > Update Project'를 실행합니다.

 

 

4. 데이터베이스 관련 설정

1. root-context.xml에는mybatis-spring 네임스페이스를 추가합니다.

2. connection pool 설정 : HikariCP

3. sqlSessionFactory 설정

4. mybatis-spring 설정

 

oracle 데이터베이스 설정 기준, 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: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">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	
	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName"
		value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
		<property name="jdbcUrl"
		value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE"></property>
		<property name="username" value="book_ex"></property>
		<property name="password" value="book_ex"></property>
	</bean>
	
 	<!-- HikariCP configuration -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
    	destroy-method="close">
    	<constructor-arg ref="hikariConfig"/>
	</bean>
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<mybatis-spring:scan base-package="com.project.mapper"/>
	
</beans>

5. root-context.xml은 내부적으로 Log4jdbc를 이용하는 방식으로 구성되어 있으므로 log4jdbc.log4j2.properties 파일을 추가해 줍니다.

 

log4jdbc.log4j2.properties 파일

log4jdbc.log4j2.properties 경로


여기까지 해서 스프링 MVC 프로젝트의 기본 구성을 알아보았습니다.

 

이후, 프로젝트가 정상적으로 실행하려면 DataSource와 Mybatis의 연결이 반드시 필요하므로 테스트를 수행할 것을 권장합니다.

728x90
반응형