- 포함 값이란, 객체가 다른 객체를 참조하는 경우, 그 참조 대상 객체를 포함 값으로 처리하여 하나의 테이블로 매핑하는 방법이다.
- 객체지향 시스템에서는 여러 작은 객체를 사용하는 것이 합리적이다.
- 하지만, 데이터베이스 테이블은 여러 작은 객체를 저장하는 데 적합하지 않다.
- 포함 값은 객체의 값을 객체 소유자의 레코드에 있는 필드로 매핑한다.
작동 원리
- 소유자 객체를 로드하거나 저장할 때마다 의존 객체를 동시에 로드하거나 저장한다.
- 지속성은 모두 소유자에 의해 처리되므로 의존 클래스는 자체 지속성 메서드를 포함하지 않는다.
사용 시점
- 언제 사용해야 하는지는 조금 복잡한 주제이다.
- 포함 값으로 저장할 가치가 있는지는 로드와 저장에서 알 수 있다.
- 예를 들어 주문을 로드할 때만 배송 데이터가 메모리로 로드된다면 두 객체를 동일한 테이블에 저장하는 것이 합리적이다.
- 또 한 가지 고려사항은 SQL을 통해 별도로 배송 데이터에 접근해야 하는 경우가 있는지 여부다.
- 기존 스키마로 매핑하는 경우 포함 값을 사용해 테이블에 포함된 데이터를 메모리에서 하나 이상의 객체로 분할할 수 있다.
기존의 데이터베이스 스키마에는 여러 개의 테이블이 있을 수 있습니다. 이러한 테이블들은 하나 이상의 열(column)로 구성되어 있습니다. 예를 들어, 사용자 정보를 담은 테이블은 사용자 이름, 비밀번호, 이메일 등 여러 개의 열을 가질 수 있습니다.
이때, 객체-관계형 매핑을 사용하면 이러한 열(column)들을 객체의 속성(attribute)으로 매핑할 수 있습니다. 포함 값 매핑을 사용하면, 하나 이상의 열(column)을 하나의 객체로 묶어서 매핑할 수 있습니다. 예를 들어, 주소 정보를 도시, 동, 번지 등의 열(column)로 분할되어 있는 경우, 이를 하나의 주소 객체로 매핑할 수 있습니다.
- 객체 모델의 일부 동작을 별도의 객체로 분리하고 싶지만, 데이터베이스에서는 여전히 한 엔터티로 유지하려는 경우일 수 있다.
객체 모델링에서는 종종 일부 동작을 별도의 객체로 분리하여 처리하는 경우가 있습니다. 예를 들어, 주문 객체에서 주문을 취소하는 기능이 있을 경우, 이 기능을 별도의 객체로 분리하여 처리하는 것이 좋습니다. 이렇게 하면 주문 객체와 주문 취소 객체가 각각의 책임을 가지게 되어 코드가 더욱 간결해지고 유지보수가 용이해집니다.
그러나 데이터베이스에서는 이러한 객체 간의 분리를 반영하기 어려울 수 있습니다. 예를 들어, 주문 객체와 주문 취소 객체가 각각의 테이블에 저장되어 있다면, 이들 간의 관계를 표현하려면 별도의 테이블이 필요하게 됩니다. 하지만 이러한 관계 테이블을 추가하면 데이터베이스의 스키마가 복잡해지고 성능에도 영향을 미칠 수 있습니다.
이때, 객체-관계형 매핑을 사용하면 이러한 객체 간의 분리를 유지하면서도 데이터베이스에서는 하나의 엔터티로 유지할 수 있습니다. 예를 들어, 주문 객체와 주문 취소 객체를 모두 Order 테이블에 저장하고, 주문 취소 객체의 정보는 별도의 열(column)에 저장하는 것입니다. 이렇게 하면 객체 간의 분리를 유지하면서도 데이터베이스 스키마를 단순화할 수 있습니다.
- 이 경우 의존자에 대해 어떠한 변경이 수행되더라도 소유자를 더티로 표시해야 한다는 데 주의해야 한다.
- 일반적으로 포함 값은 일대일 연관일 때만 사용한다.
- 경우에 따라서는 후보 의존자가 여러 개지만 그 수가 적고 고정된 상황에도 사용할 수 있다.
- 이때는 각 값에 번호를 지정한 필드를 할당할 수 있다. 이건 지저분한 테이블 설계이고 쿼리하기도 불편하지만 성능이 좋다.
- 그러나 이런 상황에는 일반적으로 직렬화LOB가 더 나은 선택이다.
- 포함 값과 직렬화LOB의 사용 시점은 동일하므로 어떤 것을 선택할지도 충분히 고려해야 한다.
- 포함 값은 아주 간단한 의존자에만 사용할 수 있다.
- 반면 직렬화 LOB은 더 복잡한 구조에 적용 가능하다.
'Study > 엔터프라이즈 애플리케이션 아키텍처 패턴' 카테고리의 다른 글
제12장 객체-관계형 구조 패턴 : 직렬화 LOB (0) | 2023.03.30 |
---|---|
제12장 객체-관계형 구조 패턴 : 연관 테이블 매핑 (0) | 2023.03.28 |
09장 - 도메인 논리 패턴 (0) | 2023.02.20 |
05장 - 동시성 (0) | 2023.02.14 |
03장 - 관계형 데이터베이스 매핑 02 - 데이터 읽기 / 구조적 매핑 패턴 (0) | 2023.02.08 |