Query DSL을 배우기 전, '왜 쓸까?'에 대해 정리
JPA에서 JPQL을 작성할 때 많은 불편함이 있었다.
em.createQuery(
"select new Project.repository.itemQueryDto(i.id, x.name, ..)" +
" from Item i" +
" join i.xx x" +
...
, ItemQueryDto.class)
- 컴파일 단계에서 에러를 못 찾음
- 위 처럼, 문자열을 하나하나 이어 만들어 쿼리문을 짜야하기 때문에 잘못 작성할 경우, 컴파일러 단계에서 에러를 발견할 수 없다.
- 가독성이 안좋다.
- 한눈에 보기에도 코드가 잘 안읽힌다. (위 예시는 짧지만, 쿼리문이 더 길어질 경우 정말 보기 힘들다.)
- 특히, 저 "new Project...()"와 같은 부분이 많이 거슬린다.
- 동적 쿼리를 짜기 힘들다.
이러한 단점들을 없앤 것이 QueryDSL이다.
간단히 QueryDSL의 장점/특징을 요약하면 아래와 같다.
- 유지보수성이 향상. (쿼리문을 문자열이 아닌 코드화)
- 유연성이 향상된다. (동적 쿼리를 작성하기 편리해진다.)
- 컴파일 시점에 에러 발견 가능!
위 예시 코드를 QueryDSL로 작성하면 아래와 같이 바뀐다!
...
query.select(itemQueryDto)
.from(item)
.join(item.xx)
.fetch();
...
한 눈에 보기에도 깔끔하다.
'스프링' 카테고리의 다른 글
스프링 - WebSocket (0) | 2024.03.07 |
---|---|
[WAS] 쓰레드 풀 (0) | 2024.03.07 |
동시 요청 문제 - ConcurrentHashMap (1) | 2024.02.28 |
스프링 테스트 - 통합 테스트와 단위 테스트 (0) | 2024.02.22 |
스프링 테스트 - JUnit의 생명주기와 주요 어노테이션 (0) | 2024.02.21 |