CH 3 풋살 온라인 프로젝트 - 마무리

2024. 9. 25. 23:01[Node.js_6기 본캠프 TIL]

https://docs.google.com/presentation/d/1KyiQHUbauKJP6gbLYBF0-FJsLHx5fwPhpw9c778PveQ/edit#slide=id.p

 

🎯 직관적으로, 매력적으로 소개하기

짧고도 길었던 팀 프로젝트가 끝났다. 거북하지 않은 코딩(18)조 만의 매력을 소개하기 위해 어떤 방법이 효과적일까, 어떻게 접근해야 할까 고민했던 것 같다. 코드 자체를 보여주고 Insomnia 등을 통한 시연도 중요하지만, 사실 같은 주제로 수많은 팀이 프로젝트를 소개하는 자리에서 코드의 디테일들이 보일까? 라는 생각이 들었다. 이에 더해 7분이라는 제한 시간을 생각해보면 거래처에 상품을 소개하듯이 직관적으로, 매력적으로 도식화 된 슬라이드로 어필해야겠다는 결론에 이르렀다.

 

내가 담당한 코드에 집중하느라 다른 코드들을 리뷰할 시간이 부족했기에, 발표자료를 팀원들과 함께 정리하며 스스로도 정리하는 데에도 큰 도움이 되었다.

 

 

🎲 도파민의 꽃, 가챠

 

우선 직접 만들었던 선수 뽑기 기능을 살펴보자. 실제로 게임에서 가챠를 즐겼던 경험을 떠올리며, 확률이 다른 2가지의 팩을 구매할 수 있도록 구성했다. 예를 들어

 

1) 유저가 normal 카드팩을 10개 구매하면

2) 해당하는 랜덤 확률을 10번 돌려서 

3) 랜덤 결과값(선수의 id)를 배열 형태로 임시 저장한 뒤 

4)인벤토리에 넣어주고, 캐시를 차감한다. 

5) 이 때 가챠 결과를 유저가 직관적으로 확인할 수 있도록, 임시 저장된 배열을 기반으로 선수 카드의 데이터를 조회 및 출력한다.

 

위의 로직을 거쳐 선수 카드를 3장 이상 뽑았다면, 덱을 구성하여 본격적인 게임을 즐길 수 있게 된다.

 

 

🎮 승부욕을 자극하는 랭크 게임

 

개인적으로 가장 어렵게 느껴졌던 랭크 게임 API이다.

 

1) 내 랭크 포인트에 맞는 대전상대를 자동으로 매칭해주고

2) 덱 구성에 따라 공격력이 산출되면, 이를 기반으로 랜덤 변수 로직을 돌린다.

3) 최종 점수가 더 높은 유저가 승리를 하게 되는데

4) 상대와의 랭크 포인트 격차에 따라 승패시 적용되는 랭크 포인트 증감치가 크게 달라지게 된다.

 

선수의 포지션에 따라 공격력 산출 계산식이 다르게 적용되도록 구현하고 싶었지만, 전체적인 게임 구조의 한계로 완벽히 구현하지는 못했다는 아쉬움이 있다. 덱의 순서나 플레이어 카드에 포지션 데이터를 추가하는 등의 방법으로 시도해볼 수 있지 않을까 싶다.

 

 

🏆 강함의 척도를 보여주는 랭킹 시스템

 

랭킹은 아주 예민한 데이터인 만큼, 관리자 권한에 대한 고민이 있었다. 

 

1) env를 통해 미리 지정해둔 관리자 계정으로 랭킹 시스템에 접근하고 

2) 유저의 랭킹 포인트를 기준으로 데이터 정렬을 요청한다.

3) 이때, 데이터가 중간에 손상되면 안되기에 Promise.all을 통해 update가 완전히 끝날 때까지 대기하도록 한다.

4) 위의 로직에 대한 결과는 랭킹 조회 API를 통해 확인 가능하다.

 

다른 팀의 프로젝트를 보니, SetInterval을 통해 일정 시간마다 자동으로 랭킹을 업데이트 해주는 방법도 있었다. 리팩토링을 진행할 때 참고해보면 좋을 것 같다.

 

 

🔫 트러블 슈팅

전체적인 프로젝트를 리뷰하며 모두가 공통적으로 소통에 대해 아쉬워했다. 초반에는 어색하기도 하고, 본인이 담당한 API를 구현하느라 정신이 없어서 소통이 거의 없었기 때문이다. 서로의 코드를 주기적으로 확인하고, 더 활발하게 소통했다면 테스트 시간도 충분히 확보하고 서로 배우는 시간이 더 길어지지 않았을까.

 

git history를 보면 최근 3일간 서로 코드를 참 많이 주고 받았는데, 심도있게 서로 분석해주는 부분은 다소 아쉬웠던 것 같다. 다음에는 조금 더 적극적으로 다가가는 자세가 필요할 것 같다.

 

Keep Problem Try
- git 활용이 좋았다.
- api 역할분담이 잘 되었다.
- 아침 회의시간에 서로 할일을 말하고 토론했다.
- 팀원 간 모르는거에 대한 질문 및 소통이 활발했다.
- 코드 진행 도중 소통이 부족해서 시간이 부족했다.
- 코드 리뷰 시간이 존재하지 않았다.
- 별도의 마감 일정을 정하지 않아서 코드 완성시기가 늦어졌다.
- 코드 리팩토링 시간이 부족했다.
- 저녁 식사 이후 7시부터 8시까지 코드 리뷰 시간을 가진다.