3/24 TIL - JPA 개념 정리

큰모래·2023년 3월 24일
0
post-custom-banner

JPA


영속성 컨텍스트

개념

DB에 엔티티를 저장하기 전에 메모리에 엔티티 인스턴스를 저장하는 환경이다.
DB에 엔티티를 저장하거나 조회할 때 사용되며, 영속성 컨텍스트에 저장된 엔티티를 모니터링하며 변경된 부분에 대해 DB에 동기화한다.


휘발성

영속성 컨텍스트는 물리적으로 메모리에서 관리되므로 휘발성이다.
즉, 애플리케이션을 종료하면 영속성 컨텍스트는 소멸된다.


쓰는 이유

1차 캐시

엔티티 매니저를 통해 영속성 컨텍스트에 엔티티를 저장하면 1차 캐시 공간에 저장된다.
이 후 해당 엔티티에 대한 조회, 수정이 이루어질 경우 1차 캐시 공간에 있는 엔티티를 반환함으로서 DB에 불필요한 쿼리를 보내지 않고 성능을 향상시킬 수 있다.

동일성 보장

DB에서 조회한 데이터로 새로운 객체를 만드는 것이 아닌, 영속성 컨텍스트에서 엔티티 객체를 추출함으로서 똑같은 데이터에 대한 동일한 객체를 반환한다.

쓰기 지연

영속성 컨텍스트에 엔티티 객체를 저장할 때 쓰기 지연 SQL 저장소에 해당 쿼리도 함께 저장한다. 이 후 트랜잭션 커밋을 통해 모아두었던 쿼리를 한번에 실행시킬 수 있다.
이를 통해, db 접근 횟수를 줄이고 성능을 향상시킬 수 있다.

변경 감지

jpa를 사용하여 엔티티를 수정할 때 따로 update같은 메서드가 없다.
영속성 컨텍스트의 1차 캐시 저장공간에는 엔티티를 저장하는 공간과 해당 엔티티가 처음 들어왔을 때의 상태를 저장하는 스냅샷 공간 2개가 있다. 영속성 컨텍스트에서는 이 두 공간의 엔티티 차이를 파악하여 update 쿼리를 생성한다. 이 후 트랜잭션 커밋이 동작할 때 해당 update 쿼리를 db로 보내게 된다.


트랜잭션

개념

데이터베이스의 상태를 변경하는 여러 작업을 묶어 하나의 논리적인 작업 단위로 만들어 데이터의 무결성과 일관성을 보장하는 것


커밋

트랜잭션에 의해 수행된 모든 작업이 정상적으로 완료되어 데이터베이스에 반영되는 것


엔티티 매핑

JPA 사용에 있어서 가장 중요한 작업은 엔티티와 테이블을 매핑하는 것이다.

  • 객체와 테이블 매핑 : @Entity, @Table
  • 기본 키 매핑 : @Id
  • 필드와 컬럼 매핑 : @Column
  • 연관관계 매핑 : @ManyToOne, @JoinColumn

기본키 매핑

  • 직접 할당 : 기본 키를 직접 생성
  • 자동 할당 : 기본 키 생성 작업을 데이터베이스에 위임

자동 할당

  • IDENTITY : 기본 키 생성을 데이터베이스에 위임
  • SEQUENCE : 데이터베이스 시퀀스를 사용해 기본 키 할당 (MYSQL X)
  • TABLE : 키 생성 테이블을 사용

IDENTITY 전략

기본 키 생성을 DB에 위임하므로, DB에 값이 저장되어야 기본 키 값을 구할 수 있다.
엔티티는 식별자가 있어야지 영속 상태가 될 수 있다. 하지만, IDENTITY 전략은 DB에 값이 저장되어야 식별자인 기본 키가 생성된다. 따라서 엔티티 객체를 생성한 후 영속성 컨텍스트에 저장 시 바로 DB까지 INSERT 쿼리가 실행되게 된다. 이 전략은 트랜잭션이 지원하는 쓰기 지연을 사용 못함.

profile
큰모래
post-custom-banner

0개의 댓글