JPA 팁

슈퍼콜라·2024년 5월 13일
1
  1. 엔티티 매핑 최적화

엔티티 클래스와 데이터베이스 테이블 간의 매핑을 최적화하는 것은 JPA 성능 향상에 매우 중요합니다.

필드 매핑: 필요하지 않은 필드는 매핑하지 않도록 합니다.
모든 데이터베이스 열을 엔티티 필드로 매핑하면 메모리 사용량과 성능에 영향을 미칩니다.

Fetch Type 설정: 연관 관계를 매핑할 때 지연 로딩(LAZY)을 기본으로 사용하고,
즉시 로딩(EAGER)은 꼭 필요한 경우에만 사용합니다.
지연 로딩은 실제로 데이터가 필요할 때 로드되므로 성능이 향상됩니다.

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "category_id")
    private Category category;
}
  1. Query Optimization

JPQL 사용: 필요한 데이터만 선택하여 불필요한 데이터를 가져오지 않도록 합니다.

Pagination: 대량의 데이터를 처리할 때는 페이징 처리를 통해 한 번에 가져오는 데이터 양을 제한합니다.

public List<Product> findProducts(int page, int size) {
    return entityManager.createQuery("SELECT p FROM Product p", Product.class)
        .setFirstResult(page * size)
        .setMaxResults(size)
        .getResultList();
}
  1. 2차 캐시 활용
    JPA의 2차 캐시(Second Level Cache)를 활용하면 동일한 데이터를 여러 번 조회할 때
    데이터베이스 액세스를 줄일 수 있습니다.
    Hibernate에서는 ehcache, infinispan 등을 사용하여 2차 캐시를 설정할 수 있습니다.
<!-- persistence.xml -->
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jcache.JCacheRegionFactory"/>
<property name="hibernate.javax.cache.provider" value="org.ehcache.jsr107.EhcacheCachingProvider"/>
profile
공부하는거 정리

0개의 댓글