본문 바로가기
Dev & Tech/Database

[DB] 데이터 모델링 개념부터 실전 방법론까지 완벽 가이드

by 루루모먼트 2022. 9. 4.
반응형
데이터 모델링 개념부터 실전 방법론까지 완벽 가이드

데이터 모델링 완벽 가이드: 개념부터 실전 방법론까지

개요

안녕하세요! 데이터 모델링이라고 하면 어렵게 느껴지시나요? 사실 데이터 모델링은 우리가 일상에서 하는 '정리 정돈'과 비슷합니다.

예를 들어, 옷장을 정리할 때 상의/하의/외투를 분류하고, 계절별로 나누고, 자주 입는 옷은 앞쪽에 두는 것처럼, 데이터 모델링은 컴퓨터에 저장할 정보를 체계적으로 정리하는 작업입니다. 이 글에서는 복잡한 용어 대신 쉬운 예시로 데이터 모델링을 설명해드리겠습니다.

목차
1. 데이터 모델링이란?
2. 데이터 모델링 3단계 (단계별 이해)
3. 핵심 개념 쉽게 이해하기
4. 정규화와 역정규화 (실생활 비유)
5. 자주 묻는 질문(FAQ)

#1. 데이터 모델링이란?
1) 데이터 모델링을 쉽게 이해하기
데이터 모델링은 '설계도 그리기'와 같습니다. 집을 지을 때 설계도가 필요하듯이, 데이터베이스를 만들 때도 설계도가 필요합니다.
실생활 예시: 도서관 만들기
도서관을 만든다고 상상해보세요:

어떤 정보가 필요할까요? → 책 제목, 저자, 출판사, 대여자 정보 등
정보를 어떻게 정리할까요? → 책은 책대로, 회원은 회원대로 분류
정보들이 어떻게 연결될까요? → "홍길동 회원이 '데이터베이스' 책을 빌렸다"

이렇게 정보를 파악하고 정리하는 것이 바로 데이터 모델링입니다!
. . . . .
2) 데이터 모델의 3가지 기본 요소
데이터 모델은 세 가지 기본 요소로 구성됩니다. 쇼핑몰을 예로 들어 설명하겠습니다:
(1) 엔티티(Entity) - 관리할 대상
엔티티는 '관리하고 싶은 것'입니다. 명사로 표현되며, 데이터베이스의 테이블이 됩니다.
쇼핑몰 예시
고객: 우리 쇼핑몰 회원들
상품: 판매하는 물건들
주문: 고객이 상품을 산 기록
배송: 물건을 배달한 정보
(2) 속성(Attribute) - 상세 정보
속성은 엔티티의 '구체적인 정보'입니다. 각 대상이 가지는 특징들입니다.
고객 엔티티의 속성
① 고객명: 홍길동
② 이메일: hong@email.com
③ 전화번호: 010-1234-5678
④ 주소: 서울시 강남구
⑤ 가입일: 2024-01-15
(3) 관계(Relationship) - 연결 관계
관계는 엔티티들이 '어떻게 연결되는지'를 나타냅니다. "누가 무엇을 했다" 형태로 표현됩니다.
쇼핑몰의 관계 예시
① 고객이 상품을 주문한다
② 주문에 배송이 할당된다
③ 상품이 카테고리에 속한다
. . . . .
3) 왜 데이터 모델링이 중요할까요?
데이터 모델링을 제대로 하지 않으면 어떤 문제가 생길까요?
❌ 잘못된 설계의 문제점
예시: 고객 정보를 정리하지 않고 주문 정보에 다 때려 넣은 경우

문제 1. 중복 정보가 너무 많다
홍길동님이 10번 주문하면 이름, 주소, 전화번호가 10번 저장됨 → 저장공간 낭비!

문제 2. 수정이 어렵다
홍길동님이 이사 가서 주소를 바꾸면? → 10개의 주문 기록을 모두 수정해야 함!

문제 3. 데이터가 틀릴 수 있다
10개 중 9개만 수정하고 1개를 빠뜨리면? → 같은 사람인데 주소가 다르게 저장됨!
✅ 올바른 설계의 장점
해결책: 고객 정보를 별도로 관리

① 고객 정보는 한 곳에만 저장
② 주문 정보에는 "누가 주문했는지"만 연결
③ 주소 변경 시 한 곳만 수정하면 끝!
④ 데이터 불일치 문제 해결!

