Skip to content

Teeeeeeeam/Recipe-BE

Repository files navigation

🍀 요리 공유소

스크린샷 2024-07-18 오후 3 03 12

📝 배포 주소

레시피 공유소: 레시피 공유소 바로가기
API 명세서 : Swagger 바로가기
레시피 공유소 노션 : 노션 바로가기
ERD : ERD 바로가기

🚩 프로젝트 간략소개

1️⃣ 냉장고 속 재료로 만드는 요리 레시피 공유 서비스

  • 요리 공유소는 집 냉장고에 있는 재료를 활용해 만들 수 있는 요리 레시피를 찾아 요리하고, 그 경험을 다른 사용자들과 공유할 수 있는 플랫폼입니다. 사용자는 자신의 냉장고에 있는 재료들을 입력하면, 해당 재료로 만들 수 있는 다양한 요리 레시피를 검색할 수 있습니다. 이를 통해 새로운 요리에 도전하고, 요리의 재미를 느낄 수 있습니다.

2️⃣ 주요기능

  • 재료 기반 레시피 검색: 사용자가 입력한 재료를 바탕으로 적합한 요리 레시피를 제안합니다.
  • 레시피 선택 및 요리: 사용자는 제안된 레시피 중 하나를 선택하여 요리를 만들 수 있습니다.
  • 후기 작성 및 공유: 요리를 완료한 후, 사용자는 요리 후기를 작성하여 다른 사용자들과 경험을 공유할 수 있습니다.
  • 다양한 요리 팁 제공: 각 레시피에는 요리를 더 맛있게 만들기 위한 팁과 노하우가 포함되어 있어, 요리 초보자도 쉽게 따라할 수 있습니다.

3️⃣ 기대효과

  • 이 서비스는 단순한 레시피 제공을 넘어, 사용자 간의 소통과 공유를 통해 요리에 대한 흥미를 지속적으로 유발시키는 것을 목표로 합니다.
  • 다양한 재료와 요리법을 통해 사용자들이 새로운 맛을 발견하고, 요리의 즐거움을 느낄 수 있도록 도와줍니다.

4️⃣ 프로젝트 기간

2024.03.15 ~ 2024.07.17

👥 팀원 소개

김민우 박상호 양승헌

@CHISANW

@hopak-e

@roel127

🖥 구현 이미지

재료와 카테고리를 통해 레시피 찾기

    ※ 카테고리 검색

    카테고리

    - 카테고리를 통해 레시피를 검색할 수 있습니다.


    ※ 재료 검색

    재료검색

    - 재료를 통해 레시피를 검색할 수 있습니다.


회원 가입
    회원가입

    - 회원가입 시 이메일 인증을 통해 회원가입이 가능하며, 중복된 아이디, 이메일, 닉네임이므로는 가입이 불가능합니다.


로그인 및 로그아웃
○ 로그인시 AccessToken은 로컬 스토리지를 통해서 저장되며 AccessToken은 쿠키의 저장됩니다.

    ※ 일반 로그인

    일반 로그인

    - 사이트에 회원가입한 아이디를 통해 로그인 가능합니다.


    ※ 소셜 로그인(구글, 카카오, 네이버)

    ※ 카카오 로그인 기준 ※
    소셜카카오 로그인

    - 소셜 로그인을 통해 로그인 시 최초 1회 자동으로 회원가입 후 로그인이 됩니다.


    ※ 로그아웃

    로그아웃

    - 로그아웃시 JWT 토큰과 쿠키를 만료

아이디/ 비밀번호 찾기

    ※ 아이디 찾기

    아이디 찾기

    - 회원가입 시 입력한 실명, 이메일을 통해 인증 후 아이디를 반환합니다


    ※ 비밀번호 찾기

    비밀번호 찾기

    - 회원가입 시 입력한 실명, 로그인 아이디, 이메일을 통해 인증 후 해당 회원이 존재 시 일정 시간 쿠키 발급 후 비밀번호 변경(변경 시 쿠키 삭제)


