반응형
스프링 부트에서 ddl-auto 설정은 애플리케이션의 JPA(Hibernate)와 관련된 데이터베이스 스키마 관리 방식을 제어하는 중요한 설정입니다. 이 블로그 게시글에서는 ddl-auto 옵션을 사용하여 스키마 관리 작업을 어떻게 수행할 수 있는지 설명하겠습니다.
1. DDL-AUTO 옵션이란?
ddl-auto 옵션은 JPA 구현체인 Hibernate가 애플리케이션 시작 시 데이터베이스 스키마를 어떻게 처리할지를 결정합니다. 가능한 값들은 다음과 같습니다:
- none: Hibernate가 스키마 관리 작업을 수행하지 않습니다.
- validate: Hibernate가 엔티티와 데이터베이스 스키마를 검증하지만, 변경하지 않습니다.
- update: Hibernate가 엔티티와 데이터베이스 스키마를 비교하여 필요한 변경을 적용합니다.
- create: Hibernate가 애플리케이션 시작 시 기존 스키마를 삭제하고 새로 생성합니다.
- create-drop: Hibernate가 create와 동일하게 동작하지만, 애플리케이션 종료 시 스키마를 삭제합니다.
2. 설정 방법
ddl-auto 설정은 application.yml 또는 application.properties 파일에서 설정할 수 있습니다. 여기서는 application.yml 파일을 사용하여 설정하는 예를 보여드리겠습니다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/your_database
username: your_username
password: your_password
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
show_sql: true
format_sql: true
위 설정 예제에서는 ddl-auto를 update로 설정하여 Hibernate가 애플리케이션 시작 시 스키마를 업데이트하도록 합니다.
3. 각 옵션의 사용 사례
- none:
- 데이터베이스 스키마가 외부에서 관리되고 애플리케이션이 스키마를 변경해서는 안 되는 경우에 사용합니다.
- validate:
- 개발 및 테스트 환경에서 엔티티와 데이터베이스 스키마가 일치하는지 확인하고 싶을 때 사용합니다. 일치하지 않으면 애플리케이션 시작이 실패합니다.
- update:
- 개발 환경에서 엔티티 변경 사항을 데이터베이스에 자동으로 반영하고 싶을 때 사용합니다. 하지만 운영 환경에서는 사용하지 않는 것이 좋습니다.
- create:
- 테스트를 위한 데이터베이스 초기화가 필요할 때 사용합니다. 모든 데이터가 삭제되고 새로운 스키마가 생성되므로 중요한 데이터를 다루는 환경에서는 주의해야 합니다.
- create-drop:
- 일회성 테스트 환경에서 유용합니다. 테스트 후 스키마가 자동으로 삭제되므로 깔끔한 테스트 환경을 유지할 수 있습니다.
4. 예제 코드
다음은 ddl-auto 옵션을 create로 설정하고 초기 데이터를 삽입하는 예제입니다.
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
show_sql: true
format_sql: true
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getters and setters
}
@Component
class DataLoader implements CommandLineRunner {
@Autowired
private UserRepository userRepository;
@Override
public void run(String... args) throws Exception {
userRepository.save(new User("Alice"));
userRepository.save(new User("Bob"));
}
}
interface UserRepository extends JpaRepository<User, Long> {}
위 예제에서 애플리케이션이 시작될 때 User 엔티티에 대한 테이블이 생성되고, DataLoader 클래스가 실행되어 초기 데이터가 삽입됩니다.
5. 마무리
스프링 부트에서 ddl-auto 설정을 통해 데이터베이스 스키마 관리를 쉽게 할 수 있습니다. 개발, 테스트, 운영 환경에 맞는 적절한 설정을 사용하여 안정적인 애플리케이션을 개발할 수 있습니다.
반응형
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] @NoargsConstructor(AccessLevel.PROTECTED), @Builder (1) | 2024.07.23 |
---|---|
[Spring Boot] Flyway를 이용한 DB 형상관리 (0) | 2024.06.26 |
[Spring Boot] Lombok 어노테이션 정리 (0) | 2024.05.23 |
[Spring] Path Variable vs Query Parameter (0) | 2024.03.29 |
[Spring Boot] Access Token & Refresh Token (0) | 2024.02.20 |