페이징

프로젝트/ChatUniv

[프로젝트] ChatUniv 페이징 최적화

페이징 최적화를 진행해 보았다. 페이징 최적화에는 크게 두 가지 방법이 있다. NoOffset과 커버링 인덱스를 사용하는 방법이 존재한다. 이번에 프로젝트에서 게시글과 댓글의 페이징 최적화를 진행하였는데, 이 글은 게시글에 관해서만 작성할 예정이다. 일반적인 페이징 쿼리 기존의 코드는 아래와 같았다. public interface BoardRepository extends JpaRepository { Page findAll(final Pageable pageable); } @Transactional(readOnly = true) public BoardAllResponse findAllBoards(final Pageable pageable) { Page sortedBoards = boardRepositor..

JPA

QueryDSL

Spring Data JPA가 기본적으로 제공해 주는 CRUD 메서드 및 쿼리 메서드 기능을 사용하더라도, 원하는 조건의 데이터를 수집하기 위해서는 필연적으로 JPQL을 작성하게 된다. 간단한 로직을 작성하는데 큰 문제는 없으나, 복잡한 로직의 경우 개행이 포함된 쿼리 문자열이 상당히 길어진다. JPQL 문자열에 오타 혹은 문법적인 오류가 존재하는 경우, 정적 쿼리라면 애플리케이션 로딩 시점에 이를 발견할 수 있으나 그 외는 런타임 시점에서 에러가 발생한다. 이러한 문제를 어느 정도 해소하는데 기여하는 프레임워크가 QueryDSL이다. QueryDSL은 정적 타입을 이용해서 SQL 등의 쿼리를 생성해주는 프레임워크이다. QueryDSL의 장점 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 ..

JPA

JPQL 사용법

JPQL(Java Persistence Query Language) JPQL은 SQL을 추상화하여 특정 데이터베이스 SQL에 의존적이지 않은 객체지향 쿼리 언어이다. 테이블을 대상으로 쿼리를 하는 것이 아닌 객체(엔티티)를 대상으로 쿼리를 하기에 객체지향 쿼리 언어라고 불린다. JPQL은 결국 SQL로 변환되어 데이터베이스에 전달된다. ex) select m from Member as m where m.age > 20 엔티티와 속성은 대소문자를 구분한다. (Member, age) JPQL 키워드는 대소문자를 구분하지 않는다. (SELECT, select 모두 가능) 테이블이 아닌 엔티티의 이름을 사용한다. (Member) 별칭은 필수다. (m) (as는 생략 가능) EXISTS, IN, AND, OR, ..

javajoha
'페이징' 태그의 글 목록