Kim VamPa

[STS][스프링 게시판][0] MVC 프로젝트 생성 및 기본설정 - 2 본문

스프링 프레임워크/게시판 프로젝트

[STS][스프링 게시판][0] MVC 프로젝트 생성 및 기본설정 - 2

Kim VamPa 2021. 2. 15. 18:17
728x90
반응형

순서

7. JDBC 연결 및 테스트

   7.1 Oracle

   7.2 MySQL

   7.3 JDBC 테스트

8. 커넥션 풀(HikariCP) 설정 및 테스트

9. MyBatis 라이브러리 추가 및 SQLSessionFactory 설정

10. Log4jdbc-log4j2 라이브러리 추가 및 설정

 

 

7. JDBC 연결 및 테스트

"JDBC"와 다음 순서에서 작업할 "커넥션 풀"에 대한 소개는 아래의 포스팅을 참고해주세요.

 

[Spring] JDBC란? Connection pool이란?

 

 7.1 Oracle

 [pom.xml] 파일에 Ojdbc 라이브러리를 추가합니다. 자신이 JDK 8 혹은 9를 사용 중일 경우 Ojdbc8 라이브러리를, JDK10 혹은 11을 사용중일 경우 Ojdbc10 라이브러리를 추가해주어야 합니다.

 

 [pom.xml]에 Ojdbc 라이브러리를 추가하는 방식이 아닌 직접 라이브러리를 다운로드하여 추가하는 방식은 아래의 포스팅을 참고하시면 됩니다.

 

[Spring][03-01]JDBC 연결 테스트 (Oracle DB 연결)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<!-- JDK 10, 11 사용 중일 경우 -->
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc10 -->
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc10</artifactId>
    <version>19.8.0.0</version>
</dependency>
 
<!-- JDK 8, 9 사용 중일 경우 -->
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.7.0.0</version>
</dependency>
 

 

그림 1

 

 

7.2 MySQL

 Maven Repository 사이트에서 자신이 설치한 MySQL 버전과 일치하는 JDBC 라이브러리를 [pom.xml]에 추가하시면 됩니다.(저의 MySQL 8.0.23 이기 때문에 8.0.23 라이브러리를 추가하였습니다.)

 

mvnrepository.com/artifact/mysql/mysql-connector-java

 

1
2
3
4
5
6
7
8
 
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.23</version>
</dependency>
 

 

 

 

7.3 JDBC 테스트

 추가한 JDBC가 데이터베이스와 연결이 되었는지 확인하기 위해 테스트를 진행합니다. src/test/java 경로에 com.vam.persistence 패키지를 생성하고 JDBCTest.java 클래스를 생성합니다.

 

 

해당클래스에 아래의 코드를 추가 한 뒤 Junit 테스트를 진행합니다.

 

 "Database url" 경우 '데이터베이스 url' 키워드 검색을 통해 자신의 데이터베이스 url을 알아내시면 됩니다.

 

 Oracle 데이터베이스 계정을 아직 생성하지 않은 경우 생성 후 해당 계정, 비밀번호를 입력하시면 됩니다. (계정 생성 방법은 [Oracle 기본사용법][01]사용자(USER)생성, 스키마(SCHEMA) 생성 포스팅을 참고하시면 됩니다.)

 

 MySQL 데이터베이스 계정은 초기 설치시에 설정한 계정입니다.

 

Oracle JDBC 테스트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
    static { 
        try { 
            Class.forName("oracle.jdbc.driver.OracleDriver"); 
        } catch(Exception e) { 
            e.printStackTrace(); 
        } 
    } 
    
    @Test 
    public void testConnection() { 
        try(Connection con = DriverManager.getConnection( 
                "Oralce 데이터베이스 url"
                "계정명"
                "")){ 
            System.out.println(con); 
        } catch (Exception e) { 
            fail(e.getMessage()); 
        } 
    
    }    
        

 

그림 4 Oralce JDBC 테스트

 

그림 5

 

그림 6 결과

 

 

MySQL JDBC 테스트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
    static { 
        try { 
            Class.forName("com.mysql.cj.jdbc.Driver"); 
        } catch(Exception e) { 
            e.printStackTrace(); 
        } 
    } 
    
    @Test 
    public void testConnection() { 
        try(Connection con = DriverManager.getConnection( 
                "jdbc:mysql://localhost:3306/스키마명?serverTimezone=Asia/Seoul"
                "계정명"
                "1234")){ 
            System.out.println(con); 
        } catch (Exception e) { 
            fail(e.getMessage()); 
        } 
    
    }    
        

 

그림 7

 

그림 8

 

 

8. 커넥션 풀(HikariCP) 설정 및 테스트

라이브러리 추가

 커넥션 풀 역할을 하는 라이브러리들 중 HikariCP를 사용하겠습니다. [pom.xml]에 HikariCP 라이브러리를 추가해줍니다. JAVA 8, 9, 10, 11을 사용하는 경우 HikariCP 4.0.2 이상 버전을 사용하시면 됩니다. JAVA 버전에 따른 설치해야 할 HikariCP 버전에 대한 자세한 사항은 다음의 링크를 참고해주세요.

 

github.com/brettwooldridge/HikariCP

 

1
2
3
4
5
6
7
8
 
    <!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP --> 
    <dependency> 
        <groupId>com.zaxxer</groupId> 
        <artifactId>HikariCP</artifactId> 
        <version>3.4.2</version> 
    </dependency>
 

 

