티스토리 뷰

IT/Framework

Spring framework 시작하기(3)

Normal_One 2017. 3. 26. 11:56

 앞선 내용에선 본격적으로 Spring framework를 시작하기 앞서 모든 설정을 끝마쳤습니다. 이제 본격적으로 Controller, Service, mapper, jsp 파일을 작성하여 보겠습니다. 
 Spring 프로젝트는 보통 java단에서 4개로 세분화됩니다. Controller와 Service, DAO, DTO(VO)입니다. 먼저 Controller는 jsp로부터 데이터를 받아오거나 넘겨주고 주소를 맵핑하는 역할을 합니다. 
 Service는 Controller에서 받아 온 데이터를 가공하는 로직을 넣는 부분입니다. 여기서 가공 된 데이터는 DAO로 넘겨지게 됩니다. DAO는 Data Access Object의 약자로 DB를 사용해 데이터를 조회하거나 조작하는 기능을 담당합니다. DTO(VO)는 Data Transfer Object의 약자인데 보통 DB의 컬럼값을 맵핑하기 위해 사용되는 객체들의 집합소입니다. 각 계층간의 흐름으로 따지면

                                                    Controller  ↔ Service ↔ DAO ↔ DTO

 위와 같이 된다고 할 수 있겠습니다. 여기선 간단한 로직을 이용해서 DB값을 조회해 오는 것으로 하기 때문에 편의상 DAO와 DTO는 생략하도록 하겠습니다. 일단 먼저 파일부터 만들어보도록 하겠습니다. Controller는 프로젝트를 만들면 생성되는 HomeController를 사용하도록 하고 Service와 Mapper를 만들도록 하겠습니다.





 위와 같이 파일을 만들어 준 후 먼저 Mapper부터 작성해보도록 하겠습니다. 주의하실 점은 Mapper의 경우 앞선 Spring framework 시작하기(2)의 root-context에서 설정한 Mapper 경로에다가 만들어주어야 합니다.


1. Mapper 작성

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="Home">
 
    <select id="home1" resultType="Int">
        SELECT COUNT(*) FROM ZIPCODE WHERE SIDO = '서울' AND GUGUN = '강남구'
    </select>
</mapper>
 
cs

 xml 파일 안에는 먼저 위에 작성된 것과 같이 mapper라는 것을 명시한 후 mapper 마크업을 만든 후에 namespace를 작성합니다. 
 그 후에 mapper 마크업 안에서 상황에 맞게 마크업을 작성하도록 합시다. Ctrl + space를 누르면 작성할 수 있는 마크업의 종류가 나타나는데 이를 참조하면 어떨 때 어떤 마크업을 사용해야 하는지 아실 수 있을겁니다. 저희는 데이터를 가져와야 하니까 select 마크업을 작성하도록 하겠습니다. id와 resultType을 작성했는데, id는 각 마크업의 고유 id를 뜻하고 resultType은 DB에서 불러온 데이터를 반환할 때 어떤 타입으로 반환할 것인지를 작성하는 곳입니다. 제가 작성한 쿼리는 시도가 '서울'이고 구군이 '강남구'인 주소지의 숫자를 반환하는 쿼리이므로 resultType을 int로 지정했습니다.


2. Service 작성
 Mapper 작성을 완료했으니 그 Mapper를 불러 올 Service를 작성하도록 하겠습니다.  

1
2
3
4
5
6
7
8
9
10
11
12
@Service
public class HomeService {
    
    @Autowired
    private SqlSessionTemplate sql;
 
    public int getCount() {
    
        return sql.selectOne("Home.home1");
    }
    
}
cs

 Spring 프로젝트에서는 간단하게 설정할 수 있도록 Annotation(주석)을 통한 설정을 제공합니다. Annotation은 @를 붙여서 표현하며 Java나 Spring에서 기본적으로 제공하거나 사용자가 직접 정의해서 사용할 수도 있습니다. 
 @Service를 통해서 HomeService를 Service단으로 설정해주고 SqlSessionTemplate을 @Autowired를 통해서 의존주입 합니다. @Autowired를 붙여주면 붙여준 클래스 안에 있는 method를 사용할 수 있게 됩니다. 그 후 sql에 있는 method인 selectOne을 통해 DB 데이터를 가져옵니다.


3. Controller 작성

  이제 jsp로부터 데이터를 받아오거나 넘겨주고 주소를 맵핑시켜주는 역할을 하는 Controller를 작성 하겠습니다. 제일 먼저 프로젝트를 만들면 생성되어 있는 HomeController에 작성하도록 하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Controller
public class HomeController {
    
    @Autowired
    private HomeService service;
    
    @RequestMapping(value = "/home", method = RequestMethod.GET)
    public ModelAndView home() {
        ModelAndView mav = new ModelAndView();
        
        int count = service.getCount();
        mav.addObject("count", count);
        
        return mav;
    }
    
}
cs


   Service와 같이 @Controller를 통해서 HomeController를 Controller로 설정하고, HomeService에 작성해둔 Method를 사용하기 위해 @Autowired를 통해서 의존 주입합니다. ModelAndView를 Method로 선언하고 @RequestMapping을 통해서 jsp단과 맵핑을 합니다. value에는 주소를 작성하고 method에는 데이터를 프로토콜에서 전송하는 방식인 GET과 POST중 선택하여 작성합니다. 
 service단에 있는 getCount로 데이터를 가져온 후 데이터를 jsp로 넘겨주기 위해 변수 mav에 Object를 넣어줍니다.


4. JSP 작성

마지막으로 간단하게 JSP를 작성하도록 하겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>Home</title>
</head>
<body>
<h1>
    Hello world!  
</h1>
 
<P>  서울 강남구로 등록 된 주소는 총 ${count}개 입니다. </P>
</body>
</html>
 
cs


Controller에서 불러온 변수를 사용하기 위해 상단 부분에 Jtsl의 core를 불러옵니다. 그 다음 ${ }안에 Controller에서 보낼 때 작성한 변수 이름을 적으면 변수 값이 나옵니다. 이렇게 작성을 완료하고 서버를 킨 후에 URL로 접속하면



 다음과 같이 값이 나오는 것을 확인할 수 있습니다. 이상으로 가장 간단하게 Spring을 이용해서 웹페이지를 작성해 보았습니다. 다음에는 Spring이 지니고 있는 기능들을 작성하도록 하겠습니다.


'IT > Framework' 카테고리의 다른 글

Spring - Static field에 Autowired 적용하기  (2) 2018.12.08
Struts2 + Quartz2 scheduler 예제  (0) 2017.11.04
Struts 버전 업그레이드 방법  (0) 2017.04.16
Spring framework 시작하기(2)  (0) 2017.03.26
Spring framework 시작하기(1)  (0) 2017.03.26
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday