손영배 블로그 누구나 쉽게 이해하고 습득하기

[H2DB] H2 Database란? 본문

Web/Web Backend Study

[H2DB] H2 Database란?

손영배 2020. 1. 7. 15:06

H2DB

 

H2DB는 자바 기반의 오픈소스 관계형 데이터베이스 관리 시스템(RDBMS)이다.

  • Server mode
  • Embedded mode

두 가지의 in-memory DB 기능 지원한다. *in-memory 데이터 스토리의 메인 메모리에 설치되어 운영되는 방식

 

브라우저 기반의 콘솔모드를 이용할 수 있고, 별도의 설치과정이 없이 용량도 2MB이하로 매우 저용량이다.

가볍기 때문에 빠르고, JDBC API또한 지원하고 있다.

SQL 문법도 다른 DBMS들과 마찬가지로 SQL 지원 가능.

 

위와 같은 장점들 때문에 어플리케이션 개발 단계의 테스트DB로서 많이 이용된다.

 

자바 기반의 DBMS이므로 자바가 설치되어 있어야 한다.

 

Spring Boot가 지원하는 인-메모리 데이터베이스

  • H2
  • HSQL
  • Derby
더보기

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>

spring JDBC 의존성 설정 추가하면  DataSourceAutoConfiguration, JdbcTemplateAutoConfiguration이 적용이 된다.

 

그래서 바로 DB를 사용할 수 있다. 우리가 코드상에 아무런 DB설정을 하지 않는다면 spring boot는 자동으로 기본적로 인-메모리 DB를 설정하게 된다.

 


@Component
public class H2Runner implements ApplicationRunner {

    @Autowired
    DataSource dataSource;

    //JdbcTemplate도 사용가능
    @Autowired
    JdbcTemplate jdbcTemplate;


    @Override
    public void run(ApplicationArguments args) throws Exception {
        try(Connection connection = dataSource.getConnection()) {
        
            Statement statement = connection.createStatement();
            String sql = "CREATE TABLE users (" +
                    "seq bigint NOT NULL AUTO_INCREMENT," +
                    " email varchar(50) NOT NULL, " +
                    "passwd varchar (80) NOT NULL," +
                    "login_count int NOT NULL DEFAULT 0," +
                    "last_login_at dateTime DEFAULT  NULL," +
                    "create_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP," +
                    "PRIMARY KEY(seq)," +
                    "CONSTRAINT  unq_user_email UNIQUE (email)" +
                    ");";
            statement.executeUpdate(sql);

            connection.close();
        }

        //jdbcTemplate.execute();
    }
}

 

DB가 제대로 생성되었는지 확인하는 방법

  • 인텔리J를 쓴다면 DataSource에서 확인가능
  • spring-boot-devtools를 추가
  • spring.h2.console.enabled=true만 추가(application.properties)

브라우저에서 h2-console 접속

'Web > Web Backend Study' 카테고리의 다른 글

@Controller와 @RestController의 차이  (0) 2020.01.07