Final Project - CheeUs (DB)

ByeolGyu·2024년 7월 20일

Final Project

목록 보기
2/5

🍻 데이터베이스란?

: 컴퓨터 시스템에 전자적으로 저장되는 조직화된 데이터 모음

  • 데이터를 조직화하면 데이터에 의미가 생기며 대량의 데이터를 효율적으로 관리할 수 있음

관계형 데이터베이스 vs 비관계형 데이터베이스

관계형 데이터베이스

데이터베이스 유형 중 관계형 데이터베이스는 테이블 기반으로 데이터를 저장함
SQL을 사용해서 데이터를 다룰 수 있음
테이블의 관계가 구조화된 데이터의 모음이기 때문에 구조화된 쿼리 언어를 사용할 수 있음

  • 고정된 행(row)과 열(column)로 구성된 테이블에 데이터를 저장
  • 각 열은 하나의 속성에 대한 정보를 저장하고, 행에는 각 열의 데이터 형식에 맞는 데이터가 저장됨
  • 테이블의 구조와 데이터 타입 등을 사전에 정의
  • 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있음
  • 특정한 형식을 지키기 때문에, 데이터를 정확히 입력했다면 데이터를 사용할 때에는 수월함

RDBMS

: 관계형 데이터베이스 관리 시스템을 따로 RDBMS라고 부름
MySQL / Oracle / SQLite / MariaDB / PostgresSQL

관계형 데이터베이스는 SQL 사용

  • 관계형 데이터베이스와 상호작용할 때 SQL 사용
    → 관계형 데이터베이스에서는 스키마가 뚜렷하게 보임
    즉, 관계형 데이터베이스에서는 테이블 간의 관계를 직관적으로 파악 가능

비관계형 데이터베이스

  • 비관계형 데이터베이스를 칭할 때 NoSQL(또는 NoSQL 데이터베이스)라고함
  • NoSQL이란 누군가는 ‘non SQL(비 SQL)’의 약자로, 또 누군가는 ‘not only SQL(SQL만을 사용하지 않는)’라는 뜻
  • NoSQL 데이터베이스는 주로 데이터가 고정되어 있지 않은 데이터베이스
  • NoSQL 데이터베이스는 데이터 모델에 따라 유형이 다양함
  • 주요 유형으로는 문서, 키 값, 와이드 컬럼, 그래프가 있음
  • NoSQL이 SQL과 반대되는 개념처럼 사용된다고 해서, NoSQL에 스키마가 반드시 없는 것은 아니며
    유연한 스키마를 제공하며, 대량의 데이터와 높은 사용자 부하에서도 손쉽게 확장이 가능함
  • 관계형 데이터베이스에서는 데이터를 입력할 때 스키마에 맞게 입력해야 하는 반면, NoSQL에서는 데이터를 읽어올 때 스키마에 따라 데이터를 읽어 옴 (schema on read)
  • 읽어올 때에만 데이터 스키마가 사용된다고 하여, 데이터를 쓸 때 정해진 방식이 없다는 의미는 아니며 데이터를 입력하는 방식에 따라 데이터를 읽어올 때 영향을 미침

🍻 데이터베이스 선택

총 3개의 데이터베이스를 사용

MySQL

- 사진과 채팅내용을 제외한 데이터 저장

FireBase

- 프로필 사진 및 게시물의 사진과 영상을 저장

MongoDB

- 채팅방 및 채팅 내용 저장
  • MongoDB BSON Docs는 16MB로 제한되기 때문에 이미지나 영상과 같은 파일을 관리할 때에는 외부 Storage (aws, naver cloud 등)에 저장하고 그 url을 저장하는 것이 더 권장됨
  • 이번 프로젝트에서는 firebase에 이미지를 저장해보려고 함

데이터베이스 비교

Firebase와 MongoDB는 모두 애플리케이션 개발자를 위한 강력하고 확장 가능한 최신 데이터베이스 플랫폼