#2. 데이터 모델링 3단계 (단계별 이해)
데이터 모델링은 점점 구체화되는 3단계 과정입니다. 마치 그림을 그릴 때 스케치 → 밑그림 → 채색의 과정을 거치는 것과 같습니다.
1) 1단계: 개념적 모델링 (큰 그림 그리기)
핵심: "무엇을 관리할까?"를 정하는 단계

이 단계에서는 기술적인 내용은 전혀 생각하지 않습니다. 순수하게 업무 관점에서만 생각합니다.
학원 관리 시스템 예시
Q: 학원에서 관리해야 할 것들이 뭐가 있을까요?

학생: 우리 학원에 다니는 아이들
강사: 수업하시는 선생님들
과목: 영어, 수학, 과학 등
수강: 누가 무슨 과목을 듣는지
성적: 시험 점수 기록

관계:
학생이 과목을 수강한다 / 강사가 과목을 가르친다 / 학생이 성적을 받는다
. . . . .
2) 2단계: 논리적 모델링 (상세 정보 추가)
핵심: "어떤 정보를 저장할까?"를 정하는 단계

이제 각 엔티티에 구체적인 속성들을 추가합니다. 아직 기술적인 내용(데이터 타입 등)은 고려하지 않습니다.
학생 엔티티 상세화
학생 엔티티에 저장할 정보:

① 학생번호 (학생을 구분하는 고유 번호) ← 이것이 식별자!
② 학생명
③ 생년월일
④ 학년
⑤ 연락처
⑥ 부모님 연락처
⑦ 주소
⑧ 등록일
여기서 중요한 개념이 '식별자(Key)'입니다.
식별자란?
식별자는 '고유한 이름표'입니다.

같은 이름을 가진 학생이 있을 수 있습니다:
• 1학년 김철수
• 3학년 김철수

이름만으로는 누구인지 구분할 수 없습니다!
그래서 각 학생에게 고유한 번호를 부여합니다: 학생001, 학생002...

이것이 바로 기본키(Primary Key, PK)입니다!
. . . . .
3) 3단계: 물리적 모델링 (실제 만들기)
핵심: "어떻게 저장할까?"를 정하는 단계

이제 실제 데이터베이스에 저장하기 위한 기술적인 내용을 결정합니다.
기술적 결정 사항들
① 데이터 타입 결정:
• 학생명: 문자(최대 50자)
• 생년월일: 날짜
• 연락처: 문자(20자) - 숫자지만 "-" 때문에 문자로!

② 제약조건 설정:
• 학생명은 반드시 입력해야 함 (NOT NULL)
• 연락처는 중복 불가 (UNIQUE)

③ 성능 최적화:
• 학생명으로 자주 검색한다면? → 인덱스 추가!
(마치 책의 색인과 같은 역할)

#3. 핵심 개념 쉽게 이해하기
1) 관계의 종류 이해하기
엔티티 간의 관계는 "몇 대 몇" 관계인지로 구분됩니다.
(1) 1:1 관계 (일대일)
1:1 관계 예시
사람과 주민등록번호

• 한 사람은 하나의 주민등록번호를 가집니다
• 하나의 주민등록번호는 한 사람에게만 속합니다

이것이 1:1 관계입니다!
(2) 1:N 관계 (일대다) - 가장 흔한 관계!
1:N 관계 예시
부서와 직원

• 하나의 부서에는 여러 명의 직원이 속합니다
• 한 직원은 하나의 부서에만 속합니다

예시:
영업부 → 홍길동, 김철수, 이영희
개발부 → 박민수, 정수진

이것이 1:N 관계입니다!
(3) M:N 관계 (다대다)
M:N 관계 예시
학생과 과목

• 한 학생은 여러 과목을 수강합니다
• 한 과목은 여러 학생이 수강합니다

예시:
홍길동 학생 → 영어, 수학, 과학 수강
영어 과목 → 홍길동, 김철수, 이영희 수강

이것이 M:N 관계입니다!

중요: M:N 관계는 보통 중간 테이블을 만들어 두 개의 1:N 관계로 나눕니다!
. . . . .
2) ERD(그림으로 표현하기)
ERD는 데이터 모델을 그림으로 그린 것입니다. 마치 조직도나 지하철 노선도처럼 복잡한 관계를 한눈에 볼 수 있게 해줍니다.
ERD 간단 예시
온라인 서점의 ERD (간단 버전)

