[Spring] 게시판 만들기 정리

.·2022년 4월 22일
2

개발

목록 보기
1/5

DB 생성

DROP DATABASE IF EXISTS ssafy_board;
CREATE DATABASE ssafy_board DEFAULT CHARACTER SET utf8mb4;

USE ssafy_board;

CREATE TABLE board (
	id INT AUTO_INCREMENT,
    writer VARCHAR(30) NOT NULL,
    title VARCHAR(200) NOT NULL,
    content TEXT,
    view_cnt INT DEFAULT 0,
    reg_date TIMESTAMP DEFAULT now(),
    file_name VARCHAR(50),
    file_uri VARCHAR(500),
    PRIMARY KEY (id)
);

CREATE TABLE b_user (
    seq INT AUTO_INCREMENT,
    id VARCHAR(30) NOT NULL UNIQUE,
    pw VARCHAR(64) NOT NULL,
    username VARCHAR(30) NOT NULL,
    PRIMARY KEY(seq)
);

SELECT * FROM board;

SELECT * FROM b_user;

프로젝트 생성

SpringMVC_legacy import

프로젝트명 변경
context root 변경
pom.xml 에서 artifactId, name 변경

dependency 추가

  • Spring JDBC (version = ${org.springframework-version} 로 변경)
  • MyBatis
  • MySQL Connector/J
  • MyBatis Spring
  • Apache Commons FileUpload

web.xml

web.xml -> filter 추가

<filter>
		<filter-name>encoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

log4j.xml

src/main/resources/log4j.xml 에서
Application Loggers -> logger name="com.ssafy.board"

dto, dao, mapper

src/main/java 에서 com.ssafy.mvc 패키지 삭제하고
com.ssafy.board.model.dto -> User.java 생성
com.ssafy.board.model.dao -> UserDao.java 인터페이스로 생성

src/main/resources 에
mapper 폴더 -> userMapper.xml 생성 및 아래 코드 복붙

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

mapper namespace="com.ssafy.board.model.dao.UserDao"

com.ssafy.board.model.dto -> Board.java 생성
com.ssafy.board.model.dao -> BoardDao.java 인터페이스로 생성

src/main/resources 에
mapper 폴더 -> boardMapper.xml 생성 및 위 코드 복붙

root-context.xml

root-context -> Namespaces -> tx 체크하고 아래 코드 복붙

<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
		<property name="url" value="jdbc:mysql://localhost:3306/ssafy_board?serverTimezone=UTC"></property>
		<property name="username" value="ssafy"></property>
		<property name="password" value="ssafy"></property>
	</bean>

	<!-- SqlSessionFactory를 빈으로 등록하자. -->
	<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
		<property name="dataSource" ref="dataSource"></property>
		<property name="typeAliasesPackage" value="com.ssafy.board.model.dto"></property>
		<property name="mapperLocations" value="classpath:/mapper/*Mapper.xml"></property>
	</bean>

	<bean class="org.mybatis.spring.mapper.MapperFactoryBean" id="userDao">
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
		<property name="mapperInterface" value="com.ssafy.board.model.dao.UserDao"></property>
	</bean>
	<bean class="org.mybatis.spring.mapper.MapperFactoryBean" id="boardDao">
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
		<property name="mapperInterface" value="com.ssafy.board.model.dao.BoardDao"></property>
	</bean>

	<!-- 1. transactionManager를 dataSource를 먹여서 생성해서 빈으로 등록. -->
	<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
		id="transactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

	<tx:annotation-driven transaction-manager="transactionManager" />

root-context 를 src/main/resources 에 복사
(Test 클래스를 위한 java용 임시 설정파일)

여기까지 하면 자바 어플리케이션으로는 동작함

service

com.ssafy.board.model.service -> UserService.java 인터페이스로 생성
com.ssafy.board.model.service -> UserServiceImpl.java 생성하고
@Service("userService")
@Autowired private Dao 만들기

com.ssafy.board.model.service -> BoardService.java 인터페이스로 생성
com.ssafy.board.model.service -> BoardServiceImpl.java 생성하고
@Service("boardService")
@Autowired private Dao 만들기

root-context -> Namespace 에 context 체크하고

<context:component-scan base-package="com.ssafy.board.model.service"></context:component-scan>

추가

exception

com.ssafy.board.exception 에
UserNotFoundException.java
PWIncorrectException.java 만들기

util

com.ssafy.board.util -> SHA256.java (해쉬값 반환해주는 클래스)

이제 비밀번호 대신 해쉬값을 저장하고 로그인할때도 해쉬값으로 비교

controller

com.ssafy.board.controller -> HomeController.java
com.ssafy.board.controller -> BoardController.java
com.ssafy.board.controller -> UserController.java
com.ssafy.board.controller
-> FileDownLoadView.java, LoginCheckInterceptor.java, ExceptionControllerAdvice.java

servlet-context -> context:component-scan base-package ="com.ssafy.board.controller"

views

views -> home.jsp
views -> common -> header.jsp
views -> board -> *
views -> user -> *
views -> error -> *

servlet-context.xml

servlet-context -> multipartResolver, fileDownLoadView, BeanNameViewResolver

servlet-context -> LoginCheckInterceptor

프로젝트 구조

profile
안녕하세요

1개의 댓글

comment-user-thumbnail
2022년 4월 26일

우와~ 깔끔하게 잘 정리되어 있네요! 잘 참고할게요ㅎㅎ

답글 달기