인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

개발자꿈나무님의 프로필 이미지
개발자꿈나무

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

양방향 매핑이 언제 필요한지 여쭤보고 싶습니다.

작성

·

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

앗 그렇군요!! 쌤 자세한 답변 너무 감사합니다ㅎㅅㅎ

개발자꿈나무님의 프로필 이미지
개발자꿈나무

작성한 질문수

질문하기