inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

양방향 연관관계를 짓는 기준

206

opix0306

작성한 질문수 15

0

안녕하세요. 연관관계를 맺으면서 선생님께서 양방향 연관관계는 비즈니스 로직이 복잡해지는 경우가 많으니 다대일 단방향으로 관계를 맺고 개발 진행중에 양방향으로 연관관계를 가져야할 필요성을 느낄 때 그때 양방향 연관관계를 매핑하라고 하셨습니다.

그 필요성에 대해 궁금해서 질문드립니다.

게시글과 댓글의 관계를 댓글(N) 게시글(1) 로 다대일 단방향으로 관계를 맺었고, 개발을 하다가 게시글을 조회할 때 관련된 댓글들도 한번에 가져오기 위해 페치조인을 사용하려고 합니다.

그런데 조인을 하려면 게시글에 댓글에 대한 참조가 없어 조인을 할 수 없어 양방향 연관관계를 맺어줘야 하나 생각했습니다.

제가 생각한 양방향 연관관계를 맺어야하는 필요성이 이런 경우가 맞을까요?

양방향 연관관계를 맺는 필요성에 대한 기준이 있는지 궁금합니다.

java spring 웹앱 spring-boot jpa

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. opix0306님의 질문에 대하여, 양방향 연관관계 설정에 대한 이해가 필요해 보입니다. 질문에서 언급한 “양방향 연관관계를 맺어야 하는 필요성”에 대한 구체적 기준과 예시에 대해 말씀드리겠습니다.

양방향 연관관계는 특히, 객체 지향 프로그래밍에서 객체 간의 관계를 설계할 때 중요한 개념입니다. 이는 한 쪽 방향에서만 연관 관계를 설정하는 단방향 연관관계와 달리, 양 측에서 서로를 참조할 수 있도록 하는 것을 의미합니다.

양방향 연관관계를 설정해야 하는 몇 가지 필요성에는 다음과 같은 상황들이 포함됩니다:

  1. 엔티티 간의 탐색 효율성: 양방향 연관관계는 한 엔티티에서 관련 엔티티에 보다 손쉽게 접근할 수 있게 해줍니다. 예를 들어, 게시글 엔티티에서 댓글 엔티티로의 접근이 필요할 때, 양방향 연관관계가 설정되어 있다면 게시글 객체를 통해 관련 댓글을 바로 조회할 수 있습니다.

  2. 비즈니스 로직상의 요구: 어떤 비즈니스 로직이 양쪽 엔티티 간의 연관 관계를 필요로 하는 경우, 양방향 연관관계 설정이 요구될 수 있습니다. 예를 들어, 게시글에 댓글이 달릴 때마다 게시글의 댓글 카운트를 업데이트해야 한다면, 이런 종류의 로직을 구현하기 위해서는 양방향 연관관계가 유용할 수 있습니다.

  3. JPA의 쿼리 성능 최적화: JPA를 사용할 때, 양방향 연관관계는 특정 쿼리들을 보다 효율적으로 작성하는 데 도움을 줄 수 있습니다. 특히, 연관된 엔티티들 사이에서 데이터를 조인하기 위해 JPQL이나 Criteria 쿼리를 작성할 때 유리하다고 할 수 있습니다.

양방향 연관관계 설정에 대한 좀 더 자세한 설명과 예시는 아래 링크에서 확인할 수 있습니다:
- 연관관계 매핑 분석 - 이 질문과 답변에서 일대다, 다대일 관계와 같은 양방향 연관관계에 대한 기본적인 이해를 다루고 있습니다.

질문에서 언급한 “게시글 조회 시 관련 댓글들을 한번에 가져오기 위한 페치조인”의 경우에 양방향 연관관게를 설정하는 것은 매우 타당한 예시 중 하나입니다. 이는 데이터를 보다 효율적으로 로드하기 위한 목적으로 자주 사용되며, 실무에서도 이러한 상황이 발생했을 때 양방향 연관관계를 설정하게 됩니다.

양방향 연관관계 설정은 특정 상황과 요구 사항에 따라 결정되어야 하며, 각각의 경우에 따라 그 필요성이 다를 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

sdk 설정 오류

0

53

2

오탈자 - @Transactional

0

56

1

src/test/resources 테스트 경로 문제

0

50

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

64

1

MemberRepositoryTest 실행오류

0

81

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

183

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

142

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

51

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

71

1

기본 생성자

0

60

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

102

1

멤버서비스테스트 부분에서 막힙니다.

0

165

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

116

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

120

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

114

1

24분 27초 연관관계 편의 메서드 위치

0

113

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

109

2

빌드 툴, Gradle

0

59

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

77

2

Repository에서 EntityManager 주입 방식 차이

0

90

1

롬복과 사용자 정의 setter 메서드

0

72

1

주문 목록 조회 fetch join 질문드립니다

0

82

1

dirty checking 질문드립니다.

0

83

1

동시성 관련 질문입니다

0

75

1