JPA

JPA 기본키 매핑 전략 완벽 정리

초코너무조코 2025. 4. 26. 17:16
728x90

 

JPA(Java Persistence API)를 사용할 때 가장 먼저 고민하게 되는 부분 중 하나가 바로 기본키(Primary Key) 매핑 전략입니다. 엔티티(Entity)는 데이터베이스 테이블과 매핑되기 때문에, 각 엔티티에는 반드시 고유한 식별자(Primary Key)가 필요합니다.

이번 포스팅에서는 JPA에서 제공하는 기본키 매핑 전략에 대해 하나씩 자세히 알아보겠습니다.


1. 기본키 매핑 방식의 종류

JPA에서는 기본키를 매핑할 때 총 4가지 전략을 제공합니다.

  1. 직접 할당 (Assigned, 직접 설정)
  2. 자동 증가 (IDENTITY)
  3. 시퀀스 (SEQUENCE)
  4. 테이블 (TABLE)

2. 직접 할당 (Assigned)

@Id
private String id;
  • 개발자가 직접 기본키 값을 지정합니다.
  • 자동 생성되지 않기 때문에, 새로운 엔티티를 저장할 때 반드시 직접 값을 세팅해야 합니다.
  • 주로 복합키나 비즈니스 키를 사용할 때 사용됩니다.

3. 자동 증가 전략 (IDENTITY)

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
  • 데이터베이스의 Auto Increment 기능을 사용합니다.
  • MySQL, PostgreSQL, SQL Server 등에서 사용 가능.
  • 엔티티 저장 시점에 즉시 insert 쿼리가 나가며, DB가 키 값을 생성합니다.
  • 특징: 영속성 컨텍스트에 저장하기 전에 DB에서 키 값을 받아오기 때문에, 식별자가 필요한 경우 즉시 insert가 발생합니다.

4. 시퀀스 전략 (SEQUENCE)

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_gen")
@SequenceGenerator(name = "seq_gen", sequenceName = "my_seq", allocationSize = 1)
private Long id;
  • 오라클, PostgreSQL 등 시퀀스(Sequence) 객체를 제공하는 DB에서 사용합니다.
  • JPA가 시퀀스를 호출하여 기본키 값을 미리 가져온 후 insert 쿼리를 실행합니다.
  • allocationSize 설정을 통해 시퀀스 호출 횟수를 줄일 수 있어 성능 최적화 가능.

5. 테이블 전략 (TABLE)

@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "tbl_gen")
@TableGenerator(name = "tbl_gen", table = "id_generator", pkColumnValue = "entity_id", allocationSize = 1)
private Long id;
  • 별도의 테이블을 만들어서 시퀀스처럼 기본키 값을 관리합니다.
  • 모든 DB에서 사용 가능하지만 성능이 상대적으로 느립니다.
  • 실무에서는 거의 사용되지 않습니다.

6. 전략 선택 기준

 

전략   특징  권장 DB
IDENTITY DB가 자동 생성, 즉시 insert MySQL, SQL Server
SEQUENCE 시퀀스 객체 사용, 배치 최적화 가능 Oracle, PostgreSQL
TABLE 테이블을 이용해 키 생성, 호환성 ↑ 성능 ↓ 모든 DB (비권장)
직접 할당 개발자가 직접 키 설정 상황에 따라 다름

7. 실무에서의 추천 전략 

  • MySQL → IDENTITY
  • Oracle / PostgreSQL → SEQUENCE (allocationSize 조절 권장)
  • DB 독립성을 고려한다면 UUID를 사용하거나, 직접 할당 방식 고려.

8. 결론 

기본키는 엔티티의 유일성을 보장하는 매우 중요한 값입니다. 프로젝트에서 사용하는 데이터베이스 특성과 요구사항에 맞게 적절한 기본키 매핑 전략을 선택하는 것이 중요합니다.

또한, 비즈니스 키(자연 키)보다는 대리 키(대체 키)를 사용하는 것이 유지보수에 유리합니다. 즉, 주민등록번호, 이메일 같은 값을 PK로 쓰기보다는, 자동 생성되는 숫자 또는 UUID를 추천합니다.


 

728x90