팀명 : 동규라미프로젝트명 : 스팸(SFam) ⇒ Sports Family# 팀 #동네 #매칭개요기간팀원기술 스택요구 사항유저스토리유스케이스매칭팀 관리회원관리후기 작성와이어 프레임ERD
팀명 : 동규라미
프로젝트명 : 스팸(SFam) ⇒ Sports Family
# 팀 #동네 #매칭

개요
- 주제
- 동네에서 같이 운동할 사람을 모아 팀을 만들고, 근처의 다른 팀들과 스포츠 경기를 진행할 수 있는 커뮤니티 서비스
- 선정 배경
- 사람들은 여가/취미활동으로 다양한 스포츠를 즐긴다. 가족 단위로 즐기기도 하고, 친구들과 모여 즐기기도 한다. 관심이 있는 사람들은 동호회에 들어가 동호회 회원들과 즐기기도 한다. 그런데 주변 사람들과 시간이 맞지 않으면 스포츠 경기를 진행할 수 없다. 이런 문제를 해결하기 위해 위 서비스를 기획하게 되었다.
- 기존에도 해당 문제를 해결하기 위한 노력은 계속해서 진행되어 왔다. 그러나 대부분의 서비스의 경우 풋살 경기만을 매칭하는 서비스였다.
- 플랩풋볼
- 풋살 매칭
- 구장 예약 서비스
- 퍼즐풋볼
- 플랩풋볼과 비슷한 서비스
- 개인별 랭킹이 있음
- 경기가 기록된다는 차별점이 있음
- 뚜잇
- 풋살 매칭 서비스
- 바로매치
- 기획한 서비스랑 일치하는 서비스인 것 같음
- 서비스가 오래되고 사용자가 없음
- 핀공
- 좀 다른 결인데, 다른 볼링장에 있는 사람들끼리 매칭
- 화면으로 서로의 플레이를 보여주는 서비스
- 기획한 서비스와 비슷하게 여러가지 스포츠를 매칭하는 페어플레이라는 서비스가 존재한다. 그러나 해당 서비스는 아웃도어 액티비티(등산, 서핑 등)에 초점을 맞추고 있기 때문에 제한적인 수의 스포츠 매칭만 가능하다.
- 이러한 시장 조사를 통해 더 많은 스포츠를 매칭할 수 있는 서비스가 필요하다고 판단해 위 서비스를 기획하게 되었다.
- 타겟
- 스포츠를 즐기고 싶지만 주변에 같이 할 사람이 없는 사람
- 이왕이면 동네에서 운동친구를 구하고 싶다.
- 같은 운동 취미를 가진 친구를 구하고 싶다.
- 같은 팀으로 플레이 할 사람은 있지만 상대를 구하지 못한 사람
- 동호회에 들어가고 싶은 사람
- 운동에 좀 더 재미를 붙이고 싶은 사람
- 나의 객관적인 전적을 파악하고 싶은 사람
- 상대 전력을 파악하고 싶은 사람
- 다른 강자들을 꺾고 싶은 사람
서비스의 타겟은 다음과 같다.
- 주요 기능
- 다양한 종류의 운동 매칭이 가능하다.
- 팀을 생성하고 팀전이 가능하다.
- 사용자 근처의 사용자들과 스포츠 매칭 가능
- 사용자나 팀의 전적 조회 가능
기간
2022년 7월 21일 - 2022년 8월 16일 (총 27일)
팀원
- 백엔드
- 프론트엔드
- [PO] Papa (김창민, 파파)
- [SM] Lawrence (장규범, 로렌스)
- [Developer] Claire (신승연, 클레어)
- [Developer] Thompson (홍정기, 톰슨)
기술 스택
🪟 프론트엔드
- React
- TypeScript
- Next.js
- Recoil
- Emotion
- Axios
🎒 백엔드
- SpringBoot 2.7.1
- Java 17
- Gradle 7.4.1
- Junit5
- MySQL
- Flyway
- Swagger
- AWS
- JPA
📃 문서/협업
- Jira
- Notion
- Slack
- Git
요구 사항
유저스토리
유스케이스
매칭

유즈케이스명 | 매칭 |
액터명 | 모집자, 신청자 |
개요 | 사용자가 대결 상대를 찾기 위해 매칭 시스템을 이용한다 |
사전조건 | 모집자와 신청자 모두 회원이어야 한다 |
사후조건 | 대결 공고 글은 마감되고 삭제할 수 없다 |
기본흐름 | 1. 모집자는 대결 공고 글을 올린다
2. 신청자는 대결 공고 글을 조회한다
3. 신청자는 대결 신청을 한다
4. 모집자는 대화를 승낙한다
5. 모집자와 신청자는 대화를 한다
6. 모집자는 대결을 확정한다 |
대체흐름 | 4a. 모집자가 대화를 거부하는 경우
4a.1. 모집자와 신청자는 매칭 성사가 되지 않는다 |
대체흐름 | 6a. 모집자가 대결을 거부하는 경우
6a.1. 모집자와 신청자는 매칭 성사가 되지 않는다 |
팀 관리

