[개발 일기] 2025.06.08 - 갑자기 ID가 커진다

2025. 6. 8. 13:00·개발 일기

💡 개요

 

Auto Increment가 설정된 id는 1, 2, 3 이렇게 1씩 증가하는 걸로 알고 있다.

 

 

위 사진은 내가 회원 객체를 저장, 삭제, 다시 저장한 결과이다.

 

 

  • gudtjr2949@naver.com인 회원 저장
    • id = 1, email = gudtjr2949@naver.com

  • gudtjr0630@nate.com 인 회원 저장
    • id = 2, email = gudtjr0630@nate.com

  • gudtjr0630@nate.com 회원 삭제

  • gudtjr0630@nate.com인 회원 저장
    • id = 52, email = gudtjr0630@nate.com

 

그런데 id가 3이 되는 게 아니라 52가 된다.

 

 

왜 이럴까?

 

 

 

🛠️ allocationSize

 

JPA는 시퀀스를 기반으로 ID(기본키)를 생성할 때, DB에서 시퀀스 값(member_seq 테이블에서 조회)을 가져와 사용한다.

 

 

이때 allocationSize는 ID를 자동 생성할 때 한 번에 몇 개의 시퀀스 값을 미리 가져올지를 설정하는 옵션이다.

 

 

allocationSize을 사용하는 이유는 Hibernate는 성능을 높이기 위해, 매번 DB에 접근하지 않고 여러 개의 ID를 미리 메모리에 할당해 두고 사용하기 때문이다.

 

 

allocationSize은 JPA에서 기본적으로 50으로 설정되어 있다.

 

 

즉, 한 번에 50개의 ID를 DB에서 미리 확보해 두고, 그 안에서 순차적으로 엔티티에 ID를 할당한다.

 

 

이제 내가 회원 엔티티를 저장할 때 ID가 52로 확 뛰었는지 이해가 된다.

 

 

  • allocationSize = 50이면 Hibernate는 처음에 1~50번 ID를 미리 메모리에 저장

  • 1번, 2번 ID를 사용한 후, ID가 2인 데이터 삭제

  • 다시 데이터를 저장할 때는 확보한 ID 중 남은 다음 값(예: 3)이 아닌, DB에서 새롭게 조회한 ID(예: 51~100)에서 할당

  • 그 이유는 members_seq 테이블의 값이 증가했기 때문

  • 그 결과, ID가 52처럼 갑자기 뛰는 현상 발생

 

물론 allocationSize을 1로 설정하면 ID가 1씩 순차적으로 증가할 수 있지만, 그렇게 한다면 실제 성능이 저하될 수 있다.

 

 

그 이유는 매번 엔티티를 저장할 때 마다 DB에 접근해 엔티티 id에 사용할 시퀀스 값을 1개 받아오기 때문이다.

 

 

 

📈 100건을 저장할 때

 

  • allocationSize = 1 : 100번 (매 저장마다 접근)

  • allocationSize = 50 : 2번 (50개씩 미리 확보)

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.06.10 - 파사드 패턴  (2) 2025.06.10
[개발 일기] 2025.06.09 - 격리 수준  (0) 2025.06.09
[개발 일기] 2025.06.07 - 수동으로 만든 객체는 DI을 하지 않아요!  (0) 2025.06.07
[개발 일기] 2025.06.06 - FilterChainProxy  (0) 2025.06.06
[개발 일기] 2025.06.05 - 새로운 패키지 구조  (0) 2025.06.05
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.06.10 - 파사드 패턴
  • [개발 일기] 2025.06.09 - 격리 수준
  • [개발 일기] 2025.06.07 - 수동으로 만든 객체는 DI을 하지 않아요!
  • [개발 일기] 2025.06.06 - FilterChainProxy
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.06.08 - 갑자기 ID가 커진다
상단으로

티스토리툴바