@GeneratedValue란?

lavender_je
|2025. 4. 7. 11:43
728x90

📌 @GeneratedValue란?

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
  • @GeneratedValue기본 키(PK) 값을 자동으로 생성해주는 어노테이션이야.
  • 주로 @Id함께 사용돼.
  • DB마다 기본 키 생성 방식이 다르기 때문에, 전략(strategy) 을 지정할 수 있어.

 

 


🧩 사용 목적

우리가 엔티티를 저장할 때마다 id를 일일이 지정하지 않아도, JPA가 알아서 적절한 값을 생성해서 넣어줘. → Insert할 때 PK를 자동으로 생성해주는 것!

 


🏷️ 주요 전략 4가지 (strategy)

전략 이름 설명 사용되는 DB
IDENTITY DB의 auto_increment 사용 MySQL, MariaDB
SEQUENCE DB의 sequence 객체 사용 Oracle, PostgreSQL
AUTO JPA가 DB에 맞게 자동 선택 대부분의 경우
TABLE 별도의 키 생성용 테이블 사용 DB 독립적이지만 성능 저하

 

 


1️⃣ GenerationType.IDENTITY

  • DB가 자동으로 숫자를 증가시켜 생성
  • JPA가 insert 할 때 ID 값을 안 주고, insert 후 DB가 생성한 ID를 받아옴
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

✔ 주로 MySQL에서 사용
✔ DB에 AUTO_INCREMENT 기능이 있어야 함

 

 


2️⃣ GenerationType.SEQUENCE

  • DB 시퀀스 객체를 이용해 ID를 미리 가져옴
  • @SequenceGenerator 와 함께 사용됨
@SequenceGenerator(
    name = "post_seq_generator",
    sequenceName = "post_seq",
    initialValue = 1, allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
                generator = "post_seq_generator")
private Long id;

✔ Oracle, PostgreSQL 등에서 사용됨

 

 


3️⃣ GenerationType.AUTO

  • JPA가 DB 방식을 알아서 감지하고 적절한 전략을 선택
  • 개발 초기에는 편하지만, DB를 바꿨을 때 의도치 않게 전략이 바뀔 수도 있음
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

 

 

 


4️⃣ GenerationType.TABLE

  • 키 값을 생성하는 전용 테이블을 만들어서 사용하는 방식
  • 모든 DB에서 동작하지만 성능이 가장 느림
@TableGenerator(
    name = "post_table_generator",
    table = "id_generator",
    pkColumnValue = "post_id",
    allocationSize = 1
)
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
                generator = "post_table_generator")
private Long id;

 


💡 정리하자면

전략 특징 장점 단점
IDENTITY DB가 자동 증가 설정 간편 Insert 후 ID를 알게 됨
SEQUENCE DB 시퀀스 사용 Insert 전에 ID 확보 일부 DB에서만 사용 가능
AUTO JPA가 자동 선택 빠른 개발 가능 전략이 바뀔 수 있음
TABLE 별도 테이블 이용 DB 독립성 느림, 잘 안 씀

 

 


✅ 결론

  • MySQLGenerationType.IDENTITY
  • Oracle / PostgreSQLGenerationType.SEQUENCE
  • 초기 개발 / 실습AUTO

 

 

 


 

728x90