해결된 질문
작성
·
3.5K
1
안녕하세요.항상 모든 질문에 정성스럽게 답변하시느라 고생이 많으십니다. 그래서 질문하는게 조심스럽지만 제가 못보는 부분이 있을가 걱정되 또 질문을 하게 되네요 ㅎㅎ
혹시 만약 이 강의에서 처럼 Category 가 계층 구조로 되어있으나 Item과 일대다 구조되어있을때 특정 category 하위에 카테고리에 속한 모든 item 을 찾을때 어떤방식으로 많이 구현하시나요?
제가 생각한 방법은
서비스 레이어에서 카테고리 리파지토리를 통해 특정 category엔티티를 찾아온다.loop를 돌면서 child를 모두 로딩시키 면서 child id 를 리스트로 만든다 -> 아이템 리파지토리의findByCategoryIds와같은 메서드로 해당 id에 속한 모든 item를 찾는다.
조금더 깔끔한 방법은 없을까요 ? 양방향 관계를 줄이는게 좋지만 이상황에서는 양방향 관계를 걸어서 Category에서 one to Many로 item을 가지고 있다가 그 리스트를 로딩후 반환하는게 나을까요?
항상 정말 좋은 강의와 꼼꼼한 답변 감사하게 생각하고 있습니다.
답변 4
4
안녕하세요. asdkfur님^^
(저의 노고를 알아주시니 감사합니다 ㅋㅋ)
카테고리 설계와 최적화는 생각보다 깊이가 있고, 다양한 방법이 존재하고, 내용도 방대해서 한번 찾아서 공부해보시길 권장합니다.
구글에 "db 계층 카테고리 설계" 검색하면 정말 다양한 내용을 찾을 수 있습니다.
DB 설계와는 별도로 제가 개인적으로 선호하는 방식은 카테고리는 자주 변하는 항목이 아니도 데이터도 많지 않기 때문에, 애플리케이션 로딩 시점에 몽땅 메모리에 캐시합니다.
그러면 루프를 돌던 뭘 하던 결국 메모리에서 동작하기 때문에 매우 빠른 속도로 원하는 결과를 얻을 수 있습니다.
감사합니다^^
1
1
질문의 핵심이 category 최적화라기 보다는, 이런경우 양방향 연관관계를 통해서 로딩하는 것이 좋은지, 아니면 쿼리를 2번 분리해서라도 단방향 연관관계로 푸는게 좋은지 이군요^^
지금 찾으려는 엔티티가 Item이고, 사실 Category는 Item을 찾는 검색 조건을 뿐입니다. 이런 경우 쿼리를 2번 분리하더라도 단방향 연관관계로 푸는게 더 좋습니다.
감사합니다.
0
안녕하세요 선생님 답변 다시 한버더 감사드립니다.
나름 선생님의 수고를 조금이나마 덜어 드리고자 (도움이 될지는 모르겠지만 ㅎㅎ) 질문하기전 중복된 질문이 있어나 찾아보고 인터넷도 뒤져보고 하지만 그래도 부족하네요 ㅎㅎ
제 질문의 요점은 특정 category에 속한 모든 아이템들을 찾는다면 이때 과연 category에서 양방향 관계로 아이템들을 가지고 있다가 리턴하는게 나은지 (양방향을 최대한 안쓰는게 좋지만)아님 특정 category를 부모로 가진 모든 cateogry 아이디를 찾아 그 값으로 다시 아이템을 조회하는게 바람직한지인데
선생님은 주로 메모리에 모든 category 를 캐쉬 하셔서 사용하신다면 후자 즉 두번 조회하는 방식을 선호하신다는 말로 이해해도 될까요?