[고객] ━━━ 주문한다 ━━━ [주문]
                             ║
                          포함한다
                             ║
                           [책]

해석:
• 고객이 주문을 한다 (1:N 관계)
• 주문은 여러 책을 포함한다 (M:N 관계)

#4. 정규화와 역정규화 (실생활 비유)
1) 정규화 - 정리정돈의 기술
정규화는 '중복 제거'입니다. 같은 정보를 여러 곳에 저장하지 않도록 정리하는 과정입니다.
정규화를 집 정리에 비유하면
❌ 정규화 전 (정리 안 된 상태):

거실, 방, 주방에 각각 가위가 하나씩 있음
→ 가위를 찾기 힘들고, 한 곳의 가위가 망가져도 다른 곳은 모름

✅ 정규화 후 (정리된 상태):

가위는 서랍에 딱 한 개만 보관
→ 가위가 어디 있는지 명확하고, 관리하기 쉬움
(1) 제1정규형 - 한 칸에 하나만!
제1정규형 예시
❌ 나쁜 예:
학생명: 홍길동
취미: 축구, 야구, 농구

하나의 칸에 여러 개의 값이 들어있습니다!

✅ 좋은 예:
학생명: 홍길동 / 취미: 축구
학생명: 홍길동 / 취미: 야구
학생명: 홍길동 / 취미: 농구

또는 별도의 '취미' 테이블로 분리!
(2) 제2정규형 - 관련 없는 정보는 분리!
제2정규형 예시
❌ 나쁜 예: 주문 테이블

주문번호 | 고객명 | 고객주소 | 상품명 | 가격
001 | 홍길동 | 서울 | 노트북 | 1,000,000
002 | 홍길동 | 서울 | 마우스 | 30,000

문제: 홍길동님 주소가 두 번 저장됨!

✅ 좋은 예: 테이블 분리

고객 테이블:
고객번호 | 고객명 | 고객주소
C001 | 홍길동 | 서울

주문 테이블:
주문번호 | 고객번호 | 상품명 | 가격
001 | C001 | 노트북 | 1,000,000
002 | C001 | 마우스 | 30,000
(3) 제3정규형 - 간접 관계 제거!
제3정규형 예시
❌ 나쁜 예: 직원 테이블

직원명 | 부서명 | 부서위치
홍길동 | 개발팀 | 3층
김철수 | 개발팀 | 3층

문제: 개발팀 위치가 변경되면 모든 직원 정보를 수정해야 함!

✅ 좋은 예: 부서 정보 분리

부서 테이블:
부서명 | 부서위치
개발팀 | 3층

직원 테이블:
직원명 | 부서명
홍길동 | 개발팀
김철수 | 개발팀
. . . . .
2) 역정규화 - 때로는 중복도 필요해요
역정규화는 '성능을 위해 일부러 중복을 만드는 것'입니다.
⚡ 역정규화가 필요한 이유
상황: 쇼핑몰에서 주문 내역을 보여줄 때

정규화된 구조:
주문 테이블 → 고객 테이블 연결 → 상품 테이블 연결
(세 개의 테이블을 계속 연결해서 봐야 함 = 느림!)

역정규화 적용:
주문 테이블에 고객명, 상품명을 함께 저장
(한 테이블만 보면 됨 = 빠름!)

언제 사용하나요?
① 조회가 매우 자주 일어나는 경우
② 데이터 변경이 거의 없는 경우
③ 성능이 매우 중요한 경우
. . . . .
3) 실전 팁: 정규화 vs 역정규화 선택
상황 정규화 역정규화
데이터 입력/수정이 많을 때 ✅ 추천 ❌ 비추천
데이터 조회가 많을 때 ❌ 느릴 수 있음 ✅ 빠름
데이터 정확성이 중요할 때 ✅ 추천 △ 주의 필요
저장공간이 부족할 때 ✅ 추천 ❌ 공간 많이 씀

#5. 자주 묻는 질문(FAQ)
1) Q: 데이터 모델링, 꼭 해야 하나요? 그냥 바로 만들면 안 되나요?
A: 집을 지을 때 설계도 없이 바로 짓지 않는 것처럼, 데이터베이스도 설계가 필수입니다!
설계 없이 만들면 생기는 문제:

