팀 스포츠 게스트 초대 플랫폼
1. 기획 배경 및 동기
동호인/동아리 농구에는
“게스트”
라는 개념이 있습니다.농구를 할 때는 최소 10명이 필요한데(풀코트 기준), 가끔 몇 명이 나오지 못해서 8, 9명이 되는 경우가 있습니다.
그럴때, 외부의 모르는 사람을 “게스트”로 초대하여 같이 경기를 하는 방식입니다. 일종의 용병 개념입니다.
그런데 이를 중개하는 서비스가 다음 카페에 아래와 같이 직접 글을 올리는 방식 밖에 존재하지 않습니다.

이는 아래와 같은 단점이 존재합니다.
- 게시글 제목 형식이 정해져 있지 않아서 난잡하고,
요일/시간/인원/장소
같은 정보를 제목에 적지 않고 단순히“게스트 구합니다.”
같은 형식으로 되어 있으면 일일히 클릭해서 봐야하는 불편함이 있습니다.
- 별도의 연락 수단이 없어서, 보통 해당 글을 올린 사람의 개인 휴대전화 번호를 공개합니다. 이는 개인정보 이슈로 이어질 수도 있습니다. 게스트 비용도 직접 작성자의 계좌번호로 입금하는 방식이 많습니다.
- 작성자나 게스트 참여자가 검증되지 않아 아무나 글을 쓰고, 아무나 참여할 수 있습니다. 이는 비매너, 다툼, 노쇼의 문제로도 많이 이어지고 있습니다.
- 게시글 필터링이 잘 되지 않습니다. 그래서 아래와 같은 이상한 글들도 올라옵니다.

