작성
·
1.4K
3
선생님 안녕하세요!
매번 정말 좋은 강의 감사드립니다ㅋㅋㅋㅋ
저 진짜 웹 하나도 모르는 생짜 초보인데, 갑자기 자바 스프링 실무에 투입되어서 넘 힘들었거든요ㅠㅠ
바로 선생님 강의 패키지로 싹 다 결제하고, 하나씩 들으면서 감을 잡고 있습니다. 제 구세주십니다. 감사합니다!!
(다음달 월급 들어오면 선생님께 다 갈 예정입니다..?!ㅎㅎㅎ)
최근에 JPA Mapping 관련해서 공부하고 또 실무에 적용해 보고 있는데요,
현재 제가 하는 프로젝트에서는 음식 재료 바구니 기능을 구현해야 합니다.
요게 유저 - 대바구니 - 소바구니 - 음식 재료로 이어지는 계층적 구조이고,
유저 하나가 여러 대바구니, 대바구니 하나가 여러 개의 소바구니, 소바구니 하나가 여러 개의 음식 재료를 포함하는 구조입니다.
각 자식들은 하나의 부모에만 속하게 되어 있구요.
쌤 강의 듣고 일단은 ManyToOne 단방향 매핑으로 각각을 1:N으로 걸어줬는데요.
특정 대바구니 id 아래에 있는 소바구니 (혹은 그 소바구니 아래에 있는 음식 재료까지)를 조회하거나, 특정 소바구니 id 아래에 있는 음식 재료들을 조회하거나 하는 쿼리가 가끔 필요한 상황입니다. 또 대바구니 하나를 삭제하면 그 밑에 소바구니는 싹 다 지워지고, 소바구니 하나를 지우면 그 바구니에 음식 재료들은 싹 다 지워져야 하는 상황이구요.
즉 DELETE시 CASCADE + 가끔 부모 아래에 있는 자식을 부모 id로 조회하는게 필요한 상황입니다.
요럴때 양방향 매핑이 필요할까요?!
현재 고민하고 있는 옵션은
- 단방향 매핑으로 계속 가되 ON DELETE CASCADE를 DB TABLE에 걸어줘서 부모 삭제시 자식도 삭제되도록 만든다.
- 아니면 양방향 매핑으로 해주고 mappedBy 있는쪽에 CASCADE.ALL, orphanRemoval 걸어준다.
인데요,
1) 성능이 단방향, 양방향 매핑에서 차이가 많이 나는지 궁금합니다.
2) 그냥 단방향 매핑으로 모든 거 처리하고, 필요할때만 sql join query 날려서 join해서 불러오면 되는거 아냐? 라는 생각도 드는데요..
그리고 추가 질문으로, 언제 양방향 매핑을 사용하는게 좋은지 잘 모르겠습니다. 양쪽에서 참조할 일이 있을 때라고 강의에서는 말씀해 주셨는데 잘 안 와 닿더라구요. 혹시 실무 예시를 좀 들어 주실 수 있으실까요?
감사합니당!!!
답변 2
6
안녕하세요. 개발자꿈나무님
먼저 처음 개발하신다면 가급적 cascade를 사용하지 않는 것을 권장합니다.
cascade 없이 개발하고, 추후에 꼭 필요한 부분한 cascade를 도입하는 것이 좋습니다.
다음을 참고해주세요.
https://www.inflearn.com/questions/31969
1) 성능이 단방향, 양방향 매핑에서 차이가 많이 나는지 궁금합니다.
-> 똑같습니다^^!
2) 그냥 단방향 매핑으로 모든 거 처리하고, 필요할때만 sql join query 날려서 join해서 불러오면 되는거 아냐? 라는 생각도 드는데요..
-> 네 그렇게 해도 됩니다^^!
그런데 실제 개발을 해보면 복잡한 조회 쿼리에서 양방향 매핑을 하고 싶은 경우가 발생합니다.
예를 들어서 team 1:N member 이런 관계가 있을 때 team과 member를 fetch join으로 한번에 조회하고 싶은 경우가 있습니다.
이럴 때 양방향 매핑이 필요합니다.
감사합니다.
1
앗 그렇군요!! 자세한 답변 너무 감사합니다ㅎㅅㅎ