실시간 알림

    ※ 사용자 알림

    사용자알림

    - 게시글 댓글, 좋아요 사용 시 작성자에게 알림이 전송, 댓글, 좋아요 해제 시 알림 내역 삭제

    ※ 관리자 알림

    관리자알림

    - 관리자는 사용자가 문의사항 등록 시 관리자에게 문의사항 등록 알림 발송됩니다.

    ※ 알림 내역

    알림

    - 메인 페이지에서는 7개의 알림을 표시합니다.

    - 전체 보기 클릭 시 모든 알림 조회

    - 삭제를 통해 원하는 알림 내역을 삭제 가능합니다.


관리자 페이지

모든 어드민 기능에서 페이지네이션 방식은 무한 스크롤 방식을 사용

    ※ 대시 보드

    통계페이지

    - 현 사이트에 작성된 레시피 수, 게시글 수, 유저 수, 방문자 수, 통계표를 볼 수 있는 페이지입니다.


    ※ 사용자 관리

    사용자 추방_블랙리스트

    - 관리자는 사용자를 강제로 추방할 수 있습니다. 추방 시 가입한 이메일로 추방 안내 메일이 발송되게 되며, 추후 해당 이메일은 블랙리스트 등록되며 관리자가 해제하기 전까지 추방된 메일로는 회원가입이 불가합니다.


    ※ 문의사항 등록 알림

    관리자알림

    - 문의사항 등록 시 관리자에게 문의사항 알림이 전송됩니다.


    ※ 게시글 관리

    게시글관리

    - 게시글을 모두 조회할 수 있으며, 해당 게시글의 작성된 댓글을 모두 볼 수 있으며 댓글과 게시글에 대해 삭제 가능합니다.


    ※ 레시피 관리

    레시피 등록

    레시피등록

    - 관리자는 레시피의 대해서 새롭게 등록이 가능합니다.


    ※ 레시피 수정

    레시피수정

    - 관리자는 레시피에 대해서 수정이 가능하며, 조리 순서, 재료 등을 추가 가능합니다.


    ※ 공지사항 관리

    - 공지사항에 대해서 수정, 삭제, 등록이 가능합니다(이전과 동작 방식은 동일하여 참고 영상 생략)


    ※ 문의사항 답변

    문의 사항답변

    - 관리자는 문의사항에 대해서 답변이 가능합니다. 문의사항 답변 등록 시 사용자에게 알림이 가며, 이메일 받기 체크 시 이메일로도 답변 작성 알림이 전송됩니다.


    ※ 블랙리스트 관리

    - 관리자가 추방 시 블랙리스트의 추방한 이메일에 대해서 등록이 되며, 해당 이메일에 대해 차단해 제 여부를 선택합니다.(해제 기능은 삭제와 동일하여 사진 생략)

