Team project/'AdvICE' 웹 서비스 프로젝트

[AdvICE] JPA의 JPQL이 아닌 순수 SQL 쿼리 사용

kanado 2024. 5. 11. 18:52

문제:

특정 게시글에 달린 모든 댓글을 반환하는 API를 구현하는 과정에서 각 댓글의 모든 정보 (모든 column)을 반환하는 문제 발생했다.

Comment Entity

각 댓글의 column중에 오직 댓글 내용을 반환하는 content 데이터와 직성 날짜/시간을 반환 하는 writeDatetime 데이터를 반환하는 API를 구현하는 것이 목표였다.

 

해결 과정:

댓글 repository 인터페이스에서 @Query 애너테이션을 이용하여 댓글의 내용(content)과 작성 날짜 및 시간(writeDatetime)을 반환하는 SQL 쿼리를 직접 정의했다. 이 쿼리는 comment 테이블에서 각 댓글이 속한 기사의 번호(article_num)가 특정 기준에 맞는 경우에만 해당 데이터를 선택하도록 설계되었다. 또한, 결과는 writeDatetime 필드를 기준으로 내림차순으로 정렬하여 가장 최근에 작성된 댓글이 먼저 나타나도록 했다.


이렇게 함으로써 API는 사용자가 요청한 게시글에 대한 모든 댓글을 효율적으로 조회할 수 있으며 각 댓글에 대한 내용과 작성 날짜/시간 정보만을 간결하게 제공한다. 결과적으로, 이 방식은 데이터 전송량을 최소화하고, 클라이언트 애플리케이션에서 댓글 데이터를 더 빠르고 쉽게 처리할 수 있도록 돕는다.

 

또한 nativeQuery = true 속성을 이용하여 해당 쿼리가 JPA의 JPQL이 아닌 순수 SQL로 작성되었음을 명시함으로써 속성의 사용은 이 모든 과정이 데이터베이스에 직접적으로 최적화되도록 보장하여 성능 저하를 방지하고 시스템의 전반적인 효율성을 증진시킨다.