페이징 3

MySQL 페이징 해보자(feat offset, infinite scroll)

보통 개발할 때에 반드시 공부하고 적용하는게 페이징일 것 같다. 그리고 아마... 처음에는 offset limit을 써서 적용을 할 것 같다. 이 offset limit에 대해, 그리고 offset limit의 문제점에 대해, 해결 방안에 대해 써보려고 한다. 일단은 간단한 테스트를 위해 CREATE TABLE board ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, heart INT DEFAULT 0 );이런 테이..

컬렉션 페치조인과 페이징 하기(feat. batch size)

디프만 프로젝트에서 댓글 관련 API중 하나를 담당했는데, 해당 내용은 어떤 맥주를 통해 이곳에 작성된 모든 기록들을 받아오고, 동시에 저장된 맛(최대 3개)를 가져와 보여준다. 그리고 여기 페이징을 적용한다. 였다. 즉 이 경우 기록 -> 맛을 가져올 때 일대다 조인이 생기게 된다. 맥주를 통해 기록을 가져옴(여기서 N개의 기록을 가져옴) 해당 기록에 있는 맛태그를 가져옴(최대 3개의 맛태그) 맛태그를 통해 맛을 가져옴(다대일) 2, 3번의 로직을 수행할 때에 문제가 여러개 생기게 된다. 먼저 일대다 조인의 경우 페치 조인만으로 페이징을 할 수 없다. 알다시피 일대다 조인을 페치조인하면 동일한 데이터가 여러 번 출력되어 데이터가 뻥튀기된다!! 그리고 비효율적인 쿼리가 생성되게 된다. 하나의 기록마다 맛..

페치 조인과 그 한계에 관하여

실무에서 매우 중요하다. SQL의 조인 종류에 해당하지는 않는다. JPQL에서 성능 최적화를 위해 제공하는 기능이다. 연관된 엔티티나 컬렉션을 SQL한 번에 조회하는 기능. join fetch 명령어 사용 예를 들어 회원을 조회하면서 연관된 팀을 함께 조회하려 한다(SQL한번에) select m from Member m join fetch m.team -> SELECT M., T. FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID 아래와 같이 inner join을 사용하여 Team이 있는 member들을 가져온다고 가정한다면 JpaMain public class JpaMain { public static void main(String[] args){ EntityMa..