Soptmakers에서, 끝말잇기 기능을 구현했다. 처음 MVP는 모든 회차의 끝말잇기 목록을 보이도록 하기로 했다. 무한 스크롤을 구현할때는 limit, cursor, hasNext와 같은 필드가 필요하다. limit : 페이지 사이즈 cursor: 읽고 싶은 행의 데이터 개수 hasNext: 스크롤 이후 그 뒤의 데이터가 남아있는지 없는지 판단하는 필드 문제점 발생 전체 조회하는 경우에, 중복되는 데이터가 보이게됨 limit은 10 cursor는 10, 20, 30~ 의 값으로 요청 이 과정에서, (0 ~ 10) (10 ~ 20) (20 ~ 30) 중간의 값들이 중복되는 현상 발생 📍Offest Based Pagination @Repository @RequiredArgsConstructor publi..
JPA 개요 Persistence Java 객체(에 포함되어있는 데이터)를 데이터베이스를 통해 저장 및 관리함으로써 객체의 영속성을 보장함 Java Persistence API Object-Relational Mapping(ORM) 을 실행하기 위한 Java 표준 API Entity로 정의된 Java 객체와 데이터 베이스 사이의 mapping 방법을 설정(annotation 이용) 설정된 Mapping에 따라 Java객체를 DB에 저장, 수정, 삭제 검색 할 수 있는 Interface 제공 -> EntityManager JDBC API나 Data Mapper (ex: MyBatis)의 대안 Java 중심의 데이터 관리가 가능해진다. Persistence Provider (JPA Provider) JPA의..
Offset Offset의 문제점 예) offset이 50000, limit 20 20의 offset가 있다면, 50020 rows를 요청해오고, 나머지 50000개의 row를 버리게 됩니다. 느린 offset 쿼리를 최적화하기 위한 방법 Offset을 사용하지 않는 방법 Offset을 사용하지 않고, Unique 한 값을 bookmark 처럼 사용하여, 마지막에 fetch 다음 row로 시작할 수 있도록 where clause로 적을 수 있다. 순서가 페이지 간에 항상 동일하게 유지되도록, 고유한 열을 기준으로 순서를 지정해야 합니다. https://www.eversql.com/faster-pagination-in-mysql-why-order-by-with-limit-and-offset-is-slow/
상황 select(*) 로 코드를 작성하는 의미없이 생각없이 코드를 작성했다. 같이 개발하는 동아리 선생님께서 정말로 감사하게도 코드리뷰를 남겨주었다! 당시, explain = 설명해달라는 것이라고 생각해서 이런 황당한 답변을 내놓았다. 정말 앞으로의 실행계획을 써버린것이다. 상대는 정말 황당 했을 것이다. 정우님을 황당하게 하지말자! 다시 알아보자 Explain! Explain 이란? Postgres에서 제공하는 명령이다. EXPLAIN 을 사용하여 내가 테스트 할 sql을 작성해서 실행시키면 PostgreSQL 실행계획기가 만든 실행계획을 보여준다. - 실행 계획은 원하는 자료를 출력하기 위해서, 어떤 테이블이 테이블 전체 순차 검색을 하는지, 인덱스 검색을 하는지를 보여준다. - 여러 테이블이 조인..