본문 바로가기
Develop/Spring

JPQL vs QueryDSL 간단 비교

by 코딩의성지 2021. 6. 30.

하이..!

 

최근에 QueryDSL 이라는 걸 알게 되었고 ... 이렇게 시간이 날때마다 틈틈이 정리해 두려고 한다.

 

오늘은 정말 간단하게 특정 데이터를 select 해오는 간단한 테스트 코드로 비교를 해봤다.

 

기본적인 QueryDSL 과 JPA 설정은 아래 링크를 참조하면된다.

https://devkingdom.tistory.com/241

 

[queryDsl] QueryDsl 프로젝트 환경 세팅하기

보통 처음으로 SpringBoot 프로젝트를 만들때는, https://start.spring.io/ 여기서 필요한 라이브러리도 넣고 해서 기본적인 건 세팅을 해준다. 그런데.. queryDsl 은 저기서는 안되어서 내부적으로 build.gradle

devkingdom.tistory.com

 

 

 

	@Test
	public void testJPQL() {
		String qlString = "select m from Member m " +
							"where m.userName = :userName";

		Member findMember = em.createQuery(qlString, Member.class)
				.setParameter("userName", "kang")
				.getSingleResult();

		assertThat(findMember.getUserName()).isEqualTo("kang");
	}

위의 코드는 JQPL 을 이용해서 작성한 코드이다.

 

	@Test
	public void testQuerydsl() {
		queryFactory = new JPAQueryFactory(em);
		QMember m = new QMember("m");

		Member findMember = queryFactory
				.select(m)
				.from(m)
				.where(m.userName.eq("kang"))
				.fetchOne();

		assertThat(findMember.getUserName()).isEqualTo("kang");

	}

위 코드는 queryDsl이다.

 

queryDsl을 이용해서 코드를 짜면 일단 파라미터 바인딩이 자동으로 해결되는 장점이 있다.

실제로 코드를 실행시켜보면 위의 사진처럼 PreparedStatement 가 동작하여 자동으로 파라미터 바인딩을 해주는 것을 볼 수 있다.

 

그리고 또 엄청난 장점이 있는데 jpql 에서는 직접 쿼리를 스트링으로 입력해줘야하는데, querydsl은 자바코드로 이뤄져 있다. 만약에 스트링에서 오타가 나면 이게 ... 에러가 런타임 시점에 발생해버린다. ( 다들 아시는 것처럼 런타임 에러는 잡기가 쉽지 않고, 크리티컬하다.)

 

그런데 querydsl은 자바코드이다 보니깐 컴파일 시점에서 에러가 나서 개발단계에서 에러를 잡을 수 있기때문에 좋다.

 

그리고 querydsl 문법은 보시는 것처럼 굉장히 sql 문과 비슷한 구조로 이루어져 있다. 이는 굉장히 이해하기가 쉽다는 것을 뜻한다.

 

앞으로 공부를 더 해봐야겠지만, querydsl을 잘만 활용하면 지루하던 반복작업이 많이 줄어들것 같다는 생각이 든다.

 

끝.

 

반응형

댓글