개발서적/토비 스프링 3.1-Vol.1

[토비의 스프링 - Vol.1]7.5.2 내장형 데이터베이스 - 2

스프링에서는 내장형 데이버베이스를 지원한다.

자바에서는 Derby, HSQL, H2가 대표적인 내장 데이터베이스이다.

내장형데이터베이스란?

인메모리 데이터베이스(In-memory Database)는 데이터 스토리지의 메인 메모리에 설치되어 운영되는 방식의 데이터베이스 관리 시스템

인메모리 데이터베이스는 디스크에 최적화된 데이터베이스보다 더 빠른데 그 까닭은 디스크 접근이 메모리 접근보다 느리기 때문이며, 이 데이터베이스는 내부 최적화 알고리즘이 더 단순하며 더 적은 CPU 명령을 실행한다. 메모리의 데이터에 접근하면 데이터를 조회할 때 검색 시간이 줄어들며 디스크보다 더 빠르고 더 예측 가능성 성능을 제공한다.

출처: https://ko.wikipedia.org/wiki/%EC%9D%B8%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

 

인메모리 데이터베이스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 인메모리 데이터베이스(In-memory Database)는 데이터 스토리지의 메인 메모리에 설치되어 운영되는 방식의 데이터베이스 관리 시스템이다. 인메모리 데이터베이스

ko.wikipedia.org

 

위키백과를 보면 인메모리 데이터베이스의 특징은 아래와 같다.

 

장점: 메모리에 접근하기 때문에 속도가 빠르다

단점: 애플리케이션과 생명주기를 같이하기 때문에 휘발성이다.

 

토비에서는 내장형 데이터베이스 중 HSQL을 이용한 설정 예제를 보여준다.

<메소드내에서 설정하는 방식>

public class EmbeddedDbTest {
    EmbeddedDatabase db;
    JdbcTemplate template;

	@BeforeEach
    public void setUp(){
        db = new EmbeddedDatabaseBuilder()
                .setType(HSQL) //사용할 내장 데이터베이스
                .addScript("classpath:/embeddeddb/schema.sql") //실행시 사용할 스크립트
                .addScript("classpath:/embeddeddb/data.sql")
                .build();

        template = new JdbcTemplate(db);
    }
    
    @AfterEach
    public void tearDown(){
        db.shutdown(); //매 테스트가 종료될 때 데이터베이스를 종료한다.
    }
    
    ....

테스트 코드를 통해 내장 데이터베이스를 JdbcTemplate에 설정하는 방식을 설명하고 있다.

 

 

<xml로 설정하는 방식>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       ....
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                            https://www.springframework.org/schema/beans/spring-beans.xsd
                            ....
                            http://www.springframework.org/schema/jdbc
                            http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd">

    <jdbc:embedded-database id="embeddedDatabase" type="HSQL">
        <jdbc:script location="classpath:updatable/sqlRegistrySchema.sql"/>
    </jdbc:embedded-database>

<jdbc:script> 태그는 위에 addScript와 같은 역할을 수행한다.

<jdbc:embedded-database>로 만들어진 내장형 데이터베이스는 컨테이너가 종료될 때 자동으로 shutdown() 메소드가 호출된다.