이제 프로젝트 빌드까지 성공했으니, 데이터베이스를 정리할 때입니다.
저희 러닝 하이에서는 `MySQL 8.0.30'버전을 사용하고 있음을 알려드립니다.
러닝하이
팀이 MySQL을 사용한 가장 큰 이유는 RDBMS인 점입니다.
RDBMS는 테이블 별로 필요한 데이터들만을 저장하고, 외래 키
를 이용해 관련된 테이블의 데이터들을 저장할 수 있습니다. 데이터 수정 시에도 다른 테이블의 연관된 데이터도 일괄 수정되며 데이터 일관성을 가질 수 있습니다.
조회 시에도 조건을 추가하여 복잡한 쿼리로 상세한 데이터를 식별해서 조회가 가능하다는 점에서도 큰 장점을 갖고 있습니다. 트랜잭션을 이용해 동시성 제어
가 되는 점도 선택의 이유 중 하나였습니다.
RDMS 중 MySQL은 오픈소스
로 접근성이 가장 편했습니다. 다양한 커뮤니티가 형성되어 있어 래퍼런스가 많다는 것도 하나의 이유였습니다.
로컬 환경에서도 개발 진행 시,
프로젝트 전용 DB에 전용 계정과 권한을 주어 다른 프로젝트에서 접근이 불가능하게 설정해두었습니다.
-- 1) 새로운 계정 만들기
CREATE USER 'new ID'@'%' IDENTIFIED BY 'Password'; -- 'localhost' 대신 '%'를 쓰면 외부 ip로 접속 가능합니다.
-- 2) 데이터베이스 생성 후 계정에 권한 부여
-- 데이터베이스(스키마) 생성
CREATE DATABASE DB;
-- CREATE SCHEMA DB;
-- MySQL은 개념적으로 database와 schema를 구분하지 않습니다.
-- (CREATE DATABASE와 CREATE SCHEMA가 같은 개념입니다.)
GRANT ALL PRIVILEGES ON midnight.* TO 'midnight'@'%'; -- menu에 대한 모든 권한 부여
SHOW GRANTS FOR 'midnight'@'%';
이전에 진행했던 이벤트 스토밍
을 통해 정리된 Aggregate
의 Entity
를 기준으로 Table
을 만들어 논리적/물리적 DataBase 설계를 진행하였습니다.
확실히 이벤트 스토밍
을 통해서 이벤트를 정리하니 DB 연관 관계를 손쉽게 연결했어요🤣🤣!
즐겨찾기
테이블은 생성과 삭제가 빈번하게 발생할 것 같아 복합 키
로 구성하였습니다.
게시글
, 댓글
, 이미지
, 회원
에서 행 삭제가 이루어지지 않고 상태 값
으로 삭제 여부를 판단합니다. 그 이유는, 악성 사용자의 악의적인 행위를 삭제하지 않고 기록하기 위해서입니다.