// 에드센스

H2 데이터베이스를 사용할 일이 많음에도 불구하고 초기 설정할때마다 삐걱대는게 지겨워져서 한번 정리한다.


1. H2 데이터베이스란?

H2 데이터베이스는 설치가 필요 없고 용량이 매우 가벼우며 웹용 콘솔을 제공하여 개발용 로컬 DB로 사용하기 좋은 데이터베이스이다. H2의 특징을 정리하면 다음과 같다.

  • 스프링 부트가 지원하는 인메모리 관계형 데이터베이스이다.
  • 인메모리로 띄우면 애플리케이션을 재시작할 때마다 초기화된다.
  • 별도의 설치가 필요 없다.
  • 로컬 환경, 테스트 환경에서 많이 사용된다.

http://h2database.com에 들어가서 다운받으면 된다.

 

 


2. Spring boot에서 H2 사용하기

 

build.gradle 설정

runtimeOnly 'com.h2database:h2'

 

 

application.yml 설정

spring:
  h2:
    console:
      enabled: true
      path: /jwt

  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:file:~/Desktop/jwt-h2/jwt;AUTO_SERVER=TRUE
    username: sa
    password:

h2.console.enable : true 는 웹 콘솔을 사용하겠다는 의미

h2.console.path : /jwt는 콘솔의 경로를 의미(나는 jwt 관련 프로젝트를 진행하고 있기에 이름을 이렇게 했다)

 

 

이렇게 하면 h2 웹 콘솔에 접속할 때 

http://localhost:8080/jwt

주소로 들어가면 된다. 

 

 

datasource.url은 로컬에서 어디에 h2 데이터베이스의 정보를 저장할 것이냐는 건데, 나의 경우

~/Desktop/jwt-h2/jwt;AUTO_SERVER=TRUE

로 설정하면 바탕화면에 jwt-h2라는 폴더가 생기고 그 안에 jwt라는 이름으로 저장된다.

 

 

 

이제 웹 콘솔창에서 url 전체를 입력하고 connect를 누르면 사용 가능하다.

jdbc:h2:file:~/Desktop/jwt-h2/jwt;AUTO_SERVER=TRUE

 

 

 


3. 스프링 시큐리티를 사용한다면

스프링 시큐리티에 의해서 h2 콘솔 접근이 차단될 수 있다. 나의 경우는

h2 console localhost에서 연결을 거부했습니다.

라고 뜨며 다음과 같은 화면이 나왔다.

 

 

 

 

이럴땐 스프링 시큐리티의 WebSecurityConfig 클래스에서 h2-console에 대한 접근을 허용해줘야 한다.

@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

	// ... 
	
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.headers().frameOptions().disable();
        http.authorizeRequests()
                .antMatchers("/h2-console/**").permitAll(); // 누구나 h2-console 접속 허용
    
    //...
}

configure 메소드에 위와 같이 h2 콘솔에 대한 접근을 허용해 주면 된다. 그럼 문제 해결

 

 

 

 

 

참고:

+ Recent posts