그래서 아래와 같은 기능 혹은 서비스를 제공하면 좋겠다고 생각했습니다.
- 지도를 기반으로 내 주변 혹은 특정 위치에서 게스트를 모집하는 글을 볼 수 있습니다.
- 형식화된 제목과 내용을 기반으로 사용자가 한눈에 해당 글의 내용을 파악할 수 있습니다.
- 게스트비를 직접 입금이 아닌 결제 형식으로 하고, 연락도 번호가 아닌 채팅으로 하여 개인정보를 보호합니다.
- 매너 지수를 만들어서, 팀이나 개인에 대한 필터링을 진행합니다. 원하지 않는 게스트는 받지 않는 형식을 취할 수 있습니다. 경기 이후에는 각자에 대한 리뷰를 진행하여 매너 지수를 반영합니다.
- 게시글 필터링 기능을 추가하여 불건전한 내용 혹은 관련없는 내용에 대해 생성을 방지합니다.
- 단순히 한 경기만 아니라, 동호회/동아리 같은 팀 모집도 가능하고 팀에 대한 관리도 할 수 있습니다.
농구 이외에도 축구, 테니스, 골프, 당구, 러닝, 클라이밍 등 여러 스포츠에도 적용 가능하다고 생각합니다.
또한 꼭 규격화 된 동호회 스포츠가 아니라, 야외 농구장과 같은 길거리 스포츠에도 적용해보고 싶습니다.
- 동네에서 혼자 농구하기 외로운 사람들을 위한 동네 길거리 농구장 모집 글 기능
- 현재 길거리 농구장에 사람이 얼마나 있는지 사용자의 현황 반영을 통해 나타내는 혼잡도 기능
일단 초기 사용자를 모으는데 집중하고, 나중에는 강습 모집과 같은 서비스를 추가하여 비즈니스 모델 구축도 생각하고 있습니다.
2. 사용자 스토리
김아무개씨는 농구 동아리의 장으로 반나절 뒤인 오늘 6시에 현재 동아리원들과 다른 동아리간의 농구 시합을 하기로 했었다. 그치만 당일 오전에 팀원 황아무개씨가 중요한 일로 인해 펑크를 내었고 당장 오늘 저녁 다른 동아리와 시합을 해야하는데 한명이 부족한 상황이었다. 때문에 동아리 대표인 김아무개씨는
“스게(가제)”
서비스를 이용하기로 했다.“스게”는 스포츠 게스트 초대 플랫폼으로써, 매번 스포츠 게임에 필요한 모든 인원이 참가하지 못해 인원이 부족할 경우 게스트를 구하는 글을 게시하여 사람(용병)을 모집할 수 있다. 농구 뿐만 아니라 축구, 야구, 배드민턴 등 다양한 카테고리로도 서비스를 한다.
김아무개씨가 하는 동아리는 워낙 유명한 동아리라 게시글을 올리자마자 수 많은 사람들이 대기를 하고 있다가 해당 모집글에 참여 예약 버튼을 누른다.(동시성)
김아무개씨는 모집글에 참여 예약 버튼을 누른 사람들 순으로 필터링하여 제일 먼저 참여 예약 버튼을 누른 사람에게 개인 연락처를 공유하지 않고 메시지를 보냈다.(채팅/소켓) 메시지를 받은 소아무개씨는 해당 동아리 게임에 참여하기로 결정하고 해당 시간에 앱 지도에 나와있는 장소로 가서 경기를 뛰었다.(지도)
소아무개씨는 김아무개씨의 동아리 경기에서 많은 감명을 받아 해당 동아리에 대한 리뷰, 매너점수를 굉장히 좋게 남겨줬다. 김아무개씨의 동아리는 워낙 유명하고 리뷰, 매너 점수를 많이 받아 페이지 랭킹에서도 순위권 안에 들어있다.(랭킹) 또 김아무개씨는 소아무개씨가 열심히 잘해주시고 매너있게 플레이해주셔서 동아리가 아닌 사람한테 남기는 매너 점수를 아주 좋게 남겨주었다.
3. 기능 리스트 후보들
모두 구현하는 것이 아니라, 해당 서비스에 넣어볼 수 있는 기능들 후보 리스트
기능 | 설명 |
모집 | 인원 모집, 포지션 협의 등 |
예약 | 참여 예약 |
클럽 | 스포츠 클럽(동아리), 클럽 평점 기능, 클럽 페이지(피드, 좋아요), 클럽 랭킹 |
채팅 | 모임 구성원을 위한 채팅 |
매너 점수 | 멤버 매너 점수 |
지도 | (모집 페이지 안에서)지도에 모임 위치 표시 |
검색 | 위치, 실력 수준, 선호 포지션 등 다양한 검색 조건 구현 |
게시글 필터링 | 게시글 생성 시 금지 단어 검사 |
투표 | 클럽 페이지, 채팅방 등에 편의 기능으로 삽입 |
챌린지 | 챌린지를 열어 참여자들끼리 인증할 수 있는 게시판. ex) 매일 운동장 5바퀴 뛰기 |
소셜 | 각 클럽 게시판에 올라온 피드 중 인기 많은 게시글들을 한 눈에 볼 수 있는 페이지, 좋아요 순 게시글 랭킹 기능 |
푸쉬 알림 | 새로운 댓글, 모집 마감 00분 전, 모임 시작 00분 전 등등 |
인증 인가 | 인증 / 모임장, 클럽 리더 등등 권한 처리 |
아래부터는 백엔드 관련 내용입니다.
4. 기술적 도전
도전 해볼만한 것들
- 채팅 기술(Socket)
- 커서 기반 페이징 최적화(Pagination)
- 알림 기능(FCM)
- 랭킹(Cache)
- 지도(SSL)
- 동시성 이슈
- 무중단 배포
5. 사용 해볼만한 기술 스택
- 일반
- Java
- SpringBoot
- Redis
- 데이터베이스
- MySQL
- H2
- JPA
- QueryDSL
- FireBase
- 배포 자동화
- Github actions
- Docker
- 인프라
- dev (개발서버)
- AWS EC2 1대
- RDS 1대
- Elastic Cache 1대
- prod (운영서버)
- AWS EC2 2대(무중단 배포)
- RDS 1대
- Elastic Cache 1대
- 테스트
- Junit
- Mockito
- 문서화
- Swagger
- RestDocs
- 모니터링
- Sentry
- CloudWatch
6. 질문
- 혼자서도 사용할 수 있는 서비스 vs 여러 사용자가 필요한 플랫폼
- 상용화를 목적이라면 혼자서도 사용할 수 있는 서비스(ex. 다이어리, 가계부, 자기관리, 일정관리 등)가 실제 사용자를 모집하는데 있어서는 더 유리할 것이라 판단됩니다. 하지만 그만큼 규모에 대비하는 기술적인 도전을 많이 하기는 어려울 것이라고도 생각이 됩니다.
- 반면, 여러 사용자가 필요한 플랫폼은 그만큼 고려해야 할 것도 많아서 기술적으로 도전을 많이 해볼 수 있을 것 같지만, 사용자 모집이 어려워서 사실상 실사용자가 없이 프로젝트를 위한 프로젝트가 될 가능성이 높습니다.
- 이 둘의 밸런스를 지키기가 어려운 것 같은데, 이를 선택할만한 기준이나 방향성에 대한 조언을 얻을 수 있을까요?
- 시니어 분들이 많이 말씀하시는 부분이 “기본기의 중요성”인데, 아이디어 구상을 하면서 기본기에 해당하는 범위가 어느정도일까에 대한 고민이 있습니다. 객체지향적 설계, 클린코드, 꼼꼼한 예외처리나 테스트코드 이런 것들에 집중을 하는 것이 기본기를 많이 챙겨가는 방향일까요? 무중단 배포나, 소켓 통신, MSA 이런 것들이 지금의 프로젝트 규모에서 보았을 때는 조금 과할 수도 있다는 생각이 들었습니다. 혹은 원리를 잘 모르고 그냥 구현만 하는 느낌이 들지 않을까 걱정도 됩니다. 하지만 안하면 흔히 말하는 이력서에 한 줄 추가되는 그런 무기(?)들을 놓치는 걸까 라는 생각도 들고, 참 어려운 문제인데요. 이런 방향성을 설정하는데 조언을 조금 구하고 싶습니다.
- 예외에 대한 응답을 전달할 때, 보통 에러 코드(ex. E001)를 미리 정하고 문서화 해서 해당 코드를 응답하는 편인지, 아니면 상태코드와 에러메시지에 기반하는 경우가 더 많은지 궁금합니다.
- 프론트엔드와 백엔드 인프라 구성(보통 흔하게 어떻게 돌아가는지..)