H2 Database는 자바 기반의 오픈소스 관계형 데이터베이스 관련 시스템이다.
IDE는 Intellij를 사용하였고 Spring boot 프로젝트는 이미 생성되었다는 가정 하에 정리해볼 예정이다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
application.properties 에 다음과 같이 설정해준다.
// h2 데이터베이스 기본 접속 주소 (In-Memory일 경우)
spring.datasource.url=jdbc:h2:mem:testdb;
// h2 드라이버
spring.datasource.driverClassName=org.h2.Driver
// h2 데이터베이스 접속 username
spring.datasource.username=sa
// h2 데이터베이스 접속 password
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
// jpa 사용 시, DDL 적용 모드
spring.jpa.hibernate.ddl-auto=create
여기서 본인은 h2 드라이버 작성하는 부분에서
Cannot resolve class or package 'h2' Cannot resolve class 'Driver'
이런 오류를 보게 되었다.
implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2'
build.gradle에 이렇게 작성해줌으로써 해결하였다. jdbc, h2 Database 관련 라이브러리를 추가한 것이다.
application.properties 에 다음과 같이 설정해준다.
// h2-console 활성화
spring.h2.console.enabled=true
// h2-console의 url 지정
spring.h2.console.path=/h2-console
이러한 설정을 마쳤으면 http://localhost:8080/h2-console 로 접속하면 다음과 같은 화면을 볼 수 있게 된다.
여기서 접속은 되지만 화면에 localhost가 연결을 거부했다는 문구가 떠서 당황했었다. 검색한 결과 WebSecurityConfigurerAdapter를 상속받아 만든 클래스의 오버라이딩 된 configure 함수 내에서 다음과 같은 코드가 필요하다고 한다.
http.headers().frameOptions().disable();
h2 console은 iframe을 사용한다고 한다. Spring security를 사용하면 http header에 X-Frame-Options가 추가되어 iframe으로 동작하던 기능이 정상적으로 동작하지 않아 생겼던 현상이었으며 위의 코드는 X-Frame-Options header를 추가하는 부분을 비활성화한 것이다.
설정을 마치고 Connect 버튼을 누르면 이제 준비 끝이다!