스프링부트 H2 데이터베이스

Spring Boot/개발환경|2019. 4. 8. 23:36

H2는 RDBMS(관계형데이터베이스)입니다.
매우 빠르고작은 크기의 데이터베이스라고 보시면 됩니다.
주로 메모리에 데이터를 저장하는 용도로 쓰이며, 디스크에 데이터를 저장할수도 있습니다.

  • 매우 빠른 오픈 소스, JDBC API
  • 임베디드 및 서버모드(영구 데이터베이스), 메모리 내 데이터베이스
  • 브라우저 기반 콘솔 응용 프로그램 지원
  • 작은 설치 공간 : 약 2MB jar 파일 크기

영구 데이터베이스와 인 메모리 데이터베이스의 차이점

영구 데이터베이스는 실제 메모리에 데이터를 유지하므로 데이터베이스 서버가 반송 되더라도 다시 사용이 가능합니다.
인 메모리 데이터베이스의 경우 데이터는 시스템 메모리에 저장되며 프로그램을 닫으면 데이터가 손실됩니다.

인 메모리 데이터베이스는 POC(Proof Of Concept)에 사용되며 프로덕션 응용 프로그램에서는 권장하지 않습니다.

영구 데이터베이스는 Oracle, Mysql, Postgres 등을 사용하며, H2는 일반적으로 메모리 데이터베이스로 사용합니다.

인메모리DB

  • 컴퓨터가 꺼지면 모든 내용이 날라감
  • 연속성이 없음
  • 연속성을 주는 방법이 있지만, 그 방법을 쓰려면 그냥 일반 DB모드로 쓰면 된다.

Maven 의존성 라이브러리

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

1. H2 데이터베이스 설정

1-1. 기본설정

spring.datasource.url=jdbc:h2:mem:testdb  
spring.datasource.driverClassName=org.h2.Driver  
spring.datasource.username=sa  
spring.datasource.password=  
spring.h2.console.enabled=false  

H2데이터베이스는 따로 설정하지 않으면 위와 같은 값으로 기본 설정을 합니다.
datasource.url의 jdbc:h2:mem:testdb는 testdb 스키마에 mem 인 메모리 데이터베이스로 동작하라는 설정입니다.

1-2. 기본설정 무시

src/main/resources/application.properties
spring.h2.console.enabled=true

application.properties에 추가하여 H2 콘솔을 사용하게 합니다.
물론 나머지 설정들은 기본값으로 들어갑니다.


2. H2 콘솔 접속

2-1. 스프링 실행 후 로그인 창 접속

http://localhost:8080/h2-console

기본 설정으로 스프링을 실행했다면 따로 건들건 없으며 Connect 버튼을 클릭하여 접속합니다.

2-2. H2 로그인 접속

이 창에선 직접 테이블을 만들거나 지우거나 CRUD가 가능합니다.
단, 스프링부트를 종료하게 된다면 작업했던 내역들은 전부 사라집니다.


3. 스프링부트가 실행될때 SQL문을 실행시키기

3-1. sql파일생성

src/main/resources/data.sql
CREATE TABLE Employee
(
    id integer NOT NULL,
    firstName varchar(255) not null,
    lastName varchar(255) not null,
    email varchar(255),
    phoneNumber varchar(255),
    hireDate timestamp,
    salary integer,
    commissionPct integer,
    primary key(id)
);

3-2. 스프링 재 실행 후 접속

EMPLOYEE 테이블이 생성되면서 실행된것을 볼 수 있습니다.
CREATE문이나 INSERT문 등 테스트환경에 필요한 데이터베이스의 값들을 미리 설정하여 좀더 쉽게 개발이 가능합니다.

댓글()