이제 프로젝트 빌드까지 성공했으니, 데이터베이스를 정리할 때입니다.
저희 러닝 하이에서는 `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 연관 관계를 손쉽게 연결했어요🤣🤣!

즐겨찾기 테이블은 생성과 삭제가 빈번하게 발생할 것 같아 복합 키로 구성하였습니다.
게시글, 댓글, 이미지, 회원에서 행 삭제가 이루어지지 않고 상태 값으로 삭제 여부를 판단합니다. 그 이유는, 악성 사용자의 악의적인 행위를 삭제하지 않고 기록하기 위해서입니다.