[SpringBoot] 게시판 구현하기 4 (게시글 등록 기능 생성하기)

2020. 12. 21. 21:37·FRAMEWORK/Spring
목차
  1. 들어가기 전에
  2. 게시글 등록 화면 만들기
  3. 컨트롤러 영역
  4. 서비스 및 매퍼 영역
  5. SQL 작성하기
  6. 실행 결과 확인하기
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
  1. 들어가기 전에
  2. 게시글 등록 화면 만들기
  3. 컨트롤러 영역
  4. 서비스 및 매퍼 영역
  5. SQL 작성하기
  6. 실행 결과 확인하기
'FRAMEWORK/Spring' 카테고리의 다른 글
  • [SpringBoot] 게시판 구현하기 6 (게시글 수정 및 삭제 기능 만들기)
  • [SpringBoot] 게시판 구현하기 5 (게시글 상세 화면 만들기)
  • [SpringBoot] 게시판 구현하기 3 (게시판 목록 만들기)
  • [SpringBoot] 게시판 구현하기 2 (게시판을 만들기 위한 기본 설정)
EARTH_ROOPRETELCHAM
EARTH_ROOPRETELCHAM
반응형
EARTH_ROOPRETELCHAM
ROOPRETELCHAM
EARTH_ROOPRETELCHAM
전체
오늘
어제
  • 분류 전체보기 N
    • FRAMEWORK
      • Spring
    • PROGRAMMING LANGUAGE
      • KOTLIN
      • JAVA
      • Design Pattern
    • DB
      • PostgreSQL
      • MySQL
      • Oracle
    • SYSTEM & INFRA N
      • KAFKA N
      • NGINX
      • TOMCAT
      • ANSIBLE
      • DOCKER
      • LINUX
      • AWS
      • OPEN API
    • AI N
      • AI Tools
      • Generative AI
    • IDE
      • eclipse
      • IntelliJ
    • DEVELOPMENT TOOLS
      • Git
      • Build Tool
    • TECH BOOK
    • SECURITY
      • CHROME
    • ALGORITHM
      • C++
      • Greedy
      • DFS(Depth First Search
      • BFS(Breath First Search
      • Recursion
    • MAC
      • DEVELOP
    • WINDOWS
      • TIP
    • PRODUCTS
      • IT
    • IT Knowledge

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

effective kotlin
mac
게시판프로젝트
coroutine
PostgreSQL
IntelliJ
게시판
springboot
java
스프링부트
elastic beanstalk
코틀린
MYSQL
코틀린 완벽 가이드
자바
Oracle
이펙티브 코틀린
Spring
git
kotlin

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.3
EARTH_ROOPRETELCHAM
[SpringBoot] 게시판 구현하기 4 (게시글 등록 기능 생성하기)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.