데이터 모델링이란?
데이터 모델링(Data Modeling)은 현실 세계의 데이터를 체계적으로 구조화하여, 데이터베이스에 저장할 수 있도록 설계하는 과정이다. 쉽게 말해, 데이터 모델링은 어떤 데이터를 저장할지, 그리고 그 데이터들 간의 관계가 어떻게 될지를 정리해서 그림이나 표로 표현하는 것이다.
1. 데이터 모델링의 주요 목적
- 시스템 요구 사항 분석: 시스템에서 어떤 데이터가 필요하고, 이 데이터가 어떻게 사용될 것인지 분석
- 데이터 구조 정의: 데이터 간의 관계와 구조를 명확하게 정의
- 데이터 무결성 유지: 데이터의 일관성과 무결성을 보장하기 위한 구조를 설계
- 효율적인 데이터베이스 설계: 효과적인 데이터베이스를 설계하여 시스템의 성능을 최적화
2. 데이터 모델링의 순서
- 업무 파악(요구사항 수집 및 분석)
- 업무 파악은 어떠한 업무를 시작하기 전에 해당하는 업무에 대해서 파악하는 단계이다.
- 개념적 데이터 모델링 (Conceptual Data Modeling)
- 높은 수준에서 비즈니스 요구 사항을 바탕으로 데이터베이스의 전반적인 구조를 정의한다. 이 단계에서는 주요 엔터티, 속성, 그리고 그들 간의 관계를 정의한다. 즉 일의 데이터 간의 관계를 구상하는 것이다. 주로 ERD(Entity-Relationship Diagram)를 사용한다.
- 논리적 데이터 모델링 (Logical Data Modeling)
- 개념적 모델을 바탕으로 더 세부적으로 데이터베이스 구조를 정의한다. 이 단계에서는 테이블, 열, 데이터 타입 등을 정의하며, 특정 DBMS에 종속되지 않는 중립적인 모델을 만든다. 정규화를 통해 데이터 중복을 줄이고 무결성을 높이는 작업도 이 단계에서 이루어진다. 이때 추상적인 데이터에서 보다 구체적인 데이터로 작성하는 것으로, 각 데이터 타입을 명시해 주고 각 데이터 간의 관계를 정밀하게 맺어주며 데이터의 키( key)를 지정해준다.
- 물리적 데이터 모델링 (Physical Data Modeling)
- 논리적 모델을 실제 DBMS에 맞게 구현하는 단계로, 여기서는 테이블 생성, 인덱스 설정, 파티셔닝, 성능 최적화 등을 고려하여 모델을 설계한다.
3. 데이터 모델링의 중요 요소
- 엔터티(Entity): 데이터베이스에서 관리하고자 하는 객체, 예를 들어 고객, 제품, 주문 등이 엔터티에 해당한다.
- 속성(Attribute): 엔터티가 가지는 특성 또는 필드, 예를 들어 고객 엔터티의 속성으로 이름, 주소, 전화번호 등이 있다.
- 관계(Relationship): 엔터티 간의 연관성을 나타난다. 예를 들어, 고객과 주문 엔터티 간의 관계는 고객이 주문을 한다는 식으로 표현된다.
- 기본 키(Primary Key): 테이블 내에서 각 행을 고유하게 식별하기 위해 사용되는 속성이다.
- 외래 키(Foreign Key): 한 테이블의 속성이 다른 테이블의 기본 키를 참조할 때 사용되는 속성입이다.
4. 데이터 모델링의 결과물
- ERD (Entity-Relationship Diagram): 데이터 모델을 시각적으로 표현한 다이어그램이다. ERD는 엔터티, 속성, 관계 등을 도식화하여 데이터베이스 구조를 명확하게 이해할 수 있게 한다.
사이트 주소: https://www.erdcloud.com/
- 스키마(Schema): 데이터베이스의 구조를 SQL 문서로 표현한 것. 테이블 정의, 관계, 제약 조건 등을 포함한다.
사이트 주소: https://dbdiagram.io/
5. 데이터 모델링의 중요성
- 데이터 모델링은 시스템의 데이터 구조를 명확히 이해하고 설계하는 데 필수적이다. 잘 설계된 데이터 모델은 데이터베이스의 성능, 확장성, 유지보수 용이성 등에 크게 기여한다. 반면, 잘못된 모델링은 데이터 무결성 문제를 야기하고, 시스템 성능을 저하시킬 수 있다.
첫 개인 프로젝트를 진행하면서, 데이터 모델링의 중요성을 깊게 깨달았다. 초기에는 필요한 데이터를 기반으로 테이블을 설계하고 백엔드 코드를 작성한 후, 프론트엔드에서 컨텍스트를 통해 데이터를 템플릿 렌더링하려 했으나, 데이터 표시가 제대로 되지 않았고 외래 키 설정 부족으로 코드가 복잡해졌다.
이 과정에서 데이터 모델링의 중요성을 느끼고, 테이블 설계를 다시 검토해야겠다는 생각이 들었다. 특히 E-R 다이어그램을 만들 때 식별자 관계와 비식별자 관계의 구분이 어려웠던 점이 기억에 남았다. SQL 자격증 공부를 통해 익혔던 개념들이 시간이 지나면서 까먹게 되었고, 이를 계기로 유튜브와 블로그를 참고해 다시 공부했다. 이번 기회에 데이터 모델링을 새롭게 이해하고, 설계의 중요성을 다시 한번 깨달았다.