문의 하기
  • 로그인한 사용자 문의와, 비로그인한 사용자 문의가 존재(로그인 유뮤 차이)
  • ※ 문의 사항 등록하기

    문의 사항 작성

    - 문의사항에 대해서 질문 등록이 가능합니다. 이메일 알림 체크 시 해당 이메일로 답변 등록 시 알림 전송


    ※ 문의 사항 답변 등록시(이메일 알림 받기 선택시)

    문의 답변 등록시

    - 관리자가 답변에 대해 등록이 되었을 때 답변 작성 알림이 전송되며, 이메일 알림 체크 시 이메일로 답변 알림 전송됩니다.


    마이페이지

    ※ 마이 페이지 최초 접근시

    ■ 일반 로그인 사용자
    마이페이지 최초 접근 쿠키발급

    ■ 소셜로그인사용자
    소셜로그인 사용자 접근

    - 마이페이지 최초 접근 시 비밀번호 검증을 통해 마이페이지 접근 가능.

    - 비밀번호 검증 성공 시 20분간 채 접근이 가능한 쿠키 발급(소셜 로그인 사용자는 비밀번호 검증을 하지 않습니다.)


    ※ 닉네임 변경

    닉네임변경

    - 일반 로그인, 소셜 로그인 사용자는 닉네임 변경이 가능합니다.

    ※ 비밀번호 변경

    비밀번호 변경

    - 일반 로그인 사용자만 변경이 가능 합니다.


    ※ 이메일 변경

    이메일변경

    - 이메일 변경은 일반 로그인 사용자만 가능하며 소셜 로그인 사용자는 불가합니다.


    ※ 활동 내역

    ■ 작성한 글

    작성게시글

    - 작성한 게시글을 볼 수 있으며 수정 삭제 가능합니다.

    ■ 좋아요/즐겨찾기 내역

    - 게시글, 레시피의 좋아요 즐겨찾기 내역을 수정, 삭제, 조회 가능합니다.

    ■ 게시글 좋아요
    게시글 좋아요
    ■ 레시피 좋아요
    레시피 좋아요
    ■ 레시피 즐겨찾기
    즐겨찾기
    ■ 문의사항 내역
    문의사항

    회원 탈퇴

    ※ 사용자 탈퇴(소셜 로그인)

    소셜로그인탈퇴

    - 일반 로그인 사용자는 소셜 로그인가 동일 동작, 회원 탈퇴 시 사용자와 관련된 데이터 모두 삭제됩니다.


    요리 게시글

    ※ 게시글 등록

    ■ 레시피에서 게시글 등록

    레시피에서 게시글 바로등록

    - 레시피 상세 페이지에서 해당 레시피의 게시글을 바로 작성가능합니다.

    ■ 레시피 검색후 게시글 등록

    게시글따로 등록

    - 게시글 등록시 게시글명을 통해 검색후 선택한 레시피의 대해서 게시글이 등록가능합니다.

    ※ 게시글 수정,삭제

    ■ 비작성자 삭제시

    게시글 삭제시 작성자가 아닐시

    - 작성자만 게시글 수정, 삭제 가능하며 게시글 등록시 등록했던 비밀번호를 통해서 사용자 검증

    ※ 게시글 좋아요

    게시글 좋아요

    - 사용자는 게시글에 대해서 좋아요 기능을 사용 가능합니다.

    ※ 게시글 댓글

    댓글

    - 게시글의 댓글을 작성 가능합니다.


    🔧 기술 스택

    개발 / 테스트

    보안 / 모니터링

    DB

    Infra

    문서 / 협업 / 툴



    📟 AWS 아키텍쳐

    aws 서버 구성도.PNG

    🌞 CI/CD

    aws 서버 구성도.PNG

    💾 ERD

    RecipeReader.png

    🎯 트러블 슈팅

    📈 성능 개선

    📦 디렉토리 구조

    디렉토리 구조
    com
    └─ team
       └─ RecipeRadar
          ├─ domain   // 도메인 관련 디렉터리
          │  ├─ account  // 계정 찾기
          │  │  ├─ api
          │  │  ├─ application
          │  │  ├─ dao
          │  │  ├─ domain
          │  │  └─ dto
          │  ├─  blackList  // 블랙리스트
          │  │  ├─ api
          │  │  ├─ application
          │  │  ├─ dao
          │  │  ├─ domain
          │  │  └─ dto
          │  ├─ bookmark // 레시피 즐겨 찾기
          │  │  ├─ api
          │  │  ├─ application
          │  │  ├─ dao
          │  │  ├─ domain
          │  │  └─ dto
          │  ├─ comment      //댓글 관련
          │  │  ├─ api
          │  │  ├─ application
          │  │  ├─ dao
          │  │  ├─ domain
          │  │  └─ dto
          │  ├─ email        // 이메일 관련
          │  │  ├─ api
          │  │  ├─ application
          │  │  ├─ dao
          │  │  ├─ domain
          │  │  ├─ dto
          │  │  └─ event      // 이메일 이벤트
          │  ├─ Image       //이미지 관련
          │  │  ├─ application
          │  │  ├─ dao
          │  │  └─ domain
          │  ├─ like     // 좋아요 관련
          │  │  ├─ api
          │  │  ├─ application
          │  │  ├─ dao
          │  │  ├─ domain
          │  │  └─ dto
          │  ├─ member     // 사용자 관련
          │  │  ├─ api
          │  │  │  ├─ admin
          │  │  │  └─ user
          │  │  ├─ application
          │  │  │  ├─ admin
          │  │  │  └─ user
          │  │  ├─ dao
          │  │  ├─ domain
          │  ├─ notice       // 공지사항 관련
          │  │  ├─ api
          │  │  │  ├─ admin
          │  │  │  └─ user
          │  │  ├─ application
          │  │  │  ├─ admin
          │  │  │  └─ user
          │  │  ├─ dao
          │  │  ├─ domain
          │  │  └─ dto
          │  ├─ notification     // 알림 관련
          │  │  ├─ api
          │  │  ├─ application
          │  │  ├─ dao
          │  │  ├─ domain
          │  │  └─ dto
          │  ├─ post     // 게시글 관련
          │  │  ├─ api
          │  │  │  ├─ admin
          │  │  │  └─ user
          │  │  ├─ application
          │  │  │  ├─ admin
          │  │  │  └─ user
          │  │  ├─ dao
          │  │  ├─ domain
          │  │  └─ dto
          │  ├─ qna      // 문의사항 관련
          │  │  ├─ api
          │  │  │  ├─ admin
          │  │  │  └─ user
          │  │  ├─ application
          │  │  │  ├─ admin
          │  │  │  └─ user
          │  │  ├─ dao
          │  │  │  ├─ answer   // 답변
          │  │  │  └─ question   // 문의사항
          │  │  ├─ domain
          │  │  └─ dto
          │  ├─ recipe       // 레시피 관련
          │  │  ├─ api
          │  │  │  ├─ admin
          │  │  │  └─ user
          │  │  ├─ application
          │  │  │  ├─ admin
          │  │  │  └─ user
          │  │  ├─ dao
          │  │  │  ├─ ingredient        // 재료
          │  │  │  └─ recipe
          │  │  ├─ domain
          │  │  │  └─ type
          │  │  └─ dto
          └─ visit       // 방문자 집계
             ├─ api
             ├─ application
             ├─ dao
             ├─ domain
             └─ dto
          └─ global      // 전역 관련
             ├─ annotations       // 커스텀 에노테이션
             ├─ aop       // AOP 설정
             ├─ auth     // 보안 관련
             │  ├─ api
             │  ├─ application
             │  ├─ dao
             │  ├─ domain
             │  └─ dto
             ├─ config     // 설정 관련
             ├─ exception       // 예외 관련
             ├─ payload       // 응답 값 형식
             ├─ security     // 스프링 시큐리티 관련
             │  ├─ basic       // 인증 사용자 정보
             │  ├─ exception       // 시큐리티 예외
             │  ├─ jwt       // JWT 관련
             │  │  ├─ filter      // 시큐리티 필터
             │  │  └─ provider      // JWT 프로바이져
             │  └─ oauth2     // OAuth 2 관련
             │      ├─ application
             │      │  └─ impl
             │      └─ provider      // 소셜로그인 프로바이저
             └─ utils       // 유틸
    

    🤙 Convention

    • 커밋 메시지
      1. 적절한 커밋 접두사 작성
      2. 커밋 메시지 내용 작성
    Tag Name Description
    feat 새로운 기능
    refactor 프로덕션 코드 리팩토링
    docs 문서 수정
    test 테스트 코드, 리펙토링 테스트 코드 추가, Production Code(실제로 사용하는 코드) 변경 없음
    chore 빌드 업무 수정, 패키지 매니저 수정, 패키지 관리자 구성 등 업데이트, Production Code 변경 없음
    remove 프로덕션 코드 삭제 및 디렉터리 삭제
    rename 디렉터리 이름변경 및 폴더 이동
    fix 버그수정

    About

    레시피 공유소

    Resources

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    Contributors 2

    •  
    •  

    Languages