본문 바로가기
Personal Projects/소셜 북마크 서비스 🙂

[개인] 소셜 북마크 - DB 설계 2. EERD 설계

by Aaron-Kim 2022. 1. 7.

DB 설계 2. EERD 설계

이번에는 EERDMySQL Workbench 8 을 이용하여

EERD (Enhanced-Entity-Relationship-Diagram) 를 만들어 보겠습니다.

참고 레퍼런스는 하단에 함께 공유하겠습니다.

 

기존에 만든 요구사항 정의서와 클래스 다이어그램을 바탕으로 최대한 간단하게 설계 했습니다.

앞으로 Node.js로 API 서버를 구축하고 클라이언트 단과 연동하면서 개발하면

Agile 하게 DB 스키마가 변할 수 있어서 작게 만들었습니다.

 

EERD는 다음과 같습니다.

 

 

socialbmdb.mwb
0.01MB

 

저는 EERD를 설계할 때

테이블 각각에 모두 id 라는 컬럼을 PK로 Not Null, Auto Increment, Unsigned로 설정했습니다.

우선 PK로 음수가 나올 수 없으므로 부호가 없는 Unsigned로 설정했고,

Auto Increment로 자동으로 숫자가 증가되도록 하면 이후 상당히 편리해집니다.

 

그리고 의아해 하실 수 있는 부분이 왜 굳이 PK를 이메일 아이디 같이 튜플을 unique하게 만드는

컬럼으로 잡지 않았나 하실 수 있는데, 나중에 API 서버 연동 시 테이블끼리 조인할 때 참여하는 컬럼이 많아지면

그것도 상당한 부담이 됩니다.

과거에는 복합키로 PK를 설정하였지만 인덱스(PK, FK 등 컬럼)가 여러 개가 되면 조인할 때 부담이 됩니다.

조인에 대한 복잡성 최소화와 인덱스를 작게 둬서 메모리를 많이 먹지 않도록 부담을 줄였습니다.

그리고 나중에 Object Relational Mapping을 할 때 PK인 id 값 하나만 가지고도

쉽게 원하는 데이터를 js array의 find 함수나 filter 함수를 활용하여 쉽게 찾아갈 수 있습니다.

object 안의 object 안의 object로 이루어져 있다면 데이터를 찾는 것도 힘들고 복잡해질 수 있습니다.

(id를 알게 된다면 Map/HashMap을 이용하여 효율적으로 찾아갈 수 있습니다.)

 

그리고 createdate는 모두 TIMESTAMP로 설정했습니다.

TIMESTAMP 타입은 일반적인 DATETIME 보다 바이트 수가 적습니다.

DATETIME은 8바이트이지만 TIMESTAMP는 4바이트로 메모리적으로 조금 더 효율적입니다.

그리고 TIMESTAMP는 time_zone (ex. Asia/Seoul) 에 따라 시간 정보를 표시해줘서

해외 여러 시간대가 다른 것에 유용하게 활용할 수 있습니다.

 

그리고 outdate (삭제일/탈퇴일) 같은 경우는 varchar로 설정했습니다.

요즘 개인정보보호법 관련 마이데이터에 대해서 제가 최근에 리서치 했을 때는

약간 도메인마다 그리고 특정 상황마다 조금 기간이 달랐던 것 같긴 한데

개인정보보호법에 대한 유효기간이 과거에 6개월 정도 였다고 알고 있습니다.

따라서 그것에 대한 정보를 varchar로 설정했지만,

사실 토이 프로젝트로 진행하는 이 서비스에서는 그 정도까지 필요하지 않아서

중요하게 고려하지는 않겠습니다.

(실무에서는 고려해야할 중요한 부분이라고 생각합니다.)

 

채팅과 게시판 등은 이후 추가적인 기능으로 구현할 생각이라 현재는 테이블을 따로 잡지 않았습니다.

채팅 데이터 모델 설계 시에는 MySQL 8버전 부터 NoSQL을 사용할 수 있는

MySQL X Dev API를 활용할 예정입니다.

(사실 MongoDB와 고민중입니다.)

 

다음에는 바로 Oracle Cloud에서 무료로 제공해주는 VM 인스턴스 2대를 가지고

인프라를 설계하고 구축해보겠습니다.

 

그리고 추가적으로 클라이언트단 Customer project 개발로 원래 React를 쓰려고 했습니다.

하지만 최근에 Vercel에서 나온 리액트의 프레임워크인 Next.js가 너무 강력한 기능들이 많고

매력적이어서 Next.js로 진행하려고 합니다.

 

재밌는 프로젝트가 될 것 같습니다.


[Reference]

시니어코딩 (유튜브) - DB 설계

 

반응형

댓글