💡 Projects/익명고민상담소 [대나무숲]

[대나무숲] 1. 기능 명세서 / 와이어 프레임 / DB schema

오늘 ONEUL 2022. 11. 7. 19:05
  • 항해99 본과정에 앞서 사전 스터디를 진행하며 웹개발 종합반 강의를 완강했다.
  • 그 강의에 기반하여 팀원들과 토이 프로젝트를 진행하기로 결정!
  • 늦게 합류한만큼 본과정 시작 전까지 시간이 많지 않기에 기본 게시판 CRUD를 구현해보기로 하였다.

 


 

프로젝트 주제 선정

  • 대나무숲 - 익명 고민 상담소
    : 익명으로 고민을 털어놓고, 익명으로 해답을 알려주는 상담소(게시판)

 


 

기술 스택

  • Frontend : HTML5, CSS3, Bootstrap5.0, JavaScript, Jquery, Ajax
  • Backend : Python, Flask
  • DB : MongoDB
  • Infrastructure : AWS EC2

 


 

기능 명세서

🚩 표시는 Option 기능

1. 고민 게시판

  1. 닉네임, 비밀번호, 제목, 내용, 작성 시간으로 고민 글 작성
  2. 메인 페이지에서 인기 조회순, 많은 댓글순, 최신순 등으로 나눠 게시글 리스트 보여줌
  3. 게시글을 수정하거나, 삭제하려면 작성할 때 입력했던 비밀번호 필요
  4. 게시글 삭제는 정말 삭제할 건지 한번 더 묻기
  5. 🚩 카테고리(연애, 가족, 취업, 건강, 학교, 고민 등)

2. 댓글 기능

  1. 닉네임, 비밀번호, 댓글 내용, 작성 시간으로 고민에 대한 해답 작성
  2. 해당 댓글에 추천 누를 수 있고 추천수가 가장 높은 댓글 상단으로 올리거나, 백그라운드 색상 표시
  3. 게시글과 마찬가지로 댓글을 수정하거나, 삭제하려면 작성할 때 입력했던 비밀번호 필요

3. 검색 기능

  1. 키워드를 넣어 해당 키워드가 있는 게시글 검색
  2. 🚩 범위별(내용, 작성자, 댓글, 모두 포함 등) 검색

🚩 회원 기능

* 참고 자료

 


 

페이지별 와이어 프레임

  • 기능 명세서를 토대로 와이어 프레임 작성(Figma 사용)

 

1. 메인 페이지(고민글 리스트)

  • 고민 게시글을 한 번에 리스트 형태로 출력한다.
  • 인기순, 조회순, 최신순 버튼을 통해 리스트들을 정렬할 수 있다.
  • 상세 조회 페이지로 넘어갈 때마다 조회수가 +1 된다.

메인 페이지

 

 

2. 고민거리 작성 페이지(고민글 입력)

  • 제목, 닉네임, 비밀번호, 내용을 입력받아 DB에 저장한다.

고민거리 작성 페이지

 

 

3. 고민거리 상세 페이지(고민글 상세 조회)

  • 메인 페이지의 리스트에서 연결되는 상제 페이지이다.
  • DB에서 받아온 데이터를 알맞은 위치에 구성한다.
  • 고민글 수정, 삭제 시에는 기존 비밀번호와 일치하는지 확인한다.
  • 마찬가지로 댓글 작성, 수정, 삭제가 가능하도록 구현한다.
  • 댓글 추천 기능으로 해당 고민글의 베스트 답변을 유도한다.

고민거리 상세 페이지

 


 

DB schema

  • NoSQL의 DB schema 설계는 처음이었지만, 유연하게 수정이 가능해서 여러 시도를 많이 해보았다.
  • 대나무숲 서비스의 쿼리는 그다지 복잡하지 않고, 조회에 중점을 뒀기 때문에 Embedding 방식을 사용하였다.
  • One-to-Few 구조로 게시글 안 쪽에 댓글이 존재하는 형태이다.
  • 연산을 해야 하는 key 값인 board_id, view_count, comment_id, likes는 int형, 나머지는 String 형이다.
  • deleted_at key를 사용하여 게시글 데이터가 물리적으로 삭제되지 않도록 구현하였다.
    • deleted_at의 기본값은 null이다.
    • 사용자가 게시글을 삭제하면, deleted_at을 현재시간으로 update 한다.
    • 게시글 리스트 조회 시, deleted_at이 null인 값만 조회한다.
  • 참고자료 - 어떻게 mongoDB 스키마 설계를 해야할까?
{
    "_id": "ObjectId('mdkalsfmk2')",
    "board_id": 1,
    "nickname": "eunsol",
    "password": "1234",
    "title": "라면 먹을지 말지 추천좀",
    "desc": "지금 열두시고 저녁 안먹어서 배고픔 먹을까 말까?",
    "view_count": 23,
    "created_at": "2022-10-31 21:44:23",
    "deleted_at": NULL or "2022-11-04 23:44",
    "comment": [
                        {
                        "comment_id": 1,
                        "nickname": "gyo",
                        "password": "1234",
                        "desc": "먹으셈ㅇㅇ",
                        "create_at": "2022-10-31 21:44:23",
                        "likes": 11
                        }
             	   ]
}