Firebase

  • Google에서 인프라 및 유지관리를 처리

  • Firebase에는 실시간 데이터베이스(RealTime Database)와 Cloud Firestore라는 두 가지 데이터 저장소가 포함되어 있음

    	- RealTime Database는 데이터의 신속한 수집 및 처리를 위해 설계된 게시/구독 시스템에 가까움 
    	- Cloud Firestore는 장기 데이터 저장 및 검색을 위해 설계

MongoDB

  • 고성능 및 동급 최고의 보안으로 알려진 보다 강력한 문서 데이터베이스
  • Firebase에 비교해 보았을 때 몇가지 장점이 있음
  • MongoDB는 온프레미스 또는 클라우드(MongDB Atlas, 자체 관리형 클라우드)에서 운영할 수 있는 반면 Firebase는 순전히 클라우드 데이터베이스 서비스
    firebase / MongoDB

실시간 채팅과 데이터베이스

채팅 내역 저장에 있어 데이터베이스 선택

firebase Realtime Database 대신 MongoDB

구글링 해보니 보통 firebase Realtime Database 또는 nodejs + mongodb + socket.io을 사용하는 듯 함

  • Firebase의 Realtime Database를 사용해서 채팅을 구현하면 별도로 서버를 생성하지 않고 실시간 채팅을 구현 가능함
    - 읽기/쓰기 API도 Firebase에서 제공
    but. 쿼리(MQL)를 지원하는 MongoDB와 달리 Firebase는 API 형식
    기때문에 제한적인 부분이 있을 수 있어 MongoDB 선택

MySql 대신 MongoDB

  • NOSQL이 기존의 RDB보다 더 빠른 읽기 쓰기 성능을 가지고 있음
  • 채팅데이터는 뭔가 정형화된 데이터라는 느낌보다는 언제든지 바뀔 수 있으며 많은 양의 데이터가 수시로 Read/Write 기능이 요구됨
  • Write가 많은 채팅 데이터로 인해 다른 테이블의 트랜잭션이 일시적으로 중단될 수 있음
  • 수평확장(scale-out) 측면에서 채팅 데이터는 사용자가 많아질수록 더 많이 쌓이게 되는 데이터임
  • Mysql은 Scale-out이 어려렵지만 Nosql은 clustering을 대부분 지원해줌

🍻 ERD Cloud

ERD 클라우드는 데이터베이스 설계와 관리에 유용한 도구로, 여러 사용자가 동시에 사용 가능함!

전체구조

회원 정보

  • OAuth로 회원 email을 전달 받아 사용사기 위해 member테이블과 profile 테이블 연결
  • profile 사진은 firebase에 저장

매칭과 1:1 채팅

  • 매칭 프로그램에서 like를 하면 match가 1로 변경되면 채팅방이 생성되며, 상대방도 like를 하면 match가 2로 변경되어 채팅 화면에 보이도록 함
  • 채팅창에서 매칭을 취소하면 match가 3으로 변하면서 랜더링 되지 않고 채팅 방과 내역은 db에 그대로 남아있게 됨

모집 게시판(함께 마셔요 보드)과 단체 채팅

  • 번개 모임을 생성하는 함께 마셔요 Board는 게시물 생성시 자동으로 채팅방이 만들어지고, 방장이 채팅방에 member에 들어가게됨

게시판

  • 게시판은 크게 4종류로 모집게시판 / 일반게시판/ 매거진(공지) / 이벤트 공지 게시판(관리자가 작성하는)으로 나뉨
  • 일반게시판은 자유게시판/숏폼 게시판/이벤트참여 게시판(일반인 혹은 가게 사장이 작성하는)으로 분기됨
  • 댓글과 스크랩 기능을 사용할 수 있도록 연결

메거진 / 공지 게시판

  • 메거진과 공지는 관리자가 작성함
profile
ByeolGyu

0개의 댓글