데이터 모델의 확장성과 유연성

최건우·2023년 7월 2일
0

데이터 모델의 유연성

데이터 모델의 유연성새로운 모델 생성, 기존 모델 변경 등의 변화를 최소화하면서 변경된 업무 요건이나 신규 업무를 빠르고 정확하게 반영할 수 있는 성질을 말한다.

유연한 모델의 특징은 업무 요건이 변경되더라도 애플리케이션만 조금 손보면 된다는 것이다. CRM, ERP 같은 패키지 솔류션은 대부분 추상화 수준을 높여 유연성을 극대화한 모델로 구현되어 있다.

데이터 모델 유연성의 핵심은 데이터를 (속성 수준이 아닌) 행 수준으로 저장하는 데 있다. 컬럼 추가(=구조 변경) 없이 새로운 인스턴스(값)을 추가해서 업무 변경에 대응하는 것이다. 이렇게 값을 추가하는 방식으로 전환함으로써 구조 변경을 최소화하는 것이다.

유연성이 극대화된 경우의 장점

예를 들어, 고객과 연락처를 표현한 엔티티가 아래와 같이 두 가지가 있다고 가정하고, '휴대폰번호'라는 속성을 추가해야 한다고 하자. 좌측 엔티티의 경우 새로운 속성(컬럼)을 추가하지 않고서는 이를 추가할 수 없다. 하지만 오른쪽에는 '연락처구분코드'에 새로운 값만 추가한다면 속성 변경 없이 구현할 수 있다.

왼쪽 엔티티는 연락처 관련 정보를 개별 속성으로 관리하는 반면, 오른쪽 엔티티에서는 '고객연락처'라는 단일 엔티티로 통합되면서 추상화 수준이 올라가며 유연성이 극대화되었다.

유연성이 극대화된 경우의 약점

유연성이 높은 모델은 항상 뛰어난 것만은 아니다. 추상화 수준이 올라가 차원이 높아진 모델은 다음과 같은 약점도 갖게 된다.

  1. 추상화 수준이 높아 직관적이지 않고, 경우에 따라 이해하기 어렵다.
  2. SQL이 복잡해져 개발과 유지보수 비용이 늘어난다.
  3. 유연하지 않은 구체적인 모델과 비교하여 성능상의 제약과 한계가 있다.
  4. 성능 외에도 RDB의 기본 사상과 다른 차원의 모델로 인해 DBMS가 제공하는 기본 기능 활용에 제약이 있을 수 있다.

데이터 아키텍처 구축 원칙의 우선순위

모델링의 영역에서 데이터 무결성유연성보다 우선해야 할 뿐 아니라, 모델링의 궁극적 목적이자 최고의 가치로 여겨져야 한다. 하지만, 현장에서는 유연성을 강조한 나머지 데이터 무결성이 경시되는 경우가 종종 있다. 업무 상 반드시 필요한 경우가 아니라면 유연성, 반정규화 등 때문에 중요한 가치를 양보하는 경우는 없어야 한다.

속성 유연성을 위한 메타 구조 모델

모델의 유연성 향상을 위해 가장 쉽게 접근할 수 있는 방법은 속성의 중요도 등을 기준으로 기본 엔티티와 상세 엔티티로 1:1 분할하는 것이다. 꼭 필요한 속성만 남기고 엔티티를 분할함으로써 (1)엔티티의 잦은 변경에 대한 부담을 덜 수 있고, (2)주요 속성의 응집도가 높아지며 (3)하나의 블록에 담기는 행(인스턴스) 수가 증가해서 적중률이 좋아지는 등 성능 향상을 기대할 수 있게 된다.

하지만, 컬럼(속성)은 프로그램의 변수만큼 유연하지 않다. 그럼에도 불구하고 컬럼 수준에서 데이터를 유연하게 담는 방법에는 무엇이 있을까?

속성 메타 구조

속성 메타 구조는 속성을 행으로 관리하는 방식이다.


위와 같은 구조에서는 관리할 모든 속성의 종류를 상품속성 테이블에 행으로 생성하고, 상품별로 관리할 속성들만을 가운데 상품속성값 엔티티에 행으로 생성한다. 향후 새로운 상품이 나오거나 기존 상품의 속성이 늘어도 기존 구조에는 전혀 손을 대지 않아도 된다.

이 방식은 구조 변경 없이도 계속 속성을 추가할 수 있다는 장점이 있다. 하지만, 단점 역시 존재한다. 먼저, 사람이 볼 때는 컬럼 형태를 원한다는 점 때문에 행 -> 속성으로의 전환 작업이 뒤따라야 하며 대용량 데이터를 다룰 경우 이는 성능에 많은 영향을 미친다(SQL의 작성도 까다로워진다). 또한, 구조의 유연성을 얻는 대신 RDB의 중요한 기능을 사용하는데 제약이 생긴다. 속성이 행이 되므로 RDB의 무결성 제약 조건과 인덱스 활용이 어려워진다.

이와 같은 장단점으로 인해, 속성 메타 구조는 속성이 자주 바뀌지만 이를 참조하는 경우가 지극히 드물고 성능에 문제가 없을 때 적용해야 한다.

그 외: 엔티티를 행으로 정의하는 메타 구조

극한의 유연성이 요구되는 환경에서는 더 나아가 엔티티를 행으로 정의하는 방법도 있다. 엔티티 자체를 구체적으로 정의하지 않고 '엔티티정의', '엔티티속성정의' 등의 엔티티를 활용하여 필요할 때마다 구조를 값으로 만들어 사용하는 것이 가장 큰 특징이다.





출처: 프로젝트 성패를 결정짓는 데이터 모델링 이야기(김상래 저, 한빛미디어)

profile
부족한 경험을 채우기 위한 나만의 기록 공간

0개의 댓글