inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

1607

개발자꿈나무

작성한 질문수 1

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해서 불러오면 되는거 아냐? 라는 생각도 드는데요..

그리고 추가 질문으로, 언제 양방향 매핑을 사용하는게 좋은지 잘 모르겠습니다. 양쪽에서 참조할 일이 있을 때라고 강의에서는 말씀해 주셨는데 잘 안 와 닿더라구요. 혹시 실무 예시를 좀 들어 주실 수 있으실까요?

감사합니당!!!

양방향매핑 java 단방향매핑 jpa JPA mapping

답변 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으로 한번에 조회하고 싶은 경우가 있습니다.

이럴 때 양방향 매핑이 필요합니다.

감사합니다.

0

개발자꿈나무

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

1

개발자꿈나무

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

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

25

2

inheritance startegy 선택시 고려사항

0

22

1

Entity 동등성 비교

0

18

1

실무 조언 관련 질문입니다.

0

46

1

H2데이터베이스 파일 생성

0

56

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

52

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

52

1

JPQL 메소드와 락

0

55

1

Delivery @OneToOne

0

60

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

93

2

UnsupportedOperationException 발생

0

86

3

H2 Database 연결이 안됩니다.

0

92

2

연관관계 매핑 질문드립니다.

0

85

2

h2데이터베이스 실행오류

0

107

2

persistence.xml

0

106

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

80

1

영속성 컨텍스트

0

66

1

JPA 프록시

0

95

1

Native Query와 MyBatis

0

68

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

86

1

임베디드 타입 예시 코드 관련 질문

0

114

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

94

3

인텔리제이 패키지 커서 단축키 질문

0

108

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

144

1