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

asdkfur님의 프로필 이미지
asdkfur

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

엔티티 클래스 개발2

계층구조 카테고리 하위 속한 모든 아이템 조회

해결된 질문

작성

·

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

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

감사합니다. ㅎㅎ

1

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

질문의 핵심이 category 최적화라기 보다는, 이런경우 양방향 연관관계를 통해서 로딩하는 것이 좋은지, 아니면 쿼리를 2번 분리해서라도 단방향 연관관계로 푸는게 좋은지 이군요^^

지금 찾으려는 엔티티가 Item이고, 사실 Category는 Item을 찾는 검색 조건을 뿐입니다. 이런 경우 쿼리를 2번 분리하더라도 단방향 연관관계로 푸는게 더 좋습니다.

감사합니다.

0

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

안녕하세요 선생님 답변 다시 한버더 감사드립니다.

나름 선생님의 수고를 조금이나마 덜어 드리고자  (도움이 될지는 모르겠지만 ㅎㅎ) 질문하기전 중복된 질문이 있어나 찾아보고 인터넷도 뒤져보고 하지만 그래도 부족하네요 ㅎㅎ

제 질문의 요점은 특정 category에 속한 모든 아이템들을 찾는다면 이때 과연 category에서 양방향 관계로 아이템들을 가지고 있다가 리턴하는게 나은지 (양방향을 최대한 안쓰는게 좋지만)아님 특정 category를 부모로 가진 모든 cateogry 아이디를 찾아 그 값으로 다시 아이템을 조회하는게 바람직한지인데 

선생님은 주로 메모리에 모든 category 를 캐쉬 하셔서 사용하신다면 후자 즉  두번 조회하는 방식을 선호하신다는 말로 이해해도 될까요?

asdkfur님의 프로필 이미지
asdkfur

작성한 질문수

질문하기