티스토리 뷰

이전에 springboot와 hsqldb를 연동해서 간단히 프로토타입을 만들기 위한 준비를 했었다. 

 

Springboot + embedded hsqldb 로 간단히 샘플 프로젝트 만들기

springboot는 이게 정말 왜 되지? 할 정도로 내장되어 있는 편리한 기능들이 많이 있다. 이번에 소개할 내용도 그렇다. 내부 로직을 까보지 않아서 정확한 동작원리는 파악하지 못했지만 그래도 급

oingdaddy.tistory.com

이와 거의 유사한 embedded db가 있는데 이번에 소개할 embedded db는 바로 h2 database이다. 설정하는 방법이나 사용하는 방법 모두 hsqldb와 유사하다. 간단하게 프로토타이핑을 할 수 있도록 DB 구성을 하는 것이라고 보면 된다. 


사용법

pom.xml

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

pom.xml 에는 h2database dependency를 추가해준다. 

 

 

application.yml (or application.properties)

spring:
  datasource:
    url:  jdbc:h2:~/test
    driverClassName: org.h2.Driver
    username: sa
    password: 
    initialization-mode: always
    schema: classpath:h2/schema.sql 
    data: classpath:h2/data.sql
  h2:
    console:
      enabled: true
      path: /h2-console

application.yml에는 h2 database 연결을 위한 datasource 설정을 한다. 위의 설정을 가감없이 그대로 사용하면 된다. 

위처럼 initailization-mode를 always로 설정하면 재기동 될때마다 schema, data로 지정해 놓은 내용들로 초기화를 진행한다. 

 

 

schema.sql

DROP TABLE IF EXISTS user;
CREATE TABLE user(
    id INT PRIMARY KEY, 
    email VARCHAR(30),  
    name VARCHAR(30),  
    tel VARCHAR(30)
);

DROP TABLE IF EXISTS product;

CREATE TABLE product (
    no VARCHAR(5),
    name VARCHAR(50)
);

 

data.sql

INSERT INTO `user` (`id`, `email`, `name`, `tel`) VALUES
    (1, 'kim@naver.com', 'Kim', '010-0000-0001'),
    (2, 'janny@naver.com', 'Janny', '010-0000-0002'),
    (3, 'billie@naver.com', 'Billie Eilish', '010-0000-0003'),
    (4, 'taylor@naver.com', 'Taylor Swift', '010-0000-0004'),
    (5, 'jack@naver.com', 'Jack', '010-0000-0005'),
    (6, 'hong@hanmail.net', '홍길동', '010-0000-0006'),
    (7, 'kang@naver.com', '강감찬', '010-0000-1111');

INSERT INTO `product` (`no`, `name`) VALUES
    ('10001', 'TV'),
    ('10002', 'Notebook'),
    ('10003', 'Phone'),
    ('10004', 'Monitor'),
    ('10005', 'Washer'),
    ('10006', 'Car'),
    ('10007', 'Table'),
    ('10008', 'Beer'),
    ('10009', 'Bike'),
    ('10010', 'Boat');

schema 부분은 DDL을 data 부분에는 DML을 정의하면 된다. 

 

 

Spring과 연동하여 사용을 할때는 다른 DB와 연결하는 것과 동일하다. 일반적인 Spring과 MyBatis에서 사용하는 예를 들면 다음과 같다. 

 

Controller

@Slf4j
@RequestMapping("/user")
@Controller
public class UserController {
    private UserService userService;

    @GetMapping("/all")
    public ResultBean<UserVo> getUsers() {
        ...중략...
        List<UserVo> users = userService.getUsers();
        ...후략...
    }
}

 

Service

@Slf4j
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    
    public List<UserVo> getUsers() {        
        return userMapper.findByAll();  
    }
}

 

Mapper

public interface UserMapper {
    public List<UserVo> findByAll();    
}

 

Mapper sql

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="sample.oingdaddy.dbmapper.UserMapper">
    <select id="findByAll" resultType="sample.oingdaddy.vo.UserVo" fetchSize="1000">
        SELECT id
          , name
          , email
          , tel 
        FROM `user`
    </select>

 

이렇게 한셋을 구성했으면 구성된 app을 기동시켜보자. 

 

h2database 기동화면

기동로그에 H2 console available at '/h2-console'. Database available at 'jdbc:h2:~/test' 부분이 나오는것을 볼 수 있다. 정상 기동이 되었고 H2 console을 사용할 수 있다고 한다. 

 

일단 기동이 되었으니 결과가 잘 나오는지 실행을 해본다. 

{"header":{"resultCode":"001","resultMessage":"Success"},"data":[{"id":1,"name":"Kim","email":"kim@naver.com","tel":"010-0000-0001"},{"id":2,"name":"Janny","email":"janny@naver.com","tel":"010-0000-0002"},{"id":3,"name":"Billie Eilish","email":"billie@naver.com","tel":"010-0000-0003"},{"id":4,"name":"Taylor Swift","email":"taylor@naver.com","tel":"010-0000-0004"},{"id":5,"name":"Jack","email":"jack@naver.com","tel":"010-0000-0005"},{"id":6,"name":"홍길동","email":"hong@hanmail.net","tel":"010-0000-0006"},{"id":7,"name":"강감찬","email":"kang@naver.com","tel":"010-0000-1111"}]}

정상적으로 h2 database에 넣었던 값이 출력되는것을 확인할 수 있다. 

 

 

이렇게 직접 짜놓은 코드로 확인을 할 수도 있지만 H2 console 이라는것을 통해서도 확인할 수 있다. 

방금 기동한 서버의 port가 8080이라면 다음 경로로 접속을 해보자. 

localhost:8080/h2-console

위 경로로 접속을 하면 다음과 같은 화면이 나와야 한다. 

 

H2 console

PL/SQL Developer 와 비슷한 H2 database의 DB 접속 툴이 아주 경량화된 모습으로 사용할 수 있다. Connect를 눌러서 접속을 해보자. 

 

H2 console

 그러면 위와 같이 SQL Developer가 나타난다. 생각보다 괜찮다. 좌측에 만든 테이블의 정보를 확인할 수도 있고 SQL statement를 입력하여 직접 컨트롤 할수도 있다. 

 

H2 console

select * from user 라는 쿼리를 Run 해보면 위와 같은 모습으로 결과값이 출력되는것을 확인할 수 있다. Run을 눌러도 되고 Ctrl + Enter 키를 눌러서도 실행이 가능하다. 별도의 플러그인이나 소프트웨어의 설치 없이 웹에서 아주 간편하게 이용이 가능하다. 

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30