휘슬 프로젝트 소개
휘슬은 축구를 좋아하는 축구인들이 모여 팀을 형성하고 팀대팀 매칭을 하도록 도움을 주는 웹 서비스입니다.
휘슬의 단기적 목표는 유저간의 축구(또는 풋살) 매칭 서비스를 제공하고 중기적으로는 리그, 커뮤니티를 제공하며 장기적으로는 팀단위 축구 전산시스템을 제공하는 목표를 가지고 있습니다.
ERD 소개
휘슬 프로젝트는 팀대팀 매칭을 메인으로하는 서비스 입니다. 따라서 서비스의 핵심인 '유저(User)'와 '팀(Team)' 그리고 '경기(Match)'를 가장 우선적으로 설계하여 구현했습니다.
- 각 테이블의 연관 관계는 유저 -> 팀 (일대다), 유저 -> 매치 (일대다), 팀 -> 매치 (일대다) 입니다.
- 각 테이블의 id(ex: user_id) 값은 PK이며 연관관계로 가져올 때 FK로 가져오도록 구현했습니다.
*** 경기(Match) 테이블의 away_team_id를 FK로 잡지 않은 것은 경기 테이블을 생성할 때 원정팀(Away Team)이 특정되지 않기 때문에 FK로 가져올 수 없었습니다. 따라서 select로 away_team_id로 가져오는 경우 응답 속도가 느릴 수 있기 때문에 away_team_id를 index로 설정하여 다량의 데이터가 DB에 적재되었을 때 away_team_id로 select하더라도 빠르게 응답할 수 있도록 구현했습니다. ***
팀과 팀원 목록, 팀 신청 테이블
축구는 11명, 풋살은 5명의 최소인원으로 구성된 단체입니다. 따라서 팀을 생성함과 동시에 경기 매칭을 진행하는 것은 불가능합니다. 팀대 팀의 매칭을 진행하기 위해서는 경기를 진행하기 위한 팀 인원이 충족되어야합니다.
따라서 휘슬은 팀의 정보를 담당하는 'Teams'테이블과 팀원 정보를 담당하는 'Team_Member_Lists' 테이블, 팀 가입을 신청할 수 있는 'Applies'테이블을 생성하여 관리하고 있습니다.
- 각 테이블은 'Users'테이블과 일대다의 연관관계를 맺고 있으며 user_id를 FK로 받고 있습니다.
- 팀과 팀 목록, 팀 가입신청 테이블은 일대다의 연관관계를 맺고 있으며 team_id를 FK로 받고 있습니다.
- 팀가입 신청과 팀 목록은 일대다의 연관관계를 맺고 있습니다.
- 팀가입 신청과 팀 목록의 일대다의 연관관계는 고민이 많았습니다. Apply -> Team_Member_List 로 팀원 정보를 insert할 때 team_id를 기준으로 select하는 것이 직관적이기 때문입니다. 따라서 apply_id를 FK로 만들어 불필요한 리소스를 사용하는 것일 수 있다고 판단했습니다. 다만, 추후에 '강퇴' 기능이나 '재가입 불가' 기능을 추가하게 된다면 apply_id로 select하는 쿼리가 필요할 것이라고 판단하여 추가했습니다.
'Project > Whistle(축구 매칭 웹 서비스)' 카테고리의 다른 글
spring security apply() deprecated 이슈 트러블 슈팅 (0) | 2024.06.11 |
---|---|
Spring Security 마이그레이션 중 발생한 에러 해결 (1) | 2024.05.22 |
[ whistle ] 불확실한 변수명과 클래스명의 위험성 (2) | 2023.12.05 |
[ Trouble Shooting ] match와 leagueList사이에서 순환참조가 발생함 (0) | 2023.09.21 |
[ Whistle ] Match 테이블과 Team의 다대다 연관 관계 필요성에 관련한 문제 (0) | 2023.09.14 |