효과적인 데이터베이스 설계의 단계, 모델 및 모범 사례를 알아 보세요
작성자: Databricks 직원
데이터베이스 환경이 변화하고 있습니다. 수십 년 동안 팀들은 트랜잭션, 분석 및 유연한 데이터 구조를 위한 시스템 중에서 선택해야 했습니다. 이러한 분리는 조직이 애플리케이션과 데이터 아키텍처를 구축하는 방식을 형성했습니다.
AI 에이전트와 실시간 애플리케이션은 트랜잭션 및 분석 워크로드 간의 경계를 허물고 있습니다. 이러한 시스템이 더욱 강력해짐에 따라 모델링 단계에서 이루어지는 결정이 그 어느 때보다 중요해지고 있습니다. 잘 구조화된 스키마는 다운스트림 분석, BI 및 머신러닝이 실제로 데이터를 가지고 무엇을 할 수 있는지를 결정할 수 있습니다.
데이터베이스 모델링은 데이터베이스가 구축되기 전에 구조, 관계 및 제약 조건을 정의하는 프로세스입니다. 이는 OLTP 워크로드를 처리하든, 대시보드를 지원하든, 피처 파이프라인을 공급하든 시스템의 일관성을 유지하는 청사진을 제공합니다. 모델링은 시스템이 발전함에 따라 데이터의 일관성, 해석 가능성 및 확장성을 유지하도록 보장하는 방법입니다.
데이터베이스 모델링은 개념 도메인 모델링, 의미 계층, 거버넌스 및 분석 설계를 포함하는 더 넓은 데이터 모델링 분야 내에 있다는 점에 주목할 가치가 있습니다. (이러한 더 넓은 분야에 대한 자세한 개요는 Databricks 데이터 모델링 가이드를 참조하세요.) 이 블로그에서는 데이터베이스 모델링 프로세스의 주요 단계, 모범 사례 및 일반적인 실수, 그리고 이 프로세스가 현대적인 클라우드 네이티브 환경에서 어떻게 진행되는지에 중점을 둡니다.
데이터베이스 구축을 위한 개념 설계 단계는 기반을 설정합니다. 이 단계에서는 조직이 중요하게 생각하는 고객, 주문, 제품 또는 계정과 같은 실제 데이터 포인트를 식별하고 서로 어떻게 관련되는지를 정의하는 데 중점을 둡니다. 이러한 엔터티 및 관계는 비즈니스 이해관계자, 분석가 및 기술 팀이 데이터베이스가 무엇을 해야 하는지에 대해 합의하는 데 도움이 됩니다.
개념 설계는 기술적인 세부 사항을 피합니다. 대신, 비즈니스 도메인의 필수 구조를 쉽게 논의하고 검증할 수 있는 방식으로 캡처하는 정확성과 명확성에 중점을 둡니다. 이는 개념 모델을 설계 아티팩트만큼이나 커뮤니케이션 도구로 만들어, 팀이 격차를 발견하고, 모호성을 해결하고, 데이터 모델이 비즈니스가 실제로 작동하는 방식을 반영하도록 보장합니다.
이 단계의 주요 결과물은 개념적 개체-관계 다이어그램(ERD) 또는 간단한 엔터티 맵입니다. 강력한 개념 설계는 후속의 더 상세한 모델링 작업을 위한 청사진을 제공합니다.
논리 설계 단계는 특정 데이터베이스 기술에 독립적으로 개념 모델에 구조와 정밀성을 추가합니다. 이 단계에서는 각 엔터티가 속성, 데이터 유형 및 제약 조건을 포함하여 완전히 정의된 데이터 객체로 확장됩니다. 설계자는 각 레코드를 고유하게 식별하는 기본 키와 관련 엔터티 간의 참조 무결성을 설정하는 외래 키를 식별합니다. 관계 카디널리티(일대일, 일대다 또는 다대다)는 데이터가 실제 세계에서 어떻게 작동하는지를 반영하도록 명시적으로 매핑됩니다.
이 단계는 또한 정규화 원칙이 모델을 형성하기 시작하는 곳입니다. 중복 속성은 제거되고, 복합 필드는 다양한 구성 요소로 분할되며, 이상 현상을 줄이고 데이터 품질을 개선하기 위해 관계가 재구성됩니다. 목표는 내부적으로 일관되고, 확장 가능하며, 조직의 분석 및 운영 요구 사항에 맞는 논리적 구조를 만드는 것입니다.
이러한 추가 세부 정보에도 불구하고 논리 모델은 기술에 구애받지 않습니다. 특정 데이터베이스 엔진이나 스토리지 시스템을 가정하지 않습니다. 대신, 여러 시스템에서 구현할 수 있는 방식으로 데이터를 정의합니다. 결과물은 엔터티, 속성, 키 및 관계를 포함하는 상세한 ERD로, 물리적 스키마로 변환될 준비가 된 것입니다.
물리 설계는 논리 모델을 특정 데이터베이스 관리 시스템에 맞게 조정된 특정 구현으로 변환합니다. 여기서 테이블, 열, 인덱스, 제약 조건 및 스토리지 매개변수는 플랫폼의 기능과 규칙에 따라 정의됩니다. 또한 파티셔닝, 클러스터링, 파일 형식 및 배포 전략에 대한 결정이 이루어지는 곳이기도 합니다.
성능 최적화가 주요 초점입니다. 설계자는 인덱싱 전략을 평가하고, 대량 분석 쿼리를 지원하기 위해 비정규화를 고려하고, 데이터에 액세스, 업데이트 및 저장되는 방식을 계획해야 합니다.
물리 설계의 최종 결과물은 일반적으로 SQL DDL 또는 동등한 정의로 표현되는 구현 준비가 된 스키마입 니다. 이 스키마는 데이터의 논리적 구조뿐만 아니라 실행될 플랫폼의 운영 현실도 반영합니다.
관계형 모델은 데이터를 행과 열로 구성된 테이블로 구성하며, 기본 키와 외래 키를 통해 관계를 강제합니다. SQL은 이러한 테이블을 쿼리하고 조인하는 강력하고 선언적인 방법을 제공하여 관계형 시스템을 강력한 일관성, 구조화된 스키마 및 엔터티 간의 잘 정의된 관계가 필요한 워크로드에 이상적입니다.
신뢰성과 성숙도 때문에 관계형 데이터베이스는 트랜잭션 시스템부터 운영 분석까지 모든 것을 지원하며 업계 전반에서 가장 널리 채택되는 옵션으로 남아 있습니다. 관계형 모델은 클라우드 네이티브 기능, 고급 인덱싱 전략 및 점점 더 정교해지는 쿼리 최적화 프로그램과 함께 계속 발전하고 있습니다.
문서 지향 및 NoSQL 데이터베이스는 엄격한 테이블 정의 없이 데이터 구조를 발전시킬 수 있는 스키마 유연한 접근 방식을 취합니다. 이러한 시스템은 비정구조화 또는 반정구조화 데이터를 처리하고, 빠른 반복을 지원하며, 분산 환경에서 수평적으로 확장하는 데 탁월합니다. 이러한 유연성은 데이터 모양이 자주 변경되는 애플리케이션, 고속 수집 또는 대규모 분산 워크로드에 적합합니다.
그러나 이러한 적응성에는 절충점이 있습니다. 즉, 관계형 시스템보다 일관성 보장이 약할 수 있으며, 특히 다중 문서 관계를 포함하는 복잡한 쿼리는 어려울 수 있습니다. NoSQL 모델은 민첩성, 확장성 및 스키마 진화가 엄격한 관계형 구조에 대한 필요성보다 중요할 때 빛을 발합니다.
차원 모델은 분석 및 데이터 웨어하우징을 위해 특별히 제작되었으며, 측정 가능한 이벤트를 저장하는 팩트 테이블과 설명 컨텍스트를 제공하는 차원 테이블로 데이터를 구성합니다. 스타 및 스노우플레이크 스키마는 분석가가 일반적인 비즈니스 질문에 맞게 구조를 조정하여 데이터를 쿼리하는 방식을 단순화하여 빠른 집계와 직관적인 탐색을 가능하게 합니다.
차원 모델은 읽기 위주의 분석 워크로드에 최적화되어 있으므로, 빈번한 업데이트나 엄격한 정규화가 필요한 트랜잭션 시스템에는 적합하지 않습니다. 대신, 명확성, 성능 및 사용성이 필수적인 비즈니스 인텔리전스(BI) 도구, 대시보딩 및 대규모 분석 처리를 지원합니다. 현대적인 레이크하우스 아키텍처에서 차원 모델링은 큐레이션된 분석 준비 데이터 세트를 형성하는 데 계속해서 중요한 역할을 합니다.
계층형 데이터베이스는 트리와 같은 부모-자식 구조를 따릅니다. 네트워크 모델은 그래프와 같은 연결을 통해 다대다 관계를 허용하여 이 접근 방식을 확장합니다. 역사적으로 중요했지만, 두 모델 모두 이제는 주로 학술적 또는 레거시 관심사입니다. 엄격한 탐색 경로와 제한된 유연성으로 인해 새로운 시스템에 거의 선택되지 않지만, 이에 대한 이해는 현대 모델이 어떻게 발전했는지 이해하는 데 유용한 맥락을 제공할 수 있습니다.
올바른 데이터베이스 모델을 선택하는 것은 데이터의 모양, 워크로드 및 일관성 요구 사항에 따라 달라집니다. 구조화된 트랜잭션 데이터와 복잡한 관계를 가진 시스템은 관계형 모델과 자연스럽게 일치합니다. 유연한 스키마, 빠르게 변경되는 데이터 구조 또는 문서 중심 스토리지에 의존하는 애플리케이션은 문서 지향 또는 NoSQL 데이터베이스의 이점을 누릴 수 있습니다. BI 대시보드 또는 보고 환경을 지원하는 분석 워크로드는 빠른 예측 쿼리에 맞게 설계된 차원 모델에 의해 가장 잘 지원됩니다. 소셜 네트워크, 추천 엔진 또는 사기 탐지와 같이 핵심 과제가 고도로 상호 연결된 데이터와 관련될 때 그래프 데이터베이스가 가장 적합합니다.
워크로드 유형, 데이터 구조 및 일관성 요구 사항을 권장 모델에 매핑하는 간단한 의사 결정 매트릭스는 팀이 옵션을 신속하게 좁히고 가장 효과적인 접근 방식을 선택하는 데 도움이 될 수 있습니다.
ERD는 데이터베이스 모델링의 주요 시각적 언어로, 데이터가 어떻게 구조화되고 세 가지 설계 단계에 걸쳐 다른 엔터티가 어떻게 관련되는지를 명확하게 표현하는 방법을 제공합니다.
본질적으로 ERD는 소수의 시각적 요소를 사용합니다. 엔터티(일반적으로 사각형), 속성(엔터티 내에 나열되거나 표기법에 따라 연결된 타원으로 표시됨) 및 관계(엔터티가 상호 작용하는 방식을 설명하는 선)입니다. 이러한 간단한 구성 요소는 ERD를 기술 및 비기술 이해관계자 모두에게 접근 가능하게 만들며, 이것이 현대 데이터 모델링에서 기본이 되는 이유입니다.
ERD를 구축하는 데는 두 가지 주요 표기법 스타일이 있습니다. 크로스풋(Crow’s foot) 표기법은 카디널리티를 연결선에 직접 시각적으로 인코딩하기 때문에 업계에서 가장 널리 사용됩니다. 학술 환경에서 더 흔한 첸(Chen) 표기법은 엔터티, 속성 및 관계를 별도의 모양으로 분리하여 교육에는 유용하지만 실제 설계에는 덜 간결합니다.
표기법 스타일에 관계없이 목표는 동일합니다. 즉, 데이터 도메인의 공유되고 정확한 표현을 만드는 것입니다. 간단한 전자 상거래 예시는 ERD가 도메인에 구조를 어떻게 가져오는지 보여줍니다. 고객은 여러 주문을 하고, 각 주문은 정확히 하나의 고객에게 속하여 클래식한 일대다 관계를 형성합니다. 주문에는 여러 제품도 포함되며, 각 제품은 여러 주문에 나타날 수 있습니다. 이 다대다 관계는 수량 또는 구매 시점의 가격과 같은 추가 세부 정보를 캡처하면서 주문과 제품을 연결하는 중간 테이블인 Order_Items를 통해 해결됩니다. 작은 모델에서도 ERD는 이러한 관계를 명확하고 이해하기 쉽게 만듭니다.
최신 도구를 사용하면 ERD를 빠르고 협업적으로 만들 수 있습니다. 다양한 다이어그램 및 모델링 도구가 공유 편집, 버전 관리 및 SQL 내보내기를 지원합니다. 가장 효과적인 워크플로는 이해 관계자들이 엔터티와 관계에 대해 합의할 수 있는 개념 ERD로 시작한 다음, 논리 및 물리 설계 단계에서 속성, 키 및 제약 조건을 점진적으로 추가하는 것입니다. 이러한 반복적인 개선을 통해 최종 스키마는 기술적으로 견고하고 이를 나타내는 실제 프로세스에 기반을 둡니다.
정규화는 관계형 테이블을 구조화하여 중복 데이터를 제거하고 시간이 지남에 따라 불일치를 초래하는 세 가지 고전적인 이상 현상(삽입, 업데이트 및 삭제)을 방지하는 프로세스입니다. 각 사실이 한 번만 저장되고 명확하게 참조되도록 데이터를 구성함으로써 정규화된 스키마는 무결성을 개선하고, 저장 공간 낭비를 줄이며, 쓰기 작업을 예측 가능하고 안전하게 만듭니다.
이 프로세스는 일반적으로 일련의 정규형(normal forms)을 통해 설명됩니다. 제1정규형(1NF)은 각 열이 원자 값을 포함해야 하므로 단일 행 내에 목록, 중첩 구조 또는 반복 그룹이 없어야 합니다. 제2정규형(2NF)은 기본 키가 아닌 모든 속성이 기본 키 전체에 의존하도록 하여 복합 키 테이블에서 발생하는 부분 종속성을 제거함으로써 이를 기반으로 합니다. 제3정규형(3NF)은 한 걸음 더 나아가 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성에 의존해서는 안 되며, 엔터티 간의 경계를 모호하게 만드는 이행 종속성을 제거합니다.