반응형 JPA3 Querydsl을 이용한 Cursor기반 페이징 API 구현 과정 Querydsl을 활용한 Cursor기반 페이징 구현 이번에 기획팀에서 검색 관련 API 요청을 받았고 앱, 웹 상에서 스크롤 기능으로 사용할 것이기 때문에 Cursor기반 페이징 API를 구현하게 되었다. 실제 간단한 기능 구현을 통해 Cursor기반 페이징의 개념도 정리해보려고 합니다! 요구사항 및 사용 시나리오 내 친구(팔로워)가 여러 음식점(상점)에 대해 리뷰를 작성 사용자(나)가 검색어를 통해 검색 내 친구가 작성한 리뷰 중 검색어가 포함된 리뷰 반환 그 리뷰가 작성되어있는 음식점(상점)을 화면에 뿌린다 결국 상점 검색어가 포함된 리뷰가 있는 '상점'을 뽑아달라는 것이었다. 사용자의 입장에서 생각해보면 조금 기능이 이상했다. 리뷰 내용으로 검색하는데 그 리뷰가 담긴 상점을 반환한다?.. 리뷰를 .. 2022. 12. 11. 지연 로딩과 조회 성능 최적화 본 내용은 인프런 김영한 님의 강의 실전! 스프링 부트와 JPA 활용 2를 바탕으로 작성한 내용입니다. 주문 내역을 확인해서 배송 정보, 회원 정보까지 확인하는 API를 만들어본다. 주문 내역에 대한 엔티티 설계는 다음과 같고, 주문 엔티티가 연관관계의 주인이 되는 경우 모두 지연 로딩을 설정했다. 조회 성능을 최적화하기 위해 초기 데이터를 삽입하였다. UserA(주문 회원) JPA1 BOOK (주문 상품) JPA2 BOOK (주문 상품) UserB(주문 회원) SPRING1 BOOK (주문 상품) SPRING2 BOOK (주문 상품) 이제 본격적으로 V1~V4까지 API 버전을 바꿔가며 지연로딩으로 인해 발생하는 성능 문제를 어떻게 해결해나가는지 학습하겠습니다. V1 : 엔티티를 직접 노출 지연 로딩을.. 2022. 7. 22. Entity와 DTO의 분리 자바 ORM 표준 JPA 프로그래밍 교재를 통해 공부하며 고민했던 내용입니다. JPA를 공부하며 의문이 생겼다. JPA를 사용하면 Entity와 DTO를 분리해서 사용해야 된다고 한다. 이전에 Mybatis를 사용할 때는 mapper가 DAO의 역할을 하기 때문에 별도로 만들지 않고 DTO만으로 처리를 했었다. 이렇다고 배웠다.. 스프링 공부를 시작한 지 얼마 안 되었을 때라서 Member에 대한 API는 모두 MemberDTO로 처리하였고, API를 만들다 보니 필요 스펙에 따라 온갖 어노테이션을 갖다 붙였다. 지금 다시 열어보면 정말 최악의 코드인 것 같은데 그때 당시에는 잘 짰다고 생각했던.. 어쩌면 이러한 실수? 무지? 때문인지 JPA를 공부하면서 크게 깨달음을 얻게 되었다. MyBatis를 사용.. 2022. 7. 6. 이전 1 다음 반응형