대여 시스템 - DB - 논리 모델링 구축 해보기
이번 대여 시스템 프로젝트에서는 로그인 / 리뷰 / Q&A 등록을 맡았다.
이전 프로젝트에서 형상 관리를 해봤고, DB 설계의 중요성과 전체적인 시스템을 이해하는 게 중요하다고 느껴져,
이번엔 DBA를 맡게 되었다.
프로젝트가 끝난지 얼마 되지는 않았지만 급한 마음에 대략적인 DB를 설계해봤다.

추가 해야할 테이블도 있겠지만 일단 정말 필요할 거 같은 항목들로 구성해봤다.
나의 역할은 DBA이지만 팀원간 각자 맡은 기능에 대해서 직접 짜기로 얘기가 되어 있었다.
하지만 전체적인 흐름을 보다 정확히 이해하고 싶은 마음에 모두 짜봤다!

일단 내가 맡은 기능 중 로그인은 자체로그인 + 소셜 로그인 기능을 추가했다.
요즘 소셜(구글 , 카카오 , 네이버)를 이용한 회원으로 관리하는 사이트가 대부분이므로 이 기능은 꼭 넣어보고 싶었다.
소셜 로그인은 매우 생소하여 서칭해본 결과,
'소셜로 이용하기'를 누르면 관련 사이트로 이동하고, 아이디 비밀번호 입력 시 소셜 사이트에서 엑세스 토큰(아이디 , 이메일 등) 정보가 넘어와 회원 테이블에 저장되는 시스템이다.
최초 회원 가입은 위와 같은 방식으로 진행되고, 추후 로그인 시에는 저장된 토큰으로 데이터를 불러와 로그인 하면 된다.
포스트는 리뷰와 Q&A 를 모두 사용하는 테이블인데 중복된 내용이 많으므로 포스트 종류로 구분지어 사용하면 효율적일 거라 생각했다.
(예를들어, 포스트 종류 0 : 리뷰 작성 / 포스트 종류 1 : Q&A 작성)

댓글 테이블 설계할 때가 시간이 가장 오래 걸렸는데 대댓글 기능 때문이다.
일단 포스트 번호 / 포스트 종류 / 댓글 번호를 복합 식별자로 구분였다.
댓글 번호는 포스트 번호와 종류 상관없이 작성 할 때마다 Auto Increment 적용할 예정이다.
댓글과 대댓글 작성 시, 상위 댓글을 어떻게 하면 특정할 수 있을까 고민하다가 넣게 된 게,
댓글 레벨과 상위 댓글 번호이다.
- 상위 댓글 예시 -
예를 들어 댓글이 두개 (댓글 번호 2) 적혀 있는 상태에서 댓글 번호 2번에 대한 댓글을 추가할 때,
자동적으로 번호 3번이 채번되는데(댓글번호) 상위 댓글을 특정할 수 있는 댓글 번호를 입력한다(댓글 번호2)
- 댓글 레벨 예시 -
최초 댓글 (lv1) 그 댓글에 댓글(lv2) 그 댓글에 댓글에 댓글 (lv3)
( 대댓글 작성할 때 상위 댓글을 특정해야 함.
최초 작성 : Lv1 그 다음 Lv2 이런식 / 다른 사람이 최초 작성해도 lv1 이렇게 구분함, 어차피 제일 최상위는 댓글번호)

이런 식으로 댓글 번호 / 상위 댓글 / 댓글 레벨로 작성자와 상위 댓글을 특정할 수 있다.
첨부 파일 엔터티를 따로 분류한 이유는 확장성도 있겠지만 제공자의 상세 페이지 업로드 / 사용자의 리뷰 사진 첨부를 효율적으로 사용하기 위해 구성하였다.
첨부파일 종류가 00이면 리뷰에 올리는 사진 / 01이면 상세 페이지 업로드인 셈이다.
추가로 내가 맡은 기능은 아니지만, 대여 시스템의 핵심은 결제라고 생각하여 결제 /정산 쪽도 구성해 보았는데
팀원들과 상의 후 수정할 건 수정할 예정이다.