스프링 부트 활용

인메모리 데이터베이스

스프링부트가 지원하는 인메모리 데이터베이스는 3가지가 있다.

1. H2

  1. HSQL
  2. Derby

보통 콘솔 때문에 H2를 많이 사용한다.

Spring-JDBC가 클래스패스에 있으면 자동 설정이 필요한 빈을 설정 해준다. (DataSource, jdbcTemplate)

H2 예제

jdbch2의존성을 넣어줘야한다.

<dependency>
  <groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>runtime</scope>
</dependency>

JDBC 의존성을 넣어줬기 때문에 DataSource, jdbcTemplate 자동 설정을 해준다. 아무런 데이터소스 설정을 하지 않으면, 스프링부트는 자동으로 인메모리 데이터베이스를 설정해준다.

기본 연결정보는 아래와 같다.

URL: "testdb"
username: "SA"

runner를 만들어 db정보를 출력하고, 쿼리도 날려줄 수 있다.

@Component
public class H2Runner implements ApplicationRunner {

  @Autowired
  DataSource dataSource;

  @Override
  public void run(ApplicationArguments args) throws Exception {
    try(Connection connection = dataSource.getConnection()) {

      System.out.println(connection.getMetaData().getURL());
      System.out.println(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);

    }
  }

}

브라우저를 통해 USER 테이블이 생성되었는지, h2-console을 통해 접속해볼 수 있다.

application.properties에 아래 구문을 추가해준다.

spring.h2.console.enabled = true
spring.h2.console.path = /h2-console

그 후, localhost:8080/h2-console로 접속한다. db정보를 입력하고, connect를 누르면 USER 테이블이 생성되어 있는 것을 볼 수 있다.

DataSource말고 jdbcTemplate도 주입받아 사용할 수 있다.

@Component
public class H2Runner implements ApplicationRunner {

  @Autowired
  DataSource dataSource;

  @Autowired
  JdbcTemplate jdbcTemplate;

  @Override
  public void run(ApplicationArguments args) throws Exception {
    try(Connection connection = dataSource.getConnection()) {

      System.out.println(connection.getMetaData().getURL());
      System.out.println(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.execute("INSERT INTO USER VALUES (1, 'grace')");
  }

}

Reference