Jeomxon's Tech Note

[Spring-Data-JPA] @Query의 장점, 그리고 연관된 JPQL의 단점 본문

Spring/JPA

[Spring-Data-JPA] @Query의 장점, 그리고 연관된 JPQL의 단점

저문(jeomxon) 2022. 8. 3. 16:27

spring-data-jpa에서는 @Query 어노테이션을 통해 JPQL을 사용할 수 있도록 기능을 제공한다.

@Query("select m from Member m where m.username = :username and m.age = :age")
List<Member> findUser(@Param("username") String username, @Param("age") int age);

이런 식으로 사용할 수 있다.

여기서 얼핏보면 @Query에 있는 string으로 이루어진 쿼리문이 JPQL처럼 단순 스트링쿼리라고 생각이 들었는데 다른 점이 있었다.

 

JPQL에서는 쿼리문에 문법 오류가 있으면 컴파일 타임에 에러를 잡아주지를 못한다.

따라서 런타임 시에 에러가 발생할 수 있는데 이는 치명적이다.

사용자가 특정한 기능을 사용하다가 도중에 문제가 발생할 수 있다는 것을 의미한다.

 

Spring-Data-Jpa가 제공하는 @Query어노테이션은 비슷하지만 다르다.

보기에는 똑같이 스트링 쿼리문처럼 보이지만 어플리케이션 로딩 시점에 쿼리문을 파싱하기 때문에 컴파일 타임에 문법오류를 잡을 수 있다. 이는 상당히 큰 장점이다. 컴파일 타임에 발생하는 에러는 개발자에 실행을 시키는 시점에 즉시 확인을 할 수 있기 때문이다. 

런타임에 발생하는 에러는 사용자가 사용 도중에 발생할 수 있어서 컴파일 에러에 비하면 훨씬 위험하다.

 

실무에서도 자주 사용하는 어노테이션인만큼 잘 활용하여 사용하도록 하자