효과적인 데이터베이스 설계의 단계, 모델 및 모범 사례를 알아보세요
작성자: 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)은 한 걸음 더 나아가 기본 키가 아닌 속성이 다른 기본 키가 아닌 속성에 의존해서는 안 되며, 엔터티 간의 경계를 모호하게 만드는 이행 종속성을 제거합니다.
정규화가 중요한 이유는 다 음과 같습니다. 고객 이름, 이메일 및 주소가 각 행에 반복되는 비정규화된 Orders 테이블을 상상해 보세요. 고객 이메일을 업데이트하려면 해당 고객이 주문한 모든 주문을 수정해야 합니다. 또한 마지막 주문을 삭제하면 연락처 정보가 실수로 삭제될 수 있습니다. 이 구조를 정규화하면 Customer_ID로 연결된 Customers 및 Orders의 두 테이블이 생성됩니다. 고객 세부 정보는 한 곳에 있고, 주문은 이를 명확하게 참조하며, 이상 현상은 사라집니다.
그러나 정규화가 절대적인 규칙은 아닙니다. 읽기 위주의 분석 시스템, 특히 데이터 웨어하우스에서는 조인을 줄이고 쿼리를 단순화하기 위해 의도적으로 비정규화하는 경우가 많습니다. 예를 들어, 스타 스키마는 스캔 성능을 최적화하기 위해 차원 테이블에 설명 속성을 복제합니다.
트레이드오프는 명확합니다. 정규화는 쓰기 무결성과 저장 효율성을 극대화하는 반면, 비정규화는 읽기 속도와 쿼리 단순성을 극대화합니다. 올바른 균형은 워크로드 패턴과 전체 아키텍처에서 시스템의 역할에 따라 달라집니다.
모든 이해 관계자와 데이터베이스 요구 사항에 대해 합의
가장 신뢰할 수 있는 데이터베이스 모델링 설계는 요구 사항, 즉 데이터베이스가 지원해야 하는 비즈니스 프로세스, 액세스 패턴 및 제약 조건에 대한 명확한 이해에서 시작됩니다. 모델 유형을 선택하거나 다이어그램 도구를 너무 일찍 열면 종종 종이에 깔끔해 보이지만 실제 워크로드에서는 실패하는 구조로 이어집니다. 실제 사용 사례에 설계를 기반으로 하면 스키마가 데 이터가 시스템을 통해 실제로 이동하는 방식을 반영합니다.
일관된 명명 규칙을 만들고 문서화
명확하고 일관된 명명 규칙은 스키마를 자체 문서화합니다. 테이블과 열은 추측할 필요 없이 목적을 전달해야 합니다. 예를 들어, customer_id는 즉시 이해할 수 있지만 cid는 그렇지 않습니다. 명명 일관성은 쿼리 가독성을 개선하고 새 개발자의 온보딩 시간을 단축합니다.
잘 정의된 기본 키 선택
자동 증가 정수 또는 UUID와 같은 대리 키는 시간이 지남에 따라 변경되거나 모호해질 수 있는 자연 키보다 종종 더 안정적입니다. 복합 키는 일부 경우에 작동하지만 조인을 복잡하게 만들며 실제 비즈니스 규칙을 반영하는 경우에만 사용해야 합니다.
관계 및 제약 조건 명시
외래 키, 고유 제약 조건 및 NOT NULL 규칙은 모델이 보호하도록 설계된 무결성을 강제합니다. 이러한 규칙이 구전 지식이나 애플리케이션 코드에만 존재하면 필연적으로 불일치가 발생합니다.
미래 요구 사항 및 확장 고려
균형 잡힌 설계는 워크로드 패턴 및 시스템의 역할과 일치하면서 성장을 예측하지만 과도한 엔지니어링으로 벗어나지 않습니다. 과도한 정규화는 간단한 쿼리에 수십 개의 조인이 필요한 스키마를 만들 수 있으며, 정규화를 완전히 건너뛰면 중복 및 이상 현상이 발생할 수 있습니다.
샘플 쿼리로 모델을 검증하는 것은 설계 결함을 조기에 노출하는 가장 효과적인 방법 중 하나입니다. 일반적인 보고 쿼리, 트랜잭션 조회 및 필터링 패턴을 테스트하면 구조가 실제 사용을 효율적으로 지원하는지 여부를 알 수 있습니다.
향후 스키마를 위한 빌드
스키마는 진화한다는 것을 기억하세요. 애플리케이션 코드처럼 취급하는 것이 필수적입니다. DDL 변경 사항을 마이그레이션과 함께 버전 관리하면 안정적인 기록이 생성되고 협업이 지원되며 환경 간의 편차가 방지됩니다.
많은 모델링 문제는 기본 단계를 건너뛰거나 시스템이 성장한 후에는 유효하지 않은 가정을 하는 것에서 비롯됩니다. 몇 가지 패턴이 팀과 기술 전반에 걸쳐 반복되므로 조기에 인식하면 나중에 비용이 많이 드는 구조적 문제를 예방하는 데 도움이 될 수 있습니다.
가장 일반적인 함정 중 하나는 개념 및 논리 모델을 정의하지 않고 물리적 설계, 즉 테이블, 인덱스 또는 다이어그램을 만드는 것으로 바로 건너뛰는 것입니다. 이는 광범위한 도메인보다는 단일 쿼리 또는 기능에 최적화된 스키마로 이어지며, 결국 변경에 저항하는 취약한 구조를 만들 수 있습니다.
누락되거나 잘못된 외래 키 문제가 밀접하게 관련되어 있습니다. 관계가 명시적으로 정의되지 않으면 고아 레코드(orphaned records)가 축적되고, 조인이 실패하며, 데이터 무결성은 데이터베이스 자체보다는 애플리케이션 논리에 의존하게 됩니다.
명명 불일치도 장기적인 마찰을 일으킬 수 있으며, 시간이 지남에 따라 버그와 온보딩 문제를 야기할 수 있습니다.
몇 가지 실수는 정규화에 대한 오해에서 비롯됩니다. 트랜잭션 시스템을 과도하게 정규화하면 간단한 작업을 다중 테이블 조인 체인으로 만들어 성능이 저하될 수 있습니다. 분석 시스템을 과소 정규화하면 반대 효과가 발생합니다. 즉, 다운스트림 ETL 작업이 읽기 위주의 워크로드에 맞게 모델링되었어야 할 데이터를 재구성해야 합니다.
기타 반복되는 문제점은 다음과 같습니다.
이러한 실수를 피하려면 초기 설계 단계에서의 규율과 구현 전에 가정을 검증하려는 의지가 필요합니다.
강력한 데이터베이스 모델링은 시스템이 성장함에 따라 명확하고 일관되며 적응 가능하게 유지하는 기반입니다. 요구 사항 기반 설계, 정규화, 명시적 제약 조건 및 균형 잡힌 물리적 모델링과 같은 원칙은 규모, 워크로드 유형 또는 아키텍처 패턴에 관계없이 필수적입니다.
변한 것은 이러한 모델이 이제 작동하는 환경입니다. 트랜잭션 데이터베이스 또는 분석 시스템 중에서 선택하는 오랜 관행은 둘 다 지원할 수 있는 플랫폼 덕분에 점점 줄어들고 있습니다. 최신 애플리케이션은 ACID 규정 준수 작업과 대규모 분석이 필요하며 각 시스템에 대해 별도의 시스템을 유지 관리하는 것은 인프라, 지연 시간 및 엔지니어링 오버헤드 측면에서 상당한 비용이 발생할 수 있습니다.
Databricks Lakebase는 이러한 변화에 대응하기 위해 구축되었습니다. Databricks Lakehouse Architecture의 일부인 ACID 규정 준수 기능을 활용하도록 설계된 Lakebase는 고성능 동시 운영 워크로드를 위해 설계된 완전 기능 트랜잭션 데이터베이스 엔진을 추가합니다. 이를 통해 설계한 스키마(이 가이드의 기술 사용)를 단일 플랫폼에서 운영 애플리케이션과 분석 워크로드를 지원할 수 있습니다. 중복 없음, 병렬 아키텍처 없음, 타협 없음.
팀이 별도의 시스템 유지 관리를 넘어 모든 워크로드에 대해 단일 데이터베이스 모델을 제공하는 통합 플랫폼에서 구축하기를 원한다면, Databricks Lakebase에 대해 자세히 알아보세요.
(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)
블로그를 구독하고 최신 게시물을 이메일로 받아보세요.