Spring으로 방명록 애플리케이션을 구현하는 시리즈입니다.





방명록 애플리케이션

이번 글에서는 방명록 애플리케이션을 구현해보도록 해보겠습니다.

설정 파일과 디렉터리 구조는 방명록 애플리케이션(1)을 참고해주세요. ( 링크 )


단, MySQL JDBC Driver와 JSTL 라이브러리를 추가하기 위한 설정이 필요합니다.

라이브러리 추가이므로 기존 pom.xml 파일의 <dependencies> 태그 내부에 아래의 코드를 추가해주세요.

<!-- MySQL JDBC Driver -->

<dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

      <version>5.1.40</version>

</dependency>

<!-- JSTL -->

<dependency>

      <groupId>javax.servlet</groupId>

      <artifactId>jstl</artifactId>

      <version>1.2</version>

</dependency>




환경 설정도 끝났고,  GuestBookDAO , GuestBookVO는 이미 구현이 되어 있으므로

GuestBookController 와 JSP 페이지만 작성하면 되겠네요.

( GuestBookDAO , GuestBookVO 코드 링크 )



GuestBookController

@Controller
@RequestMapping("/main")
public class GuestBookController {
	@Autowired
	private GuestBookDAO GuestBookDAO;
	
	
	@RequestMapping("/index")
	public String index(Model model) {
		List<GuestBookVO> list = GuestBookDAO.getList();
		model.addAttribute("list", list);
		return "/WEB-INF/views/index.jsp";
	}
	
	
	@RequestMapping("/deleteform")
	public String deleteform() {
		return "/WEB-INF/views/deleteform.jsp";
	}
	
	
	@RequestMapping(value="/add", method=RequestMethod.POST)
	public String add(@ModelAttribute GuestBookVO vo) {
		GuestBookDAO.insert(vo);
		return "redirect:/main/index";
	}
	
	
	@RequestMapping(value="/delete", method=RequestMethod.POST)
	public String delete(
			@RequestParam Integer no,
			@RequestParam String pwd ) {
		String dbPwd = GuestBookDAO.getPwd(no);
		String parseInputPwd = GuestBookDAO.getInputPwd(pwd);
		
		if( dbPwd.equals(parseInputPwd)){
			GuestBookDAO.delete(no);	
		}
		
		return "redirect:/main/index";
	}
}

특별한 것 없이 이전 글에서 모두 봤던 코드입니다.


/add로 요청이 왔을 때 GuestBookVO 객체를 통째로 받은 것에 주목해주세요.

스프링에서 자주 사용되는 테크닉이므로 꼭 숙지하셔야 합니다.

이것이 가능한 이유는 GuestBookVO 객체에 getter, setter가 있기 때문이며,

index.jsp의 form에서 <input>태그의 name이 GuestBookVO의 인스턴스 변수와 이름이 같기 때문입니다.





다음으로 방명록 목록/추가 및 삭제에 대한 뷰 페이지를 작성하겠습니다.

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> 


<%

        pageContext.setAttribute("newLine", "\n");

%>


<!doctype html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>방명록</title>

</head>

<body>

        <form action="/guestbook/main/add" method="post">

               <table border="1" width="500">

                       <tr>

                              <td>이름</td><td><input type="text" name="name"></td>

                              <td>비밀번호</td><td><input type="password" name="pwd"></td>

                       </tr>

                       <tr>

                              <td colspan=4><textarea name="content" cols=60 rows=5></textarea></td>

                       </tr>

                       <tr>

                              <td colspan=4 align=right><input type="submit" VALUE=" 확인 "></td>

                       </tr>

               </table>

        </form>

        <br>

        <c:set var="count" value="${fn:length(list)}" />

        <c:forEach items="${list }" var="vo" varStatus="status" >

               <table width="510" border="1">

                       <tr>

                              <td>[${count - status.index}]</td>

                              <td>${vo.name }</td>

                              <td>${vo.regDate }</td>

                              <td><a href="/guestbook/main/deleteform?no=${vo.no }">삭제</a></td>

                       </tr>

                       <tr>

                              <!-- 개행(\n) JSTL에서 사용할 없어서 page context 다른 변수로 추가해줘야함 -->

                              <td>${fn:replace(vo.content, newLine, "<br>") }</td>

                       </tr>

               </table>

               <br>

        </c:forEach>

</body>

</html>





deleteform.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"prefix="fmt"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>


<!doctype html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>방명록</title>

</head>

<body>

        <form action="/guestbook/main/delete?no=${ param.no }" method="post">

               <table>

                       <tr>

                              <td>비밀번호</td>

                              <td><input type="password" name="pwd"></td>

                              <td><input type="submit" value="확인"></td>

                       </tr>

               </table>

        </form>

        <a href="/guestbook/main/index">메인으로 돌아가기</a>

</body>

</html>

이제 http://localhost:8080/guestbook/main/index 을 입력하여, 방명록 글쓰기 및 삭제를 테스트해보세요 !





이상으로 방명록 애플리케이션 구현을 마치도록 하겠습니다.

이제 스프링을 이용해서 간단한 웹 애플리케이션을 만들 정도는 되었습니다.


그런데 DAO의 코드를 보시면 2가지의 문제점이 있습니다.

1) 매 번 DB에 접근하기 위해서 커넥션을 연결해야 합니다.

2) 실제 처리하는 SQL과 파라미터만 다를 뿐 필요하지만 같은 코드가 중복해서 발생합니다.


이러한 문제를 해결하기 위해서 커넥션 풀을 이용한 DBCP , 그리고 Mybatis 라이브러리를 사용합니다.

이후의 글들에서는 방명록 애플리케이션을 보완해가면서 여러 기술들을 적용해보도록 하겠습니다.