TIL

chome_dino_websocket_game 개인 프로젝트 트러블 슈팅

추운날_너를_기다리며 2024. 10. 7. 11:37

1. 개요

redis를 사용하여 websocket_game 프로젝트를 진행하면서 redisCli.ZRANGE(... , 'WITHSCORES');부분에서 'WITHSCORES' 부분이 제대로 동작하지 않아서 userUUID값만 나오는 문제가 생겼습니다.

이 문제를 해결하는 방법에 대해서 트러블 슈팅을 진행하겠습니다.

 

2. 트러블 슈팅

 

2.1 배경 

 - 최고 점수를 get하는 부분인 score.model.js부분에서 await redisCli.ZRANGE(HIGH_SCORE_KEY, 0, -1, 'WITHSCORES'); 부분에서 WITHSCORES기능이 제대로 동작하지 않는 문제가 발생하게 되었습니다.

 

2.2 발단

 - 위의 부분이 제대로 동작하지 않아 redis에 userUUID와 그 사람의 최고 score를 저장하고 있었는데 userUUID만 나오고 score가 나오지 않아 Client쪽에 HighScore가 제대로 갱신되지 않는 문제가 발생하는 것을 인지하게 되었습니다.

 

2.3 전개

 - 이 문제를 혼자서 해결하기 위한 방법으로 일단 console을 찍어서 혹시나 해당 user의 score가 들어오지 않나 확인을 하던 도중에 같은 폴더내에 addHighScore라는 메서드가 존재 하였고 여기에 값이 제대로  redisCli.ZADD를 통해 score값을 저장하고 있었는데 여기에 저장이 잘 되지 않나 확인해본 결과 확인을 코드에서 하는 방법을 모르겠어서 redis-server에 들어가 여기 어딘가 저장되어 있겠지라는 막연한 검색을 하게 되었고 redis-cli.exe를 실행후 keys * 값을 확인 후 ZRANGE high_score 0 -1 withscores를 검색해보니 score값도 잘 들어오고 있는 것을 확인할 수있었고 결국 다시 원점으로 돌아오게 되었습니다.

 

2.4 위기

 - 이제 진짜로 await redisCli.ZRANGE(HIGH_SCORE_KEY, 0, -1, 'WITHSCORES'); 이 부분이 제대로 실행이 안되면 몰라도 특정 부분만 실행이 되고 WITHSCORES가 먹히지 않는 다는 느낌이 왔고 도저히 해결할 수 있는 방법이 없을 것 같아서 튜터님에게 찾아가게 되었습니다.

 

2.5 절정

 - 튜터님에게 찾아간 후 1시간 WITHSCORES가 작동을 안하는 이유를 알기 위해 여러가지 코드를 손보기 시작했다. 여기서 문제는 내가 작성한 코드에서 동작을 안하고 다른 누군가가 작성한 코드에서는 WITHSCORES가 작동을 한다는 것이다.

 - 튜터님께서 새로운 방식으로 접근을 하기 시작하셨다 아예 ZRANGE라는 함수를 다르게 호출하기 시작하고 곧있으면 해결이 될 것만 같았다.

 

2.6 결말

 - 튜터님께서 방법을 찾아주셨습니다. 근본적인 문제를 해결할 수 없기 때문에 아예 방식을 바꿔서 다른 함수로 우리가 원하는 함수를 호출하는 방식으로 해결을 해주셨습니다.

await redisCli.sendCommand(["ZREVRANGE", HIGH_SCORE_KEY, "0", "-1", "WITHSCORES"]);

 - 위의 코드를 보면 sendCommand라는 다른 방식으로 ZREVRANGE라는 ZRANGE의 다른 버전을 호출해 score를 불러와서 Client에 보내줄 수 있게 되었습니다.

 

 

 

 

 

 

 

 

 

숨겨진 사실 : 코드를 주먹구구식으로 빠르게 하다보니.. 설계를 잘 하지 못하여 코드가 이쁘게 되지 않다는 느낌을 score.mode.js를 작성하던 도중 알게 되었다.... 해설 영상을 보면서 다시 해봐야겠다...

 

 

 

'TIL' 카테고리의 다른 글

메모리란?  (0) 2024.10.11
CPU란? (기초)  (0) 2024.10.10
VSCode에서 .js 확장자가 빠지는 문제 해결  (4) 2024.10.01
REST, REST API, RESTful 특징 (간단 글 소개)  (1) 2024.09.30
express.urlencoded()에 대한 간단한 조사  (0) 2024.09.28