티스토리 뷰
반응형
ERD
Entity(엔티티)
- 문제 관련 Entity(엔티티)
- Question (문제) : 가장 중심이 되는 엔티티로 문제에 대한 정보를 담는다. 인성문제와 적성문제의 문제 유형이 달라 추상클래스로 구현하고, 인성문제와 적성문제가 이를 상속하도록 구현하였다.
- AptitudeQuestion(적성문제) : 인성문제와 구별되는 적성문제만을 담는 엔티티다. 맞은 횟수와 제출한 횟수는 각 문제의 정답률을 계산하기 위해서 추가되었다.
- PersonalityQuestion(인성문제) : 적성문제와 구별되는 인성문제만을 담는 엔티티다. 하지만 인성문제는 독특한 문제 유형이 너무 많아 설계가 어렵고 그에 비해 인성문제에 대한 중요도가 떨어지는 점을 고려해서, 추후 개발할 예정이다
- ContentFile : 적성문제를 PDF 혹은 이미지로 제공하기 위해서 존재하는 엔티티다.
- ExplanationFile : 적성문제의 해설을 PDF 혹은 이미지로 제공하기 위해서 존재하는 엔티티다.
- Category : 여러 문제집들의 다양한 문제들을 분류 해놓기 위해서 존재하는 카테고리 엔티티다. 문제집 목차와 비슷하지만, 문제집들의 목차는 제각기 다를 수 있기에 분류를 하기 어렵다.
- BookContent (책 목차) : 문제집의 목차를 나타내는 엔티티다. 어떤 영역을 풀건지 혹은 채점할건지는 이 책목차의 소분류 기준으로 결정된다.
- Book : 책에 대한 정보를 담는 엔티티다.
- 회원 관련 Entity(엔티티)
- User : 가입한 회원의 정보를 담는다. 최근 웹 트렌드에 따라 사용자에게 최소한의 정보만을 받는다.
- Role : 회원 권한을 위한 엔티티다. (관리자 권한, 유저 권한 . . .)
- QuizRecord : 회원이 문제를 풀거나 혹은 채점을 한경우에 한 단위의 기록으로써 저장하는 엔티티다.
- Result : 하나에 QuizRecord에서 풀었던 문제들의 스냅샷 (수험생이 선택한 보기와 정답여부를 저장한다.)
- 게시판 관련 Entity(엔티티)
- Article : 게시글과 관련된 내용을 담는다. commentCount(달린 댓글의 갯수)를 추가하여서 댓글의 갯수를 파악할때 무리한 조회 쿼리를 하지 않고, 해당 열만 조회하도록 설계했다.
- ArticleContent : 무거울 수 있는 글의 내용과 관련한 엔티티를 따로 한다.
- Comment : 댓글과 관련된 내용을 담는다. 대댓글과 관련한 설계를 논의 해본 결과 대댓글을 구현하지 않는다. 대신 대댓글과 유사하게 특정 댓글에 답변을 한 경우, 그 유저의 Id를 replyUserId 열에 담아서 태그처럼 표시하도록 했다.
- CommentContent : ArticleContent와 같은 이유로 따로 관리한다.
- ArticleCategory : 글의 카테고리를 담는다. (ex 자유, Q&A, 공지, 정보 . . .)
- Board : 게시판의 정보를 담는다. (ex 자유게시판, FAQ게시판 . . .)
방향성 설정
화살표는 Entitiy들간의 방향을 나타낸다. ex)Question은 Category에게 방향성을 갖는다. Entity들간의 방향성 설정은 언제 해봐도 어렵고 혼란스럽다. 그래서 아래와 같은 기준으로 방향성 설정을 진행하였다.
- 방향성을 갖게 되었을때, 그래프 탐색의 큰 무리가 될 것같은 경우는 방향성 설정을 하지 않는다. 무리가 된다는 것의 기준은 페이징 처리가 필요한 경우를 말한다. (이런 경우는 방향성 없이 Repository로 해결한다.)
- A 엔티티에서 B엔티티의 그래프 탐색이 필요 할 것은 경우 진행한다. (그래프 탐색은 getter를 이용한 탐색)
반응형
'Project' 카테고리의 다른 글
웹 프로젝트 PAT - 06. Domain 설계 (2) (0) | 2018.12.30 |
---|---|
웹 프로젝트 PAT - 05. URL 설계 (0) | 2018.12.28 |
웹 프로젝트 PAT - 04. Repository 설계 (1) (0) | 2018.12.20 |
웹 프로젝트 PAT - 03. Domain 설계 (1) (0) | 2018.12.12 |
웹 프로젝트 PAT - 01. 기획 (0) | 2018.12.10 |
댓글