프로그래밍/Java

[Spring] 스프링 삽질일지 3일차 - 게시판 작성 기능 구현(1)

Be개발자 2021. 5. 2. 15:05

지난번엔 mariaDB와 스프링을 연동하였다. 이제 본격적으로 게시판에 필요한 기능들을 구현해보고자 한다.

오늘 목표는 게시판 작성 기능을 구현해보고자 한다. 전부 구현하는 건 아니고, 필요한 기본 뼈대를 만들어보자...

 

1. mariaDB에 데이터 추가 확인

2. Mapper에 쿼리 추가

3. JSP 화면 만들기

 


1. mariaDB에 데이터 넣어주기

 

우선 테이블의 스키마를 조금 변경하였다. 기존 컬럼에 있던 상품명 TITLE을 삭제하고, 작성자인 CREATE_ID를 WRITER로 수정하였다.

 

또한 쿼리문을 조금 수정하였다.

CREATE TABLE board_table (
	`ID` INT(11) NOT NULL AUTO_INCREMENT,
	`WRITER` VARCHAR(30) NOT NULL,
	`CLICK_CNT` INT DEFAULT 0,
	`CREATE_DATE` TIMESTAMP DEFAULT NOW(),
	`STATE` VARCHAR(10) DEFAULT '판매중',
	`CONTENTS` VARCHAR(4000) NOT NULL,
	`COST` INT(11) NOT NULL,
	PRIMARY KEY (`ID`)
)

 

쿼리문을 수정하였으니 BoardVO.java도 수정해줘야 한다!

 

이제 데이터를 추가해보자!

INSERT INTO board_table(WRITER, CONTENTS, COST)
	VALUES('홍길동', '테스트 내용', '10000');
	
COMMIT;

SELECT * FROM board_table;

 

board_table에 정상적으로 데이터가 추가된 것을 확인할 수 있다. ㅎㅎ

오류가 나지 않고 정상적으로 작동이 되는 것을 확인했으면 해당 쿼리를 xml 파일에 옮겨 사용하면 된다.

 

 

2. 매퍼에 쿼리 추가

 

src/main/resources/mappers에 boardMapper.xml에 들어가서 코드를 작성한다.

 

