- 1. 프로젝트 소개
- 2. 프로젝트 목표
- 3. 프로젝트 진행기간
- 4. 배포 주소
- 5. 개발 인원 및 역할
- 6. 배포 아키텍쳐
- 7. 사용 기술
- 8. 개발 일정
- 9. 플로우차트
- 10. 데이터베이스 모델링
- 11. 요구사항 및 기능명세
- 12. API 명세서
- 13. 화면설계서
- 14. 프로젝트 구조
- 15. 개발 회고
현재 국내에서 최고 인기있는 프로스포츠는 프로야구입니다. 경기가 있는 날이면 각종 커뮤니티에서 야구 관련 게시물들이 쏟아집니다. 하지만 경기 기록을 보면서 사용자들끼리 소통을 하는 커뮤니티는 찾아 보기 어렵습니다. 그렇기 때문에 경기 기록을 제공하면서, 기록 작성에도 관여를 할 수 있는 커뮤니티 서비스를 기획하게 되었습니다.
- 프로야구 경기 결과와 함께 선수들의 기록을 제공해준다.
- 경기 기록을 관리자 뿐만 아니라 사용자들도 작성을 할 수 있다.
- 각 팀별 게시판을 통해 서로 소통을 할 수 있다.
- 2024-03-22 ~ 2024-04-08
김의찬 | 강성훈 | 정인우 |
---|---|---|
🔗 김의찬 | 🔗 강성훈 | 🔗 정인우 |
‣ 요구사항 및 기능 명세 ‣ API 설계 (API 명세서) ‣회원가입 및 로그인 기능 개발 ‣ 사용자 마이페이지 및 관리자페이지 기능 개발 ‣ 게시글 조건 검색 기능 개발 ‣마이페이지 페이징처리 적용 |
‣ 프로야구 관련 ERD 설계 ‣프로야구 기록 관련 데이터 수집, 가공 및 처리 ‣ UI/UX 디자인 ‣ 메인 페이지 ‣ 팀 순위 페이지 ‣경기 일정/결과 페이지 ‣선수 기록 및 순위 페이지 ‣선수 상세 정보 페이지 ‣선수 정보 API ‣선수 기록 API ‣팀 정보 API ‣팀 순위 API ‣일정/결과 API ‣투수/타자 라인업 API ‣경기 라인업 등록 페이지 및 라인업 등록 기능 ‣ 프로젝트 배포 및 CI/CD 파이프 라인 구축 |
‣ 게시판 api 개발 ‣ 댓글 api 개발 ‣ 게시글에 댓글 & 답글 적용 ‣ 게시글, 댓글 좋아요 기능 개발 ‣ toast ui editor 적용 ‣ 게시판 페이징처리 적용 ‣Flow Chart 설계 ‣개발 일정 기록 |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/boards' | POST | 게시글 추가 | ✅ | ✅ | |
'/boards' | GET | 게시글 목록 조회 | ✅ | ✅ | |
'/boards/{boardId}' | GET | 특정 게시글 조회 | ✅ | ✅ | |
'/boards/new-board' | GET | 특정 게시글 생성 및 수정 | ✅ | ✅ | |
'/boards/search' | GET | 게시글 조건 별 검색 | ✅ | ✅ | |
'/boards/{id}' | DELETE | 특정 게시글 삭제 | ✅ | ✅ | |
'/boards/{id}' | PUT | 특정 게시글 수정 | ✅ | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/boards/{boardId}/comments' | POST | 댓글 생성 | ✅ | ✅ | |
'/boards/{boardId}/comments' | GET | 댓글 조회 | ✅ | ✅ | |
'/boards/{boardId}/comments/{commentId}' | PUT | 댓글 수정 | ✅ | ✅ | |
'/boards/{boardId}/comments/{commentId}' | DELETE | 댓글 삭제 | ✅ | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/image-upload' | POST | 이미지파일 저장 | ✅ | ||
'/image-upload' | GET | 이미지 Byte 변환 | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/gameresult' | GET | 경기 결과 | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/' | GET | 인덱스 페이지 렌더링 | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/boards/{id}/like' | POST | 좋아요 추가 | ✅ | ✅ | |
'/boards/{id}/like' | DELETE | 좋아요 삭제 | ✅ | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/lineup/batter' | GET | 타자 라인업 조회 | ✅ | ||
'/lineup/pitcher' | GET | 투수 라인업 조회 | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/player/{id}' | GET | 특정 선수 조회 | ✅ | ||
'/player' | GET | 팀 선수 목록 조회 | ✅ | ||
'/player/info' | GET | 특정 선수 시즌기록 및 정보 조회 | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/record/batter/{playerId}' | GET | 특정 타가 기록 조회 | ✅ | ||
'/record/pitcher/{playerId}' | GET | 특정 투수 기록 조회 | ✅ | ||
'/record' | GET | 특정 시즌 선수 기록 조회 | ✅ | ||
'/record/ranking' | GET | 시즌 별 랭킹 조회 | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/login' | GET | 로그인 | ✅ | ||
'/login' | POST | 로그인 성공 | ✅ | ||
'/signup' | GET | 회원가입 | ✅ | ||
'/addUser' | POST | 회원가입 성공 | ✅ | ||
'/checkNicknameAvailability' | GET | 닉네임 중복 검사 확인 | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/mypage' | GET | 사용자 마이페이지 조회 | ✅ | ||
'/mypage/update/{userId}' | GET | 사용자 마이페이지 수정 페이지 조회 | ✅ | ||
'/mypage/update/{userId}' | PUT | 사용자 마이페이지 정보 수정 | ✅ | ||
'/mypage/{userId}' | DELETE | 사용자 계정삭제 | ✅ | ||
'/mypage/admin' | GET | 관리자 페이지 조회 | ✅ | ✅ | |
'/mypage/{userId}/admin' | POST | 관리자 권한 설정 | ✅ | ✅ | |
'/logout' | GET | 로그아웃 | ✅ | ||
'/checkCurrentPassword' | POST | 비밀번호 일치 여부 확인 | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/schedule' | GET | 월별 경기 일정 조회 | ✅ | ||
'/schedule/daily' | GET | 일별 경기 일정 조회 | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/scoreboard' | GET | 경기결과 점수판 조회 | ✅ |
URL | HTTP Method | 설명 | 로그인 권한 필요 | 작성자 권한 필요 | Admin 권한 |
---|---|---|---|---|---|
'/team' | GET | 팀 정보 조회 | ✅ |
└─📁src
├─📁main
│ ├─📁java
│ │ └─📁com
│ │ └─📁estsoft
│ │ └─📁springproject
│ │ │ 📄SpringProjectApplication.java
│ │ │
│ │ ├─📁aspect
│ │ │ 📄AuthenticationAspect.java
│ │ │
│ │ ├─📁config
│ │ │ 📄WebSecurityConfig.java
│ │ │
│ │ ├─📁controller
│ │ │ 📄BoardController.java
│ │ │ 📄CommentController.java
│ │ │ 📄FileApiController.java
│ │ │ 📄GameResultController.java
│ │ │ 📄IndexController.java
│ │ │ 📄LikeController.java
│ │ │ 📄LineupController.java
│ │ │ 📄PlayerController.java
│ │ │ 📄RecordController.java
│ │ │ 📄ScheduleController.java
│ │ │ 📄ScoreBoardController.java
│ │ │ 📄TeamController.java
│ │ │ 📄TeamRankingController.java
│ │ │ 📄UserController.java
│ │ │ 📄UserViewController.java
│ │ │
│ │ ├─📁domain
│ │ │ ├─📁dto
│ │ │ │ 📄Batter.java
│ │ │ │ 📄BatterLineup.java
│ │ │ │ 📄BatterRecord.java
│ │ │ │ 📄BatterRecordDetail.java
│ │ │ │ 📄BoardRequest.java
│ │ │ │ 📄BoardResponse.java
│ │ │ │ 📄CommentRequest.java
│ │ │ │ 📄CommentResponse.java
│ │ │ │ 📄GameInfo.java
│ │ │ │ 📄GameResult.java
│ │ │ │ 📄LikeRequest.java
│ │ │ │ 📄LikeResponse.java
│ │ │ │ 📄Pitcher.java
│ │ │ │ 📄PitcherLineup.java
│ │ │ │ 📄PitcherRecord.java
│ │ │ │ 📄PitcherRecordDetail.java
│ │ │ │ 📄PlayerInfo.java
│ │ │ │ 📄Schedule.java
│ │ │ │ 📄ScoreBoard.java
│ │ │ │ 📄Team.java
│ │ │ │ 📄TeamId.java
│ │ │ │ 📄TeamRanking.java
│ │ │ │ 📄TeamRankingDetail.java
│ │ │ │ 📄UserAdminResponse.java
│ │ │ │ 📄UserRequest.java
│ │ │ │ 📄UserResponse.java
│ │ │ │
│ │ │ └─📁entity
│ │ │ 📄Board.java
│ │ │ 📄Comment.java
│ │ │ 📄Like.java
│ │ │ 📄LikeId.java
│ │ │ 📄User.java
│ │ │
│ │ ├─📁repository
│ │ │ 📄BatterLineupMapper.java
│ │ │ 📄BatterRecordMapper.java
│ │ │ 📄BoardRepository.java
│ │ │ 📄CommentRepository.java
│ │ │ 📄LikeRepository.java
│ │ │ 📄PitcherLineupMapper.java
│ │ │ 📄PitcherRecordMapper.java
│ │ │ 📄PlayerMapper.java
│ │ │ 📄ScheduleMapper.java
│ │ │ 📄ScoreBoardMapper.java
│ │ │ 📄TeamMapper.java
│ │ │ 📄TeamRankingMapper.java
│ │ │ 📄UserRepository.java
│ │ │
│ │ └─📁service
│ │ 📄BoardService.java
│ │ 📄CommentService.java
│ │ 📄CustomUserDetails.java
│ │ 📄GameResultService.java
│ │ 📄LikeService.java
│ │ 📄LineupService.java
│ │ 📄PlayerService.java
│ │ 📄RecordService.java
│ │ 📄ScheduleService.java
│ │ 📄ScoreBoardService.java
│ │ 📄TeamRankingService.java
│ │ 📄TeamService.java
│ │ 📄UserService.java
│ │
│ └─📁resources
│ │ 📄application.properties
│ │ 📄data.sql
│ │ 📄mybatis-config.xml
│ │
│ ├─📁mappers
│ │ ├─📁lineup
│ │ │ 📄BatterLineup.xml
│ │ │ 📄PitcherLineup.xml
│ │ │
│ │ ├─📁player
│ │ │ 📄Player.xml
│ │ │
│ │ ├─📁record
│ │ │ 📄BatterRecord.xml
│ │ │ 📄PitcherRecord.xml
│ │ │
│ │ ├─📁schedule
│ │ │ 📄Schedule.xml
│ │ │
│ │ ├─📁scoreBoard
│ │ │ 📄scoreBoard.xml
│ │ │
│ │ ├─📁team
│ │ │ 📄Team.xml
│ │ │
│ │ └─📁teamRanking
│ │ 📄TeamRanking.xml
│ │
│ ├─📁static
│ │ ├─📁css
│ │ │ │ 📄admin.css
│ │ │ │ 📄board.css
│ │ │ │ 📄boardConditionList.css
│ │ │ │ 📄boardCSS.css
│ │ │ │ 📄boardList.css
│ │ │ │ 📄common.css
│ │ │ │ 📄edit.css
│ │ │ │ 📄gameResult.css
│ │ │ │ 📄header.css
│ │ │ │ 📄index.css
│ │ │ │ 📄mypage.css
│ │ │ │ 📄newBoard.css
│ │ │ │ 📄newBoardCSS.css
│ │ │ │ └─📁player
│ │ │ │ 📄info.css
│ │ │ └─📁images
│ │ │ │ 📄fenway_park.jpg
│ │ │ │ 📄logo.png
│ │ │ │ 📄santaclara.jpg
│ │ │ ├─📁catch-phrase
│ │ │ │ 📄KIA.png
│ │ │ │ 📄KT.png
│ │ │ │ 📄LG.png
│ │ │ │ 📄NC.png
│ │ │ │ 📄SSG.png
│ │ │ │ 📄두산.png
│ │ │ │ 📄롯데.png
│ │ │ │ 📄삼성.png
│ │ │ │ 📄키움.png
│ │ │ │ 📄한화.png
│ │ │ ├─📁character
│ │ │ │ 📄삼성.jpg
│ │ │ └─📁emblems
│ │ │ 📄kbo.png
│ │ │ 📄KIA.png
│ │ │ 📄KT.png
│ │ │ 📄LG.png
│ │ │ 📄NC.png
│ │ │ 📄SSG.png
│ │ │ 📄두산.png
│ │ │ 📄롯데.png
│ │ │ 📄삼성.png
│ │ │ 📄키움.PNG
│ │ │ 📄한화.png
│ │ └─📁js
│ │ 📄board.js
│ │ 📄boardEditor.js
│ │ 📄boardViewer.js
│ │ 📄divClick.js
│ │ 📄index_ajax.js
│ │ 📄user.js
│ │
│ └─📁templates
│ │ 📄admin.html
│ │ 📄board.html
│ │ 📄boardConditionList.html
│ │ 📄boardList.html
│ │ 📄edit.html
│ │ 📄gameResult.html
│ │ 📄index.html
│ │ 📄newBoard.html
│ │ 📄record.html
│ │ 📄schedule.html
│ │
│ ├─📁fragments
│ │ 📄config.html
│ │ 📄footer.html
│ │ 📄head.html
│ │ 📄header.html
│ │
│ ├─📁layout
│ │ 📄layout.html
│ │
│ ├─📁player
│ │ 📄info.html
│ │
│ ├─📁record
│ │ 📄ranking.html
│ │
│ ├─📁schedule
│ │ 📄daily.html
│ │
│ ├─📁teamRanking
│ 📄detail.html
│
└─📁test
└─📁java
└─📁com
└─📁estsoft
└─📁springproject
📄SpringProjectApplicationTests.java
처음부터 끝까지 믿고 따라와준 팀원들에게 보답하기 위해 책임감을 가지고 프로젝트에 임했습니다. 그래서 그런지 기대에 부응하고자 프로젝트의 내실을 다지기 보다는 사이즈만 키우는 것에 집중해서 겉만 크고 화려한 느낌이 강합니다 하지만 2주동안 진행된 프로젝트에서 이정도 사이즈의 결과물이 나왔다는 점은 너무 만족스럽습니다.
중간에 팀원 한 분이 개인 사정으로 이탈하면서 어려운 점도 있었지만 팀원간 적절한 소통과 업무 분담을 통해 위기를 잘헤쳐나온거 같고, 협업에 있어서 가장 중요한 것은 구성원 각각의 능력치 보다는 소통과 적절한 임무 부여라는 것을 다시 한 번 깨달을 수 있는 기회였습니다.
또, 이번 프로젝트에 확장성 좋은 주제 선정을 하였기 때문에 향후 진행되는 파이널 프로젝트에서 당 프로젝트를 이어서 했으면 좋겠다는 바람이 있습니다.
redirect가 get메소드가 아닌 post, delete와 같은 다른 메소드로 전송되는 등 프로젝트 도중 다양한 에러와 직면했고, 에러를 해결하기 위해 다양하게 고쳐보고 생각해보는 시간이 힘들었지만 그만큼 값진 시간이었습니다. 다음 프로젝트에서 더욱 멀리 나아갈 수 있는 원동력을 얻었다고 생각합니다.
github의 다양한 기능들을 사용해보는 기회가 되었습니다. Git Issues, Git Projects와 같은 페이지를 적극적으로 활용해서 팀원들의 진행 상황을 알기 좋았고, 브랜치 전략을 통해 훨씬 더 효율적인 협업을 이룰 수 있었습니다.
팀원의 중요성에 대해서 깊게 이해할 수 있었습니다. 프로젝트 도중 예기치않은 사정으로 팀원 한명이 나가게 되었는데, 후반부로 갈 수록 빈자리가 크게 느껴졌습니다. 그래도 남은 팀원들과 함께 각자 맡은 역할에 충실하고 서로에 대한 믿음이 있었기 때문에 만족스러운 결과가 나왔다고 생각합니다. 누구보다 열심히 하는 모습을 보여준 팀장님 또한 많은 동기부여가 되었습니다.
팀 프로젝트를 진행하면서 깃허브를 이용한 협업을 경험했습니다. 이 과정에서 이슈를 생성하고 해당하는 브랜치를 만들어 기능 개발과 버그 수정을 수행하고, PR을 통해 Merge하는 깃허브 워크플로우를 따르면서 프로젝트의 진행 상황과 방향성을 명확히 파악할 수 있었습니다. 이를 통해 협업의 중요성을 더욱 깨달았으며, 팀원들과의 소통과 코드 리뷰 등 피드백 과정도 중요하다는 것을 인지했습니다.
이번 프로젝트에서 스프링 시큐리티를 처음으로 적용해 보았습니다. 시큐리티 설정이 복잡하고 어려움을 겪었는데, 초기 세팅과 시큐리티 설정이 얼마나 중요한지를 몸소 깨달았습니다. 설계를 제대로 하지 않으면 사용자 관련 부분 뿐만 아니라 다른 부분에서도 버그가 발생할 수 있음을 경험적으로 알게 되었습니다.
초기에 진행한 인원으로 끝까지 가지 못한점이 아쉬웠습니다. 인원이 감소한 상황이지만 팀원들과의 활발한 소통과 끈기있는 모습으로 프로젝트를 안정적으로 마무리 할 수 있었습니다. 보다 성실한 팀원분들을 만나 한 단계 더 성장하고 팀원의 역할로써도 동기부여 받는 프로젝트 경험이였습니다.