프로젝트/[Dotoring] 멘토링 어플리케이션(8)
-
읽기 전용 쿼리의 성능 최적화에 대한 고민
아래 사진은 저희 도토링 프로젝트의 홈 화면입니다. 이는 멘토가 로그인한다면, 멘토의 직무와 학과를 고려하여 동일한 직무 또는 학과를 가진 멘티님들을 최신순으로 보여주는 화면입니다. 이 화면의 엔티티들은 다른 회원들의 정보들이므로 수정할 필요가 없습니다. 하지만, 홈화면이기 때문에 다시 조회할 일은 꽤나 많을 것으로 판단됩니다. 따라서, 저는 아래와 같은 선택지들을 고민해보았습니다. JPQL을 스칼라 타입으로 조회하기 또는 읽기 전용 쿼리 힌트 사용하기 읽기 전용 트랜잭션 사용 또는 트랜잭션 밖에서 읽기 캐시 적용하기 → 2차 캐시 적용!! 먼저, 위 선택지들의 개념과 특징들을 알아보겠습니다. 스칼라 타입으로 조회 or 읽기 전용 쿼리 힌트 스칼라 타입으로 조회 스칼라 타입은 영속성 컨텍스트가 결과를 관..
2023.07.31 -
메서드가 연속으로 실행된다면, 트랜잭션이 중첩되어 데이터가 저장되지 않고 계속 수정되는 거 아냐??
에코노베이션이라는 동아리에서 프로젝트를 수행하며 "메서드가 연속으로 실행되면, 트랜잭션이 중첩되어 데이터가 저장되지 않고 계속 수정되는 거 아냐??"라는 생각을 해본 적이 있다. 이 생각에 대한 과정과 그와 관련된 개념들을 정리해보려고 한다. 먼저, 스프링의 기본 전략을 알아야한다. 스프링의 기본 전략은 트랜잭션 범위의 영속성 컨텍스트 전략, 즉 트랜잭션의 범위와 영속성 컨텍스트의 범위가 같다는 것이다. 이 전략은 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고, 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다. 즉, 같은 트랜잭션과 같은 영속성 컨텍스트를 사용한다는 것이다. 보통 트랜잭션은 service 계층의 @Transactional 어노테이션을 선언해서 트랜잭션을 시작한다. 트랜잭션이 시작되는 데 ..
2023.07.26