[Spring Boot #21] 스프링 부트가 지원하는 인메모리 데이터베이스

| 인메모리 데이터베이스

  • 디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스입니다. 
  • 디스크 검색보다 자료 접근이 훨씬 빠른 것이 큰 장점입니다. 단점은 매체가 휘발성이기 때문에 DB 서버가 꺼지면 모든 데이터가 유실된다는 단점이 있습니다.
  • 스프링 부트에서 H2, HSQL 같은 인메모리, 디스크 기반 DB를 지원합니다.


| H2 데이터베이스 사용하기


프로젝트 구조

|   pom.xml
+---src
| +---main
| | +---java
| | | \---com
| | | \---tutorial
| | | \---springdatatutorial
| | | H2Runner.java
| | | SpringDataTutorialApplication.java
| | |
| | \---resources
| | | application.properties
| | |
| | +---static
| | \---templates


의존성 추가

<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>
  • H2 데이터베이스 의존성을 추가하고 난 후, 설정 파일에 아무 설정이 되어 있지 않으면 스프링 부트는 자동적으로 H2 데이터베이스를 기본 데이터베이스로 채택합니다.
  • spring-boot-starter-jdbc 의존성을 추가하면 DataSource, JdbcTemplate을 별다른 설정없이 @Autowired 같은 빈 주입 어노테이션만 가지고도 쓸 수 있습니다.


소스 코드

@SpringBootApplication
public class SpringDataTutorialApplication {

public static void main(String[] args) {
SpringApplication.run(SpringDataTutorialApplication.class, args);
}

}
@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);
String URL = connection.getMetaData().getURL();
System.out.println(URL);
String User = connection.getMetaData().getUserName();
System.out.println(User);

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, 'saelobi')");
}
}
  • dataSource에 의존성을 주입받아(H2 dataSource 구현체) H2에 접속하여 SQL문을 실행할 수 있습니다.
  • jdbcTemplate에 의존성을 주입받아 SQL문을 간편하게 실행할 수 있습니다.
  • 만일 해당 코드를 다시 실행하여도 인메모리 기반 DB로 실행되기 때문에 기존 데이터가 유실되어 위 SQL구문이 충돌없이 동작합니다.


결과 화면

HikariProxyConnection@1747631271 wrapping conn0: url=jdbc:h2:mem:testdb user=SA
jdbc:h2:mem:testdb
SA


http://localhost:8080/h2-console에 접속한 후 connect 버튼을 누르면 h2-console로 연결됩니다. 이때 URL이 jdbc:h2:mem:testdb 인지 확인해야합니다.



참고자료 : https://www.inflearn.com/course/스프링부트


이 글을 공유하기

댓글(0)

Designed by JB FACTORY