Skip to content

06 ‐ 01 ‐ Board Wiki

Ryu(Paul) edited this page Nov 9, 2023 · 1 revision

게시판 모듈 아키텍처 문서

목차

  1. 비즈니스 요구사항
  2. 아키텍처 설계
  3. API 엔드포인트 설계
  4. 다른 모듈과 상호작용 포인트

비즈니스 요구사항

목적

  • 팀 게시판으로 게시글을 생성, 관리, 삭제할 수 있는 REST 기능을 구현한다.
  • 팀 게시판으로 게시판을 생성, 관리, 삭제할 수 있는 REST 기능을 구현한다.
  • 모집 게시판으로 스터디 및 프로젝트 모집글 작성, 관리, 삭제 기능과 옵션을 통해 조회할 수 있는 REST 기능을 구현한다.
  • 모집 게시글 작성시 작성자가 모집을 위한 인터뷰를 작성, 수정, 편집하고 지원자가 응답을 작성할 수 있는 REST 기능을 구현한다.

요구사항

기능명세

팀 게시판

  • 팀 리더는 팀 게시판을 생성할 수 있다.
  • 게시판 생성시 게시판의 제목을 설정할 수 있다.
  • 게시글의 제목과 내용은 반드시 존재해야 한다.
  • 공지사항과 게시물은 팀내부에서 공개를 원칙으로 하되 전체공개를 선택할 수 있다.
  • 게시판은 생성 개수에는 제한이 없다.
  • 팀 구성원은 각 게시판에 게시물을 작성할 수 있다.
  • 게시물의 작성자는 게시물을 수정, 삭제할 수 있다.
  • 클라이언트 요청에 따라 게시물 페이지를 전달한다.(페이지네이션)
  • 게시물의 제목, 내용, 작성자 컬럼을 기준으로 검색이 가능하다.
  • 게시판 삭제시 포함된 모든 게시물 및 파일이 함께 삭제된다.

모집 게시판

  • 유저는 모집게시글을 작성할 수 있다.
  • 모집게시글을 작성하면 유저가 작성한 값을 토대로 게시글이 작성된다. 이때 상태는 "모집중"으로 자동으로 설정된다.
  • 작성자는 모집 기간, 지역, 운영 형태, 모집 인원과 역할을 설정할 수 있다.
  • 모집게시글이 작성되면 팀이 생성되고 작성자가 팀 리더로 설정된다.
  • 모집 게시글을 클릭하면 해당 정보가 조회된다.
  • "지원하기"를 누르면 작성자가 작성한 인터뷰 목록이 조회된다.
  • 지원자는 답변을 작성하고 제출한다. 제출하면 recruitement Applicant List에 저장된다.
  • 이 리스트의 size는 현재 모집게시글의 지원한 사람의 수가 된다.
  • 일정한 사람이 해당 게시글을 지원했다면 작성자는 모집자중 인원을 선택하여 팀을 구성할 수 있다.
  • 팀을 구성하여 리더가 모집 완료 버튼을 누르면 모집게시글 상태는 "모집완료"로 자동으로 수정된다. 또한 해당 정보를 바탕으로 팀을 만든다.
  • 팀을 만들때 작성자를 팀리더로 만들고 그 외 유저들은 정보에 맞게 TeamUser에 넣는다.
  • 인원을 추가 모집 할 때는 기존의 모집글 내용을 수정 후 status를 수정하는 방식으로 한다.

성능명세

  • 검색 빨리....????
  • 기타 등등 고려해봄직한 내용

아키텍처 설계

모듈 구성

팀게시판

  1. Controller : HTTP 요청을 처리한다. -createBoard -getBoards -getBoard -updateBoard -deleteBoard
  2. Service : 비즈니스 로직 수행
  3. Repository : 데이터 저장소와 상호작용을 담당한다.

모집게시판

  1. Controller : HTTP 요청을 처리한다. -createRecruitement -getRecruitements -getRecruitement -updateRecruitement -deleteRecruitment
  2. Service
  3. Repository

