JPA 특징

Yennie·2024년 5월 12일

JPA

목록 보기
15/19

JPA는 자바 애플리케이션에서 관계형 데이터베이스를 관리하는 표준 방식을 제공한다. JPA는 데이터베이스와의 상호작용을 최소화하고, 어플리케이션의 성능과 일관성을 향상시키는데 도움을 준다.

1차 캐시

  • 영속성 컨텍스트 내부에 위치하며, 엔티티 매니저가 관리하는 영속 상태의 엔티티들을 저장
  • 엔티티 조회 시 JPA는 먼저 1차 캐시를 확인하여 데이터가 존재하면 캐시에서 바로 반환
  • 캐시에 데이터가 없을 경우에만 데이터베이스에서 조회한 후, 그 결과를 1차 캐시에 저장하고 반환
  • 엔티티 조회 시 데이터베이스 접근을 최소화하여 성능을 향상

동일성 보장

  • 영속성 컨텍스트가 동일한 엔티티에 대해 여러 번 조회 요청이 들어와도 항상 같은 인스턴스르 반환함으로서 엔티티의 동일성을 보장
  • 어플리케이션 내에서 엔티티의 일관성을 유지할 수 있게 하며, 어플리케이션의 복잡성과 데이터 동기화 이슈를 줄이는 데 도움을 준다.

쓰기 지연 (Write Behind)

  • 엔티티의 생성, 업데이트, 삭제 작업을 즉시 데이터베이스에 반영하지 않고 트랜잭션 커밋 시점까지 지연시키는 기능. 변경 사항은 쓰기 지연 SQL 저장소에 모아두고, 트랜잭션이 커밋되는 시점에 일괄적으로 데이터베이스에 반영.
  • 네트워크 사용량과 데이터베이스 접근 횟수를 줄여 성능을 향상시키는데 기여

변경 감지 (Dirty Checking)

  • 영속성 컨텍스트가 관리하는 영속 상태의 엔티티를 트랜잭션 커밋 시점에 초기 상태와 비교하여 변경된 사항을 자동으로 감지하고 데이터베이스에 반영하는 기능
  • 엔티티의 상태를 수동으로 업데이트할 필요 없이 데이터의 일관성을 유지

지연 로딩 (Lazy Loading)

  • 엔티티의 연관된 다른 엔티티나 컬렉션을 사용하는 시점까지 로딩을 지연
  • 사용자 엔티티와 연관된 주문 엔티티를 사용자 엔티티 로드 시점에는 로드하지 않고, 실제로 주문 엔티티에 접근하는 시점에 데이터베이스에서 로드
  • 필요하지 않은 데이터 로드를 방짛여 어플리케이션의 성능을 최적화

1차 캐시와 2차 캐시의 차이점

  • 1차 캐시는 특정 영속성 컨텍스트 내부에 위치하며, 해당 영속성 컨텍스트의 범위 내에서만 엔티티를 캐싱함 -> 같은 트랜잭션 또는 세션 내에서 엔티티를 재조회할 때 데이터베이스 접근 없이 빠르게 데이터를 제공
  • 2차 캐시는 여러 영속성 컨텍스트 간에 공유되는 어플리케이션 범위의 캐시로, 공통적으로 사용되는 데이터를 캐싱하여 전체 어플리케이션의 성능을 향상시킴. 2차 캐시는 명시적으로 활성화하고 구성해야하며, 선택적으로 사용됨

영속성 컨텍스트에서 동일성 보장은 왜 중요한가?

  • 어플리케이션 내 데이터의 일관성과 안정성을 유지하는데 중요
  • 같은 영속성 컨텍스트 내에서 특정 엔티티를 여러번 조회할 때 항상 동일한 인스턴스를 반환
  • 엔티티의 상태가 언제나 일관되어 있음을 보장하며, 데이터 동기화 문제를 방지하고 어플리케이션의 복잡성을 줄임

쓰기 지연이 어플리케이션 성능에 어떤 영향을 미치는가?

  • 영속성 컨텍스트가 엔티티의 변경사항을 트랜잭션 커밋 시점까지 메모리 내에 모아두고, 일괄적으로 데이터베이스에 반영하는 기능으로, 네트워크 지연과 데이터베이스의 부하를 감소시키며, 결과적으로 어플리케이션의 응답 속도와 처리량을 향상시킴
  • 변경사항이 많은 어플리케이션에서 유용하며, 성능 개선에 크게 기여

변경 감지는 어떻게 작동하는가?

  • 영속성 컨텍스트가 관리하는 영속 상태의 엔티티에 대해 트랜잭션 커밋 시점에 초기 상태와 현재 상태를 비교하는 기능
  • 초기 상태와의 차이가 감지되면, 해당 변경 사항을 데이터베이스에 자동으로 반영
  • 개발자가 수동으로 데이터를 업데이트하는 번거로움을 줄여주며, 데이터의 일관성을 자동으로 유지할 수 있게 해줌
  • 복잡한 트랜잭션과 데이터 변경 작업이 많은 어플리케이션에서 중요

지연 로딩과 즉시 로딩 중 어떤 것을 선호하나?

  • 지연 로딩은 엔티티에 연관된 객체나 컬렉션을 실제 사용 시점까지 로딩을 지연시키는 방법
  • 초기 로딩 성능을 향상시키고 불필요한 데이터 접근을 줄이는 장점
  • 즉시 로딩은 엔티티를 조회할 때 관련된 모든 데이터를 함께 로드하는 방식으로, 개발의 편의성을 높이지만 불필요한 데이터 로드로 인해 성능 저하가 발생할 수 있음. 선택은 어플리케이션의 데이터 접근 패턴과 성능 요구 사항을 고려하여 결정해야함
profile
PM | Aspiring SWE | linkedin.com/in/emilyyeeun

0개의 댓글