인프런 커뮤니티 질문&답변

jayjoy05님의 프로필 이미지
jayjoy05

작성한 질문수

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

jpa repository에서 JPQL 엔티티 리턴 관련 질문

작성

·

85

0

내가 댓글 단 게시글을 조회할 때, @JPQL을 이용해서 다음과 같이 댓글 Repository에서 JPQL 사용해서 PostEntity를 반환하고 있는데, 이 방식이 혹시 문제가 있을까요?

@Repository
public interface CommentRepository extends JpaRepository<CommentEntity,Long> {

@Query("SELECT DISTINCT c.post FROM CommentEntity c WHERE c.user.userId = :userId")
Page<PostEntity> findPostByUserComment(@Param("userId") String userId, Pageable pageable);

}

질문은 다음 3가지 입니다.
1. CommentRepository에서는 CommentEntity로만 반환하고 CommentEntity.getPost()를 통해 게시글을 가져오는 게 맞을까요? 아니면 위 코드대로 진행해도 괜찮을까요? 실무에서 선호하는 방식이 궁금합니다.

  1. 내가 댓글 단 게시글을 조회하는거니까, CommentRepository에서 메소드를 만드는 게 맞다 생각했는데 혹시 PostRepository에서 메소드를 구현하는게 더 좋을까요?

  2. 만약 위 코드처럼 한다면, 다대일이기 때문에 fetch join을 추가해서 pageable 같이 써도 문제 없는게 맞을까요?

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. jayjoy05님

  1. 이 부분은 정답이 없습니다. 실무에서도 다양한 방식을 섞어서 함께 사용합니다.

  2. 이 부분도 정답이 없습니다. 만약 게시판 기능이 단순하다면 둘을 하나에 통합해서 관리하는 것이 좋은 방법이 될 수 있습니다. 다만 게시판의 기능이 복잡해진다면 둘을 분리하는 것이 더 나은 선택일 수 있습니다.

  3. 네 맞습니다 🙂

감사합니다.

jayjoy05님의 프로필 이미지
jayjoy05
질문자

지식 공유해주셔서 항상 감사드립니다

0

안녕하세요, 인프런 AI 인턴입니다. jayjoy05님의 질문에 대해서 살펴본 바에 따르면, 제가 접근 가능한 정보 중에는 jayjoy05님의 질문과 직접적으로 관련된 내용을 제공하는 정보가 없습니다. 그러나, jayjoy05님의 질문과 유사한 문제를 다루는 일부 정보를 제공해드릴 수 있습니다.

  1. 다대일 양방향에 대한 정리와 질문(질문 보기)

    • 이 글에서는 다대일 양방향 매핑과 관련해, JPQL을 사용할 때의 고려사항과 양방향 매핑의 필요성에 대해 논의되고 있습니다. JPQL을 사용하는 상황에서 다대일 양방향 매핑을 어떻게 접근해야 하는지에 대한 인사이트를 제공할 수 있습니다.
  2. 엔티티에서 equals 오버라이딩, fetch join 2번 질문(질문 보기)

    • fetch join과 관련한 질문인 이 게시물은 엔티티 간의 관계 설정 시 고려해야 할 사항과 JPQL에서 fetch join을 사용하는 방법에 대한 구체적인 예시를 다루고 있습니다. 이는 jayjoy05님의 3번째 질문과 관련이 있을 수 있습니다.
  3. 스프링 데이터 JPA와 JPQL을 함께 사용할 경우 Repository에 대해 질문 드립니다.(질문 보기)

    • 이 질문과 답변 세션에서는 JPQL과 스프링 데이터 JPA를 함께 사용할 때의 best practice에 대해 논의되고 있습니다. 특히 Repository에서 JPQL을 사용하는 방식에 대한 김영한 강사님의 의견이 포함되어 있어, jayjoy05님의 경우에도 도움이 될 수 있습니다.

굳이 답변을 한다면, 실무에서는 양방향 매핑을 활용하여 CommentEntity로부터 PostEntity를 조회하는 경우가 많이 있습니다. 하지만, 특정 사용자에 의해 작성된 댓글에 묶여 있는 포스트를 조회한다는 비즈니스 요구사항에 직접적으로 접근하기 위해 jayjoy05님의 코드처럼 CommentRepository에서 JPQL을 사용하는 것이 적절할 수 있습니다. 문제가 될 만한 상황은 대체로 성능과 관련된 부분에서 발생하는데, 이 때는 fetch join 등을 적절히 활용하여 해결하는 것이 일반적입니다.

실무에서는 요구 사항의 명확함, 성능, 그리고 코드의 복잡성 사이의 적절한 밸런스를 찾는 것이 중요합니다. 따라서, 이러한 방법 외에도 다양한 접근 방식이 가능할 수 있으며, 특정 상황에서 최적의 해결책을 찾기 위해 여러 방법을 시도해보는 것이 좋습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

jayjoy05님의 프로필 이미지
jayjoy05

작성한 질문수

질문하기