도슐랭스타

H2 DB 설정 본문

Spring Boot project

H2 DB 설정

도도.__. 2025. 4. 14. 15:48

Java로 만든 경량형 관계형 데이터베이스(RDBMS)
메모리 또는 파일 기반으로 동작할 수 있음.
설치 없이 바로 사용 가능함.
개발/테스트 단계에서 굉장히 많이 쓰이는 DB임.

H2의 장점이 뭐지?

가벼움 - 설치 X, JAR로 바로 사용 가능 (내장형)
빠름
-  메모리에서 동작하므로 속도 빠름
개발에 최적
- 실행할 때마다 DB가 초기화되기 때문에 테스트하고 바로 버릴 수 있음. (휘발성) 
웹 콘솔 제공함
- /h2-console로 웹에서 SQL 직접 확인 가능
자동 테이블 생성 가능
- JPA 설정만 해두면 @Entity만으로 테이블 생성됨
JPA 테스트에 적합함 - Repository 테스트, Service 테스트를 할 때 가짜 DB 대신 실제 JPA 작동 방식 그대로 확인 가능.

단점도 있긴 함.

휘발성 메모리 사용 - 서버 끄면 데이터 사라짐 (memory 방식일 경우)
제한된 성능
- 대용량 처리나 복잡한 트랜잭션에 불리함
보안 약함
- 기본 설정으로는 보안에 취약 (운영 환경엔 위험)
제약 조건 부족
- 일부 DB 기능이 MySQL, PostgreSQL보다 부족함

메모리 DB와 파일 DB

타입 URL 설명
메모리 jdbc:h2:mem:testdb 서버 종료 시 데이터 사라짐
파일형 jdbc:h2:file:~/testdb 파일로 저장되므로 유지됨

→ H2는 개발 중 잠깐 쓰고, 운영에서는 MySQL이나 PostgreSQL로 바꿀 예정.


??잠깐 그럼 지금까지는 어떻게 오류가 안나고 잘 작동했던거지???

은 아니고 사실 알고보니

Spring Boot가 기본으로 메모리 H2 DB를 자동 설정해준 상태였던 것!

implementation 'com.h2database:h2'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

build.gradle에 의존성도 다 적용 시켜둬서
→ 이 두 개만 있어도, 별다른 설정 없이 H2가 기본 메모리 모드로 자동 설정돼서 작동됨.

설정이 아무것도 없으면 Spring Boot는 이렇게

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

→ 위 설정들이 자동으로 적용됨.


그럼 이제 직접 설정해볼게요

build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.h2database:h2'
}

의존성 확인하기.

application.properties 설정

# H2 데이터베이스 설정
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# JPA 설정
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

# H2 콘솔 설정
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

설정 끝! 매우 간단하다!


Test

H2 Console 접속 → http://localhost:8080/h2-console

Connect 하면

깨끗하군.
Post 하고 다시 해보면

잘 된다!

반응형

'Spring Boot project' 카테고리의 다른 글

DTO 클래스 생성 Request, Response  (1) 2025.04.13
ReadingRecordController 생성, get/post Test  (1) 2025.04.12
ReadingRecordService 생성  (0) 2025.04.11
ReadingRecordRepository 생성  (0) 2025.04.10
ReadingRecord 엔티티 생성  (0) 2025.04.09
Comments