Sangwon Coding

7. 스프링 MVC 프로젝트의 기본 구성 본문

Spring/코드로 배우는 스프링 웹 프로젝트

7. 스프링 MVC 프로젝트의 기본 구성

SW1 2019. 11. 17. 19:41

안녕하세요! 이번 포스팅부터는 본격적으로 실습 위주로 하면서 포스팅을 진행할 생각입니다.

 

예제를 작성하기에 앞서서 스프링 MVC를 이용하는 프로젝트의 구성을 이해하는 일은 전체 데이터의 흐름을 보기 위해서입니다. 브라우전에서 전송한 데이터를 스프링 MVC의 어떤 단계를 거쳐서 실행되는지를 이해한다면 문제가 발생했을 때 빠른 대처와 대안을 찾을 수 있기 때문입니다.

 

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

 

Presentation Tier(화면 계층)는 화면에 보여주는 기술을 사용하는 영역입니다. 책의 예제에서는 Servlet/JSP나 스프링 MVC가 담당하는 영역이 됩니다. Presentation Tier는 프로젝트의 성격에 맞춰 앱으로 제작하거나, CS(Client-Server)로 구성되는 경우도 있습니다. 이전 파트에서 학습한 스프링 MVC와 JSP를 이용한 화면 구성이 이에 속합니다.

 

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

 

Persistence Tier(영속 계층 혹은 데이터 계층)는 데이터를 어떤 방식으로 보관하고, 사용하는가에 대한 설계가 들어가는 계층입니다. 일반적인 경우에는 데이터베이스를 많이 이용하지만, 경우에 따라서 네트워크 호출이나 원격 호출 등의 기술이 접목될 수 있습니다. 이 영역은 MyBatis와 mybatis-spring을 이용해서 구성했던 파트 1을 이용합니다.

 

예제를 하기 위한 프로젝트는 'ex02'로 만드시고 만드는 방법은 앞서 생성해 왔던 프로젝트와 동일합니다. 그 밖에 설정 관련해서도 앞 프로젝트와 동일합니다. 따로 그 부분은 이번 포스팅부터 다루지 않겠습니다. 

 

ex02 프로젝트의 Build Path Deployment Assembly Oracle JDBC Driver를 추가합니다.

 

 

 

테이블 생성과 더미 데이터를 생성하기 위해 오라클 데이터베이스에서 book_ex 계정을 통해 시퀀스를 이용해서 작업합니다.

 

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

 

이렇게 테이블을 추가하고 더미 데이터를 추가하기 위해서 insert문을 통해 데이터를 추가해봅니다.

 

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

 

여러번 실행 후 데이터가 정상적으로 처리되었는지 확인하고 항상 insert 작업이 끝나면 데이터베이스를 commit 해야 합니다.

 

 

이제 데이터베이스 관련 설정 및 테스트를  해볼건데 root-context.xml에는 mybatis-spring 네임스페이스를 추가하고, PART 1에서 작성한 DataSource의 설정과 MyBatis의 설정을 추가합니다.

 

 

 <!-- jdbc  -->
 <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" />
 </bean>
 
 <mybatis-spring:scan base-package="org.zerock.mapper"/>

 

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

 

 

프로젝트가 정상적으로 실행하려면 먼저 DataSource와 MyBatis의 연결이 반드시 필요하므로 PART 1에서 작성했던 DataSourceTests 클래스JDBCTests 클래스를 테스트 패키지에 추가합니다.

 

 

 

다음 포스팅에선 영속/비즈니스 계층의 CRUD 구현에 대해 포스팅 하겠습니다!

Comments