[ShowMyCNFT] H2 Database

junghan·2023년 4월 7일
0

SpringBootProject

목록 보기
23/35
post-thumbnail

H2란?

H2는 자바로 작성된 인메모리 데이터베이스입니다. H2 데이터베이스는 파일 시스템이 아니라 메모리에 데이터를 저장하기 때문에, 속도가 빠르고 가벼워서 테스트나 프로토타입 개발 등에 자주 사용됩니다.

H2 데이터베이스는 JDBC 드라이버를 제공하므로, Java나 Kotlin 등의 언어에서 데이터베이스에 접속하여 사용할 수 있습니다. H2 데이터베이스는 내장 모드TCP/IP 서버 모드로 실행할 수 있습니다.

내장 모드는 애플리케이션과 함께 실행되며, 애플리케이션을 종료하면 데이터베이스도 함께 종료됩니다. TCP/IP 서버 모드는 별도의 프로세스로 실행되며, 애플리케이션과 독립적으로 실행됩니다.

Spring Boot에서는 H2 데이터베이스를 쉽게 사용할 수 있도록 스타터 패키지를 제공하고 있습니다. H2 스타터를 사용하면 H2 데이터베이스에 접속하는 데 필요한 의존성과 설정이 자동으로 구성됩니다.


H2 사용법

H2 스타터를 사용하려면, build.gradle.ks 파일에 다음과 같은 의존성을 추가하면 됩니다.

dependencies {
    implementation 'com.h2database:h2'
}

위 코드에서 implementation은 컴파일과 런타임에서 사용하는 의존성을 의미합니다.

그리고 H2 데이터베이스의 JDBC URL은 다음과 같습니다.

jdbc:h2:mem:testdb

예) jdbc:h2:mem://localhost/~/test

위 URL은 "mem:testdb"라는 이름으로 인메모리 데이터베이스를 생성하라는 의미입니다. "mem:" 다음에 오는 부분은 데이터베이스 이름입니다. 이 부분을 자유롭게 변경하여 사용할 수 있습니다.


H2 모드

가장 기본적인 방법은 H2 콘솔을 사용하는 것입니다. H2 콘솔은 웹 기반으로 제공되며, 애플리케이션 실행 시 "/h2-console" 경로로 접속할 수 있습니다.

CONNECT를 누르면 콘솔로 이동도 가능

하지만, 이 방법은 내장모드에서만 사용할 수 있습니다.(로컬) 만약 리모트 서버에서 H2 데이터베이스를 사용하려면 TCP/IP 서버 모드로 실행해야 합니다.

TCP/IP 서버 모드로 실행하려면, 다음과 같이 명령어를 입력합니다.

java -cp h2-1.4.199.jar org.h2.tools.Server -tcp -tcpAllowOthers -tcpPort 9092

위 명령어에서 "h2-1.4.199.jar"는 H2 데이터베이스의 JAR 파일 경로입니다. "-tcp"는 TCP/IP 모드로 실행하라는 의미이며, "-tcpAllowOthers"는 다른 IP에서 접속할 수 있도록 허용하라는 의미입니다. "-tcpPort"는 사용할 포트 번호를 지정합니다.

명령어를 실행한 후, 다른 컴퓨터에서 H2 데이터베이스에 접속하려면 다음과 같이 JDBC URL을 설정하면 됩니다.

jdbc:h2:tcp://localhost:9092/mem:testdb

위 URL에서 "tcp://"는 TCP/IP 모드로 접속하라는 의미이며, "localhost"는 H2 데이터베이스가 실행 중인 컴퓨터의 IP 주소입니다. "9092"는 위에서 설정한 포트 번호이고, "mem:testdb"는 데이터베이스 이름입니다.


h2 쿼리문 보는 법

src/main/resources/ 의 위치에 application.properties 파일을 생성하고 아래의 내용을 작성합니다.

spring.jpa.show_sql=true

결과에서 create table 쿼리를 보면 id bigint generated by default as identity 라는 옵션으로 생성되는데, 이는 H2의 쿼리 문법이 적용되었기 때문입니다.

SQL쿼리 문법을 적용시키려면 아래와 같이 코드를 수정하면 됩니다.

spring.jpa.show_sql=true

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
spring.jpa.properties.hibernate.dialect.storage_engine=innodb
spring.datasource.hikari.jdbc-url=jdbc:h2:mem://localhost/~/test;MODE=MYSQL
spring.h2.console.enabled=true

url=jdbc:h2:mem://localhost/~/test; 👈 url수정할것

MySQL 의 쿼리를 수행해도 정상적으로 작동하기 때문에 아래와 같이 출력되는 쿼리 로그를 MySQL 버전으로 변경할 수 있습니다.

profile
42seoul, blockchain, web 3.0

0개의 댓글