Java

[Spring Boot] 인메모리(H2) 데이터베이스 사용 방법

cob 2023. 6. 26. 13:29

 

 

 

Spring Boot가 지원하는 인-메모리 DB

Spring-JDBC 의존성이 추가되어 있다면 자동 설정이 필요한 Bean들을 설정해 준다.
1. H2
2. HSQL
3. Derb

 

 

 


1. H2 사용방법

1-1) 의존성 추가

JDBC와 H2 의존성을 추가, 아무런 설정을 하지 않아도 인-메모리 데이터 베이스를 사용하는 JDBC가 설정이 돼서 애플리케이션이 동작한다.(DataSource, JdbcTemplate 등)
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

 

1-2) 코드 작성

DataSource 작성 방법
package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

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

@Component
public class H2Runner implements ApplicationRunner {

    @Autowired
    DataSource dataSource;  // 자동으로 Bean으로 등록 되어있어 주입 받을 수 있다.

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 인-메모리 DB의 기본 연결 정보 확인 방법
        try(Connection connection = dataSource.getConnection()) {
            connection.getMetaData().getURL(); // Meta 정보에서 접속할 DB의 url, username 확인 가능
            connection.getMetaData().getUserName();

            Statement statement = connection.createStatement();
            String sql = "CREATE TABLE USER(ID INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY(id))";
            statement.executeUpdate(sql);
        }
     }
}

 

 

 

JdbcTemplate 작성 방법
package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

import java.sql.Statement;

@Component
public class H2Runner implements ApplicationRunner {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // JdbcTemplate을 사용하여 SQL 문 실행
        String createTableQuery = "CREATE TABLE USER(ID INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY(id))";
        jdbcTemplate.execute(createTableQuery);
    }
}

 

 

 


2. JdbcTemplate 장점

JdbcTemplate은 DataSource를 추상화하고 일반적인 JDBC 작업을 더욱 간결하고 안전하게 처리하기 위한 Spring 프레임워크의 기능이다. JdbcTemplate을 사용하면 JDBC 작업을 수행하는 데 필요한 많은 부분을 자동으로 처리할 수 다.

 

1. Connection 관리: JdbcTemplate은 커넥션을 직접 열고 닫지 않아도 된다. 내부적으로 DataSource에서 커넥션을 가져와 자동으로 관리하고, 이렇게 함으로써 커넥션 관리와 리소스 해제를 자동으로 처리하여 개발자가 명시적으로 신경 쓸 필요가 없다.

2. Statement 생성 및 실행: JdbcTemplate은 Statement 및 PreparedStatement를 생성하고 실행하는 데 필요한 번거로운 작업을 처리한다. SQL 문을 직접 작성하는 대신 JdbcTemplate 메서드를 사용하여 간단하게 쿼리를 실행할 수 있다.

3. SQL 파라미터 처리: JdbcTemplate은 SQL 문에서 파라미터를 처리하기 위해 자동으로 SQL 인젝션 방지 및 데이터 형식 변환을 수행하고, 이를 통해 보안과 안전성을 향상한다.

4. 예외 처리: JdbcTemplate은 JDBC 예외를 적절한 Spring 예외로 변환하여 처리한다. 이로 인해 예외 처리가 간편해지고 코드의 안정성이 향상된다.

이러한 이유로 JdbcTemplate은 많은 개발자들에게 선호되는 JDBC 작업 방식이다. JdbcTemplate은 Spring 프레임워크의 일부이며, JDBC 작업을 보다 편리하게 처리할 수 있도록 다양한 유틸리티 메서드와 기능을 제공하고 있다.

 

 


3. 콘솔 확인

  • 설정 추가
# application.properties 
spring.h2.console.enabled=true

 

  • http://localhost:8080/h2-console 접속  =>  [Connect] 클릭

h2 콘솔

 

반응형