SpringBoot에 H2 DB 연결

유병수·2023년 4월 18일
0

의존성 설정

DB를 연결하기 위해서 프로젝트에 의존성을 추가해줘야한다.gradle이라면 build.gradle에 maven이라면 pom.xml에 추가하면 된다.

주로 의존성은 이곳에서 확인 가능하다.

maven
<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.1.214</version>
    <scope>test</scope>
</dependency>

gradle
testImplementation group: 'com.h2database', name: 'h2', version: '2.1.214'

h2 같은 경우 자주 쓰이는 라이브러리 같은 경우는 springboot에서 버전을 명시하지않으면 스프링 부트 버전에 맞는 라이브러리의 버전으로 의존성을 자동주입해준다.

화면의 maven이나 gradle 탭을 클릭하면 각자의 의존성을 볼 수 있다.

application.properties 설정

스프링 부트에서 db를 연결할 때 application.properties에 설정정보를 저장해야한다.

username과 password는 h2드라이버에 들어가기 위한 아이디와 비밀번호다.
spring.datasource.url의 내용에 따라 H2를 연결하는 방식이 달라지게 된다.

모드에는 3가지 방식이 존재한다.
1. 임베디드 모드(JDBC를 사용한 로컬 연결)
2. 서버 모드(TCP/IP를 통한 JDBC 또는 ODBC를 사용한 원격 연결)
3. 혼합 모드(동시에 로컬 및 원격 연결)

임베디드 모드

임베디드 모드에서 애플리케이션은 JDBC를 사용하여 동일한 JVM 내에서 데이터베이스를 엽니다. 이것은 가장 빠르고 쉬운 연결 모드입니다. 단점은 데이터베이스가 항상 하나의 가상 머신(및 클래스 로더)에서만 열릴 수 있다는 것입니다. 모든 모드와 마찬가지로 영구 데이터베이스와 메모리 내 데이터베이스가 모두 지원됩니다. 동시에 열리는 데이터베이스 수 또는 열린 연결 수에는 제한이 없습니다.

임베디드 모드에서 I/O 작업은 SQL 명령을 실행하는 애플리케이션의 스레드에 의해 수행될 수 있습니다. 애플리케이션은 이러한 스레드를 중단하지 않을 수 있으며, 스레드 중단 중에 JVM이 I/O 핸들을 닫기 때문에 데이터베이스가 손상될 수 있습니다.

서버 모드

서버 모드(원격 모드 또는 클라이언트/서버 모드라고도 함)를 사용할 때 애플리케이션은 JDBC 또는 ODBC API를 사용하여 원격으로 데이터베이스를 엽니다. 서버는 동일하거나 다른 가상 머신 내에서 또는 다른 컴퓨터에서 시작해야 합니다. 이 서버에 연결하면 많은 응용 프로그램이 동일한 데이터베이스에 동시에 연결할 수 있습니다. 내부적으로 서버 프로세스는 임베디드 모드에서 데이터베이스를 엽니다.

서버 모드는 모든 데이터가 TCP/IP를 통해 전송되기 때문에 임베디드 모드보다 느립니다. 모든 모드와 마찬가지로 영구 데이터베이스와 메모리 내 데이터베이스가 모두 지원됩니다. 서버당 동시에 열리는 데이터베이스 수 또는 열린 연결 수에는 제한이 없습니다.

혼합 모드

혼합 모드는 임베디드 모드와 서버 모드의 조합입니다. 데이터베이스에 연결하는 첫 번째 애플리케이션은 임베디드 모드에서 이를 수행하지만 다른 애플리케이션(다른 프로세스 또는 가상 머신에서 실행 중)이 동일한 데이터에 동시에 액세스할 수 있도록 서버도 시작합니다. 로컬 연결은 데이터베이스가 내장 모드에서만 사용되는 것처럼 빠르지만 원격 연결은 약간 느립니다.

서버는 애플리케이션 내에서(서버 API 사용) 또는 자동으로(자동 혼합 모드) 시작하고 중지할 수 있습니다. 자동 혼합 모드를 사용하는 경우 데이터베이스에 연결하려는 모든 클라이언트(로컬 연결이든 원격 연결이든 관계없이)는 완전히 동일한 데이터베이스 URL을 사용하여 연결할 수 있습니다.

프로젝트에서 나중에 Mysql을 사용할 예정이라서 일단은 h2메모리 방식으로 설정해 두었다. 메모리 방식은 나중에 서버를 내리게되면 데이터 베이스가 다 사라지는 단점이 있지만 간편하게 사용할 수 있기 때문에, 로직을 짤때 확인하기 용이하다.

참고 : https://www.h2database.com/html/features.html#connection_modes

0개의 댓글