Skip to content

내 가족을 챙기는 하나의 방법, “모르는개 산책”(반려견 산책 매칭) 플랫폼입니다.

Notifications You must be signed in to change notification settings

Step3-kakao-tech-campus/Team17_BE

Repository files navigation

🐾 모르는개 산책

모르는개 산책_기획발표 (2)

목차

프로젝트 소개, 기획의도

강아지에게 산책은 필수적이며, 항상 지속적으로 관심을 가져야 하는 활동입니다.

1인가구의 수가 증가하고 반려가구의 수가 증가함에 따라, 반려자 입장에서 반려견에게 지속적인 관심이 부족하게 될 수도, 또한 모든 상황을 반려견에게 맞춰줄 수 없는 문제가 발생할 수 있습니다.

저희 모르는개 산책 팀은 반려동물을 키우고 싶지만 여건이 따라주지 않은 사람에겐 경험의 기회를, 내가 원하는 시간대에 비교적 저렴하게, 믿을 수 있게 나의 반려동물을 산책 시켜줄 수 있도록 도움을 주기 위해 이 서비스를 기획하였습니다.


👨‍👨‍👧‍👧 팀원

박영규 이승건 곽민주
BE (테크리더) BE BE

🔨 배포된 인스턴스 주소


📆 프로젝트 기간 : 2023.09 ~ 2023.11

☁️ ERD


ERD이미지

📕 개발 문서

📙 와이어 프레임
📒 API 명세서

시작 가이드

Java 17, Spring 3.1.4
  1. 프로젝트 클론
git clone https://github.com/Step3-kakao-tech-campus/Team17_BE.git
cd Team17_BE
cd dog-walking
  1. 실행
./gradlew build
cd build
cd libs
java -jar dog-walking-0.0.1-SNAPSHOT.jar

🛠 사용 기술

  • Java 17
  • Spring Boot
  • Spring Framework
  • Spring Boot Starter
  • Spring Data JPA
  • JPA
  • Spring Security
  • Websocket
  • Spring Message
  • Stomp
  • jjwt
  • Lombok
  • H2 Database
  • MySQL
  • JUnit 5
  • gradle
  • AWS S3
  • Cloud Type

