Spring Boot - In-memory DB
업데이트:
스프링 부트 활용
Spring Data 1부 : 소개
SQL DB와 NoSQL
Spring Data 2부 : 인메모리 데이터베이스
스프링 부트가 지원하는 인메모리 데이터베이스에 대해 알아보자
인메모리 데이터베이스
-
스프링 부트가 지원하는 인메모리 데이터베이스로는
H2,HSQL,Derby가 있는데 콘솔환경에서 편하게 사용할 수 있기 때문에H2사용을 권장한다. -
H2와Spring Jdbc사용을 위해 아래와 같이 의존성을 추가한다.<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> -
Spring Jdbc가 클래스패스에 있으면 자동 설정이 필요한 빈을 설정 해준다.DataSource-org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfigurationJdbcTemplate-org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration
DataSource
-
기본적으로 아무런 데이터 소스를 설정하지 않으면 인메모리 데이터소스로 설정해준다.
-
dataSource로 접속할DB정보를 확인할 수 있다.@Component public class SampleRunner implements ApplicationRunner { @Autowired DataSource dataSource; @Override public void run(ApplicationArguments args) throws Exception { Connection connection = dataSource.getConnection(); String url = connection.getMetaData().getURL(); String userName = connection.getMetaData().getUserName(); System.out.println("url : " + url); System.out.println("userName : " + userName); } }// result url : jdbc:h2:mem:9b64dc69-545e-4b2d-bbcb-dbfeb3ec3384 userName : SA -
기본 연결 정보는 아래와 같고,
DataSourceProperties클래스에서 기본설정 되어있는 것을 확인할 수 있다.URL:"testdb"username:"sa"password:""
// DataSourceProperties Class public String determineDatabaseName() { if (this.generateUniqueName) { if (this.uniqueName == null) { this.uniqueName = UUID.randomUUID().toString(); } return this.uniqueName; } if (StringUtils.hasLength(this.name)) { return this.name; } if (this.embeddedDatabaseConnection != EmbeddedDatabaseConnection.NONE) { return "testdb"; } return null; }
H2 Console 사용하는 방법
-
방법 1 :
spring-boot-devtools의존성 추가 -
방법 2 :
spring.h2.console.enabled=true의존성 추가 -
/h2-console로 접속 -
아래 코드와 같이
JdbcTemplate도 빈으로 만들어주기 때문에 사용할 수 있다. -
스프링 Jdbc가 제공하는
JdbcTemplate을 사용하면 더 간결하고 안전하게sql을 사용할 수 있다.Try-catch같은 리소스 반납처리- 에러 계층구조를 잘 설계해놓아서 예외처리시에 좀 더 가독성이 높은 에러메세지 확인 가능
@Component public class SampleRunner implements ApplicationRunner { @Autowired DataSource dataSource; @Autowired JdbcTemplate jdbcTemplate; @Override public void run(ApplicationArguments args) throws Exception { try (Connection connection = dataSource.getConnection()) { Statement statement = connection.createStatement(); String sql = "CREATE TABLE USER(ID INTEGER NOT NULL, name VARCHAR(255), PRIMARY KEY (id))"; statement.executeUpdate(sql); } jdbcTemplate.execute("INSERT INTO USER VALUES (1, 'henry')"); } }

댓글남기기