본문 바로가기

교육/항해99+ 백엔드 2주차 - 클린아키텍쳐

2주차 과제 - 1. 엔터티 분석

목표

항해 플러스 토요일 특강을 신청할 수 있는 서비스를 개발합니다.
특강 신청 및 신청자 목록 관리를 RDBMS를 이용해 관리할 방법을 고민합니다.

 

 

목표 분석

- 특강이 열리는 날짜는 토요일이며 토요일은 매월 여러번 존재한다.
- 특강을 매주 신청하는 것인지 월마다 한번에 신청하는 것인지는 미지수이다.
- 특강 신청 서비스는 여러가지 엔티티로 구성되어 있을 것이다.

 


특강을 신청하려면? 

특강이 존재해야 한다. - lecture(강의) Entity 
신청자가 존재해야한다. - user(사용자) Entity

 


lecture의 역할


lecture는 강의를 뜻한다.
강의는 강의ID와 강의자ID, 강의 시간을 가진다.(필수인 것으로 보이는 컬럼)

강의는 30명의 중복되지 않은 수강생이 들을 수 있다.
처음에는 강의는 30명의 수강생의 id 리스트를 가진 컬럼을 사용하려고 했는데 String을 넣었다 뻈다 하면 뭔가 비효율이 발생할 것 같은 생각이 들었다. 그리고 검색과 수정(강의자가 신청을 취소)시 느릴 것 같았다. -> lecture registation table을

따로 만들어서 강의 id로 수강생 리스트를 관리하자.

 

User의 역할 

 

User는 사용자(회원)을 뜻한다.
회원으로써의 역할.
userId로 서로 구분한다.
username은 중복될 수 있다.

수강생은 회원이다.(처음에는 user에 type으로 강사와 회원을 나누려고 했지만 
한 강사는 여러 강의를 할 수 있다.

수강생은 강의를 수강한다.
한 수강생은 여러 강의를 수강할 수 있다.

2. Instructor - 강사 테이블

처음에는 User 테이블에 강의자와 사용자를 type으로 나누려고 했다. 단순히 주어진 문제만 생각한다면 User와 Instructor는 분리하는 것이 더 나을 것 같다고 생각했다.


3. Attendent(User) - User 테이블

User table로 id와 이름으로 구성되어 있다.

 

 

ERD 만들기 - 아래 블로그를 참조해서 만들어 봤다.

https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81-1N-%EA%B4%80%EA%B3%84-%F0%9F%93%88-ERD-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8

 

📋 데이터 모델링 개념 & ERD 다이어그램 작성 💯 총정리

데이터 모델링 이란? 데이터 모델링이란 정보시스템 구축의 대상이 되는 업무 내용을 분석하여 이해하고 약속된 표기법에 의해 표현하는걸 의미한다. 그리고 이렇게 분석된 모델을 가지고 실제

inpa.tistory.com

 

 

개념 모델

   개념 모델은 아래와 같이 작성하였다. 강의 id별 limit 카운트는 조회 가능 여부를 빠르게 할 수 있으면 좋을 것 같아서 넣었다. 나머지는 한 테이블에 필수로 들어가야 할 것 같은 컬럼만 넣었다.

 

 

ERD

 

   ERD를 만드는데 고민이 생겼다. 강의 신청 테이블에 PK(Primary Key)는 뭐로 만들어야할까에 대한 고민이었다. 위에서 강의신청의 컬럼들은 3개 모두 중복될 수 있는 컬럼들이다.(강의 id, 수강생 id, 신청 시간), 그래서 컬럼 여러개를 PK로 설정하는 방법을 생각했는데 속도면에서 어떨지... 이건 멘토링을 받아봐야할 것 같다. (신청시간 + 수강생 id) or (신청시간 + 강의 id) or (신청시간 + 수강생id + 강의id)

 

 

 

 

 

아마 내 구현 순서가 틀렸을지 모른다. 왜냐하면 클린 레이어드 아키텍처에서는 Service가 중심이 되기 때문이다. Service를 먼저 고민하고 그 후에 DB를 설계 해야 됐을 것 같다.

 

다음 포스팅은 Service 설계를 하려고 한다.