이 포스팅의 샘플 게시판 개발 환경은 MAC OS, STS, OpenJDK11 입니다.
블로그를 만들기 위해
이전 포스팅에서 기본적인 프로젝트를 생성하고 언어를 셋팅 하였습니다.
이번 포스팅에서는 블로그에 글을 저장하고, 저장된 글을 불러 올 수 있도록
데이터베이스와 테이블을 만들고, 접속 테스트와 기본적인 CRUD 테스트까지 진행할 예정입니다.
이번 DB셋팅 및 접속 테스트는 아래와 같은 순서로 진행 될 예정입니다.
(이번 포스팅에서 다뤄야 할 내용이 생각보다 많아 두 부분으로 나누었습니다.)
스프링 환경 설정(web.xml 수정)
데이터베이스 만들기
데이터베이스 접속 관련 dependency 추가(pom.xml 수정)
데이터베이스 설정 파일 추가(dataSource-context.xml)
데이터베이스 접속 테스트(junit)
테이블 만들기(tbl_board)
VO 만들기(BoardVO)
SQL 쿼리 만들기 (boardMapper)
DAO 만들기 (BoardDAO, BoardDAOImpl)
DAO 테스트(junit)
블로그 만들기 - 2. DB 셋팅 및 접속 테스트 Part.1
이 포스팅에서 사용한 데이터베이스는 MySQL (버전 : 8.0.12) 입니다.
스프링 환경 설정 하기
우선 본격적인 작업에 들어가기 전에 기본적으로 셋팅되어 있는 스프링의 설정을 변경해 보려고 합니다.
웹 시스템은 가장 먼저 web.xml 을 참조하여 스프링 설정과 관련된 파일들의 위치를 파악하고 그 파일들을 참조 합니다.
현재 web.xml 을 보면 두 개의 설정 파일(xml) 이 있습니다.
root-context.xml 과 servlet-context.xml 입니다.
두 파일의 기본 위치는 아래와 같습니다.
하지만 실무에서는 설정파일을 보통 하나의 디렉토리 안에 모아 관리를 합니다.
규모가 큰 프로젝트 에서는 설정 파일이 여기 저기 다른 디렉토리 안에 있으면 관리가 힘들기 때문입니다.
해당 파일은 스프링 관련 설정 파일이므로
아래 그림과 같이 [ src/main/resources/ ] 아래 관리를 할 예정입니다.
[ src/main/resources/ ] 아래에 spring 라는 디렉토리를 생성합니다.
아래 그램과 같이 spring 디렉토리 안에 root-context.xml을 옮겨 놓습니다.
그리고 servlet-context.xml 은 [ src/main/resources ] 에 아래에 옮겨놓습니다.
파일의 위치를 옮겼으므로 web.xml 에 있는 두 파일의 위치 수정해야 합니다.
아래와 붉은 표시 처럼 web.xml 을 수정합니다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/*-context.xml</param-value>
</context-param>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
root-context.xml 같은 경우는 이름을 *-context.xml로 수정하였습니다.
추후에 추가할 설정 파일을 000-context.xml 등과 같이 만들어 저장하면
스프링에서 자동으로 인식할 수 있습니다.
이후에 추가될 데이터베이스 관련 설정 파일도 dataSource-context.xml 로 만들어 저장할 예정입니다.
데이터베이스 및 사용자 추가
이제 블로그를의 데이터를 저장할 데이터베이스와 사용자를 추가 할 차례 입니다.
터미널을 열어 'mysql -u root -p' 명령으로 mysql에 접속합니다.
아래와 같이 명령어를 실행시켜 데이터베이스를 생성합니다.
mysql> CREATE DATABASE 'MESS';
그리고 아래의 명령을 입력하여 사용자를 추가하고 권한 설정을 합니다.
mysql> CREATE USER 'mess'@'%';
mysql> GRAND ALL PRIVILEGES ON MESS.* TO 'mess'@'%' IDENTIFIED BY 'mess';
mysql> FLUSH PRIVILEGES;
첫 번째 명령은 mess 라는 사용자를 추가 하고
두 번째 명령은 MESS 데이터베이스의 모든 테이블(MESS.*) 에 대해 mess 라는 비밀번호 (IDENFIFIED BY 'mess')로 접근할 수
있게 설정합니다.
세 번째 명령은 첫번째 두번째에서 설정한 내용을 반영하는 명령어 입니다.
데이터베이스와 사용자를 만들었다면
이제 스프링에 데이터베이스 접속과 Mybatis 관련 셋팅을 할 차례 입니다.
Dependency 추가
pom.xml 에 아래의 문구를 추가합니다.
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${org.springframework-version}</version> <scope>test</scope> </dependency>
테스트를 위해 junit의 버전을 4.12로 수정합니다.
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
그리고 스프링 프로젝트 생성시 기본적으로 설정되어 있는 자바나 스프링의 버전도 수정을 합니다.
아래 붉은색으로 표시한 부분을 확인하여 변경합니다.
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.1.4.RELEASE</org.springframework-version>
<org.aspectj-version>1.9.2</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
JAVA JDK를 제외한 위 버전들은 포스팅 작성 시점(2019.01.17)에서 가장 최신 버전 입니다.
각 라이브러리에 대한 최신 버전에 대한 정보는 https://mvnrepository.com/ 에서 확인 할 수 있습니다.
JDK 버전을 변경하였다면
Maven - update project를 한 번 해줘야 합니다.
기본적으로 생성된 프로젝트의 JDK 버전이 1.6 이기 때문에 maven 업데이트를 통해 1.8 변경된 내용을 적용해야 합니다.
데이터베이스 설정 파일 추가
dataSource-context.xml파일을 /src/main/resource > spring 에 만들고 아래의 내용을 입력합니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="
http://mybatis.org/schema/mybatis-spring
http://mybatis.org/schema/mybatis-spring.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--dataSource 객체 설정 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mess?useSSL=false&serverTimezone=Asia/Seoul" />
<property name="username" value="mess"></property>
<property name="password" value="mess"></property>
</bean>
<!-- SqlSessionFactory 객체 설정 -->
<bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml" />
</bean>
<!-- SqlSession Template 설정 -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="SqlSessionFactory" />
</bean>
</beans>
위 첫번째 Bean은 데이터베이스의 접속 정보를 설정합니다.
접속할 데이터베이스의 이름은 mess 이고, 데이터베이스에 접속 할 사용자의 이름과 아이디도 mess 로 동일 합니다.
두번째와 세번째 bean - SqlSessionFactory, sqlSession은 mybatis와 관련이 있습니다.
SqlSessionFactory 안에 있는 mapperLocations 는 데이터베이스에서 실행 할 SQL 쿼리문이 있는 위치 입니다.
'classpath:' 가 /src/main/resources/ 입니다.
따라서 위와 같이 되어 있으면 /src/main/resources/main 아래 모든 하위 디렉토리를 포함하여
Mapper.xml로 끝나는 모든 파일을 참조 한다는 뜻입니다.
우선 여기에 게시판 제작을 위한 'boardMapper.xml'을 만들어 두도록 합니다.
boardMapper.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.freehoon.web.board.boardMapper">
</mapper>
데이터베이스 접속 테스트
데이터베이스 접속 테스트를 해볼 차례 입니다.
(테스트 없이 바로 프로그램을 개발 해도 상관은 없겠지만 중간에 에러가 발생하면 찾기가 힘듭니다.
따라서 가능하면 각 단계별로 테스트를 하는 것이 좋습니다.)
아래 그림과 같이 /src/test/java 아래에 com.freehoon.web 이라는 패키지를 생성합니다.
그리고 아래의 파일을 패키지 안에 생성합니다.
MysqlConnectionTest.java
package com.freehoon.web;
import java.sql.Connection;
import javax.inject.Inject;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/dataSource-context.xml" })
public class MysqlConnectionTest {
private static final Logger logger = LoggerFactory.getLogger(MysqlConnectionTest.class);
@Inject
private DataSource ds;
@Test
public void testConnection() {
try (Connection con = ds.getConnection()){
logger.info("\n MySQL 연결 : " + con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
테스트를 진행하기 위해
작성한 테스트 소스 위에서 마우스 우클릭을 하고 [Run As > Junit Test] 를 선택합니다.
결과는 콘솔창을 통해서 확인 할 수 있습니다.
아래와 같은 화면이 나왔다면 정상적으로 접속을 했다는 내용입니다.
데이터베이스 접속이 정상적으로 되면
Mybatis 관련 설정도 테스트 해봅니다.
아래의 소스를 조금전 MysqlConnectionTest.java와 같은 위치에 생성을 합니다.
MybatisTest.java
package com.freehoon.web;
import javax.annotation.Resource;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/dataSource-context.xml" })
public class MybatisTest {
private static final Logger logger = LoggerFactory.getLogger(MybatisTest.class);
@Inject
private SqlSessionFactory sessionFactory;
@Test
public void testSessionFactory() {
logger.info("\n Session Factory : " + sessionFactory);
}
@Test
public void testSqlSession() {
try (SqlSession session = sessionFactory.openSession()){
logger.info("\n Sql Session : " + session);
} catch (Exception e) {
e.printStackTrace();
}
}
}
동일한 방법으로 junit 테스트를 합니다.
아래와 같은 메시지가 나왔다면 정상적으로 접속이 되는 것입니다.
블로그 만들기 포스팅 리스트
- Spring 블로그 만들기 - 1. 프로젝트 생성 및 character encoding setting
- Spring 블로그 만들기 - 2. DB 셋팅 및 접속 테스트 Part.1
- Spring 블로그 만들기 - 2. DB 셋팅 및 접속 테스트 Part.2
- Spring 블로그 만들기 - 3. 게시판 리스트 화면 만들기
- Spring 블로그 만들기 - 4. 글쓰기 화면 만들기
- Spring 블로그 만들기 - 5. 상세조회 화면 만들기
- Spring 블로그 만들기 - 6. 수정 및 삭제
- Spring 블로그 만들기 - 7. 예외 처리
- Spring 블로그 만들기 - 8. 트랜젝션 처리
- Spring 블로그 만들기 - 9. 페이징(pagination)
- Spring 블로그 만들기 - 10. 게시물 검색(search)
- Spring 블로그 만들기 - 11. properties 사용하기
- Spring 블로그 만들기 - 12. 댓글 리스트
- Spring 블로그 만들기 - 13. 댓글 쓰기/수정/삭제
- Spring 블로그 만들기 - 14. 위지윅 에디터 사용하기(CKEditor5)
- Spring 블로그 만들기 - 15. 상단 메뉴바 만들기(부트스트랩)
- Spring 블로그 만들기 - 16. 게시판 메뉴 관리
- Spring 블로그 만들기 - 17. 로그인 화면 만들기 및 레이아웃 나누기
- Spring 블로그 만들기 - 18. 회원가입 및 관리
※ 포스팅에 오타나 잘못된 부분, 추가적으로 더 알고 싶은 부분이 있으면 댓글 주세요~
'개발 > Spring 블로그 만들기' 카테고리의 다른 글
Spring 블로그 만들기 - 5.상세조회 화면 만들기 (4) | 2019.02.18 |
---|---|
Spring 블로그 만들기 - 4.글쓰기 화면 만들기 (11) | 2019.01.21 |
Spring 블로그 만들기 - 3. 게시판 리스트 화면 만들기 (6) | 2019.01.18 |
Spring 블로그 만들기 - 2. DB 셋팅 및 접속 테스트 Part.2 (31) | 2019.01.18 |
Spring 블로그 만들기 - 1. 프로젝트 생성 및 character encoding setting (4) | 2019.01.03 |