Spring Boot 공부 일기 <8> - @GeneratedValue

이동휘·2024년 8월 16일

Spring Boot

목록 보기
8/21

1. IDE

Intellij

2. 오늘 공부 내용

@GeneratedValue

  • @GeneratedValue - 엔티티의 기본 키(pk) 값을 자동으로 생성해주는 전략을 지정할 때 사용

GenerationType.AUTO

  • 설명: 기본 전략으로, JPA 구현체가 데이터베이스에 맞는 기본 키 생성 전략을 자동으로 선택합니다.
  • 사용 예: JPA를 처음 사용할 때나, 데이터베이스에 따라 적절한 전략을 자동으로 선택하고 싶을 때 사용합니다.
  • 동작 방식: 대부분의 JPA 구현체에서는 데이터베이스가 지원하는 SEQUENCEIDENTITY 전략을 자동으로 선택합니다. 지원하지 않는 경우, TABLE 전략을 사용할 수 있습니다.

GenerationType.IDENTITY

  • 설명: 데이터베이스의 IDENTITY 컬럼 기능을 사용하여 기본 키를 생성합니다.
  • 사용 예: 주로 MySQL, PostgreSQL 같은 데이터베이스에서 AUTO_INCREMENT를 사용하는 경우 사용합니다.
  • 동작 방식: 데이터베이스가 기본 키의 값을 자동으로 증가시킵니다. INSERT 문이 실행된 후 데이터베이스가 자동으로 생성된 키 값을 반환합니다.
  • 특징: IDENTITY 전략은 기본 키가 생성되기 전까지 엔티티가 미리 저장되지 않기 때문에, 일부 JPA 기능(예: 배치 INSERT)에 제약이 있을 수 있습니다.

GenerationType.SEQUENCE

  • 설명: 데이터베이스의 시퀀스(sequence) 오브젝트를 사용하여 기본 키를 생성합니다.
  • 사용 예: 주로 Oracle, PostgreSQL 같은 시퀀스를 지원하는 데이터베이스에서 사용됩니다.
  • 동작 방식: JPA는 엔티티를 저장할 때마다 시퀀스에서 다음 값을 가져옵니다. 시퀀스를 사용하면 대량의 INSERT 작업에서 성능이 더 나을 수 있습니다.
  • 특징: @SequenceGenerator를 함께 사용하여 시퀀스의 이름과 설정을 지정할 수 있습니다.

GenerationType.TABLE

  • 설명: 키를 생성하기 위해 별도의 테이블을 사용하는 전략입니다.
  • 사용 예: 시퀀스나 IDENTITY 전략을 지원하지 않는 데이터베이스에서 사용하거나, 데이터베이스 독립적으로 키 생성 전략을 구현할 때 사용합니다.
  • 동작 방식: JPA는 지정된 테이블에서 키 값을 관리하고, 새로운 키를 생성할 때마다 이 테이블을 갱신합니다.
  • 특징: 성능이 다른 전략에 비해 떨어질 수 있으며, 여러 트랜잭션에서 동시 접근 시 충돌을 방지하기 위해 동기화가 필요할 수 있습니다.

요약

  • AUTO: JPA 구현체가 데이터베이스에 맞는 전략을 자동으로 선택합니다.
  • IDENTITY: 데이터베이스의 IDENTITY 컬럼을 사용하여 키 값을 자동 생성합니다.
  • SEQUENCE: 데이터베이스 시퀀스를 사용하여 키 값을 자동 생성합니다.
  • TABLE: 별도의 키 생성 테이블을 사용하여 키 값을 관리합니다.

0개의 댓글