칵테일 커뮤니티 프로젝트 - 설계

김태훈·2023년 4월 1일
0

프로젝트1

목록 보기
1/4
post-custom-banner

이번에 수강하게 된 "캡스톤 설계 프로젝트" 에서 칵테일을 위한 커뮤니티 어플리케이션을 만들기로 했다. 이는 웹 어플리케이션으로 제작될 것이고, 프로젝트 진행 사항은 아래 노션 페이지에 꾸준히 기록중이다.
백엔드를 담당하였으므로, 백엔드 위주로 설계를 정리하겠다.
노션페이지

1. DB 설계

1. MySQL 선택 이유

이번 프로젝트에서 DB는 MySQL (RDBMS) 을 사용할 예정이다.

RDBMS를 사용하게 된 이유는 간단하다.

우리는 스키마가 매우 뚜렷한 기능을 구현하게 될 것이다.
각 사용자 별로, '회원'인지, '조주기능사/바텐더' 인지 역할이 뚜렷하게 구별되며, 이에 따라 커뮤니티에 렌더링될 회원정보 컴포넌트가 달라진다.

또한, 커뮤니티 기능을 구현할 때, 카테고리가 분명하므로 정의된 스키마를 바꾸지 않을 확률이 크다.

게시글 별로 '좋아요,별로에요' 기능이 존재함과 더불어, User별로 MyPage를 구현하여 각 사용자들이 어떤 글을 작성하였는지, 어떤 글에 좋아요를 눌렀는지를 보게하여, "칵테일 정보 공유" 라는 커뮤니티의 목적성에 맞는 구현을 하기 위해 뚜렷한 스키마를 사용하는 관계형 데이터베이스는 필수라고 생각했다.

그중에서 무료이고 대중적인 오픈소스 MySQL을 선택하였다.

2. DB 구현

멍청하게 USER table에 게시글 아이디로 Foreign Key를 둘 미련한 생각을 했던 나 자신을 반성하면서.. 중복되잖아 !!

1. USER

  • 회원 번호 (PK)
  • 닉네임
  • 이메일
  • 비밀번호
  • 회원 등급
    • 일반회원 (3레벨의 등업절차 (activation)
    • 바텐더(조주기능사)

2. COCKTAIL_RECIPE

  • 칵테일 번호 고유 ID (PK)
  • 칵테일 이름
  • 칵테일 이미지
  • 기본 레시피 정보 (재료 포함)
  • 도수 ?
  • 색깔 ?

3. RECIPE_REPL (유저가 게시한 레시피)

  • 레시피 댓글 고유 ID (PK)
  • 칵테일 번호 ID (FK)
  • 레시피 작성한 USER 회원 번호 (FK) -> USER
  • 댓글 내용
  • 도수 ?
  • 색깔 ?
  • 좋아요 수
  • 별로에요 수

4. RECIPE_LIKE

  • 레시피 좋아요 고유 ID (PK)
  • 레시피에 좋아요 한 회원 번호 (FK) -> USER
  • 레시피 댓글 고유 ID (FK) -> COCKTAIL_RECIPE

5. COMMUNITY

  • 게시글 고유 ID (PK)
  • 게시글 작성한 회원의 번호 (FK) -> User
  • 좋아요 수
  • 별로에요 수
  • 게시글 내용
  • 커뮤니티 카테고리 -> (추후 카테고리별 양식에 따라 DB 추가 생성 => 게시글 내용 관련 RDB 생성)

6. COMMUNITY_REPL

  • 커뮤니티 댓글 고유 ID (PK)
  • 댓글 단 게시글 ID (FK) -> COMMUNITY
  • 댓글 단 USER 회원번호 (FK) -> USER
  • 댓글 내용

7. COMMUNITY_LIKE

  • 게시글 좋아요 고유 ID (PK)
  • 게시글에 좋아요 한 회원 번호 (FK) ->USER
  • 게시글 고유 ID (FK) ->COMMUNITY

8. MAP_INFORMATION

지도 API BAR 정보 뽑히는 거 보고 DB 설정

2. 기능 구현

이번 프로젝트에서 구현할 기능은 다음과 같다.

1. User

  1. 회원가입 / 로그인
    1. 닉네임
      1. 닉네임 중복확인
    2. 이메일
      1. 이메일 인증
    3. 비밀번호
  2. 회원관리
    1. 회원등급
      1. 바텐더(조주기능사) → 자격증 인증 필요
      2. 밑 사진에서 고양이 지우고 칵테일이미지 넣는 느낌으로 4단계 분류 (바텐더 포함)

2. Recipe

  1. 목록
    1. 보기방식 : 카드형
    2. 정보: 칵테일 이름, 칵테일 이미지, 추천 / 비추천 수
    3. 검색 기능
    4. 정렬 기준
      • 추천 많은 순 (기본)
      • 최신순
    5. 필터
      • 도수(도수 기준 정해서 해당하는것만 보여주기)
      • 색깔(빨, 주, 노, 초, 파, 보, 갈, 검, 투명, 복합)
      • *후보 - 베이스, 용량, 조주방법, 잔, 재료수
    6. 추천 / 비추천 기능
  2. 상세 페이지 ( <1.목록> 에서 누르면 나오는 페이지 )
    1. 칵테일 이름, 칵테일 이미지, 레시피 정보 (재료 포함), 추천 / 비추천 수, 도수, 색깔
    2. 추천 / 비추천 기능
    3. 게시글 - 코멘트(댓글창)
    4. 맛이나 이름 유래같은 건 논의 필요
  3. 칵테일 레시피 추가 페이지 - 추후 논의
    1. 칵테일 이름 → 텍스트 인풋
    2. 칵테일 이미지
    3. 재료, 레시피
      1. 재료 종류, 양 (단위 - oz, ml, 비율)
    4. 색깔 - select

3. Community

  1. 카테고리
    1. 칵테일 추천
      1. 칵테일 이름
      2. 추천 이유
      3. image
    2. 칵테일 질문과 답변
      1. 질문 입력 칸
      2. image
    3. 칵테일 리뷰(직접 제조)
      1. 레시피 select
      2. 후기 (text)
      3. 추천/비추천 선택
      4. image
    4. 칵테일 바 리뷰(분위기, 맛, 바텐더 능력?등)
      1. 가게이름
      2. 가게 위치 ⇒ Map API
      3. 평점
      4. 후기(text)
      5. image
    5. 자유
      1. text
      2. image
  2. 댓글 기능 - 일반적으로 구현

4. 지도 API

  1. 바 정보 찾기

3. 아키텍쳐

1. 클라이언트 (프론트) - 리액트 활용

2. 서버 (백엔드) - Node.js 환경의 Express 사용

추가로, image 저장을 위하여 Multer 모듈 사용하여 db에 image path를 저장하고 서버의 File System 활용하여 이미지를 저장

profile
기록하고, 공유합시다
post-custom-banner

0개의 댓글