2. 게시판 CRUD
각 기능별 URI
각 CRUD 기능에 대한 URI를 표로 정리해보면 다음과 같다.
작업 | URI | HTTP 메서드 | 설명 |
읽기 | /board/read/?bno=게시글번호 | GET | 지정된 번호의 게시물 보여줌 |
삭제 | /board/remove | POST | 게시물 삭제 |
쓰기 | /board/write | GET | 게시물 작성을 위한 화면을 보여줌 |
/board/write | POST | 작성한 게시물 저장 | |
수정 | /board/modify?bno=게시글번호 | GET | 게시물을 수정하기 위해 읽어옴 |
/board/modify | POST | 수정된 게시물 저장 |
※ URL vs URI ?
URL은 리소스의 경로, 정확히는 전체(full) 경로를 의미하고, URN은 리소스의 유일한 이름을 의미한다. 이때 URL과 URN 두 개를 통칭하는 것이 바로 URI이다. URI는 경로의 일부를 포함한다.
게시물 읽기 과정
1. 게시판 목록 페이지(boardList.jsp)에서 게시물 제목을 클릭하여 읽기 요청
2. 읽기 요청이 GET 방식(/board/read?bno=게시물번호)으로 BoardController로 보내짐
3. 이를 BoardController가 받아 boardService.read(bno)를 호출
4. DB에서 boardDto에 담아 그 내용을 board.jsp 에 보내주어 해당 게시물에 대한 정보(제목, 내용)을 보여줌
게시물 쓰기 과정
ㆍGetMapping
1. 게시판 목록 페이지(boardList.jsp)에서 '글쓰기' 버튼을 클릭하여 GET 방식(/board/wirte)으로 요청
2. BoardController에서 GetMapping 된 write()를 호출하여 게시물 페이지(board.jsp)를 보여줌
3. 게시물 페이지에서 페이지를 분리하지 않고 게시글 읽기와 글쓰기를 아래 예제와 코드와 같이 mode == readonly 해제 유무에 따라 구분
<input name="title" type="text" value="<c:out value='${boardDto.title}'/>" placeholder= " 제목을 입력해 주세요." ${mode=="new" ? "" : "readonly='readonly'"}><br>
<textarea name="content" rows="20" placeholder=" 내용을 입력해 주세요." ${mode=="new" ? "" : "readonly='readonly'"}><c:out value="${boardDto.content}"/></textarea><br>
ㆍPostMapping
1. <form> 태그에 담긴 게시물 제목과 게시물 내용을 POST 방식으로 전송
2. BoardController에서 write()를 통해 boardService.write(boardDto) 호출하여 DB에 저장
3. 리다이렉트(redirect:/board/list)를 통해 list()를 호출하고 boardService.getPage(map) 를 호출하여 게시물 목록을 가져와 게시판 목록 페이지를 보여줌
게시물 수정 과정
1. 게시물 페이지에서 '수정' 버튼을 클릭하면 readonly 해제 및 title을 '게시글 읽기'에서 '게시글 수정'으로 변경
2. POST 방식(/board/modify)으로 BoardController로 전송하여 boardService.modify(boardDto)를 호출하여 DB에 저장
3. 리다이렉트(redirect:/board/list)를 통해 list()를 호출하고 boardService.getPage(map) 를 호출하여 게시물 목록을 가져와 게시판 목록 페이지를 보여줌
게시물 삭제 과정
1. 게시물 페이지에서 '삭제' 버튼을 클릭하면 POST 방식(/board/remove)으로 게시물번호(bno)와 함께 BoardController로 전송
2. BoardController는 boardService.remove(bno, writer) 를 호출(작성자 즉 writer 정보도 같이 보내야 아무나 지울 수 없다.)
3. 리다이렉트(redirect:/board/list)를 통해 list()를 호출하고 boardService.getPage(map) 를 호출하여 게시물 목록을 가져와 게시판 목록 페이지를 보여줌
3번의 과정에서 머물고 있었던 페이지로 다시 이동시키기 위해서는 redirect:/board/list?page= &pageSize= 와 같이 쿼리스트링을 통해 page와 pageSize 값을 넘겨주어야 한다는 것에 주의한다.