inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

경로 표현식

뷰 템플릿에서의 경로표현식에 대한 질문 있습니다.

286

딸기초콜릿

작성한 질문수 8

0

안녕하세요 영한님 jpa부터 querydsl까지 완강하면서 개인적으로 프로젝트도 만들고 있습니다 ~~ 게시판 관련해서 프로젝트를 만들고 있는데 뷰 템플릿에서의 경로 표현식이 가져오는 쿼리를 최적화하고 싶어서 질문드렸습니다.
 

일단 게시물(article)과 회원(member)를 다대일 관계로 설정해두었습니다. 또한 게시물과 댓글(reply)은 일대다 관계입니다. 페이징을 통해 게시물 목록들을 보여주는 화면의 뷰 템플릿(타임리프)에서 게시물을 작성한 회원의 이름(article.member.nickname)을 가져오려면 아래와 같이 가져와야 하는데 이렇게 가져오면 회원의 이름 뿐만이 아니라 모든 필드들을 가져오는 쿼리가 실행됩니다.

<tbody>
<tr th:each="article : ${articles}">
<td th:text="${article.id}"></td>
<td><a href="hello.html" th:href="@{/article/detail/{articleId}(articleId=${article.id})}"
th:text="|${article.title}[${article.rCnt}]|">title</a></td>
<td th:text="${article.member.nickname}"></td>
<td th:text="${article.hit}"></td>
</tr>
</tbody>

그래서 이를 최적화하기에 여러 방법이 있겠지만 저는 위에 보시다시피 게시물의 댓글을 가져오기 위해 기존에는 article.replies.size()로 가져왔지만, 지금은 그냥 게시물 테이블에 rCnt(게시물의 댓글) 컬럼을 하나 추가했습니다. 그래서 회원의 이름(nickname) 또한 이와 같이 게시물 테이블에 nickname 컬럼을 따로 하나 추가해서 가져오자 하니... 앞으로 이런식으로 개발하면 별로 비효율적일 것 같아서 질문드렸습니다.

JPA java

답변 2

0

딸기초콜릿

답변 감사드립니다 David님. 그렇다면 queryprojection 같은 것을 사용해서 아예 dto로 조회하라는 말씀이신가요?

또한 앞으로 이렇게 특정 엔티티(여기서는 게시물)와 연관된 엔티티(댓글) 중에서 하나의 컬럼만을 가져오는 상황에 직면하면 굳이 이렇게 최적화를 해야 할까요?

저는 페이징을 통해 가져오는 엔티티는 굳이 하지 않아도 된다고 생각하고 만약 데이터 건수가 너무 많다 싶으면 고민할 필요는 있다고 생각합니다. 어차피 쿼리 개수야 뭐 한두개 늘어나고 쿼리를 통해 가져오는 필드들이 많다고 해서 성능에 크게 문제되지는 않다고 배웠습니다.

0

David

만약 dto를 사용하지 않고 해당 부분을 해결할 수 있는 문제가 있다면 그것을 사용하셔도 되고, 최적화를 하지 않으셔도 됩니다.

질문에 언급된 것처럼 추가적으로 쿼리가 발생하는 상황을 어떻게 해결할 수 있는지를 알려드렸습니다.

0

David

안녕하세요. 딸기초콜릿님, 공식 서포터즈 David입니다.

article 엔티티를 바로 사용하시기보다 필요한 것들을 조인쿼리로 가져와서 필요한 것들만 DTO에 담아 제공하면 좋을 것 같습니다.

감사합니다.

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

25

2

inheritance startegy 선택시 고려사항

0

22

1

Entity 동등성 비교

0

18

1

실무 조언 관련 질문입니다.

0

46

1

H2데이터베이스 파일 생성

0

56

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

52

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

52

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

60

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

93

2

UnsupportedOperationException 발생

0

86

3

H2 Database 연결이 안됩니다.

0

92

2

연관관계 매핑 질문드립니다.

0

85

2

h2데이터베이스 실행오류

0

107

2

persistence.xml

0

106

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

80

1

영속성 컨텍스트

0

66

1

JPA 프록시

0

95

1

Native Query와 MyBatis

0

68

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

86

1

임베디드 타입 예시 코드 관련 질문

0

114

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

94

3

인텔리제이 패키지 커서 단축키 질문

0

108

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

144

1