본문 바로가기
혼공학습단 12기

[혼공S] 02 - 1 '건물을 짓기 위한 설계도: 데이터베이스 모델링' 정리

by jaeheon0520 2024. 7. 3.

 

데이터베이스 모델링은 테이블의 구조를 미리 설계하는 개념으로 건축 설계도를 그리는 과정과 비슷하다. 건물에서 설계도가 아주 중요하듯, 프로젝트에서도 데이터베이스 모델링이 잘 되어야 제대로 된 데이터베이스를 구축할 수 있다.

 

프로젝트를 진행하기 위해서는 대표적으로 폭포수 모델을 사용하며, 데이터베이스 모델링은 폭포수 모델의 업무 분석과 시스템 설계 단계에 해당한다. 이 단계를 거치면 가장 중요한 데이터베이스 개체인 테이블 구조가 결정되는 것이다.

 

 

프로젝트 진행 단계

프로젝트란 '현실 세계에서 일어나는 업무를 컴퓨터 시스템으로 옮겨놓는 과정'이다. 더 쉽게는 '대규모 소프트웨어를 작성하기 위한 전체 과정'이라고 이야기 할 수 있다.

 

프로그램 vs 소프트웨어

프로그래밍 언어(C, JAVA, Python, 등)를 통해서 만들어진 결과물을 소프트웨어(Software)라고 부른다. 소프트웨어와 프로그램은 거의 비슷한 용어로 소프트웨어는 좀 더 큰 단위, 프로그램은 좀 더 작은 단위로 부르기도 하지만 대부분의 상황에서 구분 없이 사용되고 있다.

 

건물을 짓는 것과 마찬가지로 소프트웨어도 마찬가지로 절차를 갖춰서 만들어야 한다. 이러한 절차를 연구하는 분야를 소프트웨어 공학이라고 부르며, 별도의 교과목이나 책으로 분리되어 있다. 소프트웨어 공학에서 가장 기본적으로 언급되는 소프트웨어 개발 절차 중 하나로 폭포수 모델이라는 것이 있다. 폭포수 모델은 각 단계가 폭포가 떨어지듯 진행되기 때문에 붙여진 이름이다.

 

다음 그림은 소프트웨어 개발 단계를 폭포수 모델로 표현한 것이다.

 

각 단계의 의미를 예를 들어 설명하면 다음과 같다. 지금 우리가 슈퍼마켓을 운영하고 있다고 가정해보자. 이 슈퍼마켓의 물건을 온라인으로도 판매하기 위해 인터넷 쇼핑몰을 구축하려고 한다.

 

  1. 프로젝트 계획: 슈퍼마켓의 물건들을 온라인으로 판매하기 위한 계획 단계이다.
  2. 업무 분석: 슈퍼마켓에서 업무가 어떻게 돌아가는지 파악하는 것이다. 예로 물건은 아디서 들어오는지, 물건을 어떻게 계산하는지, 재고는 어떻게 관리하는지 등의 업무에 대해서 정리하는 단계이다.
  3. 시스템 설계: 앞에서 정리한 업무 분석을 컴퓨터에 적용시키기 위해서 알맞은 형태로 다듬는 과정이다
  4. 프로그램 구현: 앞에서 완성한 시스템 설계의 결과를 실제 프로그래밍 언어로 코딩하는 단계이다. 우리가 계획한 내용을 온라인으로 제공하기 위해서는 JavaScript, PHP, JSP 등의 프로그래밍 언어를 사용해야 한다.
  5. 테스트: 코딩된 프로그램에 오류가 없는지 확인하는 과정이다.
  6. 유지보수: 실제 온라인 쇼핑몰을 운영하면서 문제점을 보완하고 기능을 추가하는 과정이다.

폭포수 모델은 각 단계가 구분되어 프로젝트의 진행 단계가 명확하다는 장점이 있다. 하지만 이 모델의 가장 큰 단점은 폭포에서 내려가기는 쉬워도 다시 거슬러 올라가기는 힘든 것처럼 문제가 발생할 경우 다시 앞 단계로 돌아가기가 어렾다는 것이다. 그래도 각 단계가 명확하기 때문에 지금도 많이 사용되고 있다.

 

우리가 공부하는 데이터베이스 모델링은 폭포수 모델에서 업무 분석과 시스템 설계 단계에 해당한다.

 

데이터베이스 모델링

앞서 프로젝트 진행 단계에 대해 간략하게 알아보았다. 여기서는 현실 세계의 슈퍼마켓을 인터넷 쇼핑몰로 만드는 프로젝트를 바탕으로 데이터베이스 모델링 부분을 살펴보자.

 

