querydsl
Springboot JPA Querydsl 동적 정렬 OrderSpecifier
Springboot JPA Querydsl 동적 정렬 OrderSpecifier
2022.12.06SQL 동적 정렬이란? 하나의 API에서 정렬 조건을 동적으로 변경해, 정렬 혹은 정렬 + 페이징을 진행하는 것을 의미합니다. 예시를 보며, 필요한 상황이 언제이며, 어떻게 해결하는지 알아가 보겠습니다. 어떤 경우에 필요할까? 우리는 Querydsl만을 통해서가 아닌 Springboot Data JPA를 통해서도 쉽게, 페이징과 정렬을 할 수 있습니다. 하지만 문제 되는 경우는 같은 API 호출임에도 불구하고, 내림 차순 or 오름 차순과 같이 동적으로 정렬이 바뀌는 경우가 존재합니다. 물론 API를 2개 만들어 호출하면 문제없습니다. 하지만 리소스, 동작이 동일한데 API를 분리하는 것은 복잡성을 증가시킬 뿐입니다. 2가지의 방법으로 해결할 수 있습니다. 테스트 셋팅 Person이라는 Entity가 존..
Spring JPA @OneToOne N+1 문제 (Fetch = Lazy)
Spring JPA @OneToOne N+1 문제 (Fetch = Lazy)
2022.11.29N+1 문제란? 어떠한 값을 얻기 위해 JPA를 이용하여 1개의 쿼리를 사용하는 것을 의도했지만, 개발자의 의도와는 다르게 N개의 쿼리가 더발생하는 문제입니다. JPA를 공부한 적이 있는 사람이라면, @xxxToOne(fetch = FetchType.EAGER)로 설정돼 있는 것들을 @xxxToOne(fetch = FetchType.LAZY)로 설정하면 된다는 것을 들어보셨을 수도 있습니다. 저 역시도 이렇게 알고 있었지만, 프로젝트를 진행하며 겪은 N+1 문제를 살펴보겠습니다. 테이블 Parent와 Child가 1:1 관계를 가졌을 때 문제가 발생하므로 해당 케이스만 살펴보겠습니다. 여기서 연관관계의 주인은 Child로 설정하겠습니다. Parent @Entity @NoArgsConstructor(acc..