Springboot를 사용하면서 간단하게 인메모리 데이터베이스 구성하여 확인하기 위해 사용합니다.
1. dependency 추가 (maven)
- DB연결을 하기 위한 jdbc 인터페이스 추가
- h2 dependency를 추가 (사용하는 DB에 따라 맞는 dependency를 추가합니다.)
<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>
2. Configuration
application.yml (Springboot 프로젝트에 포함된 application.properties 또는 application.yml에 설정)
spring:
h2:
console:
enabled: true
path: /h2-console
datasource:
url: jdbc:h2:~/test
driver-class-name: org.h2.Driver
username: sa
password:
initialization-mode: always
sql:
init:
mode: always
path :
- 브라우저 접속시 url (ex: localhost/h2-console)
sql.init.mode: (기본값은 never)
- classpath 루트에 있는 schema.sql로 데이터 베이스 스키마 생성하는 기능을 기본적으로 embedded DB에만 지원.
다른 DB사용시에는 initialization-mode: always 설정을 해줘야 프로젝트 runtime시에 schema.sql이 실행 됩니다.
(저는 jpa 설정 때문인지 embedded DB인데도 자동 생성되지 않아서 설정했습니다.)
sql.init.mode : always 설정시 classpath 루트에 있는 schema.sql, data.sql를 읽어 생성합니다. (yml설정을 통해 path나 파일명 변경 가능)
- schema.sql : DDL 데이터 구조문
- data.sql : DML 명령문
3. Spring에서 JPA / Hibernate
- H2 DB와 hibernate 사용시 충돌이 발생할 수 있는 부분이 있음
- spring.jpa.generate-ddl=true (properties 기준) 설정시Spring은 EntityScan을 통해 @Entity 애노테이션이 명시한 클래스를 찾아
DDL문을 생성합니다.
- Hibernate는 classpath 루트의 import.sql를 읽어 프로젝트 runtime시 실행 됩니다.
만약 Spring이 인식하는 schema.sql, data.sql과 import.sql 내용이 중복된다면 오류가 발생할 수 있습니다.
추가로 Springboot 2.5 이후 버전 사용시 hibernate와 data.sql 추가 사용설정시 참조블로그입니다.
- https://sdy-study.tistory.com/272 (Spring Boot 2.5 이후 버전과 Hibernate 와 data.sql)
'IT > Spring' 카테고리의 다른 글
Spring Profile 설정법 (0) | 2022.01.07 |
---|---|
DB Replication에 따른 Spring 설정 (0) | 2021.12.10 |
Spring Security 기본 API, filter (0) | 2021.07.08 |
XML to JSON 변환하기 (java) (386) | 2021.06.08 |
Spring Boot 프로젝트 만들기 (with. 이클립스 Maven) (441) | 2018.06.07 |
댓글