티스토리 뷰
이전에 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을 기동시켜보자.

기동로그에 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
위 경로로 접속을 하면 다음과 같은 화면이 나와야 한다.

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

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

select * from user 라는 쿼리를 Run 해보면 위와 같은 모습으로 결과값이 출력되는것을 확인할 수 있다. Run을 눌러도 되고 Ctrl + Enter 키를 눌러서도 실행이 가능하다. 별도의 플러그인이나 소프트웨어의 설치 없이 웹에서 아주 간편하게 이용이 가능하다.
끝!
'Framework > Spring' 카테고리의 다른 글
spring-boot-starter, parent 로 dependency 관리하기 (0) | 2021.02.10 |
---|---|
Spring Validation Message properties 파일을 통해 관리하기 (2) | 2021.02.09 |
Springboot 에서 @ComponentScan 설정 및 사용법 (2) | 2021.01.14 |
Springboot + Redis 연동하는 초간단 샘플 만들어보기 (3) | 2021.01.05 |
Spring properties 사용시 UnsatisfiedDependencyException: Could not resolve placeholder 오류 조치 (0) | 2020.12.29 |