그림 9

 

 

DataSource 설정 (root-context.xml)

 root-context.xml 파일에 아래의 DataSource 설정 코드를 추가합니다.

 

Oracle

- HikarCP 공식 홈페이지에서는 [driverClassName]이 "oracle.jdbc.pool.OracleDataSource" 이지만 해당 값으로 실행 시 에러 상황이 났습니다. "oracle.jdbc.driver.OracleDriver" 값을 입력시 정상 진행됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"> 
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property> 
    <property name="jdbcUrl" value="jdbc:oracle:thin:@URL주소:1521:시드명"></property> 
    <!-- Oracle 11g 경우 value="jdbc:oracle:thin:@localhost:1521:XE" --> 
    <!-- Oracle 19 경우 value="jdbc:oracle:thin:@localhost:1521:orcl" --> 
    <property name="username" value="계정명"></property> 
    <!-- Oracle 버전에 따라 계정명에 c##을 붙여주어야 하는 경우가 있습니다. -->
    <property name="password" value="비밀번호"></property> 
</bean> 
 
<bean id="datasource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"> 
    <constructor-arg ref="hikariConfig"></constructor-arg> 
</bean>
 

 

그림 10

 

 

MySQL

 

1
2
3
4
5
6
7
8
9
10
11
12
 
    <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig"> 
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property> 
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/스키마명?serverTimezone=Asia/Seoul"></property> 
        <property name="username" value="계정명"></property> 
        <property name="password" value="빔리번호"></property> 
    </bean> 
    
    <bean id="datasource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"> 
        <constructor-arg ref="hikariConfig"></constructor-arg> 
    </bean>    
 

 

그림 11

 

 

테스트

 스프링 빈(Bean)으로 등록된 DataSource를 이용해서 Connection을 제대로 처리할 수 있는지 확인하기 위해 테스트를 진행합니다.

 

 src/test/java 경로에 있는 com.vam.persistence 패키지에 DataSourceTest.java 클래스를 생성합니다. 해당 클래스에 아래의 코드를 작성한 뒤 Junit 테스트를 진행하여 정상적으로 실행되는지 확인합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
public class DataSourceTest {
 
    @Autowired
    private DataSource dataSource;
    
    @Test
    public void testConnection() {
      
        try(Connection con = dataSource.getConnection();){
            
            System.out.println("con = " + con);
            
        } catch(Exception e) {
            
            e.printStackTrace();
            
        }
        
    }
    
}
 

 

그림 12

 

그림 13

 

그림 14

 

그림 15

 

 

9. MyBatis 라이브러리 추가 및 SQLSessionFactory 설정

라이브러리 추가

 

 MyBaits를 사용하기 위해서 mybatis / mybatis-spring / spring-jdbc / spring-tx 4개의 라이브러리가 필요로 합니다.  mybatis-spring 은 스프링에서 mybatis를 연동시켜주는 라이브러리입니다. spring-jdbcc, spring-tx는 스프링에서 데이터베이스 처리와 트랜잭션 처리를 하는 라이브러리입니다. mybatis와 무관해 보이지만 추가하지 않는 경우 에러가 발생하기 때문에 추가합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${org.springframework-version}</version>
</dependency>
 

 

그림 16

 

 

SQLSessionFactory 설정

 

 SQLSession 객체는 Connection을 생성하거나 원하는 SQL을 전달하고, 결과를 리턴 받도록 해줍니다. 이러한 SQLSession을 만들어내는 객체가 SQLSessionFactory입니다. SQLSessionFactory는 MyBatis-spring 라이브러리 클래스 중 하나입니다. 이 객체를 스프링에서 인식할 수 있도록 root-context.xml 에 빈(Bean)으로 등록합니다. 아래의 코드 작성을 통해서 빈(Bean)으로 등록할 수 있습니다.

 

1
2
3
4
5
 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource"></property>
    </bean>    
 

 

 

테스트

 

 등록한 SqlSessionFactory를 이용해서 SqlSession을 정상적으로 사용할 수 있는지 확인하기 위해서 테스트를 하겠습니다. 기존 DataSource를 테스트를 위해 작성한 DataSourceTest.java 클래스를 활용해서 Junit 테스트합니다.

 

 - SqlSessionFactory 객체를 의존성 주입.

 - try 파라미터 SqlSession 객체 추가, try 구현부 SqlSession 출력문 코드 추가.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
public class DataSourceTest {
 
    @Autowired
    private DataSource dataSource;
    
    @Autowired private 
    SqlSessionFactory sqlSessionFactory;
    
    @Test
    public void testConnection() {
        
        try(
                Connection con = dataSource.getConnection();
                SqlSession session = sqlSessionFactory.openSession();
            
            ){
            
                System.out.println("con = " + con);
                System.out.println("session = " + session);
            
            } catch(Exception e) {
            
                e.printStackTrace();
            
            }
        
    }
    
}
 

 

그림 18

 

그림 19 Oracle

 

그림 20 MySQL

 

 

10. Log4jdbc-log4j2 라이브러리 추가 및 설정

 Log4jdbc-log4j2 라이브러리 추가 및 설정은 아래의 포스팅을 참고해주세요.

 

[Spring][06] Log4jdbc-log4j2 추가 및 설정방법

 

 

REFERENCE

  •  

DATE

  • 2021.02.15
728x90
반응형
Comments