전체 글45 N+1 문제 해결 1. N+1 문제란?JPA에서 외래키의 연관 관계가 지연로딩(LAZY)인 엔티티를 조회할 때 발생합니다.지연 로딩(LAZY):JPA는 “필요할 때만 DB에서 가져올게!”라는 방식입니다. → 처음엔 가짜(프록시)를 넣고 진짜 데이터가 필요해졌을 때 "그제야 DB를 뒤져서 진짜 객체로 바꾼다. 예시게시글(post)엔티티가 작성자(user) 엔티티를 참조하고 있을 때 ( = 게시글이 작성자의 정보를 알고 있음)작성자 엔티티를 LAZY 연관관계로 설정합니다.게시글 목록 10개를 조회 (처음은 LAZY관계로 게시글 정보만 가져옴 → 쿼리 1번)그런데 글마다 작성자 이름이 필요해서 post.getAuthor().getName()을 하면?→ 글 1개마다 작성자를 따로 DB에 물어봄 → 쿼리 10번👉결국 게시글.. 2025. 10. 15. 페이지(page/offset) vs 커서(cursor, keyset) 페이징 1) 한눈에 비교페이지 페이징(Page/Offset 기반)방식: LIMIT {pageSize} OFFSET {(page-1)*pageSize}장점: 임의 페이지 점프 가능(원하는 페이지로 바로 이동).단점: 큰 페이지 번호에서 느려짐 — 인덱스가 있어도 DB는 정렬 순서대로 N개 건너뛰기가 필요(= 스캔 비용 증가).언제? 목록 처음/중간을 점프해서 훑어봐야 할 때, 총 개수(total count)가 필요한 화면.커서 페이징(Cursor/Keyset 기반)방식: 마지막으로 본 행의 정렬 키(예: id, created_at)를 커서(cursor)로 저장 장점: 연속 탐색에 최적화(무한 스크롤·더 보기). 큰 데이터셋에서 매우 빠르고 안정적.단점: 임의 페이지 점프 불가(정방향/역방향으로만 이어보기). 정렬.. 2025. 9. 23. Spring JPA로 배우는 페이징: Page와 Slice 이해하기 페이징(pagination)이란?“한 번에 전부 보여주면 느려진다 → 정해진 개수만 잘라서(page) 보여주자”는 방법구글 검색 결과나 블로그 목록처럼 정해진 수의 게시글을 페이지를 넘겨가며 보는 것.1) SQL 기본: LIMIT / OFFSETLIMIT N : 한 번에 최대 N개 가져오기.OFFSET M : 앞에서 M개 건너뛰고 그다음부터 가져오기. (즉, M+1번째부터 시작)예시)LIMIT 10 OFFSET 10 → 11번째부터 10개.“페이지당 20개, 5페이지가 보고 싶다”는 상황:1부터 세는(1페이지가 첫 페이지) 페이지이라면: OFFSET = (5-1)*20 = 80, LIMIT 20 OFFSET 80 → 81~100번째2) 스프링 데이터 JPA에서의 페이징 흐름요청 → Pageable 생성 .. 2025. 9. 22. [SQL] DDL 정리 (CREATE) 1. 데이터 타입 (Data Types)1) 정수형 (Integer Types)SMALLINT (2byte, 약 -32,768 ~ 32,767)INTEGER (4byte, 약 -21억 ~ 21억) → 가장 많이 쓰임BIGINT (8byte, 매우 큰 정수 저장)👉 선택 기준: 데이터 크기에 따라 효율적으로 선택하면 됨. (예: 나이 = SMALLINT, 주민등록번호 ID 값 = BIGINT 가능)2) 실수형 (Floating-Point Types)REAL (4byte) : 소수점 포함한 근사값 저장 (정밀도 낮음)DOUBLE PRECISION (8byte) : REAL보다 더 큰 범위와 정밀도👉 주의: REAL/DOUBLE 은 근사값(대략적인 값) 저장이라, 정확한 계산(돈, 무게 단위 등)에는 적합.. 2025. 8. 31. 이전 1 2 3 4 ··· 12 다음