이번에 공부 겸 테스트 데이터베이스를
매번 설치하는게 번거로워서 가볍게 사용할 DB로 H2 Database 를 설치하기로 하였다.
H2 ?
H2는 Java로 작성된 관계형 데이터베이스 관리시스템이다. 자바 애플리케이션에 임베드하거나 클라이언트-서버 모드에서 구동할 수 있다.
SQL 표준의 일부가 지원되고,
주 프로그래밍 APi는 SQL과 JDBC이지만 데이터베이스 또한 PostgreSQL 서버처럼 동작하기 위해 PostrgreSQL ODBC를 사용하여 지원한다.
인메모리 테이블과 디스크 기반 테이블을 둘 다 생성할 수 있다.
Download
아래 있는 H2 사이트에서 다운로드가 가능하다.
나는 맥북을 사용하고 있어서 'Platform-Independent.Zip'을 설치하였다.

H2 Download Link
Downloads
Downloads Version 2.2.220 (2023-07-04) Windows Installer (SHA1 checksum: 7b98de1c5c741d793f77c4993ac527dc33b91a4b) Platform-Independent Zip (SHA1 checksum: 5cb2f9c43af14b56feab8ab4717f872a0dde83b8) Version 2.1.214 (2022-06-13) Windows Installer (SHA1 check
www.h2database.com
Run
다운로드 한 H2.zip 파일의 압축을 풀고,
/h2/bin/h2.sh 파일을 실행 시킨다.

* h2.bat : 윈도우용
* h2.sh : 리눅스, 맥
실행은 terminal 에서 {경로}/h2.sh 를 실행하면 된다.

실행 시키면 아래 이미지처럼 웹콘솔이 실행된다.
콘솔창을 다시 접속하고 싶다면 브라우저 주소창에 http://localhost:8082 를 입력해서 콘솔에 접속하면 된다.

* JDBC URL : 데이터베이스 파일 경로 ( jdbc:h2:{원하는 경로}/{데이터베이스 이름} )
정보 입력 후,
연결 또는 연결 시험 버튼을 누른다.

연결 후에, JDBC URL 에 적은 경로에 가면 test.mv.db 파일이 생성되어 있다.
Spring Boot Connect
스프링 부트 연결 시에,
* build.gradle 파일에 의존성 주입
dependencies {
...
runtimeOnly 'com.h2database:h2' // h2 database 의존성 주입
...
}
* application.yaml 파일에 접속 정보 입력
spring:
# H2
h2:
console:
enabled: true # H2 Console을 사용 여부
path: /h2-console # H2 Console의 Path
# H2 Database 연결 정보
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:~/development/h2/test # H2 접속 시 작성한 JDBC URL
username: sa
password:
Error
하지만 위에 작성한 URL 로 Spring boot로 만든 서버를 실행 한다면 아래 이미지처럼 에러가 발생한다.

위 문제의 원인은 StackOverFlow에서 확인이 가능했습니다.

H2 database error: Database may be already in use: "Locked by another process"
I am trying to use the H2 database from a Java application. I created the database and its tables through the H2 Console and then I try to connect from Java using Connection con = DriverManager.
stackoverflow.com
해결 방법은 tcp 통신으로 정의해주는 것인데,
application.yaml 파일을 수정해주면 된다.
웹 콘솔에서도 동일하게 접속해도 되지만 테스트 해봤을때는 YAML 파일만 수정해도 실행이 되었다.
datasource:
...
# url: jdbc:h2:~/development/h2/test # H2 접속 정보
# 아래처럼 url 값을 변경해준다.
url: jdbc:h2:tcp://localhost/~/development/h2/test # H2 접속 정보
...

해당 문제에 대한 해결 법은 김영한 님의 인프런 강의에서도 나왔었는데, 질문 글에도 있어서 링크 남깁니다.
Database may be already in use: null. 에러 발생 ㅠㅠ - 인프런 | 질문 & 답변
영한님 안녕하세요! 어제 답변주시거 해결하고 다음강의 듣는 중에 또 문제가 생겼습니다 ㅠ_ㅠ1. 터미널에서 ./h2.sh 명령어로 실행2. localhost:8082로 접속3. member 테이블생성4. 강의를 따라가면서
www.inflearn.com
'DEV > DataBase' 카테고리의 다른 글
| [DataBase] ACID 란? (3) | 2023.04.02 |
|---|