1. 소개
이 기사에서는 임베디드 H2 데이터베이스 를 사용하도록 Spring Boot 애플리케이션을 구성하는 방법을 배우고 H2의 임베디드 데이터베이스가 데이터를 저장하는 위치를 확인합니다.
H2 데이터베이스 는 현재 상업적 지원이 없는 가벼운 오픈 소스 데이터베이스입니다. 다양한 모드에서 사용할 수 있습니다.
- 서버 모드 – TCP/IP를 통해 JDBC 또는 ODBC를 사용하는 원격 연결용
- 내장 모드 – JDBC를 사용하는 로컬 연결용
- 혼합 모드 – 로컬 및 원격 연결 모두에 H2를 사용할 수 있음을 의미합니다.
H2는 메모리 내 데이터베이스 로 실행되도록 구성할 수 있지만 데이터가 디스크에 저장되는 등 영구적일 수도 있습니다. 이 예제의 목적을 위해, 우리는 디스크에 데이터를 가질 수 있도록 지속성을 활성화한 임베디드 모드에서 H2 데이터베이스로 작업할 것 입니다.
2. 임베디드 H2 데이터베이스
H2 데이터베이스를 사용하려면 pom.xml 파일에 h2 및 spring-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의 내장 데이터베이스가 데이터를 저장하는 위치를 보여주었습니다. 또한 데이터베이스 파일의 위치를 구성하는 방법도 배웠습니다.