[SpringBoot] JPA를 이용한 CRUD#2 (MySql, Jsp)

작성일자:2016-05-17

- Goal

Spring-boot 웹프로젝트에서 JPA를 이용한 CRUD 처리.

DB는 MySql을 사용하고, View는 Jsp를 이용해서 작성한다. 


- Time

15min


- Enviroment

java 1.8, STS3.7


- Tutorial

2016/05/16 - [Springboot] - [SpringBoot] JPA를 이용한 CRUD

이전글을 확인하자. 소스는 아래 GitHub에서 받을수 있다. 

https://github.com/beans9/web/tree/jpa-crud


자 기존에는 파일db에 작성하던 내용을 MySql Db에 작성해보도록 하자. 전 글에서 JPA의 장점을 표준이라고 정의했다. 

DB가 바뀌더라도 설정외에는 실제 구현 코드는 바꿀 필요가 없다. 우린 interface만 사용하고 내부적으로 알아서 처리 해준다. 

제일먼저 설정파일에 MySql관련 설정을 작성하여 준다. 각자 환경에 맞게 작성하여 주자. 


application.properties 

spring.mvc.view.prefix: /WEB-INF/jsp/

spring.mvc.view.suffix: .jsp


spring.jpa.hibernate.ddl-auto=update

spring.jpa.show-sql=true


spring.datasource.url=jdbc:mysql://localhost:3306/web?useUnicode=true&charaterEncoding=utf-8

spring.datasource.username=web

spring.datasource.password=web1234

spring.datasource.driverClassName=com.mysql.jdbc.Driver


이걸로 끝이다. 기존 소스를 실행시켜 돌려보아라, 그리고 MySql로 접속해서 테이블이 생성되었는지 실제 데이터가 쌓이는지 확인해 보도록 하자. 테이블도 생성 되었고, 데이터도 입력 되어 있는것을 확인하였을 것이다. 


spring.jpa.hibernate.ddl-auto에 대해 간략히 옵션값을 확인해보도록 하자

create  : 기존테이블 삭제 후 다시 생성

create-drop: create와 같으나 종료시점에 테이블 DROP

update: 변경분만 반영

validate: 엔티티와 테이블이 정상 매핑되었는지만 확인

none: 사용하지 않음


우리가 사용한 update는 모델값에 따라 테이블을 자동으로 변경해준다. 물론 자동으로 생성 해주는 만큼 한계가 있다. 테스트용으로 사용하고 실제로 사용 할 경우에는 테이블을 직접 만들어서 사용하도록 하자. 


그다음 해야할 작업은 controller 패키지와 rest 패키지를 만든 후 MemberController.java, MemberRestController.java를 생성해 주도록 하자. 화면을 담당하는 controller 패키지와 추후 restApi로 사용할 rest 패키지를 분리할 것이다. 


폴더구조는 아래와 같다. 


MemberController.java 파일을 작성하자. 

리스트화면과, 입력하면, 수정화면을 만들고 데이터 조회,저장,삭제 부분을 만들 것이다. 

조회된 내용은 Model 객체에 담아서 view-page인 JSP에서 사용 할 수 있도록 한다. 

package com.web.controller;


import java.util.List;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;


import com.web.domain.Member;

import com.web.repository.MemberRepository;


@Controller

@RequestMapping("/member")

public class MemberController {

@Autowired

private MemberRepository memberDao;

@RequestMapping("/list")

public String list(Model model){

List<Member> list = memberDao.findAll();

model.addAttribute("list",list);

return "member/list";

}

@RequestMapping(value="/add",method = RequestMethod.GET)

public String add(){

return "member/add";

}

@RequestMapping(value="/add",method = RequestMethod.POST)

public String postAdd(Member member){

memberDao.save(member);

return "redirect:/member/list";

}

@RequestMapping(value="/mod/{id}",method = RequestMethod.GET)

public String mod(@PathVariable int id, Model model){

Member member = memberDao.findOne(id);

model.addAttribute("data",member);

return "member/mod";

}

@RequestMapping(value="/mod",method = RequestMethod.POST)

public String postMod(Member member){

memberDao.save(member);

return "redirect:/member/list";

}

@RequestMapping("/del/{id}")

public String del(@PathVariable int id){

memberDao.delete(id);

return "redirect:/member/list";

}

}


그다음 JSP파일을 생성하자. 다른 내용은 없고 불러온 데이터를 테이블로 그려주고 입력, 수정, 삭제가 가능하도록 링크를 달아 준다. 

list.jsp (WEB-INF/jsp/member/list.jsp) 

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

pageEncoding="UTF-8"%>

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

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

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

<title>Spring Boot</title>

</head>

<body>

<h1>LIST</h1>

<table border="1">

<thead>

<tr>

<th>id</th>

<th>email</th>

<th>password</th>

<th>-</th>

</tr>

</thead>

<tbody>

<c:forEach var="data" items="${list}">

<tr>

<td>${data.id }</td>

<td><a href="./mod/${data.id }">${data.email }</a></td>

<td>${data.password }</td>

<td><a href="./del/${data.id }">삭제</a></td>

</tr>

</c:forEach>

</tbody>

</table>

<a href="./add">입력</a>

</body>

</html>


입력화면, model명과 입력태그의 이름을 맞춰준다. 

add.jsp (WEB-INF/jsp/member/add.jsp) 

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

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

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

<title>ADD</title>

</head>

<body>

<h1>ADD</h1>

<form action="./add" method="post">

<label>email</label> <input type="text" name="email"><br>

<label>password</label> <input type="text" name="password"><br>

<input type="submit" value="저장">

</form>

</body>

</html>


수정화면, 기본데이터를 셋팅해 준다. 

mod.jsp (WEB-INF/jsp/member/modjsp)

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

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

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

<title>MOD</title>

</head>

<body>

<h1>MOD</h1>

<form action="./" method="post">

<label>email</label> <input type="text" name="email" value="${data.email }"><br>

<label>password</label> <input type="text" name="password" value="${data.password }"><br>

<input type="submit" value="수정">

<input type="hidden" name="id" value="${data.id }">

</form>

<a href="../list">리스트</a>

</body>

</html>


자 모든 코드 작성이 끝났고 서버를 구동하여 테스트해보도록 하자

리스트화면


입력화면


입력 후 리스트에 추가된 화면


email을 클릭하여 수정화면으로 진입


수정 후 리스트화면


삭제버튼을 눌러서 삭제 한 후 리스트화면


- Conclusion

Spring boot와 JPA를 이용하여 간단하게 CRUD 작업을 처리하혔다. 파일DB에서 실제 DB로 전환 하는데 필요한 코드 라고는 단 1줄뿐이였다. JPA의 장점중에 하나라고 할 수 있겠다. 물론 추후에 조인이나 여러테이블을 참조할때가 되면 좌절 할 수도 있으리라 생각된다. 좀더 자세한건 차차 알아가도록 하고, 우선은 빠르게 그럴 싸한 사이트를 만드는것을 목표로 하자. 


- GitHub

작업내용은 아래 gitHub에서 확인 가능하다. 

https://github.com/beans9/web/tree/mysql-jsp-crud



- Next

조금더 그럴싸한 게시판을 만들어 보도록 하자. 

테스트코드를 작성해 보자.