본문 바로가기
개발/JAVA, Spring

[java/spring] IntelliJ 에서 스프링 개발하기2. DB 설정(MariaDB)

by 똘똘이박사 2019. 11. 24.

이 포스팅은 java/spring 스터디에서 IntelliJ로 개발하면서 진행했던 내용을 정리한 것입니다.

게시판 만들기를 해볼 것인데

게시글을 저장하기 위한 DB로 MariaDB를 사용할 계획 입니다.

 

MariaDB 설치는 생략합니다.

 

1. 의존성 추가

우선은 spring 에서 DB를 사용 할 수 있도록 jdbc 드라이버와 MariaDB에 대한 라이브러리를 추가 해야 합니다.

아래의 코드를 pom.xml에 추가해 주어야 합니다.

<!--mysql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.17</version>
</dependency>

<!--mybatis-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.2</version>
</dependency>

<!--mybatis-spring-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.2</version>
</dependency>

<!--spring-jdbc-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

라이브러리가 추가 되었으므로 프로젝트에서 사용 할 수 있도록 'Project Structure'의 'Artifacts' 에서 추가해 주어야 합니다.

2. rootContext.xml 의 수정

우선 rootContext.xml의 이름을 바꾸겠습니다. applicationContext.xml 로 바꿉니다.

또한 데이터베이스 설정을 위한 스프링 설정 파일로 datasourceContext.xml 을 생성 하도록 합니다.

applicationContext.xml 에는 아래와 같이 코드를 추가해 줍니다.

<?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:context="http://www.springframework.org/schema/context"
       <!--//추가된 부분-->
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       <!--추가된 부분-->
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
        <!--//추가된 부분-->
        ">

    <!--추가된 부분-->
    <context:component-scan base-package="com.freehoon.u4">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!--//추가된 부분-->
</beans>

 

위 코드는 com.freehoon.u4 라는 패키지 아래에서 controller 어노테이션을 제외한 모든 어노테이션을 스캔하겠다는 의미 입니다. 따라서 @service 나 @Repository 같은 service 파일과 DAO 파일 등을 모두 스캔 하겠다는 의미 입니다.

 

그리고 datasourceContext.xml에 아래의 내용을 추가해 줍니다.

<?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://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&amp;serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="qwerqwer"/>
    </bean>

    <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- <property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"/> -->
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
        <constructor-arg name="sqlSessionFactory" ref="SqlSessionFactory"/>
    </bean>
</beans>

위 내용은 사용할 jdbc 드라이버와 서버의 url 주소 그리고 접속 계정의 아이디와 비밀번호 등을 설정한 내용입니다.

그외 SqlSessionFactory 와 sqlSession 에 대해 설정이 되어 있는데 이 부분은 추후 DB 연결과 자원 관리를 효율적으로 해줄 수 있도록 해주는 부분입니다.

 

3. JUnit 로 DB 연결 테스트

DB 설정이 제대로 되었는지 우선 연결 테스트부터 진행해 봅니다.

이 부분을 생략할 수는 있으나 테이블을 만들고, 기본적인 CRUD 쿼리 작성과 해당하는 Contller, service, dao 생성, view 생성 까지 모두 작성한 후에 테스트 하기란 굉장히 시간이 오래 걸릴 뿐만 아니라 에러 발생시 어디서 부터 에러가 발생했는지 확인 하기도 쉽지 않습니다. 

또한 JUnit 를 사용하면 tomcat 서버를 구동하지 않더라도 단위별로 테스트가 가능하기 때문에 시간이 절약되고, 에러 부분을 더 자세히 확인 할 수 있다는 장점이 있습니다.

JUnit를 하기 위해서는 두가지 의존성을 추가 해야 합니다.

<!--junit-->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

<!--spring-test-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

의존성을 추가하면 라이브러리가 자동으로 추가 되므로, 이 라이브러리를 사용 가능하도록 해주어야 합니다.

이제 JUnit 테스트를 위한 코드를 작성합니다.

JUnit 코드는 별도의 디렉토리에 작성합니다.

src\test\java 라는 디렉토리에 코드를 작성합니다. 

이 예제에서는 이 디렉토리에 com.freehoon.u1 이라는 패키지를 만들어 테스트 코드를 추가 하였습니다.

물론 패키지를 만들지 않고 테스트 코드를 만들어도 상관 없습니다.

테스트 코드의 이럼은 DBConnectionText.java 입니다.

파일의 내용은 아래와 같습니다.

package com.freehoon.u1;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.sql.DataSource;
import java.sql.Connection;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/*Context.xml"})
public class DBConnectionTest {

    @Autowired
    private DataSource ds;

    @Test
    public void testConnection(){
        try(Connection con = ds.getConnection()){
            System.out.println(("MariaDB 연결 성공 : " + con));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위와 같이 코드를 입력한 후 파일을 우클릭하여 'Run 'TestConnection()' 이라는 메뉴를 선택합니다.

 

아래와 같이 메시지가 나온다면 DB 연결 설정은 문제 없이 된 것 입니다.

 

그런데 아래와 같이 try 부분에 빨간 줄이 가 있는 경우가 생깁니다.

이것은 자바 버전에 의해 생기는 문제 인데 위에서 사용한 try 는 try - with - resources 라고 부르는 방식으로

JDK 1.7 이후부터 지원되는 부분입니다. (참고 : https://freehoon.tistory.com/149)

이 부분은 intellij의 프로젝트 JDK 버전을 조정하여 해결 할 수 있습니다.

'File -> Project Structure...' 클릭, Modules 에서 프로젝트명(여기서는 u1)을 선택합니다.

그럼 위의 그림과 같이 우측에 Sources탭에 'Language Level' 이 '5-'enum' keyword.......' 로 설정되어 있는 것을 확인 할 수 있습니다. 이 것을 '8-Lambdas, type annotations etc.' 로 변경하고 [OK] 버튼을 눌러 닫아 줍니다.

 

그리고 다시 테스트를 해 봅니다.

반응형