티스토리 뷰

프레임워크/JPA

[JPA]연관관계

꼬마우뇽이(원종운) 2022. 1. 14. 15:43

연관관계(Relationship)

엔티티는 독립적으로 존재하기도 하지만, 다른 엔티티와 협력과 상호작용을 위하여 직접적인 참조를 하는 경우도 있는데, 이때 그러한 참조 관계를 연관관계라고 합니다.

 

여기서 직접적인 참조는 다른 엔티티를 메서드의 인자로서 참조하는 것이 아닌, 멤버 필드로 가지며 해당 필드를 통하여 참조를 하는 경우를 말합니다. 전자의 경우는 간접 참조라고 하겠습니다.

 

연관관계 := 다른 엔티티와의 협력과 상호작용을 위한 직접적인 참조

 

이러한 연관관계는 방향, 다중성, 주인의 3가지 요소로 구성됩니다. 각 요소에 대해서 살펴보도록 하겠습니다.

 

방향(Direction)

참조는 방향이 존재합니다. 만약 A라는 엔티티가 B라는 엔티티를 직접 참조한다면 참조의 방향은 A에서 B 쪽으로 단방향이라고 할 수 있습니다.

 

A에서 B로 단방향이라는 말은 다시 말하면 A에서만 B로 참조를 통하여 접근할 수 있다는 의미

 

데이터베이스에서는 뒤에서 짧게 살펴볼 예정이지만 연관관계를 외래 키로 맺기 때문에 방향이라는 것이 존재하지 않습니다. 굳이 표현한다면 양방향이기 때문에 관계가 맺어있기만 하면 어느 쪽으로든 자유롭게 참조(JOIN)가 가능합니다.

 

순수 객체와 UML로 살펴보면 다음과 같습니다.

 

객체 A에서 B쪽으로 단방향 연관관계
UML 클래스 다이어그램

 

만약 A라는 엔티티와 B라는 엔티티가 서로를 직접 참조한다면?

양방향 연관관계 또는 서로 다른 단방향 관계 2개에 있다고 할 수 있습니다.

 

다중성(Multiplicity)

다중성은 다른 말로 카디널리티(Cardinality)라고도 하는데, 연관관계에 있어 관계를 맺는 객체의 수적인 관계를 말합니다.

 

예를 들면 선생님은 학생과 "선생과 제자"라는 관계를 맺고 있다고 생각할 수 있습니다. 선생님은 0명, 또는 1명, 또는 N명의 학생과 관계를 맺을 수 있습니다. 이런 경우는 선생과 학생은 일대다(1:N) 연관 관계에 있다고 할 수 있습니다.

 

순수 객체와 UML로 살펴보면 다음과 같습니다.

 

순수 객체 연관관계
UML 클래스 다이어그램

 

이밖에도 다중성에는 일대일(1:1), 일대다(1:N), 다대일(N:1), 다대다(N:M) 가 있습니다.

 

주인(Owner)

주인이라는 개념을 알아보기 전에 알아야 하는 개념이 있습니다. 객체는 참조를 이용하여 관계를 맺는다고 했는데, 그러면 데이터베이스는 어떻게 관계라는 것을 표현할까요?

 

데이터베이스에서는 외래 키를 사용하여 관계를 맺습니다. 하나의 엔티티는 테이블로 매핑이 되며, 이 말은 엔티티 간의 관계는 테이블 간의 관계를 말합니다. 외래 키와 데이터베이스에 대한 내용은 여기서 다루지 않겠습니다.

 

그러면 이러한 외래 키는 관계를 맺는 두 엔티티(또는 테이블) 중 누가 관리를 해야 하는 것일까요? 이는 데이터베이스의 설계와 관련이 있으며, 설계상 데이터베이스는 연관관계 중 다에 해당하는 테이블에 외래 키를 관리합니다.

 

위의 선생님과 학생 간의 연관관계를 데이터베이스 관점에서 바라보면 다음과 같은 형태가 되는 것이죠. 일대다 연관관계에서 다에 해당하는 학생의 테이블에 외래 키(TEACHER_ID)가 존재하는 것을 확인할 수 있습니다.

 

테이블 관계

 

이때까지 살펴본 선생님과 학생의 연관관계를 각 요소의 관점으로 정리하면 다음과 같습니다.

 

방향 : 선생님에서 학생으로의 단방향 연관관계

다중성 : 선생님은 여러 명의 학생을 관리할 수 있으므로 일대다 연관관계

주인 : 선생님과 학생의 연관관계의 주인은 학생

 

최종적으로 정리하면 선생님과 학생의 연관관꼐는 일대다 단방향 연관관계다.

 

마무리

다음 시간에는 이러한 엔티티 간의 연관관계를 JPA에게 알려주기 위하여 JPA에서 제공하여 주는 다양한 애너테이션들에 대해서 알아보도록 하겠습니다.

'프레임워크 > JPA' 카테고리의 다른 글

[JPA]필드와 칼럼 매핑  (0) 2022.01.13
[JPA]객체와 엔티티 매핑  (0) 2022.01.13
[JPA]JPA에 대하여  (0) 2022.01.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함