🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Item 조회시 카테고리 별로 조회

21.02.07 16:28 작성 조회수 230

0

안녕하세요 강사님

저는 jpa 1편을 듣지 않고 2편을 바로 듣고 쿼리디에스엘을 사용해서 코틀린으로 예제를 만들어보고 있습니다

예제 테이블의 여러 조회문을 만들어 보던 중 item 조회에 궁금한게 생겨 질문합니다.

아래 테이블은 category, category_item, item 순입니다.

제가 처음에 하고 싶던 것은 item 테이블의 DTYPE을 이용해서 타입별로 가져오는것입니다.  그래서 where절에 dtype을 넣고 싶었는데 넣을 수가 없더군요

그래서 찾은 방법이 조회를 할때 select문에 movie나 album의 q클래스를 사용하면 쿼리의 where절에 dtype이 찍혀서 해당값만 불러오더라구요

그런데 이렇게 했을때 문제가 album, book, movie에 대한 쿼리를 다 따로 짜야한다는 것입니다.  

이또한 비효율적이라 생각하여 jpa2 강의에는 사용하지 않아서 정확한 용도가 뭔지는 모르겠지만 category 테이블을 사용해 봤습니다.  위의 테이블 값처럼 item과 다대다 매핑이 되어있는 상태에서 페치 조인을 하니 원하는데로 값이 출력되더라구요

이렇게 밤새 고민해서 원하는 바는 이뤘는데 현업은 어떨지 궁금하더라구요.

저처럼 카테고리로 조인해서 찾는 방법을 사용하는지 아니면 제가 처음 고민햇던 dtype별로 가져오는 방법이 또 존재해서 그방법을 쓰는지 궁금합니다.

--------------------------------------------------------------------------------------------------------------------------

두번째로 페이징된 결과값 출력인데요

api의 출력값으로 page를 넘기게 되면 

pageing에 대한 정보값들이 같이 날라가는데 현업에서 이 데이터들을 다 넘겨주는지 아니면 리턴하기 전에 따로 response를 만들어 필요한 값만 넘겨주는지가 궁급합니다.

--------------------------------------------------------------------------------------------------------------------------

마지막으로 리턴값 출력시 엔티티 노출입니다.  api를 구현할때 입력이나 출력값으로 엔티티를 사용하면 안된다고 배워서 출력값을 위한 dto를 따로 만들어 출력하려 합니다.  그런데 위의 예제의 경우 하나의 api에서 album, movie, book의 정보를 출력하기엔 각각 다른 변수값들이 있어서 고민이 되더라구요.  각각의 케이스별로 따로 dto를 만들어 줘야하는지 아니면 null값이나 빈값이 들어갈 순 있지만 각 케이스를 통합할 수 있는 dto를 만들어 줘야할지 궁금합니다.

--------------------------------------------------------------------------------------------------------------------------

이제 입사한지 3개월이 갓 넘은 초보 개발자인데 신규 프로젝트를 하면서 자바에서 코틀린, mybatis에서 jpa로 넘어가게 되어 강사는 강의를 들으며 공부하고 있습니다.  jpa는 공부를 하면 할수록 추가로 공부해야 더 생기는거 같아요!

감사합니다

답변 1

답변을 작성해보세요.

0

안녕하세요. rkdals213님

첫번째 질문은 먼저 JPA의 연관관계 매핑과 상속관계에 대한 기본기를 쌓으셔야 합니다.

그래야 올바른 문제 해결방안을 찾으실 수 있습니다. JPA 기본편 강의를 통해서 기본기를 먼저 쌓기를 권장드립니다.

두번째 질문은 리턴하기 전에 먼저 response를 만들어서 필요한 값만 넘겨줍니다.

마지막 질문은 선택입니다. null값이나 빈값이 들어갈 수 있는 통합 DTO를 만들어도 됩니다. 그런데 이렇게 응답이 오면 클라이언트 입장에서는 매우 혼란스럽기 때문에 각각의 케이스별로 따로 dto를 만들어주셔야 합니다.

JPA는 스프링만큼 공부할 분량이 많습니다. 특히 DB의 데이터를 다루기 때문에 잘못하면 장애로 이어질 가능성도 매우 높습니다. 실무에서 JPA를 사용해야 하는 상황이라면, 다음 JPA 실무 완전 정복 로드맵을 통해서 기본기부터 확실하게 다시시는 것을 권장드립니다.

https://www.inflearn.com/roadmaps/149

감사합니다.

채널톡 아이콘