✅ H2 란?
H2는 가볍고 빠른 내장형 데이터베이스로, 개발과 테스트 환경에서 자주 쓰이는 도구다.
이 글에서는 H2 데이터베이스의 주요 특징과 Server Mode, In-memory Mode, Embedded Mode라는 세 가지 사용 방식을 살펴볼려고 한다.
금융 IT 환경에서도 간단한 테스트나 프로토타입 개발에 H2는 유용할 것이라 생각한다.
✅ H2 데이터베이스의 특징과 장점
- H2는 자바 기반의 오픈소스 데이터베이스로, 설치와 사용이 간단하다.
📚특징
🚀 가볍고 빠름: 메모리 기반 실행으로 빠른 성능을 제공.
💾 유연한 모드: 서버, 인메모리, 임베디드 모드를 지원.
🛠 스프링 부트와 통합 용이: 최소 설정으로 바로 사용 가능.
🧪 테스트에 최적화: 단위 테스트나 로컬 개발 환경에 적합.
💡 금융 IT에서는 주로 테스트 환경에서 계좌 이체나 결제 로직 검증용으로 H2를 활용한다.실제 프로덕션에서는 MySQL이나 PostgreSQL 같은 엔터프라이즈 DB를 쓰지만, H2는 개발 초기 단계에서 시간을 아껴준다.
✅ H2 사용 방식 3가지
H2는 Server Mode, In-memory Mode, Embedded Mode로 나뉜다. 각 모드는 용도와 설정이 다르다.
Server Mode | ✅ | 외부 | 로컬(파일 시스템) | 배포 용도 |
In-memory Mode | ❌ | 스프링 | 메모리 | 테스트 용도 |
Embedded Mode | ❌ | 스프링 | 로컬(파일 시스템) | 개발 용도 |
♐ Server Mode
- H2를 독립적인 데이터베이스 서버로 실행하는 방식이다. 현업에서 배포 환경에 가까운 설정으로 사용할 때 유용하다.
📚특징
- H2 엔진을 별도로 설치하고 실행.
- 애플리케이션과 DB가 분리되어 여러 앱에서 동일 DB에 접근 가능.
- 데이터는 로컬 파일 시스템에 저장되므로 앱 종료 후에도 유지.
💨사용 사례
여러 서비스가 공유하는 DB가 필요한 프로토타입이나 소규모 배포 환경.
🛠설정
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
💡 금융 시스템에서는 테스트용 계좌 데이터를 여러 앱에서 공유할 때 Server Mode가 유용하다.
♐ In-memory Mode
- H2를 메모리에서 실행하는 방식으로, 데이터가 휘발성이다. 단위 테스트나 빠른 프로토타입에 최적화되어 있다.
📚특징
- H2 엔진 설치 불필요, 스프링 부트 의존성만 추가.
- 데이터는 메모리에 저장되어 앱 종료 시 사라짐.
- 테스트 속도가 빠르고 환경 설정이 간단.
💨사용 사례
결제 로직 단위 테스트, 임시 데이터 처리.
🛠설정
- build.gradle에 H2 의존성 추가
implementation 'com.h2database:h2'
- application.yml 또는 application.properties 설정
# application.yml spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sa password:
# application.properties spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.username=sa spring.datasource.password=
💡 금융 IT에서는 결제 트랜잭션 테스트를 빠르게 돌릴 때 In-memory Mode를 자주 쓴다. 데이터가 사라져도 테스트 케이스에 영향을 안 주니까 편하다.
♐ Embedded Mode
- H2를 애플리케이션에 내장하되, 데이터를 로컬 파일에 저장하는 방식이다. 개발 환경에서 데이터 지속성이 필요할 때 유용하다.
📚특징
- H2 엔진 설치 불필요, 스프링 부트와 통합.
- 데이터는 로컬 파일 시스템에 저장되어 앱 종료 후에도 유지.
- 간단한 애플리케이션 개발에 적합.
💨사용 사례
로컬 개발 환경에서 계좌나 주문 데이터를 지속적으로 테스트.
🛠설정
- build.gradle에 H2 의존성 추가 (In-memory Mode와 동일).
- application.yml 또는 application.properties 설정
# application.yml spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:~/test username: sa password:
# application.properties spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:~/test spring.datasource.username=sa spring.datasource.password=
💡 금융 시스템 개발 중 초기 데이터 모델링이나 로컬 테스트에서 Embedded Mode는 데이터가 유지되니 편리하다.
✅ H2 접속 실습
- 지금은 공부하고 테스트 및 실습을 하는게 주 목적임으로 In-memory Mode, Embedded Mode 를 다뤄보았다.
접속 URL
http://localhost:8080/h2-console/
♐ In-memory Mode
spring:
application.name: jdbc
# H2 Database 설정
datasource:
driver-class-name: org.h2.Driver
url: 'jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE' # H2 DB 연결 주소 (In-Memory Mode)
username: sa # H2 DB 접속 ID (사용자 지정)
password: # H2 DB 접속 PW (사용자 지정)
docker:
compose:
enabled: false
# H2 Console 설정
h2:
console: # H2 DB를 웹에서 관리할 수 있는 기능
enabled: true # H2 Console 사용 여부
path: /h2-console # H2 Console 접속 주소
♐ Embedded Mode
spring:
application.name: jdbc
# H2 Database 설정
datasource:
driver-class-name: org.h2.Driver
url: 'jdbc:h2:~/test' # H2 DB 연결 주소 (Embedded Mode)
username: sa # H2 DB 접속 ID (사용자 지정)
password: # H2 DB 접속 PW (사용자 지정)
docker:
compose:
enabled: false
# H2 Console 설정
h2:
console: # H2 DB를 웹에서 관리할 수 있는 기능
enabled: true # H2 Console 사용 여부
path: /h2-console # H2 Console 접속 주소
✅ 결론
H2 데이터베이스는 Server Mode, In-memory Mode, Embedded Mode로 다양한 환경에 맞게 사용할 수 있다.
금융 IT에서는 테스트와 개발 단계에서 H2를 활용해 빠르게 프로토타입을 만들거나 로직을 검증할 수 있다.
특히 In-memory Mode는 단위 테스트에, Embedded Mode는 로컬 개발에, Server Mode는 배포 환경 시뮬레이션에 적합하다.
'SQL' 카테고리의 다른 글
[DB] 트랜잭션 (3) | 2025.05.01 |
---|---|
[SQL]UPPER/LOWER 대소문자 구분없이 Like 사용 (1) | 2025.03.05 |
[SQL]CSV 파일을 이용해 데이터 가져오기(MY SQL) (0) | 2025.01.20 |
[SQL]불필요한 Query 처리방법(coalesce,<>), Pivot Table (0) | 2025.01.17 |
[SQL]서브쿼리,JOIN (0) | 2025.01.17 |