• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

하나의 Repository에서 2개 이상의 서로 다른 유형의 엔터티를 반환해도 되나요?

21.03.22 16:26 작성 조회수 1.59k

0

안녕하세요.

좋은 강의 덕분에 업무에 많은 도움이 되고 있습니다.  감사합니다. ^^

다름이아니라, 강의 예제에 나온 repository에서는 보통 한 종류의 엔터티를 반환하는데요. 

예를 들면 OrderRepository 에서는 반환값이 Order, List<Order> ItemRepository에서는 Item, List<Item>을 반환합니다.  하지만 OrderRepository에서 Item, List<Item>을 반환하는 경우는 없더군요.

그런데 여러 테이블간에 조인을 거쳐 최종 조회되는 엔터티가 해당 Repository의 엔터티가 아닌 경우, 이럴 때는 어떻게 하는 게 좋을까요?

예를 들면 엔터티 간의 관계가 아래와 같을 때

Order : OrderItem  = 1 : N
Item : OrderItem = 1 : N
Item : ItemCategory =  1 : N
Category : ItemCategory = 1 : N

Order Id = 100인 Item의 List<Category>를 조회하고자 하는 경우

  1. OrderRepository에서 각 엔터티들의 조인을 거쳐 List<Category>를 반환하는 게 좋을까요?
  2. 아니면 각각의 Repository에서 필요한 엔터티를 반환받아 최종적으로 List<Category>를 찾는 것이 좋은가요?
  3. 아니면 제 3의 별도의 Repository를 만드는 것이 좋을까요?

여러개의 테이블을 조인하여 한 번의 쿼리로 데이터를 조회하는 것이 더 성능상 이점이 있을 것 같은데요

반면 Repository에서 서로 다른 유형의 엔터티를 반환해도 유지보수에 문제가 없을지 걱정이 듭니다.

김영한님의 조언 부탁드립니다.

답변 1

답변을 작성해보세요.

1

안녕하세요. 신이만든지기님^^

좋은 질문입니다.

결론부터 말씀드리면 1,2,3이 상황에 따라서 다 필요합니다.

리포지토리는 해당 엔티티를 저장하고 조회하는 것이 목적입니다.

그래서 OrderRepository는 가급적 Order를 반환하도록 하고,

Category 관련 데이터를 조회해야 하면 CategoryRepository를 별도로 만드는 것이 좋습니다.

물론 그 안에서 해당 엔티티를 찾기 위해 조인이 발생할 수도 있습니다.

그리고 해당 Repository에서 다른 유형을 반환해도 되지만, 아무래도 유지보수가 점점 어려워지겠지요?

통계 데이터 처럼 너무 많이 가공된 데이터를 조회해야 하면 해당 기능을 위한 별도의 리포지토리를 만드는 것이 좋습니다.

감사합니다.

빠른답변 감사합니다. 

많은 도움 되었습니다. ^^