JPA_Chap15_고급 주제와 성능 최적화

윤일권·2023년 7월 18일
0

JPA

목록 보기
11/11

예외처리

트랜잭션 롤백을 표시하는 예외

트랜잭션 롤백을 표시하지 않는 예외

엔티티 비교

  • 1차 캐시는 영속성 컨텍스트와 생명주기를 같이 한다. 영속성 컨텍스트를 더 정확히 이해하기 위해서는 1차캐시의 가장 큰 장점인 애플리케이션 수준의 반복 가능한 읽기를 이해해야 한다.

  • 영속성 컨텍스트가 같으면 엔티티를 비교할 때 다음 조건을 만족해야 한다.

    • == (동일성)
    • equals() (동등성)
    • @Id인 데이터베이스 식별자가 같음. (데이터베이스 동등성)
  • 영속성 컨텍스트가 다르면 엔티티를 비교할 때 다음 조건을 만족해야 한다.

    • == (동일성) : 비교가 실패한다.
    • equals() (동등성) : 비교가 만족한다. 단, equals()를 구현해야 한다.
    • @Id인 데이터베이스 식별자가 같음. (데이터베이스 동등성)

프록시 심화 주제

  • 영속성 컨텍스트는 자신이 관리하는 엔티티의 동일성(identity)을 보장한다.
  • 영속성 컨텍스트는 한 번 프록시로 노출한 엔티티는 계속 프록시로 노출한다. 영속성 컨텍스트가 영속 엔티티의 동일성을 보장 할 수 있기 때문이다.

프록시 타입 비교

  • 프록시 타입 비교시 instanceof 사용.

상속관계와 프록시

  • 프록시를 부모 타입으로 조회하면 문제가 발생.
  • 문재 해결
    • JPQL로 대상 직접 조회
    • 프록시 벗기기
    • 기능을 위한 별도의 인터페이스 제공.
    • 비지턴 패턴 사용

성능 최적화

N+1 문제

  • 지연로딩으로 사용하고, 성능 최적화가 필요한 곳에 fetch join을 사용해야한다.

읽기 전용 쿼리의 성능 최적화

  • 아래와 같이 읽기 전용으로 설정하면 트랜잭션을 커밋해도 영속성 컨텍스트를 플러시하지 않는다.
@Transactional(readOnly = true)

배치 처리

  • 메모리 부족을 피하기 위해, 일정 단위마다 영속성 컨텍스트의 엔티티를 데이터베이스에 플러시하고 영속성 컨텍스트를 초기화해야 한다.
profile
생각하는 개발자가 되겠습니다!!

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

항상 좋은 글 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

많은 도움이 되었습니다, 감사합니다.

답글 달기