Spring Framework

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

포포015 2020. 12. 15. 17:43

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

 프로젝트를 3-tier로 구성하는 일반적인 이유는 '유지보수'에대한 필요성때문

 각영역은 독립적으로 설계되어 나중에 특정한 기술이 변하더라도 필요한 부분을 교체하도록 하는 방식

 해당 연결 부위는 인터페이스를 이용해서 설꼐하는것이 일반적인 구성방식 

- xxxController : 스프링 MVC에서 동작하는 Controller 클래스를 설계할때 사용

- xxxService,xxxServiceImpl : 비즈니스 영역을 담당하는 인터페이스

- xxxDAO,xxxRepository : DAO나Repository라는 이름으로 영역을 따로 구성하는것이 보편적.

                                 다만 별도의 DAO를 구성하는대신 Mybatis의 Mapper 인터페이스를 활용

- VO, DTO : VO와 DTO는 유사한 의미로 사용, 데이터를 담고 있는 객체를 의미한다는 공통점이 있다

               다만 VO는 Rean Only 목적이 강하고 , 데이터 자체도 불변하게 설계하는것이 정석

               DTO는 주로 데이터수집의 용도가 좀더강하다 >웹화면에서 로그인하는 정보같은경우 DTO사용

 

*영속/비즈니스 계층의 CRUD구현

거의 모든 웹 어플리케이션의 최종목적은 데이터베이스에 데이터를 기록하거나,

원하는 데이터를 가져오는것이 목적이다

 

VO 클래스의 작성 (DB테이블 작성)

org.zerock.domain 패키지를 생성하고,BoardVO 클래스를 정의함.

(lombok의 @Data를 이용해 getter/setter/toString() 등을 만들어내는 방식을 사용

1
2
3
4
5
6
7
8
9
10
@Data
public class BoardVO {
 
    private Long bno;
    private String title;
    private String content;
    private String writer;
    private Date regdate;
    private Date updateDate;
}
cs

 

Mybatis는 SQL을 처리하는데 어노테이션이나, XML을 이용할수 있다.

간단한 SQL이라면 어노테이션을 이용해서 처리하는것이 무난하지만 

SQL이 복잡해지고 검색과 같이 상황에 따라 다른 SQL문이 처리되는경우 유용하지못함.

 

root-context.xml을 설정 

1
    <mybatis-spring:scan base-package="org.zerock.mapper"/>
cs

org.zerock.mapper 패키지 작성하고, BoardMappert 인터페이스 생성(반드시 SQL에 ;이 없도록 작성)

1
2
    @Select("select * from tbl_board where bno > 0")
    public List<BoardVO> getList();
cs

테스트를 위해 src/test/java에 org.zerock.mapper 패키지 작성 BoardMapeerTests 클래스 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class BoardMapperTests {
 
    @Setter(onMethod_ = @Autowired)
    private BoardMapper mapper;
    
    @Test
    public void testGetList() {
        mapper.getList().forEach(board -> log.info(board));
    }
}
cs

테스트 결과

Mapper XML 파일 테스트를 완료했다면 src/main/resources내에 패키지와 동일한 

org/zerock/mapper 단계의 폴더를 생성하고 BoardMapper.XML을 작성. ( 폴더를 한개씩 생성)

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.zerock.mapper.BoardMapper">
<select id="getList" resultType="org.zerock.domain.BoardVO">
<![CDATA[
select * from tbl_board where bno >0
]]>
</select>
</mapper>
cs

<mapper>의 namespace 속성값을 Mapper 인터페이스와 동일한 이름을 주고,

<select>태그의 id 속성 값은 메서드의 이름과 일치하게 작성 resultType 속성은 객체로 반환하기위해 설정

CDATA 부분은 XML에서 부등호를 사용하기위해 (모든걸 문자로 인식하게해줌)