DB Modeling (1)

JINBOK LEE·2022년 9월 26일
0

EESO_CAKE_PROJECT

목록 보기
2/4
post-thumbnail

instaloader 라이브러리를 이용하여 받아온 Data를 가지고 DB를 구성하고자 한다.

먼저 본 웹사이트의 DB 구조에 대해 정리를 할 필요가 있을 것 같았다.

그러기 위해서는 mongoDB의 구조에 대해 알아야 했는데,
관련 영상을 통해 아래와 같은 구조로 이루어져 있음을 알 수 있었다.


출처 : Youtube / Munjun Kim

SERVER

DB를 탑재할 곳이다. 백엔드를 공부하며 DB와 SERVER를 혼동하여 많은 애로사항이 있었는데,
쉽게 말해 식당을 예로 들자면 손님(Client)가 어떠한 메뉴(DataBase)를 주문/요청하면, 식당(SERVER)은 해당 주문/요청에 따라 메뉴(DataBase)를 제공하는 것이다.

식당(SERVER)에도 여러 종류가 있다. 한식당 / 양식당 / 중식당 / 일식당 등 처럼 말이다.
각 식당의 메뉴 (DataBase)는 양식당의 경우 스테이크, 일식당의 경우 회 등 처럼
각 식당에서 제공할 수 있는 메뉴들 중 하나이다.

어떤 양식당(SERVER)에서는 스테이크(mail infomation)를 팔고,
어떤 일식당(SERVER)에서는 회(data-base information)를 판매하는 것이다.

즉, 양식을 파는 식당을 양식당이라고 하듯이 mail information을 제공하는 서버는 mail server,
db information을 제공하는 서버는 DB server로 불리는 것이다.

출처 : Brunch / 쪼렙 서비스기획자

Document

RDMS의 record와 비슷한 개념이다. document는 1개 이상의 key-value pair로 이루어져 있다.
Document는 동적인 schema를 가지고 있다. 즉, 같은 Collection 안에 있는 Document들 끼리
서로 다른 schema를 가지고 있을 수 있다는 것이고, 이는 다시 말해서 서로 다른 데이터 (서로 다른 key)를
가지고 있을 수 있다는 뜻이다.

RDMS ?
Relational Database Management System (관계형 데이터베이스 관리 시스템) 의 약자이다.
Microsoft사의 Excel처럼 행과 열로 된 2차원의 table로 데이터를 관리하는 DB 시스템이다.

출처 : Velopert / Munjun Kim

Collection

MongoDB Document의 그룹이다. Document들은 Collection 내부에 위치하고 있으며
RDMS의 table과 비슷한 개념이다. (RDMS와 달리 정적인 schema를 따로 가지고 있지 않고, 동적인 schema를 가지고 있다.)

Schema ?
스키마란, 단편적인 예로, 열과 행으로 구성된 Table을 작성하는데 있어서 여러개의 Table을 구성할 때 서로 연관된 Table끼리 Grouping 하는 체계가 필요한데 그러한 체계를 뜻 한다.

출처 : Youtube / 생활코딩


서버 정하기

해당 프로젝트로 만들 웹사이트의 목적은,
인스타그램에 무분별하게 업로드 되어 있는 각 케이크 이미지들을 카테고리별로 정리한 뒤
사용자가 정리된 이미지들을 편하게 브라우징하는 포트폴리오성 기능이 주 목적이기 때문에,
사용자의 회원가입이나 게시판 등의 기능은 당장에 크게 고려하지 않았다.

따라서 이미지를 업로드 할 수 있는 적절한 용량과
당장에 따로 비용이 발생하지 않는 무료 서버를 사용하고자 하였고
AWS, Google, Oracle 중 성능과 비용면에서 모두 만족하는 Oracle Server를 사용하기로 하였다.

아무것도 모른채로 시작하다보니, mongoDB 상에서 Cloud를 제공한다는 것을 모르고 있었다.
또한 mongoDB(NoSQL)와 Oracle(SQL)은 서로 다른 데이터베이스 모델 시스템을 가지고 있는데,
이를 서로 연동한다는 것은 현재 내 수준에서 불가하다고 판단하였다.

요구사항

이번 프로젝트의 mongoDB Document 구성에 필요한 요구사항을 정리 해 보았다.

  1. 각 Post에는 이미지와 내용, 작성 시간을 포함한다
  2. 각 게시글은 0개 이상의 태그를 가지고 있을 수 있다

따라서 MongoDB의 Document 상에서

{
_id : POST_ID,
image : POST_IMG,
content : POST_CONTENT,
time : POST_TIME
tags : [TAG1,TAG2,TAG3],
}

위와 같은 구조로 작성을 해야 할 것 같다는 생각을 했다.

무작정 시작

먼저 무작정 mongoDB 계정과 Atlas를 만들었다.
이후 mongoDB에 이미지를 업로드 하기 위해 아래 글을 참고하여 무작정 또 따라해 보았다.
출처 : dev.to / Fakorede Damilola

글에서 기술한 대로, 필수 프레임워크와 라이브러리 등을 설치하였다.
(Express, Mongoose, Multer, Gridfs, Gridfs-stream)

$npm i express mongoose multer multer-gridfs-storage gridfs-stream

일단 설치는 했는데, 어떻게 사용해야 할 지 몰라 각 툴들의 공식 문서와 관련 영상들을 찾아보았다.

해당 내용은 다음 포스트에서 차근차근 다루어 볼 예정이다.

profile
깔끔한 비즈니스 로직 설계를 위해 공부하는 FE 개발자

0개의 댓글