Database
[데이터베이스] 유잔씨의 H2 데이터베이스에 대하여
불타는 오리
2024. 7. 14. 14:38
들어가기 전에
내가 이 글을 작성하는 이유는 정말 킹받기 때문이다.데이터베이스에서 이렇게 오류로 헤매다니. H2가 뭐길래!!!!!!
정리 겸 다시는 실수하지 않기 위해 기록해둔다.
H2란?
H2는 작고 가벼운 자바로 작성된 RDBMS로 제공되는 기능은 제한적이지만 속도가 빠르고 별도의 프로그램 없이 웹 브라우저 기반의 DB 콘솔을 사용할 수 있다. 스프링부트가 지원하는 인메모리 관계형 데이터베이스로, 인메모리로 띄우면 애플리케이션 재기동 때마다 초기화 된다. 다양한 기능이 필요하지 않은 소규모 서비스나 단위 테스트에서 많이 사용 된다.
H2의 3가지 모드
모드 H2 다운로드 실행 주체 DB 저장 위치
모드 | H2 다운로드 | 실행 주체 | DB 저장 위치 |
Server Mode | o | 외부 | 로컬 |
In-Memory Mode | x | 스프링 | 메모리 |
Embedded Mode | x | 스프링 | 로컬 |
Server Mode
- 직접 엔진을 설치 → 실행파일을 다운로드 해야함
- 외부에서 터미널을 통해 H2 서버를 실행해야 한다.
- 서버를 실행하면 스프링에서 application.properties에 서버 주소를 입력해 접속한다.
- 애플리케이션과 상관 없는 외부에서 DB 엔진이 구동한다.
- 데이터가 애플리케이션 외부에 저장되므로 애플리케이션을 종료해도 데이터 사라지지 않는다. → 로컬에 직접 저장 & 사용
In-Memory Mode
- 엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용
- build.gradle + [application.properties](<http://application.properties>)설정을 통해 실행 가능
- 스프링부트 실행 시 함께 H2를 띄움
- 애플리케이션을 실행 시 DB 엔진 함께 실행되고 종료하면 함께 종료된다
- 데이터가 애플리케이션 메모리에 저장되기에 애플리케이션 종료 시 데이터 사라짐
- 데이터베이스가 일시적으로 필요한 경우에 유용
Embedded Mode
- 엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용
- build.gradle + [application.properties](<http://application.properties>)설정을 통해 실행 가능
- 스프링부트 실행 시 함께 H2를 띄움
- 애플리케이션을 실행 시 DB 엔진 함께 실행되고 종료하면 함께 종료된다
- 데이터가 애플리케이션 외부에 저장되므로 애플리케이션을 종료해도 데이터 사라지지 않는다. → 로컬에 직접 저장 & 사용
⇒ 공통적으로 다음 의존성 라이브러리 추가 필수
runtimeOnly 'com.h2database:h2'
H2 실행
Server Mode
버전에 맞게 다운로드 하여 설치한다.
In-Memory Mode
SprinbBoot에서는 이 설정 모두 없어도 된다. 기본 설정이 메모리이기 때문!!!
// application.yml
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:{DB 이름}
username: sa
password:
// application.properties
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:{DB 이름}
spring.datasource.username=sa
spring.datasource.password=
Embedded Mode
// application.yml
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:{DB가 저장될 경로}
username: sa
password:
// application.properties
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:{DB가 저장될 경로}
spring.datasource.username=sa
spring.datasource.password=
Embedded Mode 실행
- C:\Program Files (x86)\H2\bin\h2.bat 실행 → 콘솔 켜진다
- 데이터베이스 생성이러면 User > jpashop.mv.db 가 생성됨
- JDBC URL : jdbc:h2:~/jpashop
- 그 이후부터는 jdbc:h2:tcp://localhost/~/jpashop 으로 접속
마치며
사실 앞으로 H2를 쓸일이 있을지는 모르겠다. 찾아보니까 간단하게 테스트할 때 인메모리 방식을 사용하는 것 같던데. 이번 프로젝트에서는 MySQL을 쓸 예정이기 때문에. 그래도 이왕 강의 듣고 언젠간 필요할 수도 있으니 정리해두었다.
근데 하다보니 언제 인메모리 방식이 필요한지 알았다!!!!! 테스트 한 데이터를 남겨둘 수는 없는데 그래도 확인을 하고 싶을 때 인메모리 방식을 사용하면 확인은 바로 하되 종료하면 바로 날아가기 때문에 테스트 시 유용하다.
그리고 오류나면 일단 삭제>재설치>재부팅 의 과정을 거쳐보자 ^&^