Spring | h2

DoItDev·2021년 5월 12일
0
post-thumbnail

👂 들어가기 앞서서 ...

항상 aws 에서 개인 db 를 올려 놓고 사용을 많이 한다.
하지만 때로는 aws 보안을 최근에 바꾸어서.. 특정장소의 ip만 허용이 가능하다.
그런점에서 인메모리 상태에서의 db 그럼으로 용량이 작은 db가 필요했고 마침 h2 베이스라는 것을 알게 되었다. 그래서 포스팅에서는 spring boot 에서 h2 베이스를 사용하는 방법을 알아보려고 한다.

🧑🏻‍💻 H2 베이스란?

H2는 자바로 작성된 관계형 데이터베이스 관리 시스템이다.
자바 애플리케이션에 임베드하거나 클라이언트-서버 모드에서 구동할 수 있다.

주요 기능

  1. SQL 표준의 일부가 지원된다.
  2. 인메모리 테이블과 디스크 기반 테이블을 둘 다 생성할 수 있다.
  3. 테이블은 영구적이거나 일시적일 수 있다. 인덱스 타입은 인메모리 테이블의 경우 해시 테이블이거나 트리로 사용 가능하며, 디스크 기반 테이블에는 B 트리를 사용할 수 있다.

[참조]

🥸 Spring 에서 H2 베이스 사용기

당연하게도 gradle 과 yml 를 추가 해줘야된다.
gradle 의 경우 h2베이스를 빌드할 수 있게 dependencies 를 작성을 해주고
yml은 h2 베이스 환경에 맞게 작성을 한다.

build.gradle

dependencies {
    runtimeOnly 'com.h2database:h2'
}

application.yml

spring:
  h2:
    console:
      enabled: true
      path: /h2-console
  datasource:
    url: jdbc:h2:~/test;
    driver-class-name: org.h2.Driver
    username: sa
    password:
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect

이렇게 설정을 해주고 다시 스프링 부트를 실행을 해보자
잘 붙었다고 한다고 가정을 하면 h2-consle 여기로 접속이 가능하다.
(h2-console 에 링크를 걸어 놓았다)

스크린샷 2021-05-12 오후 9 31 59

그럼 위의 사진 처럼 콘솔에 들어 갈 수 있다. 하지만 우린 단순한 프로젝트가 아니다...
바로 스프링 부트 !!
스프링과 빠질 수 없는 시큐리티를 설정을 했을 것 이다. 물론 시큐리티를 설정을 안했다면
에러 페이지가 생성이 되지 않을 것이다.
하지만 필자의 경우 에러 페이지가 생성이 되었다...

스크린샷 2021-05-12 오후 9 32 37

걱정하지말자 아직 설정이 남아 있다!! 아래와 같이 시큐리티 설정하는 곳! 정적파일을 설정하는 곳에서
h2-console uri 를 설정을 해주자!! 그럼 마무리 될 것이다!!

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
                // Http Method OPTIONS
                .antMatchers(HttpMethod.OPTIONS, "/**")
                // h2 console 추가
                .antMatchers("/h2-console/**")
        ;
    }

콘솔에서 커넥션 버튼을 누르면 아래와 같이 db 를 설치 없이 h2 데이터 베이스를 사용이 가능하다!!!

스크린샷 2021-05-12 오후 9 39 06

🚨 TCP 사용법

위의 경우 file 로 되는 거였다... 다시 찾아보니
그래서 tcp 서버로 접속하는 것으로 바꾸기로 하였다.. 인텔리제이에서 사용하기도 편하고 tcp 로 사용을 하면 가비지한 파일도 컴퓨터에 남지도 않는 장점이 있는것 같아서 이다.

application.yml

spring:
  h2:
    console:
      enabled: true
      path: /h2-console
  datasource:
    hikari:
      jdbc-url: jdbc:h2:tcp://localhost:9092/mem:testdb
      driver-class-name: org.h2.Driver
      username: sa
      password:
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect

java config

@Profile("h2")
@Configuration
public class H2Configuration {

    @Bean
    @ConfigurationProperties("spring.datasource.hikari")
    public HikariDataSource dataSource() throws SQLException {
        Server server = defaultRun();
        return new HikariDataSource();
    }

    private Server defaultRun() throws SQLException {
        return Server.createTcpServer(
                "-tcp",
                "-tcpAllowOthers",
                "-ifNotExists",
                "-tcpPort", 9092 + "").start();
    }

}

위와 같이 설정을 작업을 해주면 h2 를 사용하는데 문제가 없을것이다.
에러가 발생을 한다면 댓글로 남겨달라 같이 찾아보면 된다.

스크린샷 2021-05-12 오후 10 22 59

yml 에서 설정을 해준데로 uri 를 작성을 해준다 remote 로 해준다
요즘에는 자동으로 해준다 이렇게 하면 콘솔로 안들어가도 되고 일단 IDE 에서 사용이 가능하다!! 휴...

👊 마치며

진짜 h2 베이스는 필자에 있어서 가장 좋았던것 같다.
어떤점이 좋냐면 일단 aws에 종속이 되지 않는다는점? 굳이 db를 서버에 안올려도 사용이 가능하다는 점..
물론 도커로 로컬에서 올려서 사용을 하면되지만 너무 번거롭고 ... 그렇다고 서버를 사자니 비용이 만만치 않는다!!
그래서 h2 베이스의 경우 너무 좋았다 그런점을 최소화 할 수 있다!
하지만 경량적인 작업만 주로하는 프로젝트에 붙여 놓고 나머지 큰 프로젝트의 경우 당연히 db 서버를 구성해 사용할 계획이다!!

profile
Back-End Engineer

0개의 댓글