Skip to content

Conversation

@isaac56
Copy link
Collaborator

@isaac56 isaac56 commented May 7, 2021

안녕하세요 백엔드 아이작입니다.

1주차까지 진행한 내용입니다.

1. DB 설계

  • Aggregate root를 크게 User, Team, Game 세 개로 나누어 설계해보았습니다.
  • Team은 Player를 갖고 있으며 여러 게임에서 재사용할 수 있도록 생각해 보았습니다.
  • Game은 진행중인 게임에 대한 정보를 갖고 있습니다.
  • Game Entity를 통하여 다음과 같은 테이블에 접근 가능합니다.
    • batting_history: 타자별 타율 기록)
    • inning: 각 이닝 별 (1회 초, 1회 말 등) 점수와 투구 기록을 갖고 있습니다.
      • Inning Entity를 통하여 pitch_history 테이블에 접근 가능합니다.
      • pitch_history: 어떤 투수가 어떤 타자에게 어떤 상황에서(예: 1 스트라이크 2볼인 상황) 어떤 투구(스트라이크, 볼)를 기록했는지 갖고 있습니다.

2. 야구 게임의 진행을 서버에서 계산하는 방향으로 구현하였습니다.

  • client는 서버에 세 가지의 결과(스트라이크, 볼, 안타) 만을 전송하고 서버는 전송받은 결과를 토대로 game 테이블을 수정합니다.
  • Game entity를 통해 진행 상황에 필요한 모든 테이블에 접근 가능하기 때문에, Game entity 내부에 게임 진행에 필요한 대부분의 비즈니스 로직이 들어가있습니다.

3. 인증 기능을 제외한 상태에서 기본 API를 다음과 같이 구현하였습니다.

  • API 문서 https://documenter.getpostman.com/view/1562550/TzRRBTZ1
  • 게임방 목록 받기: GET /game/list
  • 게임방 생성 요청: POST /game
  • 게임방 참가 요청: POST /game/joining
  • 게임 진행 (스트라이크, 볼, 안타) 요청: POST /game/status/pitch-result
  • 게임 현황 요청(게임의 메인 뷰 업데이트): GET /game/status
  • 이닝 별 스코어, 타율 기록 요청 (게임의 히스토리 뷰 업데이트): GET /game/history

4. AWS 배포하였습니다.

  • baseball application을 위한 VPC를 생성했습니다.
  • WAS용 인스턴스와 DB용 인스턴스를 나눠서 생성했습니다.
  • WAS용 인스턴스는 public용 서브넷에 연결, DB는 private용 서브넷에 연결했습니다.

개발을 진행하면서 DB 설계 등 내용이 자주 변경되어 커밋 개수가 많은 점 양해부탁드립니다 ㅠㅠ
많은 지적 부탁드립니다.
항상 좋은 코드 리뷰 해주셔서 감사드립니다😁

lenaios and others added 30 commits May 3, 2021 14:46
요구사항을 토대로 초기 relationship model을 설계하였습니다.
만든 테이블은 다음과 같습니다.
- user
- game
- team
- player
- inning
- batting_history
- pitcher_history
1. game 테이블에 1루, 2루, 3루에 해당하는 player_id 추가하였습니다.
2. user 테이블에 현재 내가 game에서 home인지 away인지 기억할 수 있도록 venue 칼럼 추가하였습니다.
개발용 database에 연결하도록 설정하였습니다.
…y table

1. pitch_history table의 created_time을 index_in_inning으로 변경하였습니다.
2. index_in_inning은 inning 엔티티에서 pitch_history를 List로 갖기 위한 index 값입니다.
설계한 테이블을 생성하는 DDL 문 추가
1. player 테이블에 uniform_number 칼럼 추가
2. Game aggreagte에서 player를 가리키는 방법을 id 에서 team id + uniform number로 수정
1. inning 테이블의 inning_name 칼럼명을 key_in_game으로 변경
2. batting_history 테이블에 key_in_game 칼럼 추가 (Game객체가 BattingHistory 객체를 Map으로 갖기 위한 값 추가)
1. 야구에서 1회"초", 1회"말"에 해당하는 Havles enum 생성
2. TOP이 초, BOTTOM이 말
1. 공을 던진 후의 결과에 해당하는 enum 생성
2. 안타, 스트라이크, 볼
1. 야구 게임 한판에 해당하는 오브젝트입니다.
2. 생성자에 awayTeam, homeTeam을 인자로 받아서, 게임 시작 상황으로 초기화가 됩니다.
데이터가 없을 경우 throw할 custom exception 생성
Aggregate root인 Game의 repository 생성
Aggregate root인 Team의 Repository 생성
GameRepository 의 create 테스트 추가
[BE] 설계한 스키마에 맞게 persistent object 생성
1. game 테이블에 strike_count, ball_count, out_count 칼럼 추가
2. 추가한 칼럼에 맞도록 Game 객체에 프로퍼티 추가
현재 선수의 등번호를 넣어주면 다음 출전 선수를 반환하는 메소드 작성
Game 객체를 다음 이닝으로 설정해주는 메소드 추가
@isaac56
Copy link
Collaborator Author