① 나중에 수정하려니까 너무 어렵다
(벽돌 쌓은 집에서 방 하나 더 만들기처럼 어려움)

② 같은 데이터가 여기저기 흩어져 있다
(같은 물건을 여러 곳에 두면 관리 힘든 것처럼)

③ 프로그램이 느려진다
(정리 안 된 창고에서 물건 찾기 어려운 것처럼)
. . . . .
2) Q: 작은 프로젝트도 3단계를 다 거쳐야 하나요?
A: 프로젝트 크기에 따라 간소화할 수 있습니다.
소규모 프로젝트 (예: 개인 가계부 앱):
• 1단계(개념)와 3단계(물리)만 간단히 해도 OK
• 하지만 "무엇을 저장할지" 정도는 꼭 정리하세요!

중대규모 프로젝트 (예: 회사 업무 시스템):
• 3단계 모두 거치는 것을 추천
• 나중에 수정 비용이 훨씬 큽니다!
. . . . .
3) Q: 정규화는 몇 단계까지 해야 하나요?
A: 보통 제3정규형(3NF)까지만 하면 충분합니다.
실무에서의 정규화:

① 제1정규형: 필수! (한 칸에 하나의 값만)
② 제2정규형: 필수! (관계없는 정보 분리)
③ 제3정규형: 권장! (간접 관계 제거)
④ 그 이후: 특별한 경우에만

3정규형까지만 해도 대부분의 중복 문제가 해결됩니다!
. . . . .
4) Q: 데이터베이스 종류마다 모델링 방법이 다른가요?
A: 전통적인 데이터베이스(Oracle, MySQL)와 NoSQL은 접근 방법이 다릅니다.
전통 데이터베이스 (관계형 DB):
• 엑셀 같은 표 형태
• 정규화가 중요
• 관계를 명확히 정의

NoSQL (몽고DB 등):
• JSON 같은 문서 형태
• 중복을 허용하기도 함
• 어떻게 조회할지를 먼저 생각

초보자라면 전통 데이터베이스부터 배우는 것을 추천합니다!
. . . . .
5) Q: ERD 그리는 도구는 뭘 쓰면 좋나요?
A: 초보자에게 추천하는 도구들:
① draw.io (무료, 온라인)
• 설치 필요 없음
• 간단하고 직관적
• 초보자에게 최고!

② MySQL Workbench (무료)
• MySQL 사용한다면 추천
• ERD로 실제 DB를 바로 만들 수 있음

③ ERD Cloud (무료, 온라인)
• 한글 지원
• 데이터베이스 모델링 전용

처음에는 종이에 손으로 그려보는 것도 좋은 연습입니다!
. . . . .
6) Q: 실수로 잘못 설계했어요. 어떻게 하죠?
A: 데이터가 없을 때 발견했다면 다행입니다!
데이터 입력 전:
• 구조를 바꾸기 쉬움
• 테이블 삭제하고 다시 만들면 됨

데이터 입력 후:
• 조심스럽게 수정해야 함
• 기존 데이터를 보존하면서 구조 변경
• 백업 필수!

팁: 실제 데이터 넣기 전에 테스트 데이터로 충분히 검증하세요!

마무리
데이터 모델링, 이제 조금 이해가 되시나요?

핵심만 기억하세요:

데이터 모델링은 '정리 정돈'이다 - 정보를 체계적으로 정리하는 과정
3단계로 점점 구체화한다 - 큰 그림 → 상세 정보 → 실제 구현
정규화는 중복 제거, 역정규화는 성능 향상
작은 프로젝트도 최소한의 설계는 필수

처음에는 어렵게 느껴지겠지만, 작은 프로젝트로 연습하다 보면 자연스럽게 익숙해집니다. 예를 들어 간단한 블로그 시스템, 할일 관리 앱 등을 직접 설계해보세요!

데이터 모델링은 한 번에 완벽할 수 없습니다. 요구사항이 바뀌면 모델도 함께 진화합니다. 완벽을 추구하기보다는 지금 필요한 것을 명확하게 정리하는 것부터 시작하세요!
긴 글 읽어주셔서 감사합니다.

끝.
반응형