1-4 Springboot 내부 DB 테이블 생성, 자동 매핑, PK설정,활용하기

Springboot
홍윤's avatar
Aug 14, 2024
1-4 Springboot 내부 DB 테이블 생성, 자동 매핑, PK설정,활용하기
 

1.라이브러리

runtimeOnly 'com.h2database:h2'
 
notion image

2.application 설정하기

spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:test spring.datasource.username=sa
 
notion image

3.DB 접속해보기

notion image
 
notion image

4. 하이버네이트 세팅

spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=true
notion image
 

5. Board 클래스 만들기!

notion image
 

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; }
notion image
 

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; }
notion image
 

8. @Entity 식별자 PK 및 auto-incremnt 설정

💡
@Entity는 Java Persistence API (JPA)에서 사용되는 어노테이션으로, 해당 클래스가 데이터베이스 테이블과 매핑된 엔티티임을 나타냅니다. @Entity 어노테이션을 사용하면 JPA가 이 클래스를 통해 데이터베이스 작업을 수행할 수 있습니다.

주요 특징:

  1. 클래스와 테이블 매핑: @Entity로 표시된 클래스는 데이터베이스의 테이블과 연결됩니다. JPA는 이 클래스를 사용하여 데이터베이스에 데이터를 저장하거나 조회하는 작업을 합니다.
  1. 식별자 필드 필요: @Entity 클래스는 반드시 식별자 필드(Primary Key)가 필요합니다. 일반적으로 @Id 어노테이션을 사용하여 식별자를 지정합니다.
  1. 생성자 요구사항: JPA는 매핑된 엔티티를 생성하기 위해 기본 생성자가 필요합니다. 따라서 매개변수가 없는 기본 생성자가 반드시 있어야 합니다.
  1. 속성 매핑: 클래스의 각 필드는 데이터베이스의 컬럼에 매핑됩니다. 추가적인 매핑 설정을 위해 @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; }
notion image
 

9. 내부DB 테이블이 만들어 있는지 확인하기!

💡
spring.jpa.hibernate.ddl-auto=createspring.jpa.hibernate.ddl-auto=none은 Spring Boot 애플리케이션에서 JPA와 Hibernate를 사용하여 데이터베이스 스키마를 처리하는 방식을 제어하는 설정입니다. 이 설정은 Hibernate가 애플리케이션 시작 시 데이터베이스 스키마를 어떻게 처리할지를 결정합니다.

spring.jpa.hibernate.ddl-auto=create

  • 기능: 애플리케이션이 시작될 때 데이터베이스에 존재하는 모든 테이블을 삭제하고, JPA 엔티티에 기반하여 새로운 테이블과 구조를 생성합니다.
  • 특징:
    • 기존의 데이터베이스 스키마가 완전히 삭제되고, 새롭게 정의된 엔티티에 따라 테이블이 재생성됩니다.
    • 주의: 기존의 모든 데이터가 삭제됩니다.
    • 개발 초기나 테스트 환경에서 자주 사용되며, 데이터베이스 구조를 빠르게 초기화하고 싶을 때 유용합니다.
  • 사용 예시:
    • 애플리케이션을 실행할 때마다 테이블 구조를 새로 정의하고, 모든 데이터를 초기화할 필요가 있는 경우.
    • 새로운 기능 개발 중 데이터 구조가 자주 변경되는 경우.

    • spring.jpa.hibernate.ddl-auto=none

    • 기능: Hibernate가 데이터베이스 스키마에 아무런 작업도 하지 않습니다.
    • 특징:
      • 데이터베이스 스키마 생성, 업데이트, 검증 작업이 전혀 수행되지 않습니다.
      • 데이터베이스 스키마가 미리 정의되어 있거나, 외부 도구로 관리되는 경우에 사용됩니다.
      • 운영 환경이나 이미 설정된 데이터베이스에서 주로 사용됩니다.
    • 사용 예시:
      • 이미 생성된 데이터베이스 스키마를 사용하고, Hibernate가 이를 수정하지 않도록 할 때.
      • 스키마 관리가 애플리케이션 외부에서 이루어지는 경우.

      • 요약 비교:

      • create:
        • 스키마 생성: 애플리케이션 시작 시마다 새로 생성.
        • 기존 데이터: 모두 삭제됨.
        • 사용처: 개발 초기, 테스트 환경.
      • none:
        • 스키마 생성: 아무 작업도 하지 않음.
        • 기존 데이터: 유지.
        • 사용처: 운영 환경, 외부에서 스키마 관리.
        운영 환경에서는 보통 none을 사용하고, 개발 환경이나 테스트 환경에서는 create, update 등을 사용하여 스키마를 관리하는 것이 일반적입니다.
notion image
 
Share article

Uni