isaac56 commented May 9, 2021

안녕하세요 브라이언
제가 이해할 수 있는 부분은 반영했지만
어려워서 이해하지 못한 내용은 코멘트 남겨놨습니다.

자바 코딩 컨벤션이나 클래스 책임 분리 등 기본도 못지킨 것 같아 반성하게 되었고 도움이 되었습니다.
코드 리뷰 감사드립니다😄
(실력이 부족해서 미션 완성이 빠듯할 것 같아, 큰 문제가 아니라면 approve 해주시면 감사하겠습니다ㅎㅎ)

@isaac56 isaac56 requested a review from wheejuni May 9, 2021 16:07
snowjang24 pushed a commit that referenced this pull request May 9, 2021
* docs: 📚 README 작성

* [#2] 컴포넌트 설계

- CRA
- npm 모듈 설치
    - styled-components
    - react-icons
    - normalize.css
- 컴포넌트 폴더 구조
   - game-list
   - game-play
        - board
        - log
        - player
        - score
   - game-roster
   - game-score
- App.jsx
   - 배경 이미지 추가

* [#3]feat: ✨ 게임 리스트 UI 구현

* feat: ✨ gamescore UI 구현

* [#4] feat: ✨ 팝업 컴포넌트 구현

* [#5] feat: ✨ 선수 명단 팝업 UI

* feat: ✨ gamescore UI 완성

* [#14] Play 컴포넌트 공통 UI 구현

- App.js
   - UI 확인을 위한 import
- GamePlay.jsx
   - grid UI 작성
- Board, Log, Player, Score .jsx
   - 기본 Component 작성

* [#15] chore: 🔧 임시 data 추가

* feat:✨ game-play score UI구현

* [#17] feat::sparkles: game play player UI 구현

* [#18] Game-play Log UI 구현

* [#18] chore: 🔧 CSS 수정

* chore:🔧 score 팝업 컴포넌트로 감싸기

* [#23] game board UI 구현

- GamePlay.jsx
   - UI 구현 및 하위 컴포넌트 import
   - 상태관리를 위한 reducer 작성 (임시)
- BallCount, Board, Inning, Screen .jsx
   - UI 구현

* [#25] feat: ✨ 팝업 애니메이션 구현

Co-authored-by: kowoohyuk <kowoohyuk91@gmail.com>
@wheejuni wheejuni merged commit 1c83952 into codesquad-members-2021:team9 May 11, 2021
sphilee pushed a commit that referenced this pull request May 12, 2021
sphilee pushed a commit that referenced this pull request May 12, 2021
ghis22130 added a commit that referenced this pull request May 14, 2021
ghis22130 added a commit that referenced this pull request May 14, 2021
ksundong pushed a commit that referenced this pull request May 16, 2021
 - CRA 생성
 - 기본 컴포넌트 생성
ksundong pushed a commit that referenced this pull request May 16, 2021
ksundong pushed a commit that referenced this pull request May 16, 2021
crongro pushed a commit that referenced this pull request May 18, 2021
* Update README.md

* Update README.md

* Update README.md

* docs: FE 초기 폴더구조

* feat: 리액트 기본 환경 설정

* feat:[#3] teamSelect 폴더구성 및 Component 제작 중

* chore

* feat : [#5] teamScore 폴더 제작 및 TeamScore Component 제작 완성

* feat: [#3] TeamSelect 초기 버전 제작 완성 및 추가 설정
- Styled-components의 ThemeProvider 적용
- 디렉토리 구조 일부 변경

* chore: .DS_Store 제거

* feat: [#11] GamePlay 컴포넌트 구조 설계 완료
- GamePlay 컴포넌트 CSS 정의 (프로토타입)
- GamePlay 컴포넌트를 구성하는 모든 파일 생성
    - 기능은 없음 (파일만 생성함)
- App.js의 GlobalStyle 수정
    - 전역으로 수직 / 수평 가운데 정렬

* feat: [#12] GamePlay - GameScore 컴포넌트 완성 (프로토타입)

* feat: [#14] GamePlay - MatchScreen 컴포넌트 완성 (프로토타입)

* feat: SituationScreen 프로토타입 완성 및 router 적용
- react router dom 활용
- 존재하지 않는 페이지 임시 생성

* chore: 일부 폴더 구조 변경 (TeamScore, TeamSelect)

* refactor: [#24] 전체적인 CSS 보정 및 GamePlay 부분 전반적으로 수정

* feat: [#26] GamePlay - BattleGround 프로토타입 완성

* feat: [#30] Proxy 설정 및 TeamSelect API 적용 작업 중..

* feat: [#28] PlayerListPopup 프로토타입 완성 및 일부 네이밍 변경
- 일부 네이밍 변경
    - TeamScore -> TeamScorePopup

* style: [#28] PlayerListPopup의 Style 변경 & theme.js 일부 속성 제거
- PlayerListPopup의 StyledPlayerListPopup의 CSS 변경

* feat:[#30] API 적용

* chore

* feat: [#33] 재사용 되는 PopupFrame 생성 (초기버전 & 활용)
- 이 PopupFrame 컴포넌트를 활용하여
    PlayerListPopup & TeamScorePopup 컴포넌트 디자인 변경
    - TeamScorePopup는 테이블과 전체적 스타일 변경 필요

* feat: [#35] GamePlay BattleGround Animation 추가

* feat:[#35] 애니메이션 수정

* feat: TeamScorePopup 디자인 전체적 변경 및 임시 팝업 기능

* feat: [#40] GamePlay Component API 조작중

* feat: [#41] Popup 컴포넌트들 애니메이션 적용 및 Context 생성 & 일부 구조 변경

* feat: ([#40] 과는 거리가 먼) OAuth를 위한 Login 관련 컴포넌트 생성+
- 일부 Context에 useReducer로 적용

* feat: [#45] GameScore & MatchScreen 데이터 활용하여 표시
- 라이언 아이콘의 State도 GamePlayProvider로 이동.

* feat: Oauth Login 구현

* feat: [#45] Ball, Strike, Out Count 컨트롤 (Pitch 버튼 클릭 시)
- 초기 타입

* feat: [#45] BattleGround 컴포넌트 데이터 핸들링 (1)
- BattleGround
    - GameScore: 득점 시 점수 변화
    - Round: Round 상태 변화
    - MatchScreen: 상황에 따라 선수 데이터 변경
- 대체적으로 GamePlayProvider와 BattleGround, GamePlay가 주로 수정되었습니다

* feat: table API 적용

* feat: 안타 or 아웃에 따라 PUT 요청, 점수판 관련 API 요청은 진행중

* chore

* chore: Add background

Co-authored-by: dudn1933 <dudn1933@naver.com>
Co-authored-by: leehangeul <75162982+dudn1933@users.noreply.github.com>
ksundong pushed a commit that referenced this pull request May 19, 2021
각 게임번호(ID)에 해당하는 원정, 홈팀을 출력하는 API입니다.
ksundong pushed a commit that referenced this pull request May 19, 2021
- 게임리스트를 제공할 때, 팀 선택에 대한 정보는 필요없으므로, 제거
ksundong pushed a commit that referenced this pull request May 19, 2021
- 팀 선택을 하게될 경우, 해당 팀의 selected 필드가 true로 변경됩니다.
- 선택한 팀과 동일한 게임아이디를 참조하고 있는 팀을 조회합니다.
ksundong pushed a commit that referenced this pull request May 19, 2021
자바 코드가 복잡해지는 것을 막기위해, 쿼리 메서드를 활용
ksundong pushed a commit that referenced this pull request May 19, 2021
ksundong pushed a commit that referenced this pull request May 19, 2021
ksundong pushed a commit that referenced this pull request May 19, 2021
팀 selected와 게임의 상태를 동시 업데이트
ksundong pushed a commit that referenced this pull request May 19, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants