
H2 databse란?
다들 프로젝트를 진행하면서 처음 접하거나 배우는게 MySql / Oracle 같은 대중적인 데이터베이스 일것이다.
이미 많은 회사가 MySql 혹은 Oracle을 사용하기도 하고, 개발을 공부하는데 반드시 접해볼 수 밖에 없는 데이터 베이스이기 때문이다.
그런데 최근에 Java를 공부하면서 H2 Database 라는걸 처음 알게 되었다. 이건 또 뭔가?
H2 Database는 Java로 작성된 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)이다.
즉, Java에서 제공해주는 데이터베이스 라는 뜻이 된다.
H2 database 언제 사용하나?
"그렇다면 도대체 어떤 H2 database 는 언제 사용해야하나요? 그냥 MySql / Oracle 사용하면 되는거 아닌가요?"
반은 맞고 반은 틀리다고 생각한다. 필자가 생각하기로는 가장 중요한건 내가 진행할 프로젝트나 설계할 서비스에 맞는 DB를 선택해야 하는 지식을 가지고 있어야 한다고 생각한다.
H2 database 장점
- 임베디드 및 서버 모드 : 애플리케이션에 임베디드할 수 있으며, 독립적인 서버로도 실행
- 빠른 속도 : 메모리 내 데이터베이스로 사용할 수 있어 매우 빠른 속도
- 작은 크기 : 데이터베이스의 크기가 작아 시스템 자원을 적게 소모
- 다양한 플랫폼 지원 : Java로 작성되어 다양한 운영체제에서 사용
- SQL 표준 준수 : 표준 SQL을 지원하여 다른 데이터베이스로의 마이그레이션이 용이
H2 database 단점
- 대규모 데이터 처리 한계 : 대규모 데이터 처리가 필요한 경우 성능이 저하
- 기능 제한 : 다른 상용 데이터베이스 시스템에 비해 일부 고급 기능이 부족
- 임베디드 환경 한계 : 임베디드 모드에서는 다중 사용자 환경에서의 동시성 처리에 제약
- 커뮤니티 지원 제한 : 오픈 소스 프로젝트로서 커뮤니티 지원이 제한적일 수 있으며, 상용 지원이 필요할 경우 선택지가 적음
그래서 언제 사용해?
위의 장점과 단점을 읽어보고 정리를 해보면 H2 database는 간단하고 가벼운 데이터를 빠르게 처리할 수 있는 장점을 가지고 있다.
즉, 빠른 테스트 주기와 간편한 설정이 필요할 때, 단기적인 데이터 저장이 필요하고, 빠르게 구축해야하는 프로토타입 프로젝트일 때 H2 database가 최고의 선택 이 될 수 있다. 하지만 대규모 데이터 처리 (전자상거래, 블로그) 등의 서비스를 구축할 때는 다른 DB를 고려해볼 필요가 있겠다.
H2 databse 사용 방식 3가지
H2 database는 총 세가지 방식으로 사용할 수 있다.
- Server Mode(서버모드) :
서버모드는 독립된 서버로 데이터베이스를 실행하여 애플리케이션과 상관 없는 외부 DB엔진이 구동
- 직접 엔진을 설치하여 사용
- 데이터가 애플리케이션 외부에 저장되므로 애플리케이션을 종료해도 데이터가 사라지지 않음
- 다중 사용자 환경에 적합 - In-memory Mode(인 메모리 모드) :
데이터 베이스를 메모리 내에 생성하고, 애플리케이션이 종료되면 데이터베이스와 데이터가 모두 사라지는 방식
- 엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용
- build.gradle 및 application.properties 설정을 통해 실행 가능하
- 데이터가 애플리케이션 메모리에 저장되므로 애플리케이션을 종료하면 데이터가 사라짐
- 애플리케이션을 실행하면 DB엔진이 함께 실행되고 애플리케이션을 종료하면 DB엔진이 함께 종료 - Embedded Mode(임베디드 모드) :
데이터 베이스를 애플리케이션 외부에 저장하므로, 애플리케이션을 종료해도 데이터가 사라지지 않음
- 엔진을 설치하지 않고 애플리케이션 내부의 엔진을 사용하는 방식
- build.gradle 및 application.properties 설정을 통해 실행 가능
- 애플리케이션을 실행하면 DB 엔진이 함께 실행되고 애플리케이션을 종료하면 DB 엔진이 함께 종료
- 데이터가 애플리케이션 외부에 저장되므로 애플리케이션을 종료해도 데이터가 사라지지 않음
사용 방식 표로 보기
'JAVASPRING > study' 카테고리의 다른 글
GlobalException (0) | 2024.06.21 |
---|---|
JAVA SPRING / SMTP 이메일 인증하기 (0) | 2024.06.07 |
Controller / Service / Repository로 나누는 이유는 뭘까? (0) | 2024.05.28 |