Skip to content

DDang-Org/BackEnd

Repository files navigation

image

👩🏻‍💻 DDang, 어떻게 마이그레이션 되었나요?

1. 기존 단일 강아지 프로필 ➡️ 복수(2마리 이상) 강아지 등록 및 관리 기능 구현

2. 차단, 신고 로직 및 UX/UI 추가

3. 데이터베이스 쿼리 최적화 및 API 엔드포인트 확장 및 최적화

4. 코드 컨벤션에 맞는 코드 개선과 리팩토링을 통한 코드 품질 향상

5. Nginx 를 이용한 Green/Blue 무중단 배포 구현

6. 실시간 통신 중 서비스 흐름을 방해하지 않으면서 DB 통신을 최소화 하도록 성능 개선


소중한 댕댕이와 새로운 산책을 원할 때!🐶🐾

반려견과 견주들의 행복한 공생을 돕는 강아지 산책 서비스 DDang 입니다.
DDang(댕) 오직 ‘산책’ 키워드에 맞춘 사용자 친화적인 서비스를 만들고자 탄생했습니다.

$${\text{🏆웹 데브코스 최종 프로젝트(전공자반) }{\color{red}\textbf{'인기 프로젝트상'}}{\text{수상 작품}}}$$

🐕‍🦺동물도 주인도 즐거운 산책

→ 기존 동물에만 포커싱 맞춰진 서비스와 차별화
강번따 : 산책 시 200미터 안에 산책하는 또다른 사용자가 있다면 해당 사용자에게 강번따 요청을 할 수 있습니다. 승낙 시 서로의 위치를 공유하며 함께 산책할 수 있는 서비스를 제공하며,산책을 마치면 친구를 맺을 수 있습니다.

👨‍👩‍👧‍👦온 가족이 케어하는 댕댕이 산책 라이프

댕로그, 패밀리댕 : 함께 사는 가족 or 연인과 함께 모든 기록을 공유하며 체계적으로 산책을 관리 합니다.

👪 팀원 구성

Front-End Front-End Front-End Back-End Back-End
김주영 남원일 한규 문재경 노관태
패밀리댕, 마이페이지 로그인, 견주 등록/관리, 강아지 등록/관리, 홈, 소셜, 실시간 채팅, 댕댕로그, 가족 코드 공유 산책, 강번따, 친구 신청 채팅, 패밀리댕, 차단, 알림, 회원정보 산책, 댕댕로그, 강아지, 시큐리티, 친구

🐶 기능 소개

산책

  • 산책: 산책 중 위치와 경로를 실시간으로 확인하고 기록할 수 있습니다.
  • 산책 기록: 이후 산책을 마치면 경로, 시간, 거리의 데이터을 요약해주고 해당 데이터를 아카이빙 시킵니다.

강번따 강번따란? 내 동네 견주와 함께 친구를 맺어 산책을 할 수 있는 기능입니다.

  • 근처 강아지 알림: 산책 도중에 사용자의 반경 내 산책 중인 다른 강아지 수를 표시해줍니다.
  • 강아지 프로필: 근처에 있는 강아지의 프로필을 확인할 수 있습니다.
  • 강번따 요청 버튼: 다른 강아지와 산책을 시작하는 버튼을 통해 강번따 요청을 보낼 수 있습니다.
  • 강번따 요청: 강아지 산책 요청이 들어왔을 때 수락/거절 옵션이 있는 알림을 제공합니다.
    • 거절: 강아지가 부끄러워하는 상황에 대한 메시지를 제공합니다.
    • 수락: 서로의 실시간 위치가 핀포인트로 공유되고 채팅방이 생성됩니다.
  • 신고: 특정 강아지를 신고하거나 차단할 수 있는 기능을 제공합니다.
  • 실시간 채팅: 강아지와 산책이 매칭된 사용자 간에 채팅이 가능합니다.
  • 친구 맺기 : 함께 산책을 완료한 후엔 친구를 맺어 추후 지속적인 동네 산책 친구와 네트워킹을 할 수 있습니다. 

                                                           프로필 페이지

이번 주 동안의 산책 횟수, 다음 산책 차례를 한눈에 확인할 수 있습니다. 알림 목록을 확인할 수 있습니다.


소셜                                                         채팅

  • 댕친구 리스트: 사용자가 추가한 친구 목록을 확인할 수 있습니다.
  • 채팅: 댕친구와의 채팅 기능을 지원합니다.

견주,강아지 정보입력 프로세스

  • 소셜로그인 : 카카오 계정으로 간편하게 소셜로그인이 가능합니다.
  • 회원정보 입력 : 마음에 드는 아바타와 가족 포지션을 포함한 정보를 입력 받습니다. 이때 현재 위치는 클릭 한 번으로 위치 정보를 받아올 수 있습니다.
  • 강아지정보 입력 : 내 강아지 정보를 입력 받습니다. 이미지, 견종 등 여러 정보를 저장할 수 있습니다.

