목록2025/06/27 (3)
che01 님의 블로그
DTO 프로젝션이란?데이터베이스에서 필요한 필드만 선택해서 조회하고, 그 결과를 DTO 객체에 바로 매핑하여 반환하는 방법이다. 엔티티 전체를 조회하는 대신 원하는 데이터만 가져와 성능을 최적화할 수 있다.사용하는 이유성능 최적화불필요한 필드를 제외하고 필요한 데이터만 조회네트워크 트래픽 감소메모리 사용량 절약응답 최적화API 응답에 필요한 정보만 포함클라이언트 처리 속도 개선민감한 정보 노출 방지코드 가독성복잡한 조인 결과를 명확한 DTO로 표현비즈니스 로직과 데이터 구조 분리QueryDSL에서 DTO 프로젝션 방법1. Projections.fields() - 필드 이름 기반 매핑List results = queryFactory .select(Projections.fields( Tod..
결론QueryDSL에서 leftJoin()을 사용할 때 항상 fetchJoin()이 필요한 것은 아니다. DTO 프로젝션으로 조회하는 경우에는 N+1 문제가 발생하지 않는다.상황별 N+1 문제 발생 여부1. 엔티티 직접 조회 - N+1 발생함List todos = queryFactory .selectFrom(todo) .leftJoin(todo.managers, manager) // fetchJoin 없음 .fetch();// 연관 객체 접근 시 N+1 발생for (Todo t : todos) { t.getManagers().size(); // 각 Todo마다 추가 쿼리 실행}2. DTO 프로젝션 조회 - N+1 발생하지 않음List result = queryFactory ..
Spring에서 페이징을 처리하는 방법은 크게 두 가지가 있다. 각각의 특징과 사용법을 정리해보자.1. 전통적인 방식 - @RequestParam 직접 받기컨트롤러에서 page와 size 파라미터를 직접 받아서 처리하는 방식이다.특징컨트롤러에서 page, size를 직접 파라미터로 받음defaultValue를 통해 기본값 지정 가능Pageable 객체를 직접 생성해서 서비스에 전달코드 예시@GetMapping("/todos")public ResponseEntity> getTodos( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { Pageable pageable = PageR..