📝Day97(71)일차 WE_MOTIVATION_DIARY

김민재·2021년 10월 28일
0

빡코딩 다이어리

목록 보기
85/87
post-thumbnail

1. 공개 범위에 대한 모델링 설계 과정

1. 모델링 작업을 하던 중에 공개여부 관련 서비스가 이곳저곳에서 쓰인다는 것을 알게되어 테이블을 만들어서 추가를 한 상황

현재 링크드인에서 공개여부를 지정할 수 있는 부분은 총 3개로 1. 유저의 소개 정보, 연락정보, 경력정보 2. 글 작성 시 글 공개여부 3. 작성한 글에 달릴 댓글 공개 여부 정도로 나눠진다.
EX> 글작성 시 공개여부 UI

  • 댓글을 비공개로 했을 때 UI


2. 지금까지 검색하여 공개범위와 공개 상태와 관련된 테이블을 만들어 본 결과

  • 공개 여부에 따라 3가지 상태로 달라지는 '공개 상태' , 'public_status' 테이블을 만들어 컬럼으로 비공개, 친구에게만, 전체 유저에게를 만들어주어 boolean 형태로 값을 넣었습니다.
  • 특정 부분(유저 정보, 글, 댓글 등)에 대한 공개 여부 범위를 결정하기 위해서 공개 범위 테이블, scope_of_public'을 만들었습니다.
  • 'scope_of_public' 테이블의 컬럼으로 'public_status_id'(FK)를 만들어 "public_status" 테이블과 ''scope_of_public" 테이블이 1:1 관계로 참조하고 있습니다.

  • public_status 테이블과 scope_of_public테이블 엑셀 표

따라서 public_status 테이블과 공개하고자 하는 정보의 테이블을 1:N 관계로 표현하면 다음과 같이 해당하는 정보에 대한 공개여부를 표현할 수 있을 것같다는 판단하에 공개하고자하는 정보 1. 유저의 소개 정보, 연락정보, 경력정보 2. 글 작성 시 글 공개여부까지는 1:N으로 매칭

  • 결론적으로 포스트와 마찬가지로 댓글 역시 post에 포함된 영역이니 post 테이블에 post_scope_of_id와 같이 'comment_scope_of_id'컬럼을 만들어 참조키로 scope_of_public 테이블과 1:N으로 넣어주어서 공개여부에 대한 관계를 만들었다.

3. 최종적으로 수정한 사항

ENUM 테이블로 관리하기⚙️

  • 마찬가지로 ENUM을 통해 공개범위에 대한 상태를 넣어 이 id에 따라 비공개, 친구에게만, 전체 공개에 대한 구별을 해줄 수 있다.
  • 또한 댓글 역시 post에 포함되므로 여기서 상태를 통해 댓글의 공개여부 또한 관리해줄 수 있다.

참고) db 다이어그램 url

2.ENUM 테이블을 관계형으로 표현하기

ENUM을 사용해도 괜찮은 상황은 아래의 3가지로 좁혀진다.

  • 유일하고 변하지 않는 값을 저장할 경우
  • 절대로 연관된 정보를 저장할 필요가 없는 경우
  • 두 개 초과 20개 이하의 값을 다룰 경우
    따라서 ENUM 사용 문제는 개발/운영의 관점에서 적당한 합의점을 정해서 그에 따르면 되며 성능 문제는 그 문제가 수면 위로 떠오를 때 그 때 최적화를 진행하면 됩니다. 물론 그런 경우에도 참조 테이블 대신 ENUM 타입을 쓸 근거는 크게 없어인다.

2_1. 수정 전 ENUM 테이블

  • 기존에는 다양한 정보(유저 정보 및 글과 댓글)들의 공개범위를 관리하는 테이블을 Prisma의 ENUM 테이블로 만들어서 관리해보았습니다.

2_2. 수정 전 참조 테이블

  • 코드 리뷰를 받은 후 ENUM 테이블의 사용 문제는 개발/운영의 관점에서 적당한 합의점을 정해서 따르면 결정
    되지만 참조 테이블 대신 ENUM 타입을 쓸 근거가 있어야한다는 피드백을 받았습니다.
  • 따라서 ENUM 테이블 대신 참조 관계를 맺어줌으로서 ENUM 테이블의 구조를 대체하여 리팩토링을 했습니다.
    수정된 코드가, 이전보다 전체적으로 RDBS 데이터베이스의 특징을 살리면서 테이블 구조의 일관성 역시 유지할 수 있었으면서 Mysql에서 ENUM 테이블을 사용하는 경우에 대해 공부했던 기억이 있기에 기억에 남는 모델링으로 뽑았습니다.

참고한 글 ) MySQL의 ENUM 타입을 사용하지 말아야 할 8가지 이유

profile
자기 신뢰의 힘을 믿고 실천하는 개발자가 되고자합니다.

0개의 댓글