기본 콘텐츠로 건너뛰기

라벨이 Sequence인 게시물 표시

JPA 기본 키 생성 전략: IDENTITY, SEQUENCE, TABLE, AUTO를 언제 선택할까

JPA 기본 키 생성 전략: IDENTITY, SEQUENCE, TABLE, AUTO를 언제 선택할까 빠른 답 IDENTITY 는 DB가 INSERT 시점에 ID를 만들기 때문에 persist() 직후 INSERT 가 실행될 수 있고, JDBC batch insert에는 불리합니다. SEQUENCE 는 INSERT 전에 시퀀스에서 ID를 먼저 확보하므로 쓰기 지연과 batch insert를 활용하기 좋습니다. allocationSize 설정이 성능에 큰 영향을 줍니다. TABLE 은 여러 DB에서 동작하지만 키 전용 테이블을 SELECT 하고 UPDATE 해야 해서 락 경합과 왕복 비용이 생기기 쉽습니다. AUTO 는 편하지만 DB 방언, JPA provider, Hibernate 버전에 따라 실제 전략이 달라질 수 있어 운영 DB가 정해져 있다면 명시 전략이 더 예측하기 쉽습니다. 목차 한눈에 비교 시간 흐름으로 이해하기 선택 기준 매트릭스 왜 ID 생성 전략이 헷갈리는가 예제 쿼리와 실행 계획 persist와 INSERT 시점 설정 예시 SQL 로그로 확인하기 버전과 마이그레이션 포인트 한눈에 비교 생성 위치 IDENTITY 는 엔티티 테이블의 identity 컬럼, SEQUENCE 는 DB 시퀀스 객체, TABLE 은 별도 키 테이블, AUTO 는 provider의 판단을 사용합니다. ID를 아는 시점 IDENTITY 는 행을 실제로 넣은 뒤 ID를 알 수 있고, SEQUENCE 와 TABLE 은 INSERT 전에 ID를 확보할 수 있습니다. 쓰기 지연과 배치 저장 SEQUENCE 는 여러 INSERT 를 flush 시점까지 모으기 쉽지만, IDENTITY 는 ID 생성을 위해 행 삽입이 먼저 필요해 JDBC batch insert 효과가 제한됩니다. DB 의존성 MySQL 계열은 보통 IDENTITY , PostgreSQL과 Oracle은 SEQUENCE 를 고려하기 쉽습니다. TABLE 은 이식성은 좋지만 성능 비용이 큽니다. ...