토이 프로젝트 배우게 된 것들 & 오류 해결🐰

Spring Boot에서 H2 데이터베이스 연결

j_estory 2022. 11. 10. 20:10
  • JPA에 대해 좀 더 깊이 있는 공부를 하고 싶어서 JPA를 활용한 프로젝트를 시작해보기로 결정했다. 
  • spring web project를 만들고 JPA 라이브러리, Lombok 라이브러리 등 프로젝트에 필요한 기본적인 라이브러리 의존성을 추가해줬다.
  • 다음은 db 연결!!

1️⃣ dependency 추가

  • 본인 프로젝트는 gradle 의존성 추가
Implementation 'com.h2database:h2'

 

2️⃣ application properties 추가

 

스프링 부트에서 DB 연결을 할 때는 application properties에 설정을 한다. 

  • H2 DB 또한 다른 DB들과 마찬가지로 application properties에 H2 DB의 설정 정보를 입력해야
    JPA나 Mybatis에서 사용할 수 있다.
# 스프링 부트에서 DB 연결을 할 때 yml(properties)에서 설정을 한다.
spring:
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:tcp
    username: sa
    password:
  • username 및 password는 H2 DB의 사용자 이름과 패스워드를 입력하면 된다. 
    • 만일 패스워드가 설정되어 있지 않으면 패스워드 부분은 빈 값으로 두면 된다. 

⭐️ 중요한 부분 ⭐️

  • spring.datasource.url
    • 이 부분을 어떻게 설정하느냐에 따라서 H2를 연결하는 방식이 달라진다.

1) 인메모리 방식

spring:
	datasource:
    	url: jdbc:h2:../test

위와 같이 입력한 경우, H2 DB는 스프링 부트 어플리케이션이 실행되었을 때 메모리 내에서 동작하고,

스프링 부트 어플리케이션이 종료되면 그대로 데이터가 사라진다. 

따라서 !!

간단한 스프링 부트 어플리케이션에 작성해 놓은 간단한 CRUD 기능을 테스트 하기에 좋은 방식이다.

☝🏻 대신, 어플리케이션이 종료되면 그대로 데이터가 사라지므로 데이터를 확인 할 수 없다.

 

또한 해당 방식은 어플리케이션의 라이브러리를 통해 구동되는 방식으로 H2 DB가 설치되어 있지 않아도 사용 가능하다.

spring:
     h2:
       console:
            # 인메모리로 돌아가는 H2 DB에 접속해서 어플리케이션이 돌아가는 동안 데이터 확인 가능
            enabled: true 
            # 콘솔 주소를 설정할 경우 'localhost:{스프링부트 포트}/h2-console'로 인메모리 DB에 접속 가능
            path: /h2-console

❌ 주의점 ❌

인메모리 방식을 사용할 경우, 

entity와 필요한 sequence가 DB에 생성되어 있지 않은 상태로 DB를 사용하면 에러가 발생한다.

spring:
   jpa:
     database-platform: org.hibernate.dialect.H2Dialect
     hibernate:
        ddl-auto: create-drop

따라서, entity와 sequence를 자동 생성하도록 해야 한다.

 

2) TCP 서버 방식

인메모리와 다르게 어플리케이션이 종료되더라도 데이터가 사라지지 않는 방식

로컬에 설치되어 있는 H2 DB를 서버 방식으로 연결하여 사용

인메모리 방식에서 했던 설정(spring.h2.console, spring.jpa.hibernate.ddl-auto) 방식 설정 안해도 된다.

 

참고 :

   H2 DB를 설치하면 설정되어 있는 기본 로컬 주소: http://192.168.0.103:${설정된 포트}

 

- 내가 사용할 방식

일단 h2 DB 인메모리 방식 사용

  • h2 DB 의존성 추가

build.gradle

  • application.yml 파일에 설정 추가

application.yml

  • h2 console 띄우기

h2-console

접속 정보: localhost:8080/h2-console

JDBC URL : yml 파일에 정의 해두었던 jdbc:h2:~/test로 설정