728x90
반응형
들어가기 전에
하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다.
이번 시간에는 앞서 게시글 목록 만들 때, 직접 쿼리로 날렸던 게시글 등록 기능을 GUI로 표현할 수 있도록 구성해보도록 하겠습니다.
게시글 등록 화면 만들기
게시글 등록은 사용자가 입력한 내용이 서버에 저장되는 순서로 진행되므로, 게시글 목록을 만들 때와는 다르게 화면 먼저 만들어보도록 하겠습니다. templates/board 폴더 내에 boardWrite.html 파일을 생성하고 다음과 같이 작성합니다.
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>board</title>
<link rel="stylesheet" th:href="@{/css/style.css}" href="../../css/style.css"></link>
</head>
<body>
<div class="container">
<h2>게시판 등록</h2>
<form id="frm" name="frm" method="post" action="/board/insertBoard.do">
<table class="board_detail">
<tr>
<td>제목</td>
<td><input type="text" id="title" name="title"></td>
</tr>
<tr>
<td colspan="2">
<textarea id="contents" name="contents"></textarea>
</td>
</tr>
</table>
<input type="submit" id="submit" value="저장" class="btn">
</form>
</div>
</body>
</html>
<form id="frm" name="frm" method="post" action="/board/insertBoard.do">
: 사용자로부터 입력된 값을 서버로 전달하기 위해- 을 이용합니다. action 속성에는 요청을 수행할 서버의 주소를 입력합니다. 이 단계에서는 아직 /board/insertBoard.do라는 주소가 없지만, 이후 controller에 해당 주소 역시 넣어주어야 합니다.
<td><input type="text" id="title" name="title"></td>
: 사용자로부터 게시글의 제목을 입력 받습니다. 입력된 값은 각 태그의 name을 키로 사용하여 서버에 전송됩니다.<input type="submit" id="submit" value="저장" class="btn">
:<input>
의 타입을 submit으로 하여 폼에 있는 데이터를 지정된 주소로 전달합니다.
컨트롤러 영역
컨트롤러에는 두 개의 메소드가 추가됩니다. 한 가지는 게시글 등록 화면을 호출하는 것이고, 나머지 하나는 게시글을 등록하는 기능을 합니다. BoardController 클래스에 하기 내용을 추가합니다.
...
@RequestMapping("/board/openBoardWrite.do")
public String openBoardWrite() throws Exception {
return "/board/boardWrite";
}
@RequestMapping("/board/insertBoard.do")
public String insertBoard(BoardDto board) throws Exception {
boardService.insertBoard(board);
return "redirect:/board/openBoardList.do";
}
...
@RequestMapping("/board/openBoardWrite.do")
: 게시글 작성 화면을 호출하는 주소입니다.@RequestMapping("/board/insertBoard.do")
: 작성된 게시글을 등록하는 주소입니다.boardWrite.html
내- 의 action 속성에 지정된
insertBoard.do
가 여기 들어갑니다. boardService.insertBoard(board)
: 사용자가 작성한 게시글을 저장하는 service 영역의 메소드를 호출합니다.return "redirect:/board/openBoardList.do
": 앞에서 특정 뷰를 호출하기 위해return "/board/boardList"
와 같이 뷰 이름을 지정했습니다. 여기서는 이와 다르게 게시글 목록을 조회하는/board/openBoardList.do
라는 주소를 호출합니다. 일반적으로 게시글을 작성하면, 작성된 게시글 상세 화면이나 게시글 목록으로 이동합니다. 여기서는 게시글 목록 화면의 주소를 호출해서 게시글이 등록된 후 게시글 목록 화면으로 이동하도록 하였습니다.
서비스 및 매퍼 영역
BoardService 인터페이스에 다음 내용을 추가합니다.
// BoardService.java
...
void insertBoard(BoardDto board) throws Exception;
...
BoardServiceImpl 클래스에 하기 메소드를 추가합니다.
// BoardServiceImpl.java
...
@Override
public void insertBoard(BoardDto board) throws Exception {
boardMapper.insertBoard(board);
}
...
BoardMapper 인터페이스에 다음 코드를 추가합니다.
// BoardMapper.java
...
void insertBoard(BoardDto board) throws Exception;
...
SQL 작성하기
sql-board.xml의 안에 하기 쿼리를 추가합니다.
// sql-board.xml
...
<insert id="insertBoard" parameterType="board.board.dto.BoardDto">
<![CDATA[
INSERT INTO t_board
(
title,
contents,
created_datetime,
creator_id
)
VALUE
(
#{title},
#{contents},
NOW(),
'admin'
)
]]>
</insert>
...
#{title}
,#{contents}
: 화면에서 전달된 데이터입니다. myBatis에서는 #{변수명}의 형식으로 전달된 데이터를 이용합니다. 이 쿼리의 파라미터는 앞에서 만든 BoardDto 클래스입니다. #{변수}를 사용하면 DTO의 get 변수 메소드로 해당하는 변수값을 가져옵니다.- 'admin': 일반적으로 작성자의 아이디는 사용자의 아이디이기 때문에 변수로 처리해야 합니다. 하지만, 아직 로그인 기능이 없기 때문에 임시로 admin을 작성자 아이디로 사용합니다.
실행 결과 확인하기
localhost:8080/board/openBoardWrite.do에 접속하여 게시글 등록을 해볼 수 있습니다.
728x90
반응형
'FRAMEWORK > Spring' 카테고리의 다른 글
[SpringBoot] 게시판 구현하기 6 (게시글 수정 및 삭제 기능 만들기) (1) | 2020.12.22 |
---|---|
[SpringBoot] 게시판 구현하기 5 (게시글 상세 화면 만들기) (0) | 2020.12.21 |
[SpringBoot] 게시판 구현하기 3 (게시판 목록 만들기) (2) | 2020.12.21 |
[SpringBoot] 게시판 구현하기 2 (게시판을 만들기 위한 기본 설정) (1) | 2020.12.13 |
[SpringBoot] 게시판 구현하기 1 (SpringBoot 프로젝트 생성 및 Database 연동) (0) | 2020.12.13 |