Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- CI/CD
- 자바
- Spring
- 웹 서버
- 도커
- vm
- Java
- Spring Security
- Container
- 컨테이너
- web server
- ORM
- mysql
- 스프링
- JPA
- 영속성 컨텍스트
- 백엔드
- 스프링 부트
- spring cloud
- CS
- spring batch
- 배포
- computer science
- virtualization
- 스프링 배치
- 스프링 시큐리티
- 데이터베이스
- HTTP
- 가상화
- spring boot
Archives
- Today
- Total
개발 일기
[H2] H2 데이터베이스 본문
H2 데이터베이스가 소규모 서비스나 단위 테스트에서 주로 사용되어 종종 개발자분들께서 사용하시는걸 본적이 있다.
그래서 H2 Database에 대해 간단하게 정리하는 시간을 가져봤다.
H2 Database에 대해
- H2는 Java로 구현된 작고 가벼운 경량형 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)이다.
- 테스트 환경이나 임베디드 데이터베이스로 많이 사용
- Server Mode/In-memory Mode/Embedded Mode 이렇게 3가지 모드가 있다.
3가지 모드에 대해 하나씩 들여다 보자
In-Memory Mode
- H2 데이터베이스 엔진을 직접 설치하지 않고 애플리케이션 내부의 엔진을 사용하는 방식
- 메모리 기반으로 동작하게 되는 모드로 데이터가 RAM에 저장
- RAM을 사용하다 보니 Server Mode에 비해 상대적으로 성능이 좋다.
- 그렇기 때문에 애플리케이션이 종료되면 RAM에 올라와 있던 데이터는 휘발된다.
➜ 즉, 애플리케이션이 종료되면 데이터도 함께 사라짐. - 위와 같은 특징으로 인해 단위 테스트 등에서 주로 사용된다.
# build.gradle
runtimeOnly 'com.h2database:h2'
# application.yml
spring:
datasource:
url: jdbc:h2:mem:h2-test
driver-class-name: org.h2.Driver
username: sa
password: h2test
h2:
console:
enabled: true
- H2를 의존성으로 추가하면, Spring Boot는 빌드 과정에서 H2 데이터베이스 엔진을 포함하고 있는 .jar 파일이 애플리케이션 의존성에 포함되고, 애플리케이션이 실행될 때 Classpath에서 H2 라이브러리를 감지하여 애플리케이션에 내부에서 H2 엔진이 동작하게 된다. 이 과정 덕분에 별도의 설치 없이 사용할 수 있게 되는 것이다.
Embedded Memory
- 해당 방식의 데이터베이스 동작 방식은 In-Memory Mode와 저장소의 위치만 다르고 다른 사항들은 동일하다.
- 똑같이 H2 DB 엔진이 애플리케이션 의존성에 포함되어 함께 실행되고 종료되는 방식이다.
- 차이점은 데이터를 메모리(RAM)에 저장하는 것이 아닌 로컬에 저장시킨다.
➜ 어플리케이션이 종료돼도 데이터가 휘발되지 않는다. - 따라서 애플리케이션의 통해서만 접근 가능하며 여러 애플리케이션에서 동시에 사용할 수 없다.
# application.yml
spring:
application:
name: qna-project
h2:
console:
enabled: true
path: /h2-console # 해당 지정 URL로 H2콘솔 접속
datasource:
url: jdbc:h2:file:~/documents/qna-project/h2-test;NON_KEYWORDS=USER # 메모리 기반
username: sa
password:
driver-class-name: org.h2.Driver
- 이때 위와 같은 application.yml로 세팅 해놓은 경우 자동으로 지정된 경로에 db 파일이 생성된다.
Server Mode
- 타 데이터베이스와 같이 데이터베이스 엔진을 직접 설치하고 엔진을 구동시켜 사용하는 방식이다.
- 애플리케이션과 데이터베이스는 독립적인 관계가 되기 때문에 여러 애플리케이션에서 동일한 데이터베이스를 사용해야할때 적합하다.
- 모든 데이터의 처리 흐름이 TCP/IP를 통하여 전송되기 때문에 In-Memory 모드보다 상대적으로 성능이 좋지 않다.
- 데이터를 로컬에 저장해 어플리케이션이 종료돼도 데이터가 휘발되지 않는다.
- H2 Database Engine을 다운로드 받을 수 있는 링크
https://www.h2database.com/html/main.html
H2 Database Engine
H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size Supp
www.h2database.com
spring:
application:
name: qna-project
h2:
console:
enabled: true
path: /h2-console # 해당 지정 URL로 H2콘솔 접속
datasource:
url: jdbc:h2:tcp://localhost/~/documents/h2/h2-test;NON_KEYWORDS=USER # 메모리 기반
username: sa
password: h2test
driver-class-name: org.h2.Driver
- 해당 방식은 어플리케이션 실행전에 위에 노란 원기둥 형태의 아이콘을 통해 데이터베이스를 생성 해준 뒤 application.yml에 맞게 설정해야지 콘솔로 접속 가능하다.
- 추가로 h2 설치후 h2 파일의 bin파일에 들어가서 h2.sh을 실행시키면 된다.
위의 모든 h2 콘솔은 application.yml에서 지정한 spring: h2: console: path: 설정해준 경로를 통해 접속가능하다.
'Computer Science > Database' 카테고리의 다른 글
[Database] MySQL Index 적용해보기 (0) | 2025.03.25 |
---|---|
[Database] 윈도우 함수(Window Function) (0) | 2025.02.21 |
[MongoDB] 채팅 데이터 저장을 위한 Mongo DB (0) | 2024.10.01 |
[Redis] Redis(Remote Dictionary Server) 이해하고 사용하기 (4) | 2024.09.22 |
[MySQL] GROUP BY 와 ONLY_FULL_GROUP_BY (1) | 2024.08.28 |