데이터베이스 모델링(Database modeling)이란 우리가 살고 있는 세상에서 사용되는 사물이나 작업을 DBMS의 데이터베이스 개체로 옮기기 위한 과정이라고 할 수 있다. 더 쉽게 이야기하면 현실에서 쓰이는 것을 테이블로 변경하기 위한 작업이라고 생각하면 된다.

 

다음 그림을 보면서 데이터베이스 모델링이 어떤 것인지 파악해보자

 

 

우리가 구현할 인터넷 쇼핑몰에서는 고객 또는 직원 등의 사람이 필요하다. 그렇다면 이 '사람'을 어떻게 데이터베이스에 넣을 수 있을까? 사람을 나타낼 수 있는 특징들을 추출해서 데이터베이스로 만들어야 한다. 슈퍼마켓의 고객, 물건, 직원 등을 데이터베이스에 각각의 테이블 이라는 개체로 변환한다.

 

한 가지 더 기억할 점은 데이터베이스 모델링에는 정답이 없다는 것이다. 건물 설계도를 그리는 사람에 따라 다양한 결과물이 나오는 것처럼 말이다. 다만, 좋은 모델링과 나쁜 모델링은 분명히 존재한다. 이는 다양한 학습과 실무 경험에서 우러나온다.

 

전체 데이터베이스 구성도

앞에서 살펴본 데이터베이스 모델링의 결과로 다음과 같은 구성이 완료되었다고 가정하자.

 

 

위 그림에 나온 용어를 하나씩 살펴보자.

  • 데이터(data): 하나하나의 단편적인 정보를 말한다. 이 그림에서는 tess, 아이유, 바나나와 같은 개별적인 정보를 말한다.
  • 테이블(table): 회원이나 제품의 데이터를 입력하기 위해 표 형태로 표현한 것을 말한다. 지금은 인터넷 쇼핑몰을 구현하기 위해서 회원 정보를 보관할 회원 테이블과 제품 정보를 보관할 제품 테이블 2개의 테이블을 만들었다.
  • 데이터베이스(database): 테이블이 저장되는 저장소를 말한다. 데이터를 저장하는 곳이라는 의미로 그림에서는 원통 모양으로 표현했다. 그림에 3개의 데이터베이스를 표현하였는데, 각 데이터베이스는 이름이 서로 달라야 한다.
  • DBMS: 데이터베이스 관리 시스템 또는 소프트웨어를 말한다. MySQL이 바로 DBMS이다. 그림에서 MySQL이 3개의 데이터베이스를 관리하고 있다.
  • 열(column): 테이블의 세로를 말한다. 각 테이블은 여러 개의 열(컬럼, 필드)로 구성된다. 회원 테이블은 3개의 열로 제품 테이블은 5개의 열로 구성되어 있다.
  • 열 이름: 각 열을 구분하기 위한 이름이다. 열 이름은 각 테이블 내에서는 서로 달라야 한다. 회원 테이블의 아이디, 회원 이름, 주소 등이 열 이름이다.
  • 데이터 형식: 열에 저장될 데이터의 형식을 말한다. 회원 테이블의 회원 이름 열은 '1234'와 같은 숫자가 아닌 '나훈아'와 같은 문자 형식이어야 한다. 그리고 제품 테이블의 가격 열은 숫자 형식이어야 한다. 데이터의 형식은 테이블을 생성할 때 열 이름과 함께 지정해준다.
  • 행(row): 실질적인 진짜 데이터를 말한다. 예로 'tess/나훈아/경기 부천시 중동'이 하나의 행(로우, 레코드)으로 행 데이터라고도 부른다. 회원 테이블에서 회원이 몇 명인지는 행 데이터가 몇개 인지로 알 수 있다. 즉, 행의 개수가 데이터의 개수이다. 이 예에서는 4건의 행 데이터가 있으므로 4명의 회원이 가입되어 있는 것이다.
  • 기본 키(Primary Key, PK): 기본 키(또는 주키) 열은 각 행을 구분하는 유일한 열을 말한다. 더 쉽게는 네이버의 회원 아이디, 학번, 주민등록번호 같은 것이라고 생각하면 된다. 그래서 기본 키는 중복되어서는 안되며, 비어 있어서도 안된다. 테이블에는 열이 여러 개 있지만 기본 키는 1개만 지정해야 하며, 일반적으로 1개의 열에 지정한다.
  • SQL(Structured Query Language): DBMS에서 작업을 하고 싶다면 어떻게 해야 할까? DBMS가 알아듣는 언어로 해야 한다. 그것이 SQL(구조화된 질의 언어)이다. 즉 SQL은 사람과 DBMS가 소통하기 위한 언어이다.