Search
Duplicate
📒

[Database Study] 04-x. 테스트 - 임베디드 모드 DB

상태
미진행
수업
Database Study
주제
4 more properties
참고

임베디드 모드 DB

NOTE
테스트 케이스를 실행하기 위해서 별도의 데이터베이스를 설치하고, 운영하는 것은 상당히 번잡한 작업이다..

임베디드 모드

NOTE
H2 데이터베이스는 자바로 개발되어 있고, JVM안에서 메모리 모드로 동작하는 특별한 기능을 제공한다.
그래서 애플리케이션을 실행할 때 H2 데이터베이스도 해당 JVM 메모리에 포함해서 함께 실행할 수 있다
애플리케이션에서 자바 메모리를 함꼐 사용하는 라이브러첨 동작하게 한다!

임베디드 모드 직접 사용

@Bean @Profile("test") // 프로필이 test 인 경우에만 데이터소스를 스프링 빈으로 등록 public DataSource dataSource() { log.info("메모리 데이터베이스 초기화"); DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.h2.Driver"); dataSource.setUrl("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1"); dataSource.setUsername("sa"); dataSource.setPassword(""); return dataSource; }
Java
복사
jdbc:h2:mem:db
이 부분이 중요하다! → dataSource를 만들 때 이렇게 적으면 임베디드(메모리) 모드로 동작이 가능하기 때문
DB_CLOSE_DELAY=-1
임베디드 모드에서는 데이터베이스 connection 연결이 모두 끊어지면 데이터베이스도 종료되는데, 그것을 방지하기 위한 설정
그런데 실행하면 메모리 DB에 아직 테이블이 작성되지 않아 오류가 발생한다.

기본 SQL 스크립트를 사용해서 데이터베이스를 초기화하는 기능

NOTE
JDBCJdbcTemplate를 직접 사용해서 테이블을 생성하는 DDL을 호출해도 되지만, 너무 불편해진다.
스프링 부트SQL 스크립트를 실행해서 애플리케이션 로딩 시점에 데이터베이스를 초기화 하는 기능을 제공한다.
다음 파일을 //src/test/resources/schema.sql에 생성하면 된다. (파일이름과 위치가 꼭 맞아야 한다!)
drop table if exists item CASCADE; create table item ( id bigint generated by default as identity, item_name varchar(10), price integer, quantity integer, primary key (id) );
SQL
복사
테스트에서 사용할 테이블 생성

스프링 부트와 임베디드 모드

NOTE
사실 위의 기능 다 몰라도된다. 어차피 스프링부트가 알아서 만들어준다
별다른 정보가 없다면 스프링 부트는 임베디드 모드로 접근하는 DataSource를 만들어서 제공한다.