🎯 서비스 주요 기능

  • 📌 회원가입 및 로그인

    • 이메일 형식, 비밀번호 형식, 닉네임 중복 여부를 검사합니다.
    • JWT를 이용한 로그인 방식을 선택했습니다.
    • refresh token을 사용하여 access token의 유효 기간을 짧게 하여 보안을 강화하면서도 유저가 자주 로그아웃되지 않도록하였습니다.
    • access token의 유효기간이 만료되었을 때, 헤더에 refresh token을 담아 유효한지 검사하고, 유효하다면 access token을 재발급합니다.
  • 📌 메인페이지 필터링, 검색, 정렬, 페이징

    • 커서 기반 페이징을 이용하여 무한스크롤을 구현하였습니다. 두 번째 요청부터 key값을 이용하여 다음 페이지를 요청합니다.
      • 더 이상 요청할 페이지가 없을 경우에는 key값이 -1이 되어 더 이상 요청할 수 없습니다.
      • 해당 key값은 현재 위치와 리스트 마지막 공고글에 저장된 위치의 거리 차이 값 입니다.
      • 헤버시인 공식(Haversine formula)을 사용하여 두 지점 간의 거리 차이(위도와 경도)를 구하는데 사용됩니다.
      • 계산된 거리는 distance라는 별칭으로 선택됩니다.
    • 메인페이지는 유저의 현재 위치를 기반으로 각 공고글에 저장된 위치와 거리가 가까운 순으로 오름차순 정렬됩니다.
    • IN 절을 사용한 필터링 기능 (반려견 사이즈, 견종)을 이용하여 원하는 조건에 맞는 공고글만 볼 수 있습니다.
      • 반려견 사이즈와 견종 항목을 여러 개 선택했을 때, OR 조건으로 필터링 됩니다.
    • Like 절을 사용한 제목 검색 기능을 이용하여 원하는 키워드를 포함한 공고글만 볼 수 있습니다.
    • native query를 사용하여 JPA가 아닌 직접 SQL을 사용하여 데이터베이스와 상호 작용합니다.
  • 📌 공고글에 강아지 불러오기, 공고글 작성 및 조회

    • 견주는 반려견을 산책 시켜줄 아르바이트 유저를 찾기 위해 공고글을 작성할 수 있습니다.
    • 유저는 프로필에 이미 등록해놓은 본인의 반려견을 불러올 수 있습니다.
      • 유저 본인의 반려견이 아닐 경우 등록할 수 없습니다.
      • 유저가 보유한 멍코인보다 공고글에 작성한 멍코인이 많을 경우 공고글을 등록할 수 없습니다.
    • 제목, 현재 위치, 시작시간, 종료시간, 멍코인 (유저가 보유한 코인), 특이사항을 입력하여 공고글을 작성할 수 있습니다.
    • 반려견에 대한 사랑과 관심을 공유하고, 멍코인을 통해 그에 대한 보상을 받으세요.
  • 📌 공고글에 매칭된 지원자 리스트 조회

    • 해당 유저가 작성한 공고글에 매칭된 지원자들의 리스트를 조회할 수 있습니다.
    • 견주는 본인의 매칭 리스트만 조회할 수 있습니다.
    • 견주는 매칭 리스트에서 수락 버튼을 눌러 지원자를 수락할 수 있습니다.
    • 견주는 반려견을 본인이 직접 선택한 믿음직스러운 아르바이트 유저에게 맡길 수 있습니다.
  • 📌 프로필 등록, 수정 및 조회

    • 해당 유저의 프로필 사진과 반려견들의 프로필을 불러올 수 있습니다.
    • 해당 유저의 산책 공고글과 산책 아르바이트 지원글, 받거나 작성한 리뷰들을 불러올 수 있습니다.
      • 해당 유저에 속한 여러 데이터들을 한 턴에 불러오는 방식을 사용하기 위해서 최대한 Fetch Join으로 N + 1 문제와 과도한 쿼리를 방지하였습니다.
    • 유저 프로필 조회시, 로그인한 유저 본인의 프로필인지 아니면 다른 유저의 프로필인지에 따라서 프로필을 수정할 수 있거나, 없습니다.
      • 유저는 본인의 프로필 중 원하는 값만 수정할 수 있습니다.
    • 유저는 AWS S3를 이용한 이미지 업로드를 통해서 본인의 프로필과 반려견의 프로필을 저장 및 수정할 수 있습니다.
    • 유저는 산책이 끝났지만 아직 리뷰가 작성되지 않은 것들을 별도의 창에서 쉽게 확인 후 리뷰를 작성할 수 있습니다.
    • 유저는 본인의 개성을 프로필을 통해서 다른 사람들에게 뽐낼 수 있습니다.
  • 📌 강아지 등록, 수정 및 조회

    • 유저는 사랑하는 반려견을 저장할 때 AWS S3를 이용한 반려견 사진, 반려견 이름, 반려견 특징, 성별, 나이 등의 정보를 저장할 수 있습니다.
    • 유저는 여러 반려견들을 저장할 수 있으며, 원하는 반려견을 선택해 해당 반려견을 불러오거나, 수정할 수 있습니다.
      • 유저는 반려견의 정보 중 원하는 정보만 골라서 수정이 가능합니다.
    • 유저는 다른 사람들의 반려견에 대한 정보를 불러올 수 있지만, 수정은 불가능합니다.
    • 유저는 귀여운 강아지를 보고 힐링할 수 있습니다.
  • 📌 지원서 작성 및 조회

    • 유저는 지원서에 자기소개, 자격증, 관련 경험을 작성해 지원하고 싶은 공고에 지원할 수 있습니다.
    • 유저는 작성한 지원서의 제목, 닉네임, 자기소개, 자격증, 관련 경험을 조회할 수 있습니다.
    • Service Layer를 Read와 Write로 나누어, 하나의 클래스에 얽힌 과도한 의존관계를 감소시켰습니다.
    • 인증된 유저 정보를 받지 않고, SecurityContextHolder의 유저 정보를 받아옴으로서 중복된 데이터를 제거하였습니다.
  • 📌 채팅방 목록 조회, 채팅

    • 유저는 STOMP와 Spring Messaging을 이용한 WebSocket 통신을 통해 1:1 채팅할 수 있습니다.
    • 공고글을 올린 유저가 수락하면 채팅방이 생성됩니다.
    • 유저는 자신이 포함된 채팅방 목록을 조회할 수 있습니다.
    • 채팅방에 입장하는 경우 이전의 채팅 메세지 목록을 확인할 수 있습니다.
    • 유저들은 충분한 대화를 진행 후 공고자인지 지원자인지에 따라서 산책허락 및 산책 시키기 버튼을 눌러 산책 Flow를 진행할 수 있습니다.
    • 유저는 채팅을 통해 본인이 멋지고 강아지에게 안전한 사람이라는 것을 어필할 수 있습니다
  • 📌 산책 허락, 산책 시작, 산책 종료

    • 견주 유저가 공고글에 올렸던 금액 만큼 결제를 하면, 산책이 활성화(허락)됩니다.
    • 산책이 활성화되면, 아르바이트 유저는 산책 시작을 눌러 산책을 시작할 수 있습니다.
    • 견주 유저는 아르바이트 유저가 산책을 시작하면, 실시간으로 아르바이트 유저의 위치를 GPS를 통해서 확인할 수 있습니다.
    • 아르바이트 유저는 반려견을 산책시키며, 지도를 통해서 본인이 어디쯤 산책을 하고 있는지 확인할 수 있습니다.
    • 아르바이트 유저는 반려견 산책을 마무리하면, 산책 종료 버튼을 눌러 산책 종료를 서비스와 견주 유저에게 알리게 됩니다.
    • 산책 종료시 아르바이트 유저는 견주 유저가 결제하였던 금액을 입금받게 됩니다.
    • 아르바이트 유저는 견주 유저의 귀여운 반려견이 씩씩히 걸어가는 엉덩이를 보며 빠져들게 됩니다.
  • 📌 리뷰 작성 및 조회

    • 유저는 산책이 종료된 후 서로에 대한 리뷰를 작성할 수 있습니다.
    • 유저는 리뷰에 개밥그릇을 설정할 수 있습니다.
    • 객관식 리뷰 항목은 4개이며, 문자열로 작성할 수 있는 리뷰 항목은 하나 입니다.
  • 📌 결제

    • 견주 유저는 산책 허락하기가 활성화되면, 결제를 필수적으로 해야 합니다.
      • 이 때 결제 금액은 견주 유저가 올렸던 공고의 아르바이트 비용만큼 차감됩니다.
      • 만약 견주가 가진 돈이 공고의 돈보다 해당 시점에 부족하다면 예외가 발생하게 됩니다.
    • 이 때 차감된 금액은 바로 아르바이트 유저에게 입금이 되는 것이 아니라 임시적으로 DB에 저장되어있습니다.
      • 이는 아르바이트 유저가 먼저 입금을 받고, 산책을 하지 않는 행동을 방지하기 위함입니다.
    • 아르바이트 유저는 반려견 산책을 마무리했다면, 산책 종료 버튼을 누르게 되고 이 시점에 DB에 임시 저장된 금액이 아르바이트 생에게 입금이 됩니다.
    • 아르바이트 생은 귀여운 반려견도 산책시키고, 돈도 벌게 되었으니 일석이조입니다.

About

내 가족을 챙기는 하나의 방법, “모르는개 산책”(반려견 산책 매칭) 플랫폼입니다.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published