테스트 - 임베디드 모드 DB

박찬우·2024년 2월 5일

스프링 DB

목록 보기
32/53

임베디드 모드 DB

  • H2 데이터베이스는 자바로 개발되어 있고, JVM안에서 메모리 모드로 동작하는 특별한 기능을 제공한다. 그래서 애플리케이션을 실행할 때 H2 데이터베이스도 해당 JVM 메모리에 포함해서 함께 실행할 수 있다. DB를 애플리케이션에 내장해서 함께 실행한다고 해서 임베디드 모드(Embedded mode)라 한다
  • 애플리케이션이 종료되면 임베디드 모드로 동작하는 H2 데이터베이스도 함께 종료되고, 데이터도 모두 사라진다
  • 애플리케이션에서 자바 메모리를 함께 사용하는 라이브러리처럼 동작하는 것이다.
  • 임베디드 모드는 실제 DB와 다르기 때문에 테이블도 없다. 따라서 테이블을 만들 쿼리파일을 만들어 줘야한다
    • 스프링부트에서는 해당 기능을 제공해준다
    • 경로 : src/test/resources
    • 파일명 : schema.sql

Main

@Import(JdbcTemplateV3Config.class)
@SpringBootApplication(scanBasePackages = "hello.itemservice.web")
public class ItemServiceApplication {

	public static void main(String[] args) {
		SpringApplication.run(ItemServiceApplication.class, args);
	}

	...

	@Bean
	@Profile("test")
	public DataSource dataSource() {
		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;
	}
    
    ...
}
  • jdbc:h2:mem:db : 데이터소스를 만들때 이렇게만 적으면 임베디드 모드(메모리 모드)로 동작하는 H2 데이터베이스를 사용할 수 있다.
  • DB_CLOSE_DELAY=-1 : 임베디드 모드에서는 데이터베이스 커넥션 연결이 모두 끊어지면 데이터베이스도 종료되는데, 그것을 방지하는 설정이다. 이 데이터소스를 사용하면 메모리 DB를 사용할 수 있다.

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)
);

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

  • 스프링 부트는 개발자에게 정말 많은 편리함을 제공하는데, 임베디드 데이터베이스에 대한 설정도 기본으로 제공한다.
  • 스프링 부트는 데이터베이스에 대한 별다른 설정이 없으면 임베디드 데이터베이스를 사용한다.
  • 별도의 설정을 하지 않으면 자동으로 임베디드 모드로 동작한다
    • application.properties 의 DB설정 없어도됨
    • Main에서 빈 등록을 따로 안해줘도 됨
  • 결국 테스트를 위한 DB를 별도로 만들지 않아도 됨 자동으로 임베디드 모드로 만들어 주기 때문임
profile
진짜 개발자가 되어보자

0개의 댓글