H2 데이터베이스
1. 개요
1. 개요
H2 데이터베이스는 자바로 작성된 관계형 데이터베이스 관리 시스템이다. 개발자 Thomas Mueller에 의해 개발되었으며, 최초 버전은 2005년 12월에 출시되었다. 이 소프트웨어는 크로스 플랫폼으로 동작하며, 이클립스 공용 허가서 또는 모질라 공용 허가서 2.0의 듀얼 라이선스 하에 배포되는 오픈 소스 소프트웨어이다.
주요 특징은 자바 애플리케이션 내부에 임베디드 데이터베이스로 포함되어 구동될 수 있으며, 별도의 클라이언트-서버 모드로도 운영이 가능하다는 점이다. 이는 개발, 테스트, 데모, 그리고 소규모 애플리케이션에 특히 유용하게 사용된다. H2라는 이름은 Hypersonic 2를 의미하며, 개발자가 이전에 참여했던 하이퍼소닉 SQL 프로젝트의 후속 개념에서 비롯되었지만, 코드 기반을 공유하지 않는 완전히 새롭게 개발된 엔진이다.
이 데이터베이스는 표준 SQL과 JDBC API를 지원하며, 인메모리 테이블과 디스크 기반 테이블을 모두 생성할 수 있어 사용 사례에 따라 유연하게 선택할 수 있다. 또한 트랜잭션과 다중 버전 동시성 제어를 지원하여 데이터 무결성과 동시 접근을 관리한다. 이러한 특징들로 인해 H2는 스프링 프레임워크를 비롯한 많은 자바 기반 프로젝트에서 기본 내장 데이터베이스 또는 개발용 데이터베이스로 널리 채택되어 사용되고 있다.
2. 주요 기능
2. 주요 기능
2.1. SQL 및 API 지원
2.1. SQL 및 API 지원
H2 데이터베이스는 SQL 표준의 상당 부분을 지원하며, 주된 프로그래밍 API로 JDBC를 제공한다. 이를 통해 자바 애플리케이션에서 표준화된 방식으로 데이터베이스에 연결하고 쿼리를 실행할 수 있다. 또한 H2는 PostgreSQL의 네이티브 프로토콜을 에뮬레이션하여, PostgreSQL용 ODBC 드라이버를 사용하는 클라이언트 애플리케이션과도 호환되도록 설계되었다. 이는 다양한 데이터베이스 도구나 다른 프로그래밍 언어 환경에서도 H2를 쉽게 활용할 수 있게 해주는 특징이다.
주요 API 지원 범위는 다음과 같다.
지원 API/프로토콜 | 주요 용도 및 특징 |
|---|---|
자바 애플리케이션과의 표준 인터페이스. 임베디드 및 클라이언트-서버 모드 모두에서 사용 가능. | |
PostgreSQL 프로토콜 에뮬레이션을 통해 지원되며, 다양한 외부 도구 및 언어에서 접근 가능. |
이러한 다중 API 지원 덕분에 H2는 개발 및 테스트 환경에서 범용적으로 사용되며, 특히 스프링 프레임워크와 같은 자바 기반 애플리케이션에서 내장 데이터베이스로 널리 채택되고 있다.
2.2. 운영 모드
2.2. 운영 모드
H2 데이터베이스는 애플리케이션에 통합되는 임베디드 모드와 네트워크를 통해 접근하는 서버 모드, 두 가지 주요 운영 모드를 제공한다. 이는 개발과 배포의 다양한 단계에서 유연성을 부여하는 핵심 설계 특징이다.
가장 일반적으로 사용되는 모드는 임베디드 모드이다. 이 모드에서는 자바 애플리케이션이 JAR 파일 형태의 H2 엔진을 직접 포함하여 구동한다. 데이터베이스 엔진은 애플리케이션 프로세스 내에서 실행되며, 네트워크 연결 없이 JDBC를 통해 접근한다. 이 방식은 개발 중 단위 테스트나 데모 애플리케이션, 또는 단일 사용자 데스크톱 소프트웨어에 적합하다. 특히 인메모리 데이터베이스로 구성하면 디스크 I/O 없이 휘발성 데이터를 빠르게 처리할 수 있어 테스트 자동화에 널리 활용된다.
반면 서버 모드는 클라이언트-서버 모델로 동작한다. H2는 독립적인 데이터베이스 서버 프로세스로 시작되며, TCP/IP 네트워크를 통해 여러 클라이언트 애플리케이션의 연결을 동시에 수용한다. 이 모드는 웹 애플리케이션이나 여러 사용자가 접근해야 하는 환경에서 표준적인 배포 방식이다. H2는 경량 웹 콘솔을 내장하고 있어, 서버가 실행 중일 때 웹 브라우저를 통해 데이터베이스에 접속하여 SQL 쿼리를 실행하고 관리 작업을 수행할 수 있게 한다.
또한 H2는 혼합 모드라는 독특한 운영 방식을 지원한다. 이는 애플리케이션이 임베디드 모드로 데이터베이스에 먼저 연결한 후, 동일한 데이터베이스 파일에 대해 서버 모드도 함께 시작하는 것이다. 이를 통해 로컬에서 고속으로 접근하면서도, 필요시 외부 도구나 다른 애플리케이션이 네트워크를 통해 동일한 데이터에 접근할 수 있다. 이러한 운영 모드의 다양성은 H2가 단순한 개발용 데이터베이스를 넘어 소규모 프로덕션 환경에서도 활용될 수 있는 가능성을 제공한다.
2.3. 테이블 및 인덱스
2.3. 테이블 및 인덱스
H2 데이터베이스는 인메모리 데이터베이스와 디스크 기반 데이터베이스 모두를 지원하여 유연한 데이터 저장 방식을 제공한다. 사용자는 애플리케이션의 요구사항에 따라 테이블을 영구적으로 저장하거나, 임시 세션 동안만 존재하는 일시적인 테이블로 생성할 수 있다. 이는 개발 및 테스트 환경에서 특히 유용한 기능이다.
테이블의 인덱스는 저장 방식에 따라 최적화된 자료구조를 사용한다. 인메모리 테이블의 경우 빠른 조회를 위해 해시 테이블 기반의 인덱스를 생성할 수 있으며, 정렬된 데이터 접근이 필요할 때는 트리 구조를 선택할 수 있다. 반면, 디스크에 저장되는 테이블의 인덱스는 효율적인 범위 검색과 데이터 관리를 위해 B 트리를 기본적으로 사용한다.
이러한 테이블과 인덱스에 대한 모든 데이터 조작 작업은 ACID 특성을 보장하는 트랜잭션 내에서 수행된다. H2는 데이터의 무결성과 일관성을 유지하면서도 높은 동시성을 제공하기 위해 테이블 수준 잠금과 다중 버전 동시성 제어 방식을 구현하고 있다.
2.4. 트랜잭션 및 동시성 제어
2.4. 트랜잭션 및 동시성 제어
H2 데이터베이스는 모든 데이터 조작 작업을 트랜잭션 기반으로 처리한다. 이를 통해 데이터의 무결성과 일관성을 보장한다. 시스템은 테이블 수준 잠금과 다중 버전 동시성 제어(MVCC)라는 두 가지 주요 메커니즘을 통해 동시성 제어를 구현한다. 테이블 수준 잠금은 특정 테이블에 대한 접근을 제어하는 비교적 단순한 방식이다.
보다 발전된 동시성 제어 방식인 다중 버전 동시성 제어는 데이터를 읽는 작업과 쓰는 작업 간의 충돌을 최소화한다. MVCC는 데이터 항목에 대한 갱신이 발생할 때마다 새로운 버전을 생성하고, 읽기 작업은 트랜잭션이 시작된 시점의 일관된 데이터 스냅샷을 조회한다. 이 방식은 읽기 작업이 쓰기 작업을 기다리지 않도록 하여 전반적인 데이터베이스 성능을 향상시킨다.
또한 H2는 분산 데이터베이스 환경에서 트랜잭션의 원자성을 보장하기 위한 2단계 커밋 프로토콜을 지원한다. 이 프로토콜은 여러 데이터베이스에 걸친 트랜잭션이 모두 성공하거나 모두 실패하도록 조정하는 역할을 한다. 그러나 자바 기반의 H2는 JTA(Java Transaction API)와 같은 분산 트랜잭션을 위한 표준 API는 구현하고 있지 않다.
3. 역사
3. 역사
H2 데이터베이스 엔진의 개발은 2004년 5월에 시작되었다. 이 프로젝트는 자바로 작성된 경량의 관계형 데이터베이스 관리 시스템을 목표로 했으며, 첫 번째 안정 버전은 2005년 12월에 공식 출시되었다.
이 데이터베이스 엔진의 핵심 개발자는 Thomas Mueller이다. 그는 이전에 하이퍼소닉 SQL이라는 자바 데이터베이스 엔진을 개발한 경험이 있다. 하이퍼소닉 SQL 프로젝트가 중단된 후, 그 코드베이스는 HSQLDB 그룹에 의해 유지 관리되기 시작했다. H2는 하이퍼소닉 2(Hypersonic 2)의 약자이지만, HSQLDB의 코드를 포크하거나 공유하지 않고 처음부터 완전히 새롭게 개발되었다.
H2는 임베디드 데이터베이스로서의 사용과 클라이언트-서버 모드 구동을 모두 지원하도록 설계되었다. 이러한 유연성과 높은 성능 덕분에 H2는 주로 개발 및 테스트 환경, 그리고 소규모 애플리케이션에서 널리 채택되었다. 프로젝트는 지속적으로 발전을 거듭하며 안정적인 업데이트를 제공해오고 있다.
4. 라이선스
4. 라이선스
H2 데이터베이스는 오픈 소스 소프트웨어로 배포된다. 사용자는 프로젝트의 요구사항에 따라 두 가지 주요 오픈 소스 라이선스 중 하나를 선택하여 사용할 수 있다. 기본적으로는 이클립스 공용 허가서(EPL)가 적용되며, 대안으로 모질라 공용 허가서(MPL) 2.0을 선택할 수도 있다. 이러한 이중 라이선스 정책은 사용자에게 더 큰 유연성을 제공한다.
이러한 라이선스는 모두 사용자가 소프트웨어를 자유롭게 사용, 수정, 재배포할 수 있도록 허용하는 퍼미시브 라이선스의 특성을 지닌다. 이는 H2가 상용 소프트웨어에 임베드되거나 자바 기반의 다양한 오픈 소스 프로젝트에서 폭넓게 채택되는 데 기여한 요인 중 하나이다. 라이선스 선택은 주로 기존 프로젝트의 라이선스 정책과의 호환성을 고려하여 결정된다.
5. 같이 보기
5. 같이 보기
6. 관련 문서
6. 관련 문서
Oracle - Java DB (Apache Derby)와의 비교 자료 (관련 DBMS 참고)
