2021. 12. 6. 16:42ใSpring
1. REST(REpresentational State Transfer)
: ํน์ URI๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ์ ๊ณต๋ฐ๋ ํ์์ด๋ค.
์ด๋ ๊ฒ REST ๋ฐฉ์์ผ๋ก ์๋น์ค์ ๊ณต์ด ๊ฐ๋ฅํ ๊ฒ์ RESTful ํ๋ค๋ผ๊ณ ํ๋ค.
2. @RestController
https://hyejin.tistory.com/275
์์์๋ @Controller์ @ResponseBody๋ฅผ ํตํด REST ๋ฐฉ์์ ์ง์ํ์ง๋ง,
Spring4์์๋ @RestController๋ฅผ ํตํด REST๋ฐฉ์ ์ญ์ ์ง์ํ๊ธฐ ๋๋ฌธ์
@RestController๋ฅผ ์ฌ์ฉํด๋ณผ ์์ ์ด๋ค.
3. Jackson, jaxb๋ผ์ด๋ธ๋ฌ๋ฆฌ
Jackson์ java๊ฐ์ฒด๋ฅผ json์ผ๋ก ๋ณํํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
jaxb๋ java๊ฐ์ฒด๋ฅผ xml์ผ๋ก ๋ณํํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
4. @RestController๋ฅผ ์ด์ฉํ ๊ฐ๋จํ ๊ฒ์ํ ๊ตฌํํ๊ธฐ
0๏ธโฃ board table
๊ณ์ ํ ๊ฒ์ํ์ ๋ํด์ ๋ค์ํ ์๋๋ฅผ ํ๊ณ ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
table์ ๋๊ฐ๋ค!
1๏ธโฃ rest.jsp ๊ฒ์ํ ํ๋ฉด ๊ตฌํํ๊ธฐ
- rest.css
โ ์ด๋ฒ์๋ css ํ์ผ์ ๋ฐ๋ก CSS ํด๋๋ฅผ ์์ฑํด์ ๊ฑฐ๊ธฐ์ cssํ์ผ์ ์์ฑํ๋ค.
์ด๋ ์กฐ์ฌํด์ผํ ๊ฒ์ webapp ํด๋ ๋ฐ์ ์์ฑํด์ผํ๊ณ , ๋ค๋ฅธ๋ฐ ์์ฑํ๋ฉด ๋์ํ์ง ์๋๋ค..!
๊ทธ๋ฆฌ๊ณ context.xml์ CSSํด๋์ ๋ํด์ ์ค์ ํด์ค์ผํ๋ค.
- rest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%!
// ํ์ด์ง ๊ด๋ จ ๋ณ์๋ค
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>REST+AJAX๊ฒ์ํ</title>
<!-- ์คํ์ผ, js ๋ผ์ด๋ธ๋ฌ๋ฆฌ -->
<!-- TODO -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<script>
</script>
<body>
<%-- ํ์ฌ ํ์ด์ง (๋ช ํ์ด์ง) ์ ๋ณด --%>
<form id="frmWrite" onsubmit="TODO">
<table>
<tr>
<th>name</th>
<td><input type="text" id="name" placeholder="์์ฑ์์ด๋ฆ" required/></td>
<td rowspan="3"><input type="submit" value="์๊ธ๋ฑ๋ก"/></td>
</tr>
<tr>
<th>subject</th>
<td><input type="text" id="subject" placeholder="๊ธ์ ๋ชฉ" required/></td>
</tr>
<tr>
<th>content</th>
<td><input type="text" id="content" placeholder="๋ด์ฉ์
๋ ฅ"/></td>
</tr>
</table>
</form>
<br>
<form name="frmDelete" id="frmDelete" onsubmit="return chkDelete()">
<table id="list">
<thead>
<th>#</th>
<th>id</th>
<th>subject</th>
<th>name</th>
<th>viewCnt</th>
<th>regDAte</th>
</thead>
<tbody>
</tbody>
</table>
<br>
<input type="submit" value="์ ํ์ญ์ "/>
<button type="button" id="prev">์ด์ ํ์ด์ง</button>
<button type="button" id="next">๋ค์ํ์ด์ง</button>
</form>
</body>
</html>
์์ง ๋์์ ๊ตฌํํ์ง ์์ ๋จ์ ํ๋ฉด์ด๋ค.
์ฌ๊ธฐ์ ์ด์ ์ ์ js ์ฝ๋๋ฅผ ์์ฑํ ์์ ์ด๋ค.
2๏ธโฃ ๊ธ ๋ชฉ๋ก ์กฐํ ๊ตฌํํ๊ธฐ
- ํ์ด์ง์ ์ํ view ์์ฑ
์ฐ์ scott์๋ ๋ทฐ ์์ฑ ๊ถํ์ด ์์๊ธฐ ๋๋ฌธ์ scott์๊ฒ ๊ถํ์ ๋ถ์ฌํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ board_view๋ฅผ ์์ฑํด์ค๋ค.
- ๋ค์์๋ ์๋ ์์ฑ๋์์๋ BoardService, BoardDAO, BoardMapper๋ฑ์ ํ์ด์งํ๊ธฐ ์ํ ๋ฉ์๋๋ค์ ์ถ๊ฐํด์ค๋ค.
โ ์ด๋ fromRow ๋ ๋ช๋ฒ์งธ row ๋ถํฐ ๋ณด์ฌ์ค ์ง ๋ํ๋ด๋ฉฐ writePages๋ ํ์ด์ง๋น ๋ช๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค์ง ๊ฒฐ์ ํ๋ค.
โ ์ด๋ ![CDATA๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ Mybatis ์ฌ์ฉ์ ์ฟผ๋ฆฌ ๋ฌธ์ ์ง๊ธ์ฒ๋ผ ๋น๊ต์ฐ์ฐ์๋ ๋ถ๋ฑํธ๋ฅผ ์ฒ๋ฆฌํด์ผํ ๋๊ฐ ์๋๋ฐ ํน์๋ฌธ์ ์ฌ์ฉ์ ์ ํ์ด ์๋ค๊ณ ํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ <![CDATA[๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ์์ ๋ค์ด๊ฐ๋ ๋ฌธ์ฅ์ ๋ฌธ์์ด๋ก ์ธ์ํ๊ฒ ๋ผ ํน์๋ฌธ์๊ฐ ๋ค์ด๊ฐ๋ ๋ฌธ์์ด๋ก ์ธ์ํด์ค๋ค!
- BoardRestController @RestController ์์ฑํ๊ธฐ
โ ์ด๋ (page-1) * writePages + 1 ํ ๋ ์ค๋ผํด์ +1 ํด์ฃผ๊ณ , mysql์ ์ํด์ค๋ ๋๋ค!
๊ทธ๋ฆฌ๊ณ AjaxBoardList๋ ๊ฒฐ๊ณผ๋ฅผ responseํ๊ธฐ ์ํ ํด๋์ค์ด๋ค.
boardSerivce๋ฅผ ํตํด selectByRow ๋ฉ์๋๋ฅผ ์ํํ ํ์๋ AjaxBoardList์ ๊ฐ์ ๋ด์์ ๋ฆฌํดํด์ค๋ค.
์ด๋ ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จ BoardVO ๊ฐ์ด ๋์ด ์๋๊ณ , ํฌ๊ธฐ๊ฐ 0 ์ด์์ด๋ผ๋ฉด status๋ ok, count์๋ ๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ฅผ ์ ์ฅํด์ฃผ๋ฉฐ, list์ selectByRow ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ด์์ค๋ค.
- response ๋ฐ์ ๋์ ์ผ๋ก table row ์์ฑ
๊ทธ๋ฆฌ๊ณ loadPage์์ ํด๋นํ๋ url๋ก ์ ๋ ฅํด ๋ฐ์ response์ status ๊ฐ success์ด๋ฉด selectByRow ์ํํ result์ ๋ด์์จ ๋ฐ์ดํฐ๋ฅผ responseํด์ ํด๋นํ๋ ๋ฐ์ดํฐ ์ ๋งํผ ํ ์ด๋ธ์ row๋ฅผ ๋์ ์ผ๋ก ์์ฑํด์ฃผ๋ ์ฝ๋์ด๋ค.
3๏ธโฃ ๊ธ ๋ชฉ๋ก ์กฐํ ๊ตฌํ ํ ํ์ด์ง ๊ตฌํํ๊ธฐ
์ด ๊ฒ์ํ์์ ํ ํ์ด์ง์๋ 5๊ฐ์ ๊ฒ์๊ธ์ด ๋ณด์ด๋๋ก ์ค์ ํ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ writePages์ ๊ฐ์ด 5์ด๋ค.
๊ทธ๋ฆฌ๊ณ url์ ์ซ์ 5 ๋์ ์ writePages๋ก ์์ ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ฌ ๋ช ํ์ด์ง์ธ์ง ์ ๋ณด๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ hidden์ผ๋ก page๊ฐ์ ์ ์ฅํด์ค ๊ฒ์ด๋ค.
ํ์ด์ง๋ฅผ ๋ก๋ฉํ์ ๋ ์ฒ์์๋ #page๊ฐ์ 1๋ก ์ง์ ํด์ฃผ๊ณ , loadPage(1)์ ํตํด 1ํ์ด์ง์ 5๊ฐ์ ๊ฒ์๊ธ์ ๊ฐ์ ธ์ค๋๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ์ผ๋ก row๋ฅผ ์์ฑํ๊ฒ์ด true์ด๋ฉด ํ์ฌ ํ์ด์ง์ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์จ page๊ฐ์ผ๋ก ์ง์ ํด์ค
๋ค์ ํ์ด์ง๋ฅผ ๋๋ฌ 2 ํ์ด์ง๋ผ๋ฉด ํ์ฌ ํ์ด์ง๊ฐ์ด 2์ด๋๋ก ์ง์ ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋์๋ ์ด์ ๋ฒํผ์ ๋๋ฅด๋ฉด ํ์ฌ ํ์ด์ง๊ฐ์ ๋ฐ์์ 1์ด๋ฉด alert๋ฅผ ํตํด ์ด์ ํ์ด์ง๊ฐ ์๋ค๊ณ ์๋ ค์ฃผ๋ฉฐ,
1์ด์์ผ๋๋ ํ์ฌํ์ด์ง์์ -1 ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ฒํผ์ ๋๋ฅด๋ฉด ํ์ฌ ํ์ด์ง๊ฐ์ ์ญ์ ๋ฐ์์จ ํ์ +1 ํด์ค๋ค.
4๏ธโฃ ์๋ก์ด ๊ธ ์ถ๊ฐํ๊ธฐ
- BoardRestController.java
์๋ก์ด ๊ธ์ ์ถ๊ฐํ๊ณ ๋ฆฌํดํ ๊ฐ์ฒด๋ก AjaxBoardQryResult ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- AjaxBoardQryResult.java
๊ธ์ ์์ฑํ ํ์ ๋ฑ๋ก ๋ฒํผ์ ๋๋ฅด๋ฉด chkSubmit()ํจ์๊ฐ ์คํ๋๋ค.
์ฑ๊ณต์ ์ผ๋ก ๊ธ์ ์ถ๊ฐํ ๋ค์์๋ ๋ค์ 1ํ์ด์ง๋ก ๋์๊ฐ๋ฉฐ ํผ์ ์์ฑ๋์ด ์๋ ๊ฐ๋ค์ ๋ฆฌ์ ํด์ค๋ค.
5๏ธโฃ ์ฌ๋ฌ๊ฐ์ ๊ธ ํ๋ฒ์ ์ญ์ ํ๊ธฐ
์๊น๋ถํฐ ์๋ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ ํํ๊ณ ์ ํ์ญ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ํ๊ฐ ํน์ ์ฌ๋ฌ๊ฐ๋ฅผ ์ญ์ ํ ์ ์๋ค.
- BoardRestController.java
์ฌ๋ฌ๊ฐ ์ ํํ๊ณ ์ ํ์ญ์ ๋ฒํผ์ ๋๋ฅด๋ฉด chkDelete() ๊ฐ ์คํ๋๋ค.
์ฐ์ ์ฒดํฌ๋ ํญ๋ชฉ์ wr_uid ๊ฐ์ ๊ฐ์ ธ์์ผ ํ๊ธฐ ๋๋ฌธ์ #frmDelete iput[name=wr_uid]๋ฅผ ํตํด ํด๋น ํ๋ ๊ฐ์ ids๋ผ๋ ๋ฐฐ์ด์ ๋ด์์ค๋ค.
๊ทธ๋ฆฌ๊ณ ids์ ๊ธธ์ด๊ฐ 0์ด๋ฉด ์ญ์ ํ ๊ธ์ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ ํํ์ง ์์๋ค๋ ๋ป์ผ๋ก ์ญ์ ํ ๊ธ์ ์ฒดํฌํด๋ฌ๋ผ๋ ๊ฒฝ๊ณ ๋ฌธ์ ๋์์ค๋ค.
์ฒดํฌ ํ์๋ ํ๋ฒ ํ์ธํ๋ ์ฐฝ์ ๋์ ์๋์๋ฅผ ๋๋ฅด๋ฉด ๋์ํ์ง ์๊ณ , ๋ค ๋ฒํผ์ ๋๋ฅด๋ฉด ์ญ์ ๋ฅผ ์งํํ๋ค.
์ญ์ ํ์๋ ๋ค์ ์๋์ผ๋ก 1ํ์ด์ง๋ก ๋ก๋ฉ๋๋ค.
"id" : JSON.stringify(ids) -> [ 36, 37]
"id" : JSON.stringify(ids).slice(1).slice(0,-1) -> 36, 37