[Toy Project] JPA 시퀀스 생성 로직 IDENTITY VS SEQUENCE (GenerationType)

최지나·2024년 1월 5일

JPA ID 생성 전략

  • 데이터베이스의 엔티티의 고유 식별자를 생성하는 방식
  • JPA entity를 생성하다보면 GenerationType을 어떤걸 쓸지 고민하게 된다 대표적인 ID 생성 전략인 IDENTITY와 SEQUENCE 전략 사이에 어떤 차이가 있는지 알아보자!

SEQUENCE

  • 데이터베이스 시퀀스 객체를 활용하여 기본 키를 생성
  • Oracle, PostgreSQL 등 시퀀스 객체를 지원하는 DB에서 주로 사용
  • 장점: 데이터베이스와 애플리케이션 간의 라운드 트립 최소화
  • 단점: 모든 데이터베이스가 시퀀스를 지원하지는 않음

IDENTITY

  • 데이터베이스의 자동 증가(auto-increment) 기능을 활용하여 기본 키를 생성
  • MYSQL 등의 데이터베이스에서 자주 사용
  • 징점: 구현이 간단하며 데이터베이스가 자동으로 식별자를 관리
  • 단점: 엔티티의 식별자 값을 미리 알 수 없으며 bulk insert와 같은 성능상 이슈가 존재 가능

실습

- DB: MySQL:8.2.0
- JPA : org.springframework.boot:spring-boot-starter-data-jpa:3.1.2

1) SEQUENCE 생성 전략 사용

@Table(name = "member")
public class Member {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  private Long memberId;
...

2) IDENTITY 생성 전략 사용

@Table(name = "member")
public class Member {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long memberId;
...

CREATE TABLE `member` (
  `member_id` bigint NOT NULL AUTO_INCREMENT, // 자동증가 기능 사용
  `contact` varchar(255) NOT NULL,
  ...

참조

Docker로 mysql DB를 띄운 경우 ID 생성 전략을 바꾸기 전에 DB volume을 지워주는 과정이 필요!

#!/bin/bash
docker-compose down
docker volume rm {volumeName}
docker-compose up -d

느낀점

  • PostgreSQL만 쓰다보니 IDENTITY 전략을 사용할 일이 없었는데, 오랜만에(졸업이후 처음이다...ㅎ) MySQL을 사용하면서 IDENTITY 전략에 대해 제대로 알아볼 수 있어서 좋았다!!🤗
profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글