티스토리 뷰

반응형

PART 3. 기본적인 웹 게시물 관리

스프링 MVC와 MyBatis를 이용해서 기본적인 CRUD와 페이징 처리, 검색 기능의 게시물 관리를 만들 것

 

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

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

Presentation Tier

- 화면 계층 . 화면에 보여주는 기술을 사용하는 영역(Servlet/JSP, 스프링 MVC가 담당하는 영역)

- 프로젝트의 성격에 맞춰 앱으로 제작하거나, CS(Client-Server)로 구성되는 경우도 있음.

- 스프링MVC와 JSP를 이용한 화면 구성이 이에 속함

 

Business Tier

- 비즈니스 계층. 순수한 비즈니스 로직을 담고 있는 영역

- 고객이 원하는 요구 사항을 반영하는 계층이기 때문에, 요구 사항과 정확히 일치해야 함

- 주로 '~~Service'와 같은 이름으로 구성

- 메서드 이름 역시 고객들이 사용하는 용어를 그대로 사용하는 것이 좋음

 

Persistence Tier

- 영속 계층 혹은 데이터 계층. 데이터를 어떤 방식으로 보관하고, 사용하는가에 대한 설계가 들어가는 계층

- 일반적으로 데이터베이스를 많이 사용함. 때에 따라 네트워크 호출이나 원격 호출 등의 기술이 접목될 수 있음

- MyBatis와 mybatis-spring을 이용해서 구성함 

 

계층을 스프링 MVC와 맞춰서 설명하면 다음과 같은 구조

스프링 MVC 영역은 Presentation Tier(화면계층)을 구성함. 각 영역은 별도의 설정을 가지는 단위로 볼 수 있음

스프링 Core 영역은 POJO(Plain-Old-Java-Object)의 영역. 스프링 의존성 주입을 이용해 객체 간의 연관 구조를 완성해서 사용

MyBatis 영역은 현실적으로 mybatis-spring을 이용해서 구성하는 영역 ==> SQL에 대한 처리를 담당하는 구조


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

프로젝트를 위와 같이 3-tier로 구성하는 것은 '유지 보수'에 대한 필요성 때문

각 영역을 독립적으로 설계하여 나중에 특정 기술이 변하더라도 필요한 부분을 쉽게 교환할 수 있게 하는 방식

따라서 각 영역은 설계 당시부터 영역을 구분하고, 해당 연결 부위는 인터페이스를 이용해서 설계함

 

프로젝트 진행 시 네이밍 규칙

  • ~~Controller : 스프링 MVC에서 동작하는 Controller 클래스를 설계할 때 사용
  • ~~Service : 비즈니스 영역을 담당하는 인터페이스
  • ~~ServiceImpl : 비즈니스 영역 인터페이스를 구현한 클래스
  • ~~DAO, ~~Repository : DAO나 Repositroty라는 이름으로 영역을 따로 구성하는 것이 보편적이나, 예제는 MyBatis의 Mapper 인터페이스를 활용할 것
  • VO, DTO : VO는 get 메소드만, DTO는 get&set 메소드가 같이 (예제는 테이블과 관련된 데이터는 VO로 정함)

 

패키지의 네이밍 규칙

앞으로 예제는 이런 식으로 구성할 것


프로젝트를 위한 요구사항

프로젝트를 진행하기 전에 고객의 요구사항을 인식하고 이를 설계하는 과정이 필요함

요구 사항은 온전한 문장으로 정리하는 것이 좋음

주어는 '고객'이고 목적어는 '대상' ==> 게시물을 만든다하면, 여기서 대상은 '게시물'이 된다.

요구 사항은 화면에도 영향을 미치게 된다 ==> 이러한 화면을 설계할 때는 주로 Mock-up(목업) 툴을 이용하는 경우가 많다. 대표적으로 PowerPoint나 Balsamiq studio, Pencil Mockup 등의 SW를 이용해서 작성하면 좋음

각 화면을 설계하는 단계에서 사용자가 입력해야 하는 값과 전체 페이지의 흐름이 설계됨 ==> 화면 흐름을 URL로 구성하게 되는데 이 경우 GET/POST 방식에 대해서 같이 언급해두는 것이 좋음


예제 프로젝트 구성

1) pom.xml 수정 + 추가

==> 스프링 버전(1.8), Java 버전(5.0.7), spring-tx 추가, spring-jdbc 추가, spring-test 추가, HikariCP추가, MyBatis 추가, mybatis-spring추가, Log4jdbc 추가, oracle8 추가, Lombok 추가, jUnit 버전(4.12) , javax.servlet-api 버전 (3.1.0), maven-compiler-plugin의 source와 target 버전(1.8)

 

2) 테이블 생성 

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); --프라이머리키 지정

 

더미 데이터 추가

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

항상 마지막엔 commit~!!

 

3) root-context.xml 

mybatis-spring 네임스페이스 추가

hikariConfig 추가, dataSource 추가, sqlSessionFactory 추가, mybatis-spring scan 추가

log4jdbc.log4j2.properties 파일 추가 (src/main/resources)

src/test/java 에 org.zerock.persistence 패키지 추가 ==> ex00에서 만든 DataSourceTests.java와 JDBCTests.java 파일 추가

반응형
댓글