본문 바로가기

JPA3

[QueryDSL] queryDSL 도입기 저번에 사용했던 JPA Specification에 이어서 이번에는 QueryDSL을 도입해 보려고 합니다. ▶ QueryDSL 자바 코드로 SQL과 같은 쿼리를 생성해 주는 프레임워크로 기본적으로 @Entity로 등록된 클래스들을 Q클래스로 생성해 사용합니다. JPA를 사용하다 쿼리가 복잡해질 때는 JPQL을 사용하거나 저번에 소개한 Specification을 사용할 수 있습니다. 하지만 다음과 같은 장점 때문에 QueryDSL을 많이 사용합니다. java 코드로 가독성 좋은 쿼리 조건 작성 컴파일 시점에 문법 오류 발견 가능 자동완성 편리 동적인 쿼리 작성 가능 (BoleanBuilder, BooleanExpression 활용) 결국 자바로 작성하기 때문에 작성 중에 IDE에서 컴파일 오류를 잡아줄 뿐.. 2024. 1. 28.
[JPA] 검색 메소드 수정하기 - JPA Specification 전 편에서 언급했던 것처럼 이번 글에서는 비효율적인 검색 로직을 개선해보려고 한다. [JPA] 검색 메소드 수정하기 - N+1 문제 장기 프로젝트 별 헤는 밤에 있는 문제들을 하나씩 해결해보는 시간! 구경가기 👇 별 헤는 밤: 밤하늘, 별자리, 여행정보와 날씨예보까지 - Google Play 앱 오늘부터 별잘알! 오늘밤 별자리 정보, 날 starsufers.tistory.com 기존 코드 더보기 매개변수 Filter areaCodeList - 지역변수 hashTagIdList - 해쉬태그 리스트 searchKey - 검색어 // 생략 // public List getObservationWithFilter(Filter filter, String searchKey) { List areaCodeList = f.. 2023. 12. 7.
[JPA] 검색 메소드 수정하기 - N+1 문제 장기 프로젝트 별 헤는 밤에 있는 문제들을 하나씩 해결해보는 시간! [오늘의 할 일] 검색어, 필터(해쉬태그, 지역)를 적용하여 관측지를 검색할 수 있는 메소드를 수정한다. 별 헤는 밤에는 관측지 검색기능이 존재한다. 검색어와 필터를 통해 검색할 수 있는데 초기 구현 버전은 아래와 같았다. 간단히 설명하면(전혀 간단하지 않게 구현했지만) 검색어, 해시태그, 지역이 존재하는 경우를 모두 나누고 각각의 결과를 다른 리스트에 담고 공통으로 존재하는 결과를 추려서 반환했다 페이지 처리도 없이! (나는 가고 싶었던 N…모 서비스 회사 면접에서 이 코드에 대해 개선점 질문을 받았고 제대로 대답하지 못해 떨어졌다. 이제라도 수정해본다…) 기존 코드 더보기 public class Observation { @Id @Ge.. 2023. 10. 24.