🏹 데이터 모델링하기 앞서
어느 정도 기획이 마무리 되었기 때문에 데이터 모델링 단계로 넘어가보자. 데이터 모델링은 정답이 없다. 같은 서비스에 대해 모델링을 진행해도 누가 했냐에 따라 다른 결과물이 나올 수 있다. 하지만 요구사항을 충분히 분석하고 근거 있는 의사 결정 과정을 거쳐 데이터 모델링을 진행한다면 개발 과정이 원활할 것이다. 초기에 설계를 잘못한다면, 개발 중간에 전부 뜯어고쳐야하는 불상사가 발생할 수 있다.
이전 글에서 설계한 화면을 보고 대략적인 기능에 대해 언급했다. 이번 글에선 좀 더 심도 있는 요구사항을 분석 해보고, 이에 맞게 데이터 모델링을 진행해보겠다.
🎰 요구사항 분석
이전 글 내용과 비슷한 점이 많을 예정이다. 하지만 이전 글은 디자인과 대략적인 기능에 초점을 맞췄다면, 해당 글은 요구사항 명세 및 분석에 초점 맞췄다는 것이 다르다.
로그인/회원가입 화면
- 기존 회원이 아닌 사용자는 회원가입을 먼저 진행해야 한다.
- 회원가입을 진행하기 위해선 회원가입 폼의 모든 필드를 작성해야 한다.
- 잘못된 필드 입력 시 알람창 및 경고 문구를 띄우고 다음 단계 진행을 하지 않는다.
- 이메일 포맷을 확인한다.
- 비밀번호는 8자 이상이어야 하고, 숫자/영어/특수 문자로 구성돼야 한다.
- 이름은 4글자 이하의 한글이어야 한다.

홈 화면
부원 전용
- 배너는 일정 시간마다 바뀌어야 한다.
- 출석 현황에는 출석 유형을 구분하여 표시한다.
- (대체)출석: 초록, 지각: 노랑, 결석: 빨강
- 출석하기에 앞서 현재의 출석률과 해당일 운동 지점을 명시한다.
- 출석하기를 누르면 정기운동 종료시간(21시)까지 비활성화 되고 회색으로 바뀐다.
- 한 주에 여러 번 출석할 수 있고, 가장 좋은 출석이 해당 주의 출석이 된다.
- 좋은 출석: 출석 > 대체 출석 > 지각 > 결석
- 지각 3회는 결석 1회로 간주한다.
- 출석 내역을 통해 상세 내역을 확인할 수 있다.
- 신입 기수와 전 기수는 매주 출석을 해야하고 출석률 80%를 채워야 다음 기수 활동을 이어 나갈 수 있으며, 나머지 기수는 한 학기에 한 번만 출석을 해도 된다.

운영진 전용
- 운영진은 출석하기 기능 자체가 없기 때문에 캘린더에서 출석 현황을 볼 수 없다.
- 운영진은 부원이 요청한 출석을 수락하거나 거절할 수 있다.
- 실수로 잘못 누른 경우 관리자 페이지에서 직접 수정을 한다.
- 운영진은 동아리의 모든 부원 출석 상세 내역을 확인할 수 있다.

기록
내 기록
- 달력에는 기록이 존재하는 날을 모두 표시한다.
- 사용자가 기록이 있는 날을 표시하면 내역을 확인할 수 있다.
- 기록은 동아리 활동에서 진행한 운동만 기록할 수 있다.
- 모든 기록은 작성 후 수정할 수 있다.

랭킹
- 랭킹은 사용자가 입력한 기록을 바탕으로 집계를 한다.
- 주간 랭킹과 해당 기수 전체 랭킹을 확인할 수 있다.
- 랭킹은 본인이 푼 문제의 점수 합을 기준으로 한다.
- 본인이 등록한 볼더링 난이도의 문제는 1점, 아래 난이도의 문제는 0.5점, 본인의 난이도 보다 높은 문제는 2점이다.

마이페이지
- 마이페이지는 처음 가입 시 등록했던 정보들과 출석 및 운동 기록의 요약 내역을 확인할 수 있다.
- 변경 사항이 있을 경우 수정 버튼을 통해 수정할 수 있다.
- 수정 버튼 클릭 시 회원 탈퇴 버튼도 활성화 될 것이다.

📰 데이터 모델링
회원 관련 테이블

기록 관련 테이블

출석 관련 테이블

최종 데이터 모델링
