본문으로 바로가기

[PE-Community] 기능 정의 및 DB 설계

category Project/PE-Community 2023. 8. 22. 15:16
주제: 체육 활동 켜뮤니티

 

1. 요구사항 분석

[기본 기능]

  • 회원가입
  • 로그인
  • 회원 정보 수정
    • 닉네임과 비밀번호 수정 가능하다.
  • 회원 탈퇴 및 삭제
    • 회원 탈퇴 시 휴면 계정으로 전환한다.
    • 휴면 계정 상태인 회원의 글은 비공개 처리된다.
    • 휴면 계정 전환 기간이 1년 이상되면, 회원 데이터를 삭제하고 관련 데이터를 모두 삭제한다.
  • 게시판
    • 스포츠 종목 별로 게시판이 존재하고, 각 스포츠 종목 게시판 별로 일반 게시판이 존재한다.
  • 게시글 작성, 수정, 삭제, 조회
    • 게시글은 회원만 작성(및 등록)할 수 있다.
    • 회원은 자신이 작성한 게시글만 수정, 삭제가 가능하다.
    • 게시글은 모든 사용자가 읽을 수 있다.
    • 제목, 내용, 제목+내용, 회원 닉네임으로 게시글을 검색 할 수 있다.
  • 게시글 댓글 작성, 수정, 삭제, 조회
    • 회원만 댓글을 작성할 수 있다.
    • 회원은 자신이 작성한 댓글만 수정, 삭제가 가능하다.
    • 모든 사용자는 공개 댓글을 읽을 수 있다.
    • 회원은 비밀 댓글을 작성할 수 있다.
    • 해당 게시글의 작성자와 비밀 댓글 작성자만 비밀 댓글을 읽을 수 있다.
    • 댓글은 레벨 lv2까지 작성할 수 있다.
      • 댓글 레벨은 0부터 시작한다.
    • 댓글을 삭제할 경우, 댓글 자체를 지우지 않고 삭제된 상태로 보여준다.

 

[추후 기능]

  • 인원 모집
  • 시설 예약 사이트 연결

 

2. DB 설계

테이블 관계

  • 회원, 권한 1:1
  • 종목, 게시판 1:1
  • 회원, 게시글 1:N
  • 게시판, 게시글 1:N
  • 게시글, 댓글 1:N
  • 게시글, 파일 1:N

테이블 분석

 

3. 패키지 구조

계층형 구조 vs 도메인 구조

 

지금까지는 늘 계층형으로 패키지 구조를 만들었다. 이번에는 객체 지향과 ORM의 핵심이 되는 Entity 특성을 기반으로 하는 도메인 구조를 이용해볼 것이다. 

 

[패키지 구조]

└── src
    ├── main
    │   ├── java
    │   │   └── pe
    │   │       └── pecommunity
    │   │           ├── PecommunityApplication.java
    │   │           ├── domain
    │   │           │   ├── member
    │   │           │   │   ├── api
    │   │           │   │   ├── application
    │   │           │   │   ├── dao
    │   │           │   │   ├── domain
    │   │           │   │   ├── dto
    │   │           │   │   └── exception
    │   │           │   ├── post
    │   │           │   │   ├── api
    │   │           │   │   ├── application
    │   │           │   │   ├── dao
    │   │           │   │   ├── domain
    │   │           │   │   ├── dto
    │   │           │   │   └── exception
    │   │           │   └── model
    │   │           ├── global
    │   │           │   ├── common
    │   │           │   ├── config
    │   │           │   ├── error
    │   │           │   └── util
    │   │           └── infra
    │   └── resources
    │       └── application.properties