본문 바로가기

[kotlin] JPA 13: Spring Boot에서 최적화 들어가기최적화 관련해서 N+1 문제, 읽기 전용, 페이징 처리에 대한 추가내용을 다룰려고 한다. 이미 앞에서 성능 관련해서 1차와 2차 캐시에 대해서 어느정도 다루었고 데이터 조회 성능 관련해서도 살펴보았다. 이번에서는 최적화 관련해서 잡스러운 부분을 조금더 다룰려고 한다.작성자: http://ospace.tistory.com/ (ospace114@empal.com)N+1 문제N+1문제는 조회 쿼리를 실행할 때 연관 데이터가 N가 있는 경우 모든 데이터를 가져오기위해 N+1 개만큼 조회하는 상황으로 대표적인 성능 이슈이다. 이런 상황은 연관관계에 의해서 한 엔티티가 연관된 여러 엔티티 객체를 로딩하는 경우로 자신 엔티티를 로딩하고 연관관계 속성을 확인하고 연관된 엔티티 들을 로딩하게 된다. 더욱이 목록형.. 더보기
[kotlin] JPA 12: Spring Boot에서 2차 캐시 들어가기JPA에서 캐시는 2단계를 걸쳐서 동작한다. 1차 캐시는 영속 컨텍스에 해당하며 세션이 유지될때까지 현재 세션의 모든 엔티티는 영속 컨텍스트 내에서 캐싱된다. 영속 컨텍스트는 트랜잭션 범위에서 유효한데 보통 트랜잭션이 종료되면 영속 컨텍스트도 같이 종료된다. 그렇기 때문에 세션과 영속 컨텍스트의 생명이 동일하다고 할 수 있다. 세션이 종료된 경우 1차 캐시가 사라지기 때문에 애플리케이션 전체에서 보면 동일한 요청을 할 경우 새로 캐싱해서 처리하기 때문에 효율적이지 않다. 결국, 세션에 상관 없이 캐시를 유지 관리하는 2차 캐시가 필요하다. 2차 캐시에 대해서 살펴보자.작성자: http://ospace.tistory.com/ (ospace114@empal.com)2차 캐시애플리케이션 라이프타임에.. 더보기
[kotlin] JPA 10: Spring Boot에서 엔티티 그래프 들어가기JPA에서는 성능을 위한 다양한 기능을 제공하고 있다. 엔티티 그래프도 그 중에 하나이다. 엔티티에서 성능 최적화를 위해서 내부 속성에 대해 즉시 로딩과 지연 로딩을 지원한다. 이런 기능은 컴파일 타임에 설정되어 변경할 수 없다. 엔티티 그래프를 사용할 경우 런타임에 제어할 수 있다. 엔티티 그래프 사용하는 방법을 간단하게 살펴보자.작성자: http://ospace.tistory.com/ (ospace114@empal.com)엔티티 그래프란?엔티티 그래프는 JPA 2.1에서 소개되었다. 엔티티 그래프는 로딩 성능 관련해 좀 더 세밀하게 제어하는 기능을 제공한다. 엔티티 내의 관련 영속 속성들을 그룹핑한 템플릿을 정의하고 런타임에 이를 선택적으로 적용할 수 있다. 엔티티 그래프가 n+1 조회 이슈를.. 더보기
[kotlin] JPA 7: Spring Boot에서 JPQL과 @Query 들어가기Repository를 사용해 쿼리 메소드로 어느정도 데이터 처리하는데 문제는 없지만 정교하고 복잡한 처리를 할 경우 한계가 있다. 이런 한계를 JPQL을 사용해서 다양한 쿼리를 실행할 수 있다. Spring Data에서 @Query을 사용해서 쉽게 JPQL을 사용할 수 있도록 만들어준다. 사전에 Ansi SQL 학습을 권장한다.작성자: http://ospace.tistory.com/ (ospace114@empal.com)환경 구성앞으로 사용할 엔티티는 총 3개로 아래와 같이 구성된다.아래는 데이터베이스에서 사용할 초기 데이터이다.insert into member(name, likes) values ('bar', 1);insert into member(name, likes) values ('fox'.. 더보기

반응형