1. 소개

이 기사에서는 임베디드 H2 데이터베이스 를 사용하도록 Spring Boot 애플리케이션을 구성하는 방법을 배우고 H2의 임베디드 데이터베이스가 데이터를 저장하는 위치를 확인합니다.

H2 데이터베이스 는 현재 상업적 지원이 없는 가벼운 오픈 소스 데이터베이스입니다. 다양한 모드에서 사용할 수 있습니다.

  • 서버 모드 – TCP/IP를 통해 JDBC 또는 ODBC를 사용하는 원격 연결용
  • 내장 모드 – JDBC를 사용하는 로컬 연결용
  • 혼합 모드 – 로컬 및 원격 연결 모두에 H2를 사용할 수 있음을 의미합니다.

H2는 메모리 내 데이터베이스 로 실행되도록 구성할 수 있지만 데이터가 디스크에 저장되는 등 영구적일 수도 있습니다. 이 예제의 목적을 위해, 우리는 디스크에 데이터를 가질 수 있도록 지속성을 활성화한 임베디드 모드에서 H2 데이터베이스로 작업할 것 입니다.

2. 임베디드 H2 데이터베이스

H2 데이터베이스를 사용하려면 pom.xml 파일에 h2spring-boot-starter-data-jpa Maven 의존성을 추가해야 합니다.

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <versionId>1.4.200</versionId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <versionId>2.3.4.RELEASE</versionId>
</dependency>

3. H2의 내장 지속성 모드

우리는 이미 H2가 데이터베이스 데이터를 저장하기 위해 파일 시스템을 사용할 수 있다고 언급했습니다. 인메모리 방식과 비교할 때 이 방식의 가장 큰 장점은 애플리케이션이 다시 시작된 후에도 데이터베이스 데이터가 손실되지 않는다는 것입니다.

application.properties 파일 spring.datasource.url 속성을 통해 저장 모드를 구성할 수 있습니다. 이런 식으로 데이터 소스 URL에 mem 매개변수를 추가하고 그 뒤에 데이터베이스 이름 을 추가하여 메모리 내 접근 방식을 사용하도록 H2 데이터베이스를 설정할 수 있습니다 .

spring.datasource.url=jdbc:h2:mem:demodb

파일 기반 지속성 모드를 사용하는 경우 mem 매개변수 대신 디스크 위치에 대해 사용 가능한 옵션 중 하나를 설정 합니다. 다음 섹션에서는 이러한 옵션이 무엇인지 설명합니다.

H2 데이터베이스가 생성하는 파일을 살펴보겠습니다.

  • demodb.mv.db – 다른 파일과 달리 이 파일은 항상 생성되며 데이터, 트랜잭션 로그 및 인덱스를 포함합니다.
  • demodb.lock.db – 데이터베이스 잠금 파일이며 데이터베이스가 사용 중일 때 H2가 다시 생성합니다.
  • demodb.trace.db – 이 파일에는 추적 정보가 들어 있습니다.
  • demodb.123.temp.db – Blob 또는 거대한 결과 집합을 처리하는 데 사용됩니다.
  • demodb.newFile – H2는 데이터베이스 압축을 위해 이 파일을 사용하며 새 데이터베이스 저장소 파일을 포함합니다.
  • demodb.oldFile – H2는 또한 데이터베이스 압축을 위해 이 파일을 사용하며 이전 데이터베이스 저장소 파일을 포함합니다.

4. H2의 임베디드 데이터베이스 저장 위치

H2는 데이터베이스 파일의 저장과 관련하여 매우 유연합니다. 현재 스토리지 디렉토리를 다음과 같이 구성할 수 있습니다.

  • 디스크의 디렉토리
  • 현재 사용자 디렉토리
  • 현재 프로젝트 디렉토리 또는 작업 디렉토리

4.1. 디스크의 디렉토리

데이터베이스 파일이 저장될 특정 디렉토리 위치를 설정할 수 있습니다.

spring.datasource.url=jdbc:h2:file:C:/data/demodb

이 연결 문자열 에서 마지막 청크는 데이터베이스 이름을 나타냅니다 . 또한 이 데이터 소스 연결 URL에서 file 키워드를 놓치더라도 H2에서 관리하고 제공된 위치에 파일을 생성합니다.

4.2. 현재 사용자 디렉토리

현재 사용자 디렉토리에 데이터베이스 파일을 저장하려는 경우 file 키워드 뒤에 물결표 (~) 가 포함된 데이터 소스 URL을 사용합니다 .

spring.datasource.url=jdbc:h2:file:~/demodb

예를 들어, Windows 시스템에서 이 디렉토리는 C:/Users/<current user> 입니다.

현재 사용자 디렉토리의 하위 디렉토리에 데이터베이스 파일을 저장하려면:

spring.datasource.url=jdbc:h2:file:~/subdirectory/demodb

통지 서브 디렉토리가 존재하지 않는 경우가 자동으로 생성됩니다 .

4.3. 현재 작업 디렉토리

현재 작업 디렉토리는 애플리케이션이 시작되는 디렉토리이며 데이터 소스 URL에서 점(.)으로 참조됩니다. 거기에 데이터베이스 파일이 필요한 경우 다음과 같이 구성합니다.

spring.datasource.url=jdbc:h2:file:./demodb

현재 작업 디렉토리의 하위 디렉토리에 데이터베이스 파일을 저장하려면:

spring.datasource.url=jdbc:h2:file:./subdirectory/demodb

하위 디렉토리가 없으면 자동으로 생성됩니다.

5. 결론

이 짧은 예제에서 우리는 H2 데이터베이스의 일부 측면에 대해 논의하고 H2의 내장 데이터베이스가 데이터를 저장하는 위치를 보여주었습니다. 또한 데이터베이스 파일의 위치를 ​​구성하는 방법도 배웠습니다.

전체 코드 샘플은 GitHub에서 사용할 수 있습니다 .

Persistence footer banner