Spring | 07 스프링 MVC 프로젝트의 기본 구성

파과·2022년 9월 20일

웹 프로젝트의 3-tier 구성

일반적인 웹 프로젝트는 3-tier 방식으로 구성된다.

  • Presentation Tier(화면 계층)
    서블릿, 스프링MVC, JSP를 이용한 화면 구성
  • Business Tier(비즈니스 계층)
    'xxxService', 고객들이 사용하는 용어를 그대로 쓰는 메소드
  • Persistence Tier(영속 계층 혹은 데이터 계층)
    데이터 보관과 설계(MyBatis)

Naming Convention 명명 규칙

  • xxxController : 컨트롤러 클래스
  • xxxService, xxxServiceImpl : 비즈니스 영역을 담당하는 인터페이스는 Service, 인터페이스를 구현한 클래스는 ServiceImpl
  • xxxDAO, xxxRepository : DAO나 Repository라는 이름으로 영역을 따로 구성하는 것이 보편적이지만, 이 책의 예제는 별도의 DAO를 구성하는 대신 MyBatis의 Mapper 인터페이스를 활용한다.
  • VO, DTO : 데이터를 담고 있는 객체를 의미. 이 책에서는 VO 사용.

패키지 구성

비즈니스 단위별로 구분 → 기능별로 구분

이 책에서는

  • config 설정 클래스
  • controller 컨트롤러
  • service 서비스 인터페이스와 구현 클래스
  • domain VO, DTO 클래스
  • MyBatis Mapper 인터페이스
  • exception 웹 관련 예외처리
  • aop AOP 관련
  • security Security 관련
  • util 각종 유틸리티 클래스 관련

이렇게 구분한다.


프로젝트 생성

ex02 프로젝트를 생성하자.

  • pom.xml 수정
  • DB관련 처리
  • 스프링 MVC 처리

순서로 진행한다.

pom.xml 수정

  • 스프링 버전, 자바 버전 수정
  • spring-tx
  • spring-jdbc
  • spring-test
  • HikariCP
  • MyBatis
  • mybatis-spring
  • Log4jdbc
  • jUnit 버전 변경
  • Lombok 추가
  • 서블릿 버전 2.5에서 3.1.0으로 수정
  • maven-compiler-plugin 1.8로 수정
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>${org.springframework-version}</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>${org.springframework-version}</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-tx</artifactId>
  <version>${org.springframework-version}</version>
</dependency>

<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
  <version>2.7.8</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.6</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>1.3.2</version>
</dependency>

<dependency>
  <groupId>org.bgee.log4jdbc-log4j2</groupId>
  <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
  <version>1.16</version>
</dependency>


<!-- Test -->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.0</version>
  <scope>provided</scope>
</dependency>

ojdbc 추가 - https://velog.io/@virtualplastic/Spring-%EC%8A%A4%ED%94%84%EB%A7%81%EA%B3%BC-%EC%98%A4%EB%9D%BC%ED%81%B4DB-%EC%97%B0%EA%B2%B0


테이블 생성과 Dummy 데이터 생성

테이블 생성

create sequence seq_board;

create table tbl_board(
    bno number(10,0),
    title varchar2(200) not null,
    content varchar2(2000) not null,
    writer varchar2(50) not null,
    regdate date default sysdate,
    updatedate date default sysdate
);

alter table tbl_board add constraint pk_board
primary key (bno);

더미 데이터 추가
아래 구문을 여러 번 실행 후 반드시 commit을 해 준다.

insert into tbl_board (bno, title, content, writer)
values (seq_board.nextval, '테스트 제목', '테스트 내용', 'user00');

데이터베이스 관련 설정 및 테스트

root-context.xml에 mybatis-spring네임스페이스를 추가하고, DataSource 설정과 MyBatis 설정을 추가한다.

<?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:orcl"></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="org.zerock.mapper" />
		
</beans>

ex00에서 작성한 log4jdbc.log4j2.properties 파일을 추가한다.

ex00에서 작성한 DataSourceTests 클래스와 JDBCTests 클래스를 테스트 패키지에 추가한다.

0개의 댓글