티스토리 뷰
이전에 springboot와 hsqldb를 연동해서 간단히 프로토타입을 만들기 위한 준비를 했었다.
이와 거의 유사한 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 |