[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 인지 확인해야합니다.
'Spring Framework > Spring boot #2' 카테고리의 다른 글
[Spring Boot #25] 스프링 부트 데이터베이스 초기화 (0) | 2021.03.25 |
---|---|
[Spring Boot #24] 스프링 부트 Spring-Data-JPA 연동 (0) | 2021.03.25 |
[Spring Boot #23] 스프링 부트 PostgreSQL 연동하기 (0) | 2021.03.25 |
[Spring Boot #22] 스프링 부트 DBCP 및 MySQL 연동해보기 (0) | 2021.03.25 |
[Spring Boot #20] 스프링 부트 CORS (0) | 2021.03.24 |
[Spring Boot #19] 스프링 부트 Spring HATEOAS (0) | 2021.03.24 |
[Spring Boot #18] 스프링 부트 ExceptionHandler (0) | 2021.03.24 |
[Spring Boot #17] 스프링 부트 HtmlUnit 써보기 (0) | 2021.03.15 |