If today was hard, tomorrow will be easy.

간결하고 의미있는 코딩을 위하여.

GitHub - Inchijeong 바로가기→

SpringBoot

[SpringBoot] DataBase 연동

꼬스차 2021. 2. 20. 03:17
728x90
반응형

Spring Boot에 DataBase를 연동해 보겠습니다.

사전 준비

※ Spring Starter Project를 만들어주세요. 자세한 설명은 여기를 참조하세요.

※ 사전에 dependency을 추가할 수 있습니다.

※ MariaDB에 다음과 같이 Database, User, Password, Privileges가 선행되어야 합니다. 자세한것은 Database, User 추가 - Privileges 부여를 참조하세요.

-
Database todo
User todo_usr
password todo_pw

Connection Pool 란

Pool에 Connection을 미리 만들어 두고 데이터베이스 접근시 Pool에 남아 있는 것 중 하나를 사용한 뒤 반환하는 기법입니다.

DataSource 란

  • Java에서 Connection Pool을 지원하기 위한 인터페이스

  • Connection Pool을 관리하는 목적으로 사용되는 객체

JDBC(Java Database Connectivity) 란

Java 애플리케이션에서 SQL문을 실행하기 위한 Java API

HikariCP

빠르고 가볍고 안정적인 JDBC Connection Pool 입니다.

  • Default DBCP
    • Spring Boot 2.0 이전: Tomcat JDBC Connection Pool
    • Spring Boot 2.0 이후: HikariCP

따라서, JDBC를 사용하면 기본으로 HikariCP를 사용하게 됩니다.

DBCP(DataBase Connection Pool) 설정

※ 저는 Gradle로 MariaDB에 연동하겠습니다.

  1. Dependency 추가

    1. Gradle의 경우 build.gradle

      dependencies {
          runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' // MariaDB
          // runtimeOnly 'mysql:mysql-connector-java' // MySQL
          // runtimeOnly 'com.oracle.database.jdbc:ojdbc8' // Oracle
          // runtimeOnly 'com.h2database:h2' // h2
      }
    2. Maven의 경우 pom.xml

      <dependencies>
          ...
          <!-- mariadb -->
          <dependency>
              <groupId>org.mariadb.jdbc</groupId>
              <artifactId>mariadb-java-client</artifactId>
              <scope>runtime</scope>
          </dependency>
          <!-- mysql -->
      <!--<dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <scope>runtime</scope>
          </dependency>-->
          <!-- Oracle -->
      <!--<dependency>
              <groupId>com.oracle.database.jdbc</groupId>
              <artifactId>ojdbc8</artifactId>
              <scope>runtime</scope>
          </dependency>-->
          <!-- h2 -->
      <!--<dependency>
              <groupId>com.h2database</groupId>
              <artifactId>h2</artifactId>
              <scope>runtime</scope>
          </dependency>-->
          ...
      <dependencies>
  1. src/main/resources/application.properties

    # Datasource
    spring.datasource.username=todo_usr
    spring.datasource.password=todo_pw
    
    # MariaDB
    spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
    spring.datasource.url=jdbc:mariadb://localhost:3306/todo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
    
    # MySQL
    # spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    # spring.datasource.url=jdbc:mysql://localhost:3306/todo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
    
    # H2
    # spring.datasource.driver-class-name=org.hibernate.dialect.H2Dialect
    # spring.datasource.url=jdbc:h2://localhost:3306/todo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
    
    # Oracle
    # spring.datasource.driver-class-name=org.hibernate.dialect.Oracle10gDialect
    # spring.datasource.url=jdbc:oracle://localhost:3306/todo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false

테스트

  1. 아래 파일을 추가합니다.

    src/test/java/com/td/DataSourceTests.java

    package com.td;
    
    import java.sql.Connection;
    
    import javax.sql.DataSource;
    
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    import lombok.extern.java.Log;
    
    @Log
    @SpringBootTest
    public class DataSourceTests {
    
        @Autowired
        private DataSource dataSource;
    
        @Test
        public void testConnection() {
    
            try{
                Connection con = dataSource.getConnection();
                log.info("Meta Data: " + con.getMetaData());
                log.info("Driver Name: " + con.getMetaData().getDriverName());
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
    
    }
  2. testConnection - 우클릭 - Run AS - JUnit Test

  3. 로그가 찍힌 것을 확인할 수 있습니다.

참조

728x90
반응형

'SpringBoot' 카테고리의 다른 글

[SpringBoot] Thymeleaf 사용  (1) 2021.04.19
[SpringBoot] Spring Data JPA  (0) 2021.02.22
[SpringBoot] 프로젝트 구조  (0) 2021.02.20
[SpringBoot] 프로젝트 생성 및 실행  (0) 2021.02.20
[SpringBoot] 스프링 부트(Spring Boot) 란  (0) 2021.02.20