Web/Spring 2018. 6. 16. 13:42

Spring EmbeddedDatabase(스프링 내장형 DB란)


스프링 임베디드 데이터베이스란 애플리케이션에 내장되서 애플리케이션과 함께 시작되고 종료되는 DB를 말한다. 데이터는 메모리 상에 저장되기 때문에 런타임에 IO로 인해 발생하는 부하가 적어서 성능이 뛰어나다. 동시에 Map과 같은 컬렉션이나 오브젝트를 이용해 메모리에 데이터를 저장해두는 방법에 비해 매우 효과적이고 안정적인 방법으로 등록,수정,검색이 가능하다. 최적화된 락킹, 격리수준, 트랜잭션 또한 적용 가능하다.

임베디드데이터베이스는 메모리로 읽어들인 데이터를 여러 가지 조건으로 검색하거나 통계를 내야하고 필요에 따라 데이터를 조작해가면서 복잡한 로직을 처리해야 하는 경우 컬렉션 혹은 자바빈 오브젝트 등에 담아서 사용하는 것보다 편리하게 진행 할수 있다. 물론 내장형 데이터베이스도 메모리 상에 상주하기에 담고있는 데이터가 커질 경우에는 부하가 생길 수 있다.




간단한 사용법



pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- 임베디드 데이터베이스용 hsql -->
        <!-- https://mvnrepository.com/artifact/org.hsqldb/hsqldb -->
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>2.3.1</version>
            <scope>test</scope>
        </dependency>
        <!-- 스프링에서 JDBC 를 사용하기 위한 라이브러리 입니다. -->
        <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-jdbc</artifactId>
           <version>${org.springframework-version}</version>
        </dependency>
cs


schema.sql

1
2
3
4
CREATE TABLE MAPTYPE(
    KEY_ VARCHAR(100) PRIMARY KEY,
    VALUE_ VARCHAR(100) NOT NULL
);
cs
data.sql

1
2
INSERT INTO MAPTYPE VALUES('KEY1','VALUE1');
INSERT INTO MAPTYPE VALUES('KEY2','VALUE2');
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.web.angular;
 
import static org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType.HSQL;
 
import java.util.Arrays;
 
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
 
public class EmbeddedDatabaseTest {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        EmbeddedDatabase db=(EmbeddedDatabase) new EmbeddedDatabaseBuilder().setType(HSQL).addScript("classpath:schema.sql").addScript("classpath:data.sql")
                .build();
        
        SimpleJdbcTemplate template=new SimpleJdbcTemplate(db);
        
        System.out.println("select * from maptype>> "+Arrays.toString(template.queryForList("select * from maptype").toArray()));
    }
 
}
 
cs


db 라는 변수에 담기는, 즉 EmbeddedDatabaseBuilder 가 최종적으로 리턴하는 객체는 DB에 접근할 수 있는 Connection을 생성해주는 DataSource인터페이스를 상속한 EmbeddedDatabase 타입이다. 이 값을 jdbcTempalte 생성자 매개변수에 넣어서 내장형 디비를 실행 시킬 수 있다.

결과


posted by 여성게
: