1.라이브러리
runtimeOnly 'com.h2database:h2'

2.application 설정하기
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.username=sa

3.DB 접속해보기


4. 하이버네이트 세팅
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true

5. Board 클래스 만들기!

6. Board 클래스에서 Table 만들기!
public class Board {
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto_incremnt 설정, 시퀸스 설정
@Id // PK 설정
private Integer id;
private String title;
private String content;
private Timestamp createdAt;
}

7. Table Getter,Setter 만들어주기
package shop.mtcoding.blog.board;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.sql.Timestamp;
@Getter
@Setter
@Table(name = "board_tb")
@Entity // DB에서 조회하면 자동 매핑이됨
public class Board {
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto_incremnt 설정, 시퀸스 설정
@Id // PK 설정
private Integer id;
private String title;
private String content;
private Timestamp createdAt;
}

8. @Entity 식별자 PK 및 auto-incremnt 설정
@Entity
는 Java Persistence API (JPA)에서 사용되는 어노테이션으로, 해당 클래스가 데이터베이스 테이블과 매핑된 엔티티임을 나타냅니다. @Entity
어노테이션을 사용하면 JPA가 이 클래스를 통해 데이터베이스 작업을 수행할 수 있습니다.주요 특징:
- 클래스와 테이블 매핑:
@Entity
로 표시된 클래스는 데이터베이스의 테이블과 연결됩니다. JPA는 이 클래스를 사용하여 데이터베이스에 데이터를 저장하거나 조회하는 작업을 합니다.
- 식별자 필드 필요:
@Entity
클래스는 반드시 식별자 필드(Primary Key)가 필요합니다. 일반적으로@Id
어노테이션을 사용하여 식별자를 지정합니다.
- 생성자 요구사항: JPA는 매핑된 엔티티를 생성하기 위해 기본 생성자가 필요합니다. 따라서 매개변수가 없는 기본 생성자가 반드시 있어야 합니다.
- 속성 매핑: 클래스의 각 필드는 데이터베이스의 컬럼에 매핑됩니다. 추가적인 매핑 설정을 위해
@Column
,@ManyToOne
,@OneToMany
등과 같은 다른 JPA 어노테이션을 함께 사용할 수 있습니다.
package shop.mtcoding.blog.board;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import java.sql.Timestamp;
@Getter
@Setter
@Table(name = "board_tb")
@Entity // DB에서 조회하면 자동 매핑이됨
public class Board {
@GeneratedValue(strategy = GenerationType.IDENTITY) // auto_incremnt 설정, 시퀸스 설정
@Id // PK 설정
private Integer id;
private String title;
private String content;
private Timestamp createdAt;
}

9. 내부DB 테이블이 만들어 있는지 확인하기!
spring.jpa.hibernate.ddl-auto=create
와 spring.jpa.hibernate.ddl-auto=none
은 Spring Boot 애플리케이션에서 JPA와 Hibernate를 사용하여 데이터베이스 스키마를 처리하는 방식을 제어하는 설정입니다. 이 설정은 Hibernate가 애플리케이션 시작 시 데이터베이스 스키마를 어떻게 처리할지를 결정합니다.spring.jpa.hibernate.ddl-auto=create
- 기능: 애플리케이션이 시작될 때 데이터베이스에 존재하는 모든 테이블을 삭제하고, JPA 엔티티에 기반하여 새로운 테이블과 구조를 생성합니다.
- 특징:
- 기존의 데이터베이스 스키마가 완전히 삭제되고, 새롭게 정의된 엔티티에 따라 테이블이 재생성됩니다.
- 주의: 기존의 모든 데이터가 삭제됩니다.
- 개발 초기나 테스트 환경에서 자주 사용되며, 데이터베이스 구조를 빠르게 초기화하고 싶을 때 유용합니다.
- 사용 예시:
- 애플리케이션을 실행할 때마다 테이블 구조를 새로 정의하고, 모든 데이터를 초기화할 필요가 있는 경우.
- 새로운 기능 개발 중 데이터 구조가 자주 변경되는 경우.
- 기능: Hibernate가 데이터베이스 스키마에 아무런 작업도 하지 않습니다.
- 특징:
- 데이터베이스 스키마 생성, 업데이트, 검증 작업이 전혀 수행되지 않습니다.
- 데이터베이스 스키마가 미리 정의되어 있거나, 외부 도구로 관리되는 경우에 사용됩니다.
- 운영 환경이나 이미 설정된 데이터베이스에서 주로 사용됩니다.
- 사용 예시:
- 이미 생성된 데이터베이스 스키마를 사용하고, Hibernate가 이를 수정하지 않도록 할 때.
- 스키마 관리가 애플리케이션 외부에서 이루어지는 경우.
create
:- 스키마 생성: 애플리케이션 시작 시마다 새로 생성.
- 기존 데이터: 모두 삭제됨.
- 사용처: 개발 초기, 테스트 환경.
none
:- 스키마 생성: 아무 작업도 하지 않음.
- 기존 데이터: 유지.
- 사용처: 운영 환경, 외부에서 스키마 관리.
spring.jpa.hibernate.ddl-auto=none
요약 비교:
운영 환경에서는 보통
none
을 사용하고, 개발 환경이나 테스트 환경에서는 create
, update
등을 사용하여 스키마를 관리하는 것이 일반적입니다.
Share article