패밀리댕

  • 가족 역할: 가족 구성원 역할 확인 및 산책 데이터를 한 눈에 볼 수 있습니다.
  • 댕 평집 페이지: 강아지 프로필 상세 정보를 확인 및 수정할 수 있습니다.
  • 가족 초대 : 패밀리댕에 우리 가족을 초대할 수 있게 가족 코드를 공유할 수 있습니다. 해당 코드를 입력하면 패밀리에 초대됩니다.

댕로그

  • 캘린더 페이지: 일별로 산책 기록을 캘린더 형태로 확인할 수 있습니다.

  • 주간 캘린더별 기록 페이지: 주간 산책 횟수 및 주요 활동을 요약하여 제공하는 페이지입니다.

  • 기록별 상세 정보 페이지: 각 산책 기록의 상세 정보를 확인할 수 있습니다.

  • 산책 기록 기반 분석 그래프: 사용자와 강아지의 산책 횟수를 그래프로 시각화하여 제공합니다.


마이페이지

  • 회원 정보 메인 페이지: 사용자의 기본 정보와 설정 페이지로 이동할 수 있는 메뉴입니다.
  • 알림 설정 페이지: 강번따 요청, 산책 알림 등 주요 알림을 설정하는 페이지입니다.
  • 회원 정보 상세 페이지: 사용자 정보 수정 및 관리 기능을 제공합니다.

기획서

📅 작업 관리

👥 UserFlow

📊 작업 관리

  • 매일 아침 스크럼 및 데일리 스탠드업 회의를 진행하며 작업한 내용, 작업 할 내용, 이슈 및 협업이 필요한 사항에 대해 공유하고 노션에 기록하며 작업을 진행했습니다.
  • GitHub Projects와 Issues를 사용하여 진행 상황을 공유했습니다.
  • 작업을 마친 Issue에 대해 Pull Request를 올리면 팀원 모두가 코드 리뷰를 진행하고 피드백 및 간단한 소감 작성을 마친 뒤 병합을 진행했습니다.
  • Github Project에서 Stroy Point를 이용해 작업을 관리하였습니다.

1. 개발 환경

  • Back-end : Java, Spring-boot, JPA, MYSQL, Redis
  • 버전 및 이슈관리 : Github, Github Issues, Github Project
  • 협업 툴 : Discord, Notion, Slack
  • 문서화 : Swagger, Notion, README.md
  • 테스트 : JUnit5, Postman
  • 디자인 : Figma
Software Version / Spec
Java Java SE 17.0.11
Spring Boot 3.3.5
Spring Boot Modules Data JPA, Web, Validation, Security, Batch, Redis Reactive
Lombok 1.18.20
QueryDSL JPA 5.0.0 (Jakarta)
JWT Java JWT 4.2.1
Database MySQL 8.0.39, H2 2.1.214 (Test)
Hibernate Spatial 6.5.3.Final
Redis Embedded Redis 0.7.2 (ARM 지원)
WebSocket Spring Boot Starter WebSocket
Security Spring Security (OAuth2 Client 6.3.1)
Jackson Jackson Datatype JSR310, Jackson Databind
Testing JUnit 5 (Platform Launcher 1.9.2)
Documentation Swagger (SpringDoc OpenAPI UI 2.2.0), REST Docs
Build Tools Gradle

2. 개발 가이드라인

브랜치 전략

코드 컨벤션


3. Entity Relationship Diagram

erd_image ERDCloud


4. 프로젝트 패키지 구조

