-
springboot 애플리케이션 데이터베이스 초기화Spring Boot 2024. 11. 8. 23:58
- Spring boot에서는 데이터베이스 변경에 대한 관리 방법을 제공한다.
- default 설정은 package에 entity를 감지하여 각각의 테이블을 자동 생성한다.
- 데이터베이스를 초기화 하는 방법은 다양한 방법이 있다. 꼭 하나만 선택하여 사용하는 것을 추천한다.
1. JPA를 사용하여 Database를 초기화하는 방법
- 프로젝트를 시작할때 JPA가 DDL generation 기능을 제공한다.
- Entity를 작성하고 애플리케이션을 실행하면 빈 테이블이 생성된다.
spring.jpa.generate-ddl=true # vendor 독립적이고 on/off 할 수 있다
2. Hibernate를 사용하여 Database를 초기화하는 방법
- 외부 환경 변수로 조작
spring.jpa.hibernate.ddl-auto=create # Hibernate에서 제공하는 기능 # none, validate, update, create, create-drop
3. SQL Scripts를 사용하여 Database를 초기화하는 방법
- SpringBoot가 자동으로 optional:classpath*:schema.sql 경로에 schema 파일을 감지하여 자동으로 실행
- optional:classpath*:data.sql 경로에서 SQL 파일을 감지하여 실행
spring.sql.init.mode=always # 사용하기 위해 외부환경 변수 선언, 사용 안하려면 never
- Hibernate EntityManagerFactory가 빈으로 등록되고 SQL이 실행될 수 있게 하는 역할
spring.jpa.defer-datasource-initialization=true
- schema.sql, data.sql 대신에 Flyway 또는 Liquibase 같은 Tool을 사용하는 방법도 있다.
4. @Sql, @SqlGroup, @SqlConfig
- 테스트에 사용할 수 있는 SQL문
@Sql({"/employees_schema.sql", "/import_employees.sql"}) public class SpringBootInitialLoadIntegrationTest { @Autowired private EmployeeRepository employeeRepository; @Test public void testLoadDataForTestClass() { assertEquals(3, employeeRepository.findAll().size()); } } @Test @Sql(scripts = {"/import_senior_employees.sql"}, config = @SqlConfig(encoding = "utf-8", transactionMode = TransactionMode.ISOLATED)) public void testLoadDataForTestCase() { assertEquals(5, employeeRepository.findAll().size()); } @SqlGroup({ @Sql(scripts = "/employees_schema.sql", config = @SqlConfig(transactionMode = TransactionMode.ISOLATED)), @Sql("/import_employees.sql")}) public class SpringBootSqlGroupAnnotationIntegrationTest { @Autowired private EmployeeRepository employeeRepository; @Test public void testLoadDataForTestCase() { assertEquals(3, employeeRepository.findAll().size()); } }
출처 :
반응형'Spring Boot' 카테고리의 다른 글
[springboot 예외 처리 안티패턴 정리] Exception Handling Worst Practice (13) 2024.12.30 Lombok 사용시 주의점 (쓰지 말아야 할 Lombok) (3) 2024.11.12 스프링 개발자가 가장 많이하는 실수 (0) 2024.06.19 Port Adapter 패턴이란? (클린아키텍처) (1) 2024.04.20 DDD 기본개념 톺아보기 (1) 2024.04.20