본문 바로가기
Develop

H2 DB - 3가지 모드(Embedded, In-Memory, Server Mode)

by jaeyoungb 2023. 10. 5.

H2 DB는 Java 기반 경량의 오픈소스 RDBMS입니다.

 

다음과 같은 특징을 가집니다.

 

  • 매우 빠른 성능을 제공하는 오픈소스
  • JDBC를 사용한 Java 애플리케이션과 상호작용 가능
  • 임베디드 모드, 인메모리 모드, 그리고 서버 모드를 지원
  • 영구적으로 저장되지 않는 인메모리 데이터베이스
  • 브라우저 기반의 콘솔 응용 프로그램 제공
  • 경량 데이터베이스(H2의 JAR 파일 크기는 약 2.5MB)

 

각각의 모드에 대한 사용법과 특징은 아래와 같습니다.

 

임베디드 모드(Embedded Mode)

해당 모드는 애플리케이션 내에 포함되어 실행되고, 로컬 파일 시스템에 DB 파일이 영구적으로 저장됩니다.

애플리케이션을 다시 실행해도 데이터가 그대로 유지됩니다.

 

  • jdbc:h2:~/test                                    - 사용자의 홈 디렉토리 안에 test라는 DB 파일로 저장됨
  • jdbc:h2:/data/test                             - /data 폴더 안에 test라는 DB 파일로 저장됨
  • jdbc:h2:./test                                     - 현재 작업중인 폴더 안에 test라는 DB 파일로 저장됨

등의 DB URL을 지정할 수 있고, 해당 경로에 DB 파일이 저장됩니다.

DB 파일 이름은 변경 가능합니다 (test -> custom)

 

인메모리 모드(In-Memory Mode)

해당 모드에서 DB는 메모리 내에만 존재하고, 디스크에 저장되지는 않습니다. 애플리케이션 실행 동안만 유지됩니다.

 

  • jdbc:h2:mem:test
    - 하나의 프로세스에서 여러 JDBC 연결을 허용함. 모든 연결이 닫히면 DB가 메모리에서 제거됨
  • jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
    - 모든 JDBC 연결이 닫혀도 DB가 제거되지 않고, 영구적으로 유지됨. 메모리 누수 발생 가능
  • jdbc:h2:mem:
    - 무기명으로 DB 생성됨. 단일 JDBC 연결만 허용되고, 해당 연결이 종료되면 DB가 제거됨

등의 DB URL을 지정할 수 있습니다.

 

서버 모드(Server Mode)

해당 모드에서 DB는 독립 실행형 서버로 실행되며, 다른 애플리케이션이 함께 접근할 수 있습니다.

애플리케이션을 다시 실행해도 데이터가 그대로 유지됩니다.

 

  • jdbc:h2:tcp://localhost/~/test                       - 사용자의 홈 디렉토리 안에 test라는 DB 파일로 저장됨
  • jdbc:h2:tcp://localhost//data/test                 - /data 폴더 안에 test라는 DB 파일로 저장됨

등의 DB URL을 지정할 수 있고, 해당 경로에 DB 파일이 저장됩니다.

 

 

 

H2 DB는 개발 및 테스트 환경에서 주로 사용됩니다.

 

DB를 영구적으로 저장하려면 Embedded 또는 Server 모드를 사용해야 하고,

In-Memory 모드는 임시 또는 휘발성의 DB로만 사용되어야 합니다.

 

또, Server 모드로 사용하는 경우에는 H2를 먼저 실행시킨 후에 애플리케이션을 실행해야 다음과 같은 에러가 발생하지 않습니다.
Error creating bean with name 'entityManagerFactory' defined in class path resource ...

 

'Develop' 카테고리의 다른 글

조회 쿼리 개선 + 성능 테스트 (Querydsl, nGrinder)  (0) 2024.01.10
API 성능 테스트를 위한 nGrinder 시작하기  (1) 2023.12.25
SQL 쿼리 실행 순서  (3) 2023.09.27
TCP/IP 4계층 모델  (0) 2023.07.12
네트워크 기초  (0) 2023.07.12