Notice
Recent Posts
Link
Recent Comments
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

지니의 개발로그

@GeneratedValue 어노테이션의 strategy 옵션 본문

Spring Boot

@GeneratedValue 어노테이션의 strategy 옵션

지니♥︎ 2024. 8. 16. 16:12

🤔 오늘의 궁금증

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

 

@GeneratedValue 어노테이션을 쓰다가 문득 다른 strategy 옵션이 궁금해졌다.

 

출처 : https://wikidocs.net/161165

 

위 문장이 이해가 안가서 쓰는 글..


📖 @ GeneratedValue 어노테이션

strategy 옵션은 데이터베이스에서 자동으로 ID를 생성하는 방법을 지정한다.

네 가지 주요 방법이 있으며, 각각 데이터베이스가 ID를 생성하는 방식이 다르다.

 

1. AUTO

  • 옵션을 선택하지 않는 경우 디폴트 값
  • JPA가 사용 중인 데이터베이스에 따라 자동으로 가장 적절한 방법을 선택
  • 예를 들어, MySQL에서는 'IDENTITY', Oracle에서는 'SEQUENCE'을 선택

2. IDENTITY

  • 데이터베이스가 직접 ID를 생성하여 번호를 매기는 것
  • ID어노테이션으로 기본키를 만들 때 가장 많이 사용 했던 옵션
  • 데이터베이스에서 새로 저장되는 데이터마다 자동으로 숫자가 1씩 증가하는 방식으로 ID를 생성
    즉, 기본 키가 데이터베이스 행이 삽입될 때 자동으로 증가
  • 설정 간단, 자주 사용됨
  • 주로 MySQL, SQL Server 등의 데이터베이스에서 사용됨

3. SEQUENCE

  • 데이터베이스의 '시퀀스'라는 객체를 사용해서 기본 키 값을 생성
    시퀀스 객체는 데이터베이스에서 미리 정의
  • ID를 미리 만들어 관리 할 수 있음
  • 여러 엔티티에서 동일한 시퀀스를 공유할 수 있음
  • 성능 우수
  • 주로 Oracle, PostgreSQL 같은 데이터베이스에서 사용

4. TABLE

  • 별도의 테이블을 만들어서 ID를 관리
  • 모든 데이터베이스에서 사용, 동일하게 동작
  • 데이터베이스 독립적
  • 다소 복잡하고 성능이 떨어질 수 있음


strategy 옵션을 생략한다면 @GeneratedValue 애너테이션이 지정된 모든 속성에 번호를 차례로 생성하므로 순서가 일정한 고유 번호를 가질 수 없게 된다.

출처 : https://wikidocs.net/161165

 

이 문장이 이해가 안가는데..

 

🤔 의문 : 

1. strategy 옵션을 생략 한다면 : 

  • @GeneratedValue(strategy = GenerationType.AUTO)가 적용
  • strategy = GenerationType.AUTO는 JPA가 사용 중인 데이터베이스에 따라 적절한 기본 키 생성 전략을 자동 적용

2. @GeneratedValue 어노테이션의 역할 : 

  • @GeneratedValue 어노테이션은 기본 키로 설정된 필드에 대해 고유한 번호(ID)를 자동으로 생성해주는 역할로,
    이 때 기본키로 설정된 필드에는 항상 @Id 어노테이션이 함께 사용된다

3. 모든 속성에 번호를 차례로 생성?

  • @GeneratedValue 어노테이션은 단일 필드에만 적용된다.
    JPA에서는 엔티티 클래스마다 하나의 기본 키 필드만 가질 수 있으며,
    두 개 이상의 여러 필드에 적용하면 오류가 발생 할 수 있다.

💡 정리

  • "지정된 모든 속성"이라는 표현에서 @GeneratedValue 어노테이션이 여러 필드에 적용될 수 있는 것인지 헷갈렸다.
    하지만 실제로는 기본 키로 지정된 하나의 필드에만 적용되기 때문에
    다른 필드에는 이 어노테이션이 적용되지 않고
    @GeneratedValue 어노테이션이 적용된 하나의 필드에 대해서만 자동으로 번호가 생성된다.
  • strategy 옵션을 생략한다면 strategy = GenerationType.AUTO가 기본값으로 적용되어
    JPA가 사용 중인 데이터베이스에 따라 적절한 기본 키 생성 전략이 자동으로 적용된다.
    예를 들어, MySQL에서는 'IDENTITY', Oracle에서는 'SEQUENCE' 전략을 선택한다.

 

'Spring Boot' 카테고리의 다른 글

@Column 어노테이션  (0) 2024.07.12
@RequiredArgsConstructor 어노테이션?  (0) 2024.06.21