개발 일기

[H2] H2 데이터베이스 본문

Computer Science/Database

[H2] H2 데이터베이스

개발 일기장 주인 2024. 9. 21. 15:16

H2 데이터베이스가 소규모 서비스나 단위 테스트에서 주로 사용되어 종종 개발자분들께서 사용하시는걸 본적이 있다.

그래서 H2 Database에 대해 간단하게 정리하는 시간을 가져봤다.


H2 Database에 대해

H2 Databse

  • H2는 Java로 구현된 작고 가벼운 경량형 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)이다.
  • 테스트 환경이나 임베디드 데이터베이스로 많이 사용
  • Server Mode/In-memory Mode/Embedded Mode 이렇게 3가지 모드가 있다.

3가지 모드에 대해 하나씩 들여다 보자

In-Memory Mode

  • H2 데이터베이스 엔진을 직접 설치하지 않고 애플리케이션 내부의 엔진을 사용하는 방식
  • 메모리 기반으로 동작하게 되는 모드로 데이터가 RAM에 저장
  • RAM을 사용하다 보니 Server Mode에 비해 상대적으로 성능이 좋다.
  • 그렇기 때문에 애플리케이션이 종료되면 RAM에 올라와 있던 데이터는 휘발된다.
     즉, 애플리케이션이 종료되면 데이터도 함께 사라짐.
  • 위와 같은 특징으로 인해 단위 테스트 등에서 주로 사용된다.
# build.gradle
runtimeOnly 'com.h2database:h2'

# application.yml
spring:
  datasource:
    url: jdbc:h2:mem:h2-test
    driver-class-name: org.h2.Driver
    username: sa
    password: h2test
  h2:
    console:
      enabled: true

h2 콘솔로 접속 시

  • H2를 의존성으로 추가하면, Spring Boot는 빌드 과정에서 H2 데이터베이스 엔진을 포함하고 있는 .jar 파일이 애플리케이션 의존성에 포함되고, 애플리케이션이 실행될 때 Classpath에서 H2 라이브러리를 감지하여 애플리케이션에 내부에서 H2 엔진이 동작하게 된다. 이 과정 덕분에 별도의 설치 없이 사용할 수 있게 되는 것이다.


Embedded Memory

  • 해당 방식의 데이터베이스 동작 방식은 In-Memory Mode와 저장소의 위치만 다르고 다른 사항들은 동일하다.
  • 똑같이 H2 DB 엔진이 애플리케이션 의존성에 포함되어 함께 실행되고 종료되는 방식이다.
  • 차이점은 데이터를 메모리(RAM)에 저장하는 것이 아닌 로컬에 저장시킨다.
    ➜ 어플리케이션이 종료돼도 데이터가 휘발되지 않는다.
  • 따라서 애플리케이션의 통해서만 접근 가능하며 여러 애플리케이션에서 동시에 사용할 수 없다.
# application.yml
spring:
  application:
    name: qna-project

  h2:
    console:
      enabled: true
      path: /h2-console # 해당 지정 URL로 H2콘솔 접속

  datasource:
    url: jdbc:h2:file:~/documents/qna-project/h2-test;NON_KEYWORDS=USER  # 메모리 기반
    username: sa
    password:
    driver-class-name: org.h2.Driver

h2 콘솔로 접속

  • 이때 위와 같은 application.yml로 세팅 해놓은 경우 자동으로 지정된 경로에 db 파일이 생성된다.

Server Mode

  • 타 데이터베이스와 같이 데이터베이스 엔진을 직접 설치하고 엔진을 구동시켜 사용하는 방식이다.
  • 애플리케이션과 데이터베이스는 독립적인 관계가 되기 때문에 여러 애플리케이션에서 동일한 데이터베이스를 사용해야할때 적합하다.
  • 모든 데이터의 처리 흐름이 TCP/IP를 통하여 전송되기 때문에 In-Memory 모드보다 상대적으로 성능이 좋지 않다.
  • 데이터를 로컬에 저장해 어플리케이션이 종료돼도 데이터가 휘발되지 않는다.
  • H2 Database Engine을 다운로드 받을 수 있는 링크
    https://www.h2database.com/html/main.html
 

H2 Database Engine

H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size     Supp

www.h2database.com

spring:
  application:
    name: qna-project

  h2:
    console:
      enabled: true
      path: /h2-console # 해당 지정 URL로 H2콘솔 접속

  datasource:
    url: jdbc:h2:tcp://localhost/~/documents/h2/h2-test;NON_KEYWORDS=USER  # 메모리 기반
    username: sa
    password: h2test
    driver-class-name: org.h2.Driver

h2 콘솔로 접속

  • 해당 방식은 어플리케이션 실행전에 위에 노란 원기둥 형태의 아이콘을 통해 데이터베이스를 생성 해준 뒤 application.yml에 맞게 설정해야지 콘솔로 접속 가능하다.
  • 추가로 h2 설치후 h2 파일의 bin파일에 들어가서 h2.sh을 실행시키면 된다.

로컬에서 h2 database engine 실행

위의 모든 h2 콘솔은 application.yml에서 지정한 spring: h2: console: path: 설정해준 경로를 통해 접속가능하다.