본문 바로가기
개발일지_development diary/YSit

YSit [2] - 도메인 설계하기

by YES_developNewbie 2022. 12. 23.

기획을 마쳤으니 나는 바로 도메인을 설계했다. 주요 기능을 나눠보면 게시판, 방과후 신청, 기자재 대여, 상담 신청, 유저 기능이 있다.

 

일단 유저기능은 그대로 테이블로 만들어서 아이디, 패스워드, 이름 등으로 만들었다. 그런데 선생님들도 아이디가 있어야하기 때문에 관리자 권한을 어떻게 할까 고민하다가 선생님과 학생 계정, 관리자 계정 둘로 나누기로 결정했다. 그렇게 되면 관리자 권한이 필요한 선생님들께서 다소 불편해 하실 수 있으나, 모든 선생님께 관리자 권한을 모두 드리는 것보단 나은 것 같아서 테이블을 둘로 나누기로 했다. 

노션에 기록한 유저테이블 정리
노션에 정리한 관리자테이블 정리

게시판 기능은 전에 만들었던 기능이기도 해서 빠르게 설계할 수 있었다. 게시판(카테고리)과 게시물로 나누고, 게시판 기능에는 댓글 기능도 있어야하기 때문에 댓글 테이블도 만들기로 했다.

게시물과 다른 테이블의 연관관계를 살펴보면, 먼저 게시물과 게시판은 게시물이 하나의 게시판을 바라보고, 게시판은 여러개의 게시물을 바라보기 때문에 M:1 관계이다. 그리고 게시물과 댓글은 한 게시물에 여러개의 댓글이 가능하고, 댓글은 하나의 게시물을 바라보기 때문에 이 두 테이블은 1 : M 관계이다. 그리고 유저와의 연관관계는 한 유저가 여러 게시물을 작성할 수 있고, 한 게시물이 한 유저를 바라보기 때문에 이 두 테이블은 M : 1 관계이다.

노션에 기록한 게시판, 게시물 테이블 정리
노션에 정리한 댓글테이블 정리

다음은 방과후 신청 기능이다. 이 기능은 처음엔 방과후 신청을 받는 테이블만 두면 될 것이라고 생각했는데 그러면 방과후 신청은 학생 여러명에게 받기 때문에 방과후신청 테이블과 유저 테이블이 서로 1 : M 관계로 바라보기 때문에 M : N 관계가 되어버린다. 테이블의 연관관계가 다대다 관계가 되면 PK가 없어져버린다. 즉 데이터의 중복이 생겨서 데이터를 참조할 때 둘 중 어떤 테이블을 참조할지 애매해진다. 그렇기에 이 두 테이블의 다대다 관계를 풀어줘야 한다. 방과후 신청테이블을 잘 살펴 보았더니 방과후 테이블과 방과후 신청 테이블로 나눌 수 있었다. 방과후에는 어떤 방과후가 있는지 기록하고, 방과후 신청에는 신청 내용만 기록하게 되면 방과후 테이블이 유저와의 연관관계가 방과후 신청 테이블이 연결테이블이 되면서 문제가 해결된다.

노션에 정리한 방과후 테이블 정리
노션에 정리한 방과후신청 테이블 정리

기자재 대여도 방과후 신청 기능과 비슷한 문제가 일어날 것을 대비해 먼저 기자재 테이블과 기자재대여 신청 테이블 두개로 나눴다. 기자재에는 기자재의 정보만 저장하고, 기자재대여신청 테이블에는 신청기록만 저장하도록 하면 방과후 신청 기능과 비슷하게 기자재대여 신청 테이블이 연결 테이블이 되어 기자재와 유저의 다대다 관계가 해소된다.

노션에 정리한 기자재, 기자재대여 테이블 정리

 

상담 기능 또한 방과후 신청과 똑같다고 생각할 수 있으나 방과후는 여러개이고 상담은 진로상담 하나였기 때문에 상담 신청 테이블과 유저 테이블의 연관관계가 다대다 관계가 아닌 M : 1 관계로 볼 수 있었다.

노션에 정리한 상담테이블 정리

후기

글로 적으니 과정이 쉬워보이지만 생각보다 어려운 과정이었다... 전에는 기능 하나만 생각하고 설계를 했어서 쉬웠는데 이번에는 여러 기능을 생각하며 설계하니 생각보다 어려웠다. 하지만 한번 더 해보라고 하면 이번 경험이 있었기 때문에 보다 쉽게 설계할 수 있을 것 같다.