DDang(댕) 오직 ‘산책’ 키워드에 맞춘 사용자 친화적인 서비스를 만들고자 탄생했습니다.
→ 기존 동물에만 포커싱 맞춰진 서비스와 차별화
→ 강번따 : 산책 시 200미터 안에 산책하는 또다른 사용자가 있다면 해당 사용자에게 강번따 요청을 할 수 있습니다. 승낙 시 서로의 위치를 공유하며 함께 산책할 수 있는 서비스를 제공하며,산책을 마치면 친구를 맺을 수 있습니다.
→ 댕로그, 패밀리댕 : 함께 사는 가족 or 연인과 함께 모든 기록을 공유하며 체계적으로 산책을 관리 합니다.
| Front-End | Front-End | Front-End | Back-End | Back-End |
|---|---|---|---|---|
| 김주영 | 남원일 | 한규 | 문재경 | 노관태 |
| 패밀리댕, 마이페이지 | 로그인, 견주 등록/관리, 강아지 등록/관리, 홈, 소셜, 실시간 채팅, 댕댕로그, 가족 코드 공유 | 산책, 강번따, 친구 신청 | 채팅, 패밀리댕, 차단, 알림, 회원정보 | 산책, 댕댕로그, 강아지, 시큐리티, 친구 |
산책
- 산책: 산책 중 위치와 경로를 실시간으로 확인하고 기록할 수 있습니다.
- 산책 기록: 이후 산책을 마치면 경로, 시간, 거리의 데이터을 요약해주고 해당 데이터를 아카이빙 시킵니다.
강번따 강번따란? 내 동네 견주와 함께 친구를 맺어 산책을 할 수 있는 기능입니다.
- 근처 강아지 알림: 산책 도중에 사용자의 반경 내 산책 중인 다른 강아지 수를 표시해줍니다.
- 강아지 프로필: 근처에 있는 강아지의 프로필을 확인할 수 있습니다.
- 강번따 요청 버튼: 다른 강아지와 산책을 시작하는 버튼을 통해 강번따 요청을 보낼 수 있습니다.
- 강번따 요청: 강아지 산책 요청이 들어왔을 때 수락/거절 옵션이 있는 알림을 제공합니다.
- 거절: 강아지가 부끄러워하는 상황에 대한 메시지를 제공합니다.
- 수락: 서로의 실시간 위치가 핀포인트로 공유되고 채팅방이 생성됩니다.
- 신고: 특정 강아지를 신고하거나 차단할 수 있는 기능을 제공합니다.
- 실시간 채팅: 강아지와 산책이 매칭된 사용자 간에 채팅이 가능합니다.
- 친구 맺기 : 함께 산책을 완료한 후엔 친구를 맺어 추후 지속적인 동네 산책 친구와 네트워킹을 할 수 있습니다.
홈 프로필 페이지
이번 주 동안의 산책 횟수, 다음 산책 차례를 한눈에 확인할 수 있습니다. 알림 목록을 확인할 수 있습니다.
소셜 채팅
- 댕친구 리스트: 사용자가 추가한 친구 목록을 확인할 수 있습니다.
- 채팅: 댕친구와의 채팅 기능을 지원합니다.
- 소셜로그인 : 카카오 계정으로 간편하게 소셜로그인이 가능합니다.
- 회원정보 입력 : 마음에 드는 아바타와 가족 포지션을 포함한 정보를 입력 받습니다. 이때 현재 위치는 클릭 한 번으로 위치 정보를 받아올 수 있습니다.
- 강아지정보 입력 : 내 강아지 정보를 입력 받습니다. 이미지, 견종 등 여러 정보를 저장할 수 있습니다.
- 가족 역할: 가족 구성원 역할 확인 및 산책 데이터를 한 눈에 볼 수 있습니다.
- 댕 평집 페이지: 강아지 프로필 상세 정보를 확인 및 수정할 수 있습니다.
- 가족 초대 : 패밀리댕에 우리 가족을 초대할 수 있게 가족 코드를 공유할 수 있습니다. 해당 코드를 입력하면 패밀리에 초대됩니다.
-
캘린더 페이지: 일별로 산책 기록을 캘린더 형태로 확인할 수 있습니다.
-
주간 캘린더별 기록 페이지: 주간 산책 횟수 및 주요 활동을 요약하여 제공하는 페이지입니다.
-
기록별 상세 정보 페이지: 각 산책 기록의 상세 정보를 확인할 수 있습니다.
-
산책 기록 기반 분석 그래프: 사용자와 강아지의 산책 횟수를 그래프로 시각화하여 제공합니다.
- 회원 정보 메인 페이지: 사용자의 기본 정보와 설정 페이지로 이동할 수 있는 메뉴입니다.
- 알림 설정 페이지: 강번따 요청, 산책 알림 등 주요 알림을 설정하는 페이지입니다.
- 회원 정보 상세 페이지: 사용자 정보 수정 및 관리 기능을 제공합니다.
- 매일 아침 스크럼 및 데일리 스탠드업 회의를 진행하며 작업한 내용, 작업 할 내용, 이슈 및 협업이 필요한 사항에 대해 공유하고 노션에 기록하며 작업을 진행했습니다.
- GitHub Projects와 Issues를 사용하여 진행 상황을 공유했습니다.
- 작업을 마친 Issue에 대해 Pull Request를 올리면 팀원 모두가 코드 리뷰를 진행하고 피드백 및 간단한 소감 작성을 마친 뒤 병합을 진행했습니다.
- Github Project에서 Stroy Point를 이용해 작업을 관리하였습니다.
- 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 |
📦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
- 패밀리댕
- 패밀리댕 관련 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을 활용한 알림 기능 구현
- OAuth2.0 사용
- Google 계정을 이용한 로그인
- KAKAO 계정을 이용한 로그인
- Redis 를 이용한 공간 데이터 계산
- 자주 호출 되는 산책에서 Redis 를 사용하여 주변 유저들의 정보를 받아올 수 있게 하여 SQL을 사용하는 것보다 성능 향상
- 선택적 Soft Delete
- 기획에 따라 유지/검토 되어야 하는 부분에서 Soft Delete 사용
- 웹소켓 인증객체 가져오기
- Interceptor 를 이용한 유저 인증객체를 가져옴
- WebSocket 과 @AuthenticationPrincipal
- 좌표 데이터 Bulk Insert
- 한 번 산책시 n초 마다 좌표를 저장해야하는데, 한 번씩 해줄 경우 많은 성능 저하가 예상되어 많은 좌표 값들을 한 번에 Bulk Insert 하여 성능향상
- Bulk Insert
- Swagger 예외 처리 어노테이션화
- Swagger 작성 시 예외 사항을 적을 때 Controller 에 많은 코드가 작성되는 것을 어노테이션으로 변경
- Swagger 문서 작성 깔끔하게 하기













