[ 개요 ]: 수업시간 강사님이 DB에 대한 기본적인 개념을 설명해주신 뒤 dpPrime (https://dprime.kr/) 이라는 웹 사이트를 보여주시면서 이제 직접 데이터베이스를 설계해 보라고 과제를 주셨다. 우선 ERD Cloud를 켠 뒤 무작정 구조를 만들었다. dpPrime이라는 웹 사이트를 보면 알 수 있듯이 대표적인 블로그 형태를 띄고 있는 커뮤니티 사이트였다.
나는 일단 눈에 보이는 Entity들을 넣었다. 우선적으로 커뮤니티가 다양한 주제의 Category를 가지고 있기 때문에 Category테이블과 글 데이터를 갖고 있는 Post테이블 그리고 사용자에 대한 User데이터로 시작했다.
하지만 무작정 만들었던 구조는 설계의 긴 여정의 하나에 불과했다.
나는 여러 DB를 설계해보면서 깨달은 점들을 공유하고자 한다.
내가 설계한 DB들은 총 4가지이다.
1. dpPrime 커뮤니티 사이트 (https://dprime.kr/)
2. Reebok 쇼핑 사이트 (https://reebok.co.kr/)
3. 가족관계 증명서, 주민등록등본, 출생신고서, 사망신고서 (https://nhnacademy.tistory.com/31)
4. AirPort 항공사 데이터 베이스 (https://nhnacademy.tistory.com/33)

데이터 베이스 모델링이란 무엇인가? ( 건축의 구조도면? )
데이터 베이스 모델링이란 건축에서의 구조도면과 같다. 집을 짓기 위해서는 먼저 건축 구조도면이 필요하다. 이와 같이 데이터베이스를 만드려면 우선 데이터베이스 구조도가 필요하다. 건축이 아닌 컴퓨터에서 구조도를 만드는 것이 바로 데이터 베이스 모델링이다.
데이터 베이스 모델링이란 데이터를 체계적으로 정리해서 구조화한 것을 말한다. 쉽게 말해 데이터를 깔끔하게 잘 정리해서 이해하기 쉽게 테이블로 그려놓는 작업을 말한다. 데이터 베이스 모델링이 만들어지면 우리는 건축에서의 구조도면 처럼 구조도를 보고 실제 구조를 만들고 이렇게 만들어진 구조(테이블)에 실제 데이터를 Insert하고 update하며 DBMS를 수행하는 것이다.
그렇다면 데이터 베이스 모델의 구성요소에는 어떤 것들이 있을까.
1. Entity 개체 : 저장할 데이터 그룹 (고객, 상품, 주문 ... )
2. Attribute 속성 : 개체가 가지고 있는 정보 (상품의 가격, 코드번호 ... )
3. Relationship 관계 : 개체들간의 연결 (고객이 상품을 주문한다 ... )
이렇게 3가지가 있다. 이 3가지를 합쳐서 바로 ERD라고 하는 것이다.
데이터 베이스 모델링에서 가장 중요한 것은 무엇인가?
데이터 베이스 모델링이 무엇인지는 알겠는데 그렇다면 무엇이 가장 중요하고 어떤 과정을 거쳐서 데이터 베이스 모델링을 해야할까. 우선 나의 경험으로 DB모델링에서 가장 중요한 것은 요구사항이다!
- 요구사항 : 우리가 만들게 될 데이터 베이스는 고객의 요구사항으로부터 만들어진다. 그렇기 때문에 우선적으로 확인해야하는 것이 바로 고객의 요구사항이다. 요구사항을 제대로 확인하지 못하면 나중에 DB 구조를 만들고 난 뒤 수정해야하는 문제가 발생할 수 있기 때문이다.
모델링에서 주의해야할 고려사항들은 무엇인가?
- 정규화 : 그 다음으로 중요한 것은 정규화이다. 정규화가 잘 지켜져야 데이터의 중복을 최소화하여 체계적이고 효율적인 DB를 만들 수 있게 된다. 정규화가 잘 지켜지지 않으면 지저분한 DB 구조를 갖게 된다. 이는 DB의 효율성까지 저하시킬 수 있게 된다.
- 확장성 : DB는 한 번 만들어지면 추후에 변경하기 어렵다. 그렇기 때문에 DB추가나 확장과 같은 변경사항에 잘 대처할 수 있는 DB를 설계하는 것 또한 고려해야한다. 만약 상품차트에 A카테고리 상품을 추가하려고 할 때 데이터를 넣는 것이 아닌 새로운 테이블을 만드는 문제가 발생할 수 있기 때문이다. 심지어는 기존의 테이블을 수정해야하는 경우가 발생할 수도 있게 된다.
- 정책 : 이거는 직접 DB 설계를 하면서 느낀 것인데 요구사항에 모든 내용이 들어가지 않기 때문에 일정부분 규칙과 같은 정책을 정해줄 필요가 있다. 그렇지 않다면 A테이블에서는 하나로 통합했는데 C테이블에서는 2개로 나눠서 작업하는 경우가 발생할 수 있기 때문이다. 또한 어떤 정책을 갖느냐에 따라 DB구조와 데이터의 양이 달라지기 때문에 효율성 측면에서도 적절한 정책이 필요하다.
[ 배경지식 : 정규화란? ]
우리가 아는 수학의 정규화와는 차이가 있다.
DB에서의 정규화란 데이터의 중복을 최소화 하고, 데이터 구조를 체계적으로 정리하는 과정을 말한다.
쉽게 말해 DB를 깔끔하고 효율적으로 만드는 설계 원칙인 것이다.
위에서 예시로 든 건축을 정규화에 예시를 들면 정규화는 건축에서 공간을 최적화하는 것을 말한다.
쓸모없는 공간이 설계도에 들어가면 불편한 집을 집이 무너질 때까지 계속 사용하게 될 것이다.
그렇기 때문에 우리는 효율적인 설계도를 처음에 잘 만들어줘야한다.
정규화에는 여러단계가 있는데
1. 제1정규화(1NF) : 제1정규화는 원자성을 만족시키는 것으로 쉽게 말해 하나의 방에 주방, 화장실, 거실 다 들어있으면 복잡하니까 하나의 방에 거실 하나, 하나의 방에 주방 하나 이렇게 나눠서 작성해 주는 것을 말한다.
2. 제2정규화(2NF) : 제2정규화는 부분종속 함수를 없애는 것으로 쉽게 말해 중복된 데이터를 없애는 것이다.
3. 제3정규화(3NF) : 제3정규화는 이행 종속 함수를 없애는 것으로 쉽게 말해 하나의 테이블에는 직접적으로 연관이 없는 데이터를 따로 저장하는 것을 말한다. 냉장고의 재료로 예시를 들면 냉장고 속 재료에 재료로 만들 수 있는 레시피를 붙여놓은 것과 동일한 문제이다. 냉장고속 재료와 레시피는 관련이 있지만 함께 관리할 경우 재료가 없어지면 레시피도 함께 없어지는 문제가 발생한다.
+ 반정규화 : 정규화를 고려하면서 반 정규화 또한 고려해줘야한다. 반정규화는 정규화의 반대로 정규화를 지키지 않고 데이터의 중복과 같은 형태를 감안하면서 데이터베이스의 효율성을 우선 시 한 방법을 말한다.
그렇다면 실제 DB를 설계할 때 어떤 과정을 거쳐 설계하면 되는지를 알아보자
| 순서 | 주제 | 설명 |
| 1단계 | 요구사항 분석 | 앞에서도 이야기했듯이 요구사항이 제일 우선적으로 파악되어야한다. 어떤 데이터베이스를 만들어야하는지를 우선 이해하고 어떤 점들을 고려하고 고려하지 않아도 되는지, 어떤 로직을 가지고 있는지 등 나의 생각이 아닌 고객의 요구에 따라 맞춰서 설계해야한다. 설계할 DB의 데이터들에 대한 이해도 필요하다. 예를 들어 항공 관련 DB를 설계하는데 PAX, SEG 등의 개념을 잘 이해하지 못한다면 제대로된 설계를 할 수 없다. |
| 2단계 | 개념적 모델링 | 사용될 Entity들을 작성한다. 어떤 개체들이 사용되어야 하고 각 개체들이 어떤 속성을 가지고 있고 개체들간에 어떤 관계(1:1, 1:M, M:M)를 가지고 있는지 등을 정의하면 된다. |
| 3단계 | 논리적 모델링 | 개념적 모델링의 내용을 정규화하여 최적화한다. 위에서 만든 Entity를 기반으로 주요 테이블과 각 테이블의 칼럼들을 설계한다. 이 때 데이터 타입이나 제약 조건(기본키, 외래키, NOT NULL, NULL 등)들을 설계하면 된다. |
| 4단계 | 물리적 모델링 | 실제 데이터베이스에 사용할 테이블들을 생성한다. 이 때 스키마를 설계하는 것이다.(테이블, 뷰, 인덱스, 트리거 등) 또한 스토리지에 대해서도 고려를 해야한다. Mysql, Mssql, Oracle, prostgres 등 어떤 DBMS를 사용할지도 중요하다. |
| 5단계 | 성능 최적화 및 유지보수 |
테이블이 다 만들어졌다면 SQL문을 작성하여 실제 데이터를 넣어보고 제대로 데이터가 들어가는지, 불필요한 정보는 없는지 등 성능을 테스트하는 단계이다. DB를 다 만들고 실제 데이터를 넣어보는 과정에서 DB를 수정하는 경우도 있으니 직접 SQL문을 작성해서 데이터도 넣어보고 출력하는 과정도 좋은 DB를 위해서 필요한 과정이다. |
실제 DB 설계 예시는 다음 포스트에 이어서 올리도록 하겠습니다.
보시는 분들도 한 번씩 빈 종이나 ERD Cloud를 활용해 설계해보면 큰 도움이 될 것 같습니다.
하다보면 재미고 있고 좋은 예시들도 많습니다.
'DataBase' 카테고리의 다른 글
| [ Redis ] 메모리 데이터 베이스 Redis - 개발 지식 (0) | 2025.04.16 |
|---|