본문 바로가기
개발/Spring 블로그 만들기

Spring 블로그 만들기 - 2. DB 셋팅 및 접속 테스트 Part.1

by 똘똘이박사 2019. 1. 15.



이 포스팅의 샘플 게시판 개발 환경은 MAC OS, STS, OpenJDK11 입니다.



블로그를 만들기 위해 

이전 포스팅에서 기본적인 프로젝트를 생성하고 언어를 셋팅 하였습니다.


이번 포스팅에서는 블로그에 글을 저장하고, 저장된 글을 불러 올 수 있도록

데이터베이스와 테이블을 만들고, 접속 테스트와 기본적인 CRUD 테스트까지 진행할 예정입니다.

이번 DB셋팅 및 접속 테스트는 아래와 같은 순서로 진행 될 예정입니다.

(이번 포스팅에서 다뤄야 할 내용이 생각보다 많아 두 부분으로 나누었습니다.)

  1. 스프링 환경 설정(web.xml 수정)

  2. 데이터베이스 만들기

  3. 데이터베이스 접속 관련 dependency 추가(pom.xml 수정)

  4. 데이터베이스 설정 파일 추가(dataSource-context.xml)

  5. 데이터베이스 접속 테스트(junit)

  6. 테이블 만들기(tbl_board)

  7. VO 만들기(BoardVO)

  8. SQL 쿼리 만들기 (boardMapper)

  9. DAO 만들기 (BoardDAO, BoardDAOImpl)

  10. 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&amp;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 테스트를 합니다.

아래와 같은 메시지가 나왔다면 정상적으로 접속이 되는 것입니다.












※ 포스팅에 오타나 잘못된 부분, 추가적으로 더 알고 싶은 부분이 있으면 댓글 주세요~



반응형