유즈케이스명 | 새로운 팀을 생성할 수 있다. |
액터명 | 사용자 |
개요 | 사용자가 매칭과 팀원 초대를 위해 팀을 생성한다. |
사전조건 | 로그인 된 사용자여야 한다. |
사후조건 | - 요청이 성공하면 해당 팀의 팀장 역할을 부여 받고, 팀 프로필 페이지로 이동한다.
- 요청이 실패하면 생성 페이지에서 오류를 출력한다. |
기본흐름 | 1. 사용자가 팀 생성 버튼을 누른다.
2. 사용자가 팀 생성 페이지로 이동한다.
3. 사용자가 팀 생성에 필요한 정보를 입력한다.
4. 팀 생성 완료 버튼을 누른다.
5. 팀 생성이 완료된다.
6. 팀 프로필 페이지로 이동한다. |
대체흐름 | 5a. 팀 생성이 실패한 경우
5a.1 사용자에게 오류가 발생했다는 사실을 알리고 유스케이스를 종료한다. |
유즈케이스명 | 팀에 사용자를 초대할 수 있다. |
액터명 | 사용자 |
개요 | 사용자가 팀원을 초대한다. |
사전조건 | - 로그인 된 사용자여야 한다.
- 해당 팀의 팀장 권한을 가진 사용자여야 한다. |
사후조건 | - 요청이 성공하면 선택한 사용자에게 초대 요청을 발송한다.
- 요청이 실패하면 오류를 출력한다. |
기본흐름 | 1. 사용자가 팀 프로필 페이지에서 팀원 초대 버튼을 누른다.
2. 사용자가 팀원 추가/수락 페이지로 이동한다.
3. 사용자가 팀원으로 초대할 사용자를 검색한다.
4. 특정 사용자를 선택한다.
5. 사용자 초대 버튼을 누른다.
6. 초대된 사용자는 초대를 수락한다.
7. 초대한 사용자가 팀원에 추가된다. |
대체흐름 | 6a. 초대 받은 사용자가 초대를 거절한 경우
6a.1 초대한 사용자에게 거절했다는 사실을 알리고 유스케이스를 종료한다. |
회원관리

유즈케이스명 | 회원 관리 |
액터명 | 회원, 비회원 |
개요 | 사용자가 서비스를 이용하기 위해 로그인을 한다. |
사전조건 | 회원가입 된 사용자여야 한다. |
사후조건 | - 회원가입 완료시 로그인 페이지로 이동한다. |
기본흐름 | 1. 비회원은 사용자 프로필을 조회한다.
2. 회원가입 버튼을 눌러 회원가입을 한다.
3. 로그인 페이지로 이동하여 로그인을 완료한다.
4. 로그인 된 사용자는 사용자 프로필을 조회한다.
5. 사용자 프로필을 수정한다.
6. 로그인 된 사용자는 팀 프로필 페이지를 조회한다. |
대체흐름 | 4a. 접근 권한이 없는 페이지에 접근 할 경우
4a.1 로그인 페이지로 이동한다. |
후기 작성

유즈케이스명 | 후기 |
액터명 | 사용자 |
개요 | 사용자가 대결이 끝난 후 대결에 대한 후기를 작성할 수 있다. |
사전조건 | - 사용자가 대결을 마친 이후여야 한다.
- 사용자가 로그인이 된 사용자여야 한다. |
사후조건 | - 사용자가 본인이 보낸 후기를 확인할 수 있다.
- 사용자가 본인이 받은 후기를 확인할 수 있다. |
기본흐름 | 1. 사용자가 대결을 마친다.
2. 사용자는 매치 종료 버튼을 누른다.
3. 사용자는 승패 결과를 입력한다.
4. 사용자는 대결이 끝나면 상대의 매너를 평가하기 위해 경기 후기를 작성한다.
5. 사용자는 대결 후기를 조회한다. |
대체흐름 | 3a. 대결이 끝나 승패 결과를 입력했는데 대결 공고글을 올린 사용자와 신청자의 결과가 다른 경우
3a.1 대결 승패 결과가 일치할 때만 결과를 반영한다. 다른 경우에는 사용자의 승패 결과를 반영하지 못한다. |
와이어 프레임


ERD