데이터 모델

ERD 게시판 요약 ERD

  1. board

    • id : 게시글 고유 id
    • board_name : 게시판 제목
    • user_id : 게시글 작성자 id
    • team_id : 팀 id
    • title : 게시글 제목
    • content: 게시글 내용
    • hit : 조회수
    • thumbs_up : 좋아요 수
    • createdAt : 생성일자
    • updatedAt : 수정일
    • tag : 태그(콤마(,)로 구분된 string으로 저장된다.)
  2. board_file_list

    • id : 파일 고유 id
    • board_id : 게시판 id
    • uri : 파일 경로
    • type : 파일 타입
    • original_name : 원본파일이름
    • thumbnail_uri : 썸네일 경로
  3. recruite_board

    • id : messageIndex의 값으로, 빠른 접근을 위한 구조 _ applicants : 지원자 리스트
    • total : 모집 인원
    • due : 진행 기간
    • region : 지역
    • place : 진행 방식(네이밍 다시 할 필요 있음)
    • status : 상태(모집전, 모집중, 모집완료)
  4. recruite_board_file_list

    • id : 파일 고유 id
    • board_id : 게시판 id
    • uri : 파일 경로
    • type : 파일 타입
    • original_name : 원본파일이름
    • thumbnail_uri : 썸네일 경로

-------------------------------하위 인터뷰 항목은 테이블 구조에 대하여 논의가 많이 많이 빨리 빨리 필요함------------------- 5. interview - id : 항목 id - applicant_list : 지원자 list - question : 항목명 - type : 항목 타입(객관식, 주관식, 선형배율, 다중선택 등)

  1. options

    • id : 항목 id
    • order : 옵션 번호
    • option : 옵션 내용
  2. answer

    • interview_id : 항목 id
    • answer : 응답 내용

에러 처리 전략

  • tilte, content, name 등 주요 column은 Not Null로 설정
  • user 권한 확인 로직 포함

API 엔드포인트 설계

모집게시글

  1. 게시글 생성 : POST /recruitment/
  2. 게시글 수정 : PUT /recruitment/${study_id}
  3. 게시글 리스트 반환 : 'GET' /recruitments?sort=latest&page=1&pagesize=9&due=1&region=김포&type=online&step=before&tag=java,spring,react
  4. 게시글 반환 : 'GET' /recruitment/${study_id}
  5. 게시글 삭제 : 'DELETE' /recruitment/${study_id}
  6. 담기 버튼 : 'POST' /recruitment/favorite/${study_id}

인터뷰

  1. 인터뷰 저장 : 'POST' /study/interview/${board_id}
  2. 인터뷰 수정 : 'PUT' /study/interview/${interview_id}
  3. 인터뷰 리스트 반환 : 'GET' /study/interview/${interview_id}

응답

  1. 응답 저장 : 'POST' /study/interview/answer/${interview_id}
  2. 응답 수정 : 'PUT' /study/interview/answer/${interview_id}
  3. 응답 리스트 반환 : 'GET' /board/interview/answer/${interview_id}

팀 게시판

  1. 게시판 생성 : 'POST' /board/
  2. 게시판 수정 : 'PUT' /board?name="자유게시판"
  3. 게시판 삭제 :

게시글

  1. 게시글 생성 : 'POST' /board/${team_id}
  2. 게시글 수정 : 'PUT' /board/${board_id}
  3. 게시글 리스트 반환 : 'GET' /boards?sort=latest&page=1&pagesize=9&category="제목내용"&keyword="키워드"
  4. 게시글 반환 : 'GET' /board/${board_id}
  5. 게시글 삭제 : 'DELETE' /board/${board_id}

다른 모듈과 상호작용 포인트

프로필 모듈

  • 작성자 프로필 탐색 메소드 필요

팀 모듈

  • 소속 팀 탐색 메소드 필요

알람 모듈

  • 알림 DB 쪽으로 쪽지 내용을 전달하기 위한 메소드 필요
Clone this wiki locally