양방향 연관관계 약화시키기?
좋은 질문입니다. “양방향 연관관계에서 중간 테이블을 둬서 해결했다”는 말은 단순히 "양방향 연관관계를 없앴다"는 뜻이 아니라, 두 엔티티 간 직접적인 강한 결합을 완화시키기 위해 중간에 제3의 엔티티를 둬서 연관관계를 우회했다는 의미입니다.
🔁 기존 양방향 연관관계 예시 (강한 결합)
java코드 복사class Member {
@OneToMany(mappedBy = "member")
private List<Order> orders;
}
class Order {
@ManyToOne
private Member member;
}
Member
→Order
,Order
→Member
양방향으로 연관되어 있음.서로 직접 참조 → 서로 강하게 결합됨.
문제: 순환 참조 위험, 무한 루프(JSON 직렬화), 유지보수 어려움
🔄 중간 테이블(엔티티)을 둬서 해결
java코드 복사class Member {
@OneToMany(mappedBy = "member")
private List<MemberOrder> memberOrders;
}
class Order {
@OneToMany(mappedBy = "order")
private List<MemberOrder> memberOrders;
}
class MemberOrder {
@ManyToOne
private Member member;
@ManyToOne
private Order order;
}
✅ 이렇게 하면?
Member ↔ Order
간 직접 참조를 제거중간 엔티티(MemberOrder) 가 매핑 정보를 갖고 있음
양방향이긴 하지만 한 단계 우회하기 때문에 훨씬 유연하고 명확
📌 비유
직접적인 양방향 관계: 두 사람이 서로 줄로 연결됨 → 끊으면 둘 다 영향
중간 테이블 방식: 두 사람 사이에
만남 기록
이라는 중간 역할자가 있음 → 기록만 지우면 됨
✅ 요약
항목
양방향 직접 관계
중간 엔티티 방식
참조 방식
서로 직접 참조
중간 엔티티를 통해 참조
결합도
높음
낮음
유지보수
어려움
쉬움
활용 예
단순한 관계
복잡한 매핑 (예: 주문에 수량, 상태 추가 등)
필요 시 MemberOrder
같은 중간 테이블에 추가 정보(수량, 역할, 권한 등) 도 저장 가능하므로 실무에서도 중간 테이블 방식은 훨씬 더 유연하고 확장성이 좋습니다.
Last updated