2024. 9. 23. 21:35ㆍ[Node.js_6기 본캠프 TIL]
🎲 한장씩, 랜덤하게 인벤토리에 넣어주기
위의 사진과 같이 normal 타입의 카드팩을 구매하면, 인벤토리에 각각 랜덤 확률로 뽑힌 플레이어 카드가 들어가야 했다. 그러나 이상하게 랜덤하게 뽑힌 카드 한장이 count 만큼 인벤토리에 반복해서 들어가고 있었다.
반복문만 test 파일에서 돌려보면 이상이 없었기 때문에, 개인과제에서 뜯어온 await userDataClient.inventory.createMany 코드를 완전히 이해하지 못하고 가공하고 있는 문제 같았다. 랜덤값과 인벤토리에 넣는 코드를 연결하는 것이 도저히 이해되지 않아, 강의도 계속 돌려보고 튜터님도 여러번 찾아가야만 했다.
튜터님의 피드백을 받아보니 문제점이 명확해졌다. 인벤토리에 아이템(플레이어 카드)을 넣어주는 코드가 애초에 지정된 아이템을 req에서 받은 count 만큼 반복해서 넣어주는 것이기 때문에, 각각 랜덤한 아이템을 넣어주는 현재의 로직에는 맞지 않았다. 또한 초기화되지 못한 packResult 값이 player_id에 들어가고 있기 때문에, 랜덤값을 앞에서 따로 저장해주고 인벤토리에 넣을 때 가져오는 방식이 필요했다.
결국 엉뚱하게 따로 돌고 있는 코드들을 정리하자면 하기와 같은 구성이 되어야 했다.
- req에서 받은 count 만큼 랜덤값을 돌리고, 임시 저장
- 임시 저장된 랜덤값들을 가져와서 하나씩 인벤토리에 넣어주는 반복문을 실행
- 결과값을 res에 한번에 return
코드를 수없이 수정하며, 돈은 3번 차감되는데 가챠는 한번만 실행되는 등 수많은 시행착오를 거쳤다. 정확히 어떤 값을 어디서 불러오고, 어떻게 연결해주어야 하는지 계속 확인하지 않으면 잠깐 한눈 파는 사이에 코드가 먹통이 되기 일쑤였다. 덕분에 for문이나 if문을 사용할 때 변수를 선언하고 불러올 수 있는 범위나 방식을 조금 아프게 배우는 시간을 가진 것 같다.
▼ 코드 수정 후, 가챠 API가 정상적으로 기능하는 모습
'[Node.js_6기 본캠프 TIL]' 카테고리의 다른 글
CH 3 풋살 온라인 프로젝트 - 마무리 (2) | 2024.09.25 |
---|---|
[SQL 코드카타] 가격대 별 상품 개수 구하기(MySQL) (1) | 2024.09.24 |
CH 3 풋살 온라인 프로젝트 - 트러블 슈팅 0919 (0) | 2024.09.19 |
CH 3 풋살 온라인 프로젝트 - 트러블 슈팅 0913 (1) | 2024.09.13 |
CH3 아이템 시뮬레이터 과제 - 트러블슈팅 0911 (0) | 2024.09.12 |