<!-- 게시판 글 작성 -->
    <insert id="insert">
	INSERT INTO board_table( WRITER,
							 CONTENTS,
							 COST)
					 VALUES( #{writer},
					 		 #{contents},
					 		 #{cost})

 

 

이제 src/main/javacom.board.dao, com.board.service 패키지를 생성한다.

 

 

src/main/java 하에 있는 패키지들의 역할을 정리해보면 다음과 같다.

 

com.board.controller - 웹에서 처리해야할 데이터를 받고, 이 데이터를 담당할 service를 선택하여 호출. 그리고 처리한 데이터를 다음 페이지에서 볼 수 있게 세팅하여 이동할 페이지를 리턴.

com.board.service - 데이터를 dao를 통해 넘겨주거나 받으면서 비즈니스 로직을 수행

com.board.dao - 데이터베이스를 통해 데이터를 조회, 수정, 삭제하는 역할

com.board.domain - 데이터베이스에 있는 테이블 컬럼 값을 자바에서 객체로 다루기 위해 사용.

 

 

com.board.dao에 BoardDAO.javaBoardDAOImpl.java을 만들어 다음과 같이 작성해준다.

BoardDAO.java에는 write 함수에 대해 정의한 BoardDAO 인터페이스를 생성한다.

그 후, BoardDAOImpl.java에선 BoardDAO 인터페이스를 구현해준다.

 

package com.board.dao;

import com.board.domain.BoardVO;

public interface BoardDAO {
	
	// Write a post
	public void write(BoardVO boardVO) throws Exception;
}

package com.board.dao;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import com.board.domain.BoardVO;

@Repository
public class BoardDAOImpl implements BoardDAO {
	
	@Inject
	private SqlSession sqlSession;
	
	//Write a post
	@Override
	public void write(BoardVO boardVO) throws Exception {
		sqlSession.insert("boardMapper.insert", boardVO);
	}
}

 

 

com.board.dao 패키지 부분을 다 구현했으니 이제 com.board.service 패키지 부분으로 간다.

com.board.service에 BoardService.javaBoardServiceImpl.java를 생성한 뒤 아래와 같이 코드를 작성해준다.

 

 

package com.board.service;

import com.board.domain.BoardVO;

public interface BoardService {
	//Write a post
	public void write(BoardVO boardVO) throws Exception;
}

 

package com.board.service;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.board.dao.BoardDAO;
import com.board.domain.BoardVO;

@Service
public class BoardServiceImpl implements BoardService {
	
	@Inject
	private BoardDAO dao;
	
	// write a post
	@Override
	public void write(BoardVO boardVO) throws Exception {
		dao.write(boardVO);
	}
}

 

이제 kr.co.controller에 BoardController.java 파일을 만들고 코드를 작성해준다.

package com.board.controller;

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.board.service.BoardService;
import com.board.domain.BoardVO;

@Controller
@RequestMapping("/board/*")
public class BoardController {
	
	private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
	
	@Inject
	BoardService service;
	
	// Bulletin board writing screen
		@RequestMapping(value = "/board/writeView", method = RequestMethod.GET)
		public void writeView() throws Exception{
			logger.info("writeView");
			
		}
		// Write a bulletin board
		@RequestMapping(value = "/board/write", method = RequestMethod.POST)
		public String write(BoardVO boardVO) throws Exception{
			logger.info("write");
			
			service.write(boardVO);
			
			return "redirect:/";
		}

}

 

이를 스프링이 스캔할 수 있게 src/main/webapp/WEB-INF/spring/root-context.xml 파일에 추가해준다.

 

 

	<!-- scan -->
    <context:component-scan base-package="com.board.service"></context:component-scan>
    <context:component-scan base-package="com.board.dao"></context:component-scan>
    <context:component-scan base-package="com.board.domain"></context:component-scan>

 

그리고 src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml 에서 

 

base-package가 com.board.controller 인지 확인해준다. 아닐 경우 controller로 수정해줘야 한다.

 

3. writeView.jsp 작성

 

그 후, src/main/webapp/WEB-INF/views에 board 폴더를 만들고 게시글 작성화면 부분에 해당하는 writeView.jsp 파일을 생성해준다. JSP 파일 생성은 New > Other > Web > JSP File 에서 생성할 수 있다.

 

 

 

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시물 작성</title>
</head>
<body>
<h1>
	writeView
</h1>
</body>
</html>


그러면 게시물 작성 페이지 부분이 완성된다. 세부 기능은 다음에 구현하고, 우선 제대로 접속이 되는지 실행해보면 된다. 그런데 실행해보기 전에 확인해봐야 할 것이 있다. 

 

프로젝트명 우클릭 > Properties > Web Project Settings

를 보면 내 Server의 루트 주소가 나온다. 일반적으로 프로젝트를 생성할 때 처음에 study라는 프로젝트를 생성하면 루트 주소가 study로 설정되버리기 때문에 이를 루트로 바꿔줘야 한다.

 

 

그 후, 프로젝트를 우클릭 > Run > Run on Server를 실행한다.

처음에는 Hello World와 시간이 뜨는 Home 화면이 뜰 것이다. URL에 http://localhost:8080/board/writeView 를 치고 엔터를 치면 다음과 같이 writeView.jsp에 작성한 내용이 출력된다.

 

 

제대로 접속이 되는지 확인만 해보자 만든 것이므로 다음에 writeView.jsp 파일을 제대로 게시판 작성 화면으로 마저 구현해야겠다...

 


url.kr/2bfz3k (heidiSQL 사용법)

url.kr/ksn3zl(server의 root 변경)

melonpeach.tistory.com/12?category=806570(게시판 작성 기능 구현)