📦main
 ┣ 📂generated
 ┃ ┗ 📂com
 ┃ ┃ ┗ 📂ddang
 ┃ ┃ ┃ ┣ 📂chat
 ┃ ┃ ┃ ┃ ┗ 📂entity
 ┃ ┃ ┃ ┣ 📂dog
 ┃ ┃ ┃ ┃ ┗ 📂entity
 ┃ ┃ ┃ ┣ 📂family
 ┃ ┃ ┃ ┃ ┗ 📂entity
 ┃ ┃ ┃ ┣ 📂global
 ┃ ┃ ┃ ┃ ┗ 📂entity
 ┃ ┃ ┃ ┣ 📂member
 ┃ ┃ ┃ ┃ ┗ 📂entity
 ┃ ┃ ┃ ┣ 📂notification
 ┃ ┃ ┃ ┃ ┗ 📂entity
 ┃ ┃ ┃ ┗ 📂walk
 ┃ ┃ ┃ ┃ ┗ 📂entity
 ┣ 📂java
 ┃ ┗ 📂com
 ┃ ┃ ┗ 📂ddang
 ┃ ┃ ┃ ┣ 📂chat
 ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┣ 📂request
 ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┣ 📂repository
 ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┣ 📂request
 ┃ ┃ ┃ ┃ ┃ ┣ 📂response
 ┃ ┃ ┃ ┣ 📂dog
 ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┣ 📂request
 ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┣ 📂repository
 ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┣ 📂request
 ┃ ┃ ┃ ┃ ┃ ┣ 📂response
 ┃ ┃ ┃ ┣ 📂family
 ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┣ 📂request
 ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┣ 📂repository
 ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┣ 📂response
 ┃ ┃ ┃ ┣ 📂global
 ┃ ┃ ┃ ┃ ┣ 📂aop
 ┃ ┃ ┃ ┃ ┣ 📂api
 ┃ ┃ ┃ ┃ ┣ 📂config
 ┃ ┃ ┃ ┃ ┃ ┣ 📂security
 ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┣ 📂event
 ┃ ┃ ┃ ┃ ┣ 📂exception
 ┃ ┃ ┃ ┃ ┃ ┣ 📂annotation
 ┃ ┃ ┃ ┃ ┣ 📂service
 ┃ ┃ ┃ ┃ ┗ 📂websocket
 ┃ ┃ ┃ ┣ 📂member
 ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┣ 📂request
 ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┣ 📂jwt
 ┃ ┃ ┃ ┃ ┃ ┣ 📂filter
 ┃ ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┣ 📂oauth2
 ┃ ┃ ┃ ┃ ┃ ┣ 📂handler
 ┃ ┃ ┃ ┃ ┃ ┣ 📂service
 ┃ ┃ ┃ ┃ ┃ ┣ 📂userinfo
 ┃ ┃ ┃ ┃ ┣ 📂repository
 ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┣ 📂request
 ┃ ┃ ┃ ┃ ┃ ┣ 📂response
 ┃ ┃ ┃ ┣ 📂notification
 ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┣ 📂request
 ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┣ 📂repository
 ┃ ┃ ┃ ┃ ┗ 📂service
 ┃ ┃ ┃ ┃ ┃ ┣ 📂response
 ┃ ┃ ┃ ┣ 📂walk
 ┃ ┃ ┃ ┃ ┣ 📂controller
 ┃ ┃ ┃ ┃ ┃ ┣ 📂request
 ┃ ┃ ┃ ┃ ┣ 📂entity
 ┃ ┃ ┃ ┃ ┣ 📂repository
 ┃ ┃ ┃ ┃ ┣ 📂service
 ┃ ┃ ┃ ┃ ┃ ┣ 📂request
 ┃ ┃ ┃ ┃ ┃ ┣ 📂response
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂log
 ┃ ┃ ┃ ┃ ┃ ┃ ┣ 📂walk
 ┃ ┃ ┃ ┃ ┗ 📂util
 ┗ 📂resources
 ┃ ┣ 📂key

5. 역할 분담

👻 노관태

  • 패밀리댕
    • 패밀리댕 관련 API 구현
  • 산책 일정
    • 산책일정 관련 API 구현
  • 채팅
    • 채팅 관련 API 구현
    • WebSocket과 Kafka를 이용한 채팅 시스템 구현

😎 문재경

  • 친구관리
    • 친구 CRUD 구현
  • 산책
    • 산책 관련 API 구현
    • WebSocket과 Redis를 사용한 이용한 산책 시스템 구현
  • 강번따
    • 강번따 관련 API 구현
    • Redis의 공간 데이터 함수를 활용하여 가까운 유저 간 실시간 위치 공유
  • 댕댕로그
    • 댕댕로그 관련 API 구현
    • Security 를 통한 유저 권한 체크 및 인증 구현
  • 강아지
    • 강아지 관련 API 구현

🙃 송경훈

  • 회원
    • 멤버 관련 API 구현
    • AccessToken 과 RefreshToken 을 이용한 JWT 회원 로그인 구현
    • OAuth 2.0 을 사용한 구글 로그인 구현
  • 시큐리티
    • CORS 설정 구현
    • Security 를 통한 유저 권한 체크 및 인증 구현
  • 알림
    • 멤버 관련 API 구현
    • FCM을 활용한 알림 기능 구현

6. 신경 쓴 부분

  • OAuth2.0 사용
    • Google 계정을 이용한 로그인
    • KAKAO 계정을 이용한 로그인
  • Redis 를 이용한 공간 데이터 계산
    • 자주 호출 되는 산책에서 Redis 를 사용하여 주변 유저들의 정보를 받아올 수 있게 하여 SQL을 사용하는 것보다 성능 향상
  • 선택적 Soft Delete
    • 기획에 따라 유지/검토 되어야 하는 부분에서 Soft Delete 사용
  • 웹소켓 인증객체 가져오기
  • 좌표 데이터 Bulk Insert
    • 한 번 산책시 n초 마다 좌표를 저장해야하는데, 한 번씩 해줄 경우 많은 성능 저하가 예상되어 많은 좌표 값들을 한 번에 Bulk Insert 하여 성능향상
    • Bulk Insert
  • Swagger 예외 처리 어노테이션화


7. API 명세서

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •