Spring-React Native 기반 스포츠 직관 기록 어플리케이션
내가 사랑하는 팀의 경기, 그 열정과 감동을 일기로 남기다.
경기장에서 느꼈던 환희와 아쉬움을 기록하고,
팀을 향한 응원의 순간들을 한곳에 담는 특별한 일기 어플리케이션입니다.
- 2024.03.17 ~ 2024.09.01
- 공통 작업: 서비스 화면 설계, 기능 설계, 통합 및 형상 관리
- 이재희: 게시글(Ticket) CRUD, 스프링 서버 초기 구축, 로그인, 내 정보 관리
- 전혜원: 응원하는 팀(MyTeam) 기능, DB 구축, 회원가입, 비밀번호 변경, 캘린더 기능
- 언어: JAVA (17.0.7)
- 백엔드: Spring Framework
- 프론트엔드: React Native (react-native-cli 2.0.1)
- IDE: Visual Studio Code, IntelliJ
- Database: MySQL
- ORM: Hibernate, JPA (Java Persistence API)
![](https://private-user-images.githubusercontent.com/124273674/367560778-196b9972-1e23-4f23-a615-94c2780fd071.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii8xMjQyNzM2NzQvMzY3NTYwNzc4LTE5NmI5OTcyLTFlMjMtNGYyMy1hNjE1LTk0YzI3ODBmZDA3MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE0JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxNFQyMTAzNDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kMGYzNTc3OTYxZTFhN2VhYjRmNzdiNjQ5Mzk3YmNhY2RkNWY1MTIzMGI1ZTZkYWQ0NjJiY2UzZDM3OWU0NDkzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.UzoOQUE-XK1UylSbV4MB95rIOs3rMJfj2NfWFLe4NYY)
- 사용자가 입력한 아이디와 비밀번호를 DB에서 확인하여 일치하는 경우 로그인 성공.
- 로그인 성공 시 세션에 사용자 아이디 저장.
![](https://private-user-images.githubusercontent.com/55887059/367561002-3c3c2664-ac45-4b4e-997b-143ffa19a625.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjEwMDItM2MzYzI2NjQtYWM0NS00YjRlLTk5N2ItMTQzZmZhMTlhNjI1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg5NGI3NjhmNDQwODlmMzk0ZTkwYzJhN2VkNWMxOGE2ZWM0ZTc1OTEwZWQyYjYyYmM4NWI4YjI0Y2E0OTA3MmEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.gGmVajQ5D1KjEsOK6lkUUFK9Y5_10htkAZFqMWHG1ls)
![](https://private-user-images.githubusercontent.com/55887059/367560988-2b7b6636-47da-4e00-bc31-afba29467e44.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA5ODgtMmI3YjY2MzYtNDdkYS00ZTAwLWJjMzEtYWZiYTI5NDY3ZTQ0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYzNWNiYjQ2MDhhMWUwNWZjYTNiZmNiZDA4YTQyZmYyYjg4MTZmYWQ5OTNiODYwMjI2YWVjNDQ4M2YxNWM1NmEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DBb8DJMowm1dDbBBpltsbWGoWPyur0mtH35DIgmBG2k)
- 입력된 정보를 DB에서 검증하여 중복된 아이디가 없을 경우, 새로운 사용자 정보 등록.
![](https://private-user-images.githubusercontent.com/55887059/367560963-d85dcc6d-dbfe-412c-96f5-5900de742281.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA5NjMtZDg1ZGNjNmQtZGJmZS00MTJjLTk2ZjUtNTkwMGRlNzQyMjgxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU3MGY4ZjQ4OWEwODJmZjZjMGFmODJlNTlkODkyMGM5NDk0NjRlZmFmZmVjMzk0MDg1ZTYxZThlZGZkMTBlYjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.xzN5UQjj39_qGV34Gg-IIEhJkOh_kRNUwSNnXlDpxWg)
![](https://private-user-images.githubusercontent.com/55887059/367560965-f79739a1-ba7b-48c8-94ab-984b4416c5a5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA5NjUtZjc5NzM5YTEtYmE3Yi00OGM4LTk0YWItOTg0YjQ0MTZjNWE1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg1ZmY2MjY0ZDRiODUwYzkzN2ZlZGFlY2Q3NTE4MjBkODgxMjRhMDAwNWI5ZTg2ZjE2MGQ0YzllNDU1MjIyZmEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.D7IG2JvFtbiHi4EYGPhokuAVtSTn5e_LhkaFPGwPE7M)
![](https://private-user-images.githubusercontent.com/55887059/367560966-81821e6f-2969-400b-ac64-1ed3726fbc7e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA5NjYtODE4MjFlNmYtMjk2OS00MDBiLWFjNjQtMWVkMzcyNmZiYzdlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM3NDIxMTY3MTAyNDRkYTM5YTdmZGI4ZGM5MjU2Yzg3ZGZjYTBkZGY5YzcxYzdlMGM2NGE5Mjc2ODg0NTA4OTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.8DZdFqW0sechT7dDWlhdOmHS57dU0QSoeWMJ5PYI3F0)
![](https://private-user-images.githubusercontent.com/55887059/367560967-36ddd52d-be3a-477a-9048-a7c2d055389d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA5NjctMzZkZGQ1MmQtYmUzYS00NzdhLTkwNDgtYTdjMmQwNTUzODlkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAxZmQ3NGZhNTk2YjBhMGU4ZjhlMTQ4YzkwYjZlY2M5MGVmYWQyNDJjZmMwZjMzMWY1MjIyYzQ5NTYzZWM0NmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.QNNediJpuo5tPcv9yfk7aAc8vTiQ6XgiyExtUxkSRkc)
- 사용자는 직관한 경기의 내용을 기록, 수정, 삭제할 수 있습니다.
- 응원하는 팀(MyTeam)과 연동하여 **경기 결과(승, 무, 패)**를 스티커로 표시합니다.
![](https://private-user-images.githubusercontent.com/55887059/367560928-0f375e06-5f36-4f94-bba9-816532949628.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA5MjgtMGYzNzVlMDYtNWYzNi00Zjk0LWJiYTktODE2NTMyOTQ5NjI4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVlMTE5OThiYTE3NWU4OGIyY2Y5Zjg5ZGY4MWE0ODVlMDA1OWFjOGJiMWUwMTJlYTU5N2FlMTVjMzNkN2M1ZWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.6gTeOSrTRFeF0PSLD4XvwNGbJ4VVPSN76Mn_4rTMtgI)
![](https://private-user-images.githubusercontent.com/55887059/367560926-e24350a1-ff60-402f-821e-782379ee8c67.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA5MjYtZTI0MzUwYTEtZmY2MC00MDJmLTgyMWUtNzgyMzc5ZWU4YzY3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTI1ZjEzNDAzNTlkMzYwZTdjNzE1YWYyY2Y0Njc4MDEwMzQ2YTNiNmM2N2U1N2Q5ZjI3NjJlMmYzM2NkNTMzODkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.IeGdPBxo6R_otFyG4dvHwWfUI7KDGT3UWkGUy4Khmzw)
- 월별로 기록된 직관 일정을 캘린더 화면에서 조회 가능.
- 특정 날짜를 클릭하여 그날의 직관 기록에 쉽게 접근할 수 있습니다.
![](https://private-user-images.githubusercontent.com/55887059/367560907-109c0e06-330b-4199-a8ce-c7eb77843e57.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA5MDctMTA5YzBlMDYtMzMwYi00MTk5LWE4Y2UtYzdlYjc3ODQzZTU3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg4Yzk2NWE1ZTQ1MzExMmU0OTQ5MjA4MmMzYjczMTUyMTkwNThiY2Y1NjFhNTliZDU1NzE2ODVkMzVlNDRmNGQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.8dA8NIh_HiQ4yx6B7rL2z8MIiCSIyMkHCHhsmN-Hkfs)
![](https://private-user-images.githubusercontent.com/55887059/367560901-38165eb2-ca7b-4240-9d0c-9b0f47bd51f0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA5MDEtMzgxNjVlYjItY2E3Yi00MjQwLTlkMGMtOWIwZjQ3YmQ1MWYwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWYwYzY5ZGU5MTA0YTc1ZGQ5MjRkMGI4MWFmMmE5NjAzMzE5NGIwNTUzZWJhYjA5NTIwZTUyMDJhYzgwYjI0YzQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.EZvIaxZvajB2VoxydvL4VS8rDJQ3AGIOBO_jetuX6xA)
![](https://private-user-images.githubusercontent.com/55887059/367560904-dfa7c872-4836-4212-aea4-d54eb9037faf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA5MDQtZGZhN2M4NzItNDgzNi00MjEyLWFlYTQtZDU0ZWI5MDM3ZmFmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWExOThhYjdhNjIwZWYxYTAwMjFlMWYzMjJlNDY4MzcxNzk4NTBhOThiMzJlMTA5MDhmNmYwNzk4MmJhYmFhNTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.KQRRaMKLFdFc4SCQUITexHMVEbAx1zfwlTLZgJUQfEY)
- 사용자는 닉네임과 비밀번호를 변경할 수 있습니다.
- 닉네임 변경 시 중복 여부를 확인하여 중복되지 않은 경우에만 변경 가능합니다.
![](https://private-user-images.githubusercontent.com/55887059/367560842-6c96de0e-f9e1-4701-a259-4725a670f31b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA4NDItNmM5NmRlMGUtZjllMS00NzAxLWEyNTktNDcyNWE2NzBmMzFiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWIzMTg3ZmM2NjYxYzkxOGQ0YWI1MDlmYjY1MWQ4ODM5MTRiZGVmNTZkYjhlODhhMjI4ZjAzMjE0NTBhNzEzOGImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qjjoepda6d86Zg_KHzA0gpKVoLsOQabbK0gyZiKmzWQ)
![](https://private-user-images.githubusercontent.com/55887059/367560840-1974fd8d-3e78-4184-b619-21f585a6e143.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA4NDAtMTk3NGZkOGQtM2U3OC00MTg0LWI2MTktMjFmNTg1YTZlMTQzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWE2MzFmZjEyYzJkZmRiNGVhMzc4M2YxY2UxOGZhMjNkNjZiYzE1OTFmMWE3OGI2MzhmYTMwZmQ1YzVmYjYyYTcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.eNFms7JwKt1CLj48AsnaT-t9dRmYW22P7h7tdfhXMlE)
![](https://private-user-images.githubusercontent.com/55887059/367560839-169bb730-b43f-478e-af6b-4d86dd407c90.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk1NjczMjMsIm5iZiI6MTczOTU2NzAyMywicGF0aCI6Ii81NTg4NzA1OS8zNjc1NjA4MzktMTY5YmI3MzAtYjQzZi00NzhlLWFmNmItNGQ4NmRkNDA3YzkwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE0VDIxMDM0M1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFmMGUxZTFiODBkYTE5ZWY1ZjYzOTFjM2I1ZWI2M2U0OGY2M2YxMzk2ZTMyZDMzZDcyOWJkNmFjMTc1ZjNkYjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.fk4FJ63sXwB6HxDDJ5IhKIoFIBi49MsLHsgmglUotw8)
- 사용자는 응원하는 팀을 추가, 삭제할 수 있으며, 축구, 야구, 농구, 배구 팀을 지원합니다.
- 응원하는 팀의 승률 및 통계 정보를 제공합니다.
├── backend/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ ├── com/example/project/
│ │ │ │ │ ├── controller/ # API 요청 처리 (TicketController, UserController, MyTeamController…)
│ │ │ │ │ ├── dto/ # 데이터 전송 객체 (UserDto, TicketDto…)
│ │ │ │ │ ├── entity/ # 데이터베이스 엔티티 클래스 (UserEntity, TicketEntity, MyTeamEntity…)
│ │ │ │ │ ├── exception/ # 예외 처리 (ValidationException, GlobalExceptionHandler)
│ │ │ │ │ ├── repository/ # DB 연동 (TicketRepository, UserRepository…)
│ │ │ │ │ ├── service/ # 비즈니스 로직 (TicketService, UserService…)
│ │ │ └── resources/
│ │ │ └── application.yml # 데이터베이스 및 환경 설정
│ └── build.gradle # Gradle 빌드 스크립트 (종속성 및 빌드 설정)
│
├── frontend/
│ ├── src/
│ │ ├── LoginScreen.js # 사용자 로그인 화면
│ │ ├── TicketScreen.js # 직관 기록 관리 화면
│ │ ├── CalendarScreen.js # 직관 기록 캘린더 화면
│ │ ├── … # 이외 기능 화면
│ │ ├── map.js # 공통 UI 이미지 및 매핑 변수 정의
│ │ ├── style.js # UI 컴포넌트 스타일 정의
│ │ ├── NewApp.js # 메인 애플리케이션 파일
│ └── package.json # 프론트엔드 종속성 및 스크립트 정의
1. Backend (Spring Boot) -
twsServer
-
Ticket (Controller, Service, Dto, Entity, Repository): 사용자가 직관한 경기 기록을 CRUD 방식으로 관리.
- 경기 기록 생성, 수정, 삭제 기능 제공.
- 세션을 통한 사용자 인증 처리 및 필수 데이터 검증.
- 관련 클래스:
TicketController
: 경기 기록 요청 처리, 세션 기반 사용자 인증 및 유효성 검사.TicketService
: 비즈니스 로직 구현, 티켓 생성/조회/삭제 기능 처리.TicketDTO
: 클라이언트와 서버 간 데이터 전송 객체.TicketEntity
: 데이터베이스와 매핑되는 엔티티 클래스.TicketRepository
: JPA를 통한 DB 연동.
-
User (Controller, Service, Dto, Entity, Repository): 사용자 인증 및 정보 관리.
- 로그인, 회원가입, 닉네임/비밀번호 수정, 아이디/닉네임 중복 체크, 이메일 확인 등
- 세션을 통해 로그인 상태를 관리하며, 회원가입 시 필수 정보 검증을 수행.
- 관련 클래스:
UserController
: 사용자 요청 처리, 아이디/닉네임 중복 체크, 로그인/로그아웃, 회원가입 등 API 제공.UserService
: 사용자 관련 비즈니스 로직 구현, 아이디/닉네임 중복 검사, 로그인 처리.UserDTO
: 클라이언트와 서버 간 데이터 전송 객체.User
: 데이터베이스 엔티티, 사용자 정보 (아이디, 비밀번호, 닉네임 등) 매핑.UserRepository
: JPA를 통한 DB 연동, 사용자 정보 저장 및 조회.
-
Team (Controller, Service, Dto, Entity, Repository): 스포츠 팀 정보 관리.
- 팀의 기본 정보 및 통계 데이터를 관리.
- 특정 팀의 정보 조회 및 모든 팀 목록 조회 기능 제공.
- 관련 클래스:
TeamController
: 팀 정보 관리 요청 처리, 특정 팀의 정보 조회, 모든 팀 목록 조회 API 제공.TeamService
: 팀 관련 비즈니스 로직 구현, 팀 정보 조회 및 전체 팀 목록 관리.TeamDTO
: 클라이언트와 서버 간 데이터 전송 객체.Team
: 데이터베이스 엔티티, 팀 정보 (팀 번호, 팀 이름, 통계 데이터 등) 매핑.TeamRepository
: JPA를 통한 DB 연동, 팀 정보 저장 및 조회.
-
MyTeam (Controller, Service, Dto, Entity, Repository): 사용자가 응원하는 팀 관리.
- 사용자가 선택한 팀 추가, 삭제 및 응원 팀의 승률 정보 조회 기능 제공.
- 관련 클래스:
MyTeamController
: 사용자가 응원하는 팀 목록 조회, 새로운 팀 추가, 팀 삭제 및 승률 정보 조회 API 제공.MyTeamService
: MyTeam 관련 비즈니스 로직 구현, 사용자가 선택한 팀을 추가/삭제하고 승률 정보 관리.MyTeamDTO
: 클라이언트와 서버 간 데이터 전송 객체.MyTeamEntity
: 데이터베이스 엔티티, 사용자와 팀의 매핑 정보 관리.MyTeamRepository
: JPA를 통한 DB 연동, 사용자가 응원하는 팀 정보를 저장 및 조회.
2. Frontend (React Native) -
Today-sWatchingLive
login.js
: 사용자가 로그인하는 화면으로, API를 통해 안전하게 인증을 처리합니다.main.js
: 사용자가 직관한 경기 기록(티켓)을 한눈에 확인하고, 필요 시 기록을 삭제할 수 있는 메인 화면입니다.addTicket.js
: 새로운 직관 기록을 작성하는 화면으로, 경기 결과와 팀 매칭을 통해 상세한 티켓을 생성합니다.calendar.js
: 월별로 직관 기록을 확인할 수 있는 캘린더 화면입니다. 특정 날짜의 경기를 쉽게 찾아보세요.signin.js
: 신규 사용자를 위한 회원가입 화면입니다. 이메일, 비밀번호, 닉네임을 입력하고 직관 기록을 시작하세요.findPw.js
: 비밀번호를 잊어버렸을 때 사용되는 비밀번호 찾기 화면입니다. 이메일을 통해 안전하게 비밀번호를 재설정할 수 있습니다.start.js
: 앱을 처음 실행할 때 표시되는 초기 로딩 화면입니다.myInfo.js
: 로그인된 사용자의 기본 정보를 확인할 수 있는 화면입니다.infoSetting.js
: 사용자 정보 수정 화면으로, 닉네임 및 비밀번호 변경을 지원합니다.teamList.js
: 사용자가 응원하는 팀을 조회하고, 새로운 팀을 추가할 수 있는 화면입니다. 축구, 야구, 농구 등 다양한 종목을 지원합니다.teamAnalysis.js
: 응원하는 팀의 경기 승률을 분석하여 통계로 보여주는 화면입니다.
user
: 사용자 닉네임, 비밀번호, 이메일 등 계정 정보를 저장하고, 직관 기록과 연결합니다.ticket
: 사용자가 직관한 경기 기록을 저장하며, 경기 일자, 점수, 팀과의 연동 정보를 포함합니다.my_team
: 사용자가 응원하는 팀 정보를 저장하며, 다수의 팀을 추가 및 관리할 수 있습니다.team
: KBO, K리그, KOVO, KBL 등 앱에서 제공하는 모든 스포츠 팀 정보를 저장합니다.