깃헙주소 : https://github.com/nanhimang/carpaltunnel.git
게임접속 : https://nanhimang.github.io/carpaltunnel/CPS_%EA%B2%8C%EC%9E%84_v1.7.html
gif.js로 생성한 GIF 파일을 다음 페이지에서 다운로드하는데 용량이 초과했다.
게임이 시작되면 HTMLcanvas API가 로드되어 canvas.getImageData로 10초간 게임플레이 화면을 10fps로 캡쳐하고, 녹화가 끝나면 gif.js를 이용하여 GIF로 압축한다. 게임종료 모션이 끝나고 결과페이지가 로드되면, 플레이어가 버튼을 눌러 다운로드 받을 수 있게 하려고 했었다. 이를 브라우저 cookie에 DataURL을 저장하는 방식으로 구현하려 했으나, 용량이 2MB여서 쿠키로는 감당이 안되었다. 텍스트를 압축하는 모듈을 사용하려 했으나 너무 복잡하게 느껴졌다. 그래서 기존에 알고있던 firebase의 Realtime Database
를 활용하려 했으나, 기본세팅 및 보안설정 등 구현하려는 기능에 비해서 부가적인 작업들이 많아, 다른 방법을 물색해보기로 했다. 현재 문제가 근본적으로 Reload 후 데이터를 불러오는 과정에 있는 것이기에, 2개의 페이지를 하나로 merge
하려 해봤다. 허나 당시 React를 활용할 생각을 못하고 display:none을 기반으로 여러 HTML 코드를 중첩하여 화면을 전환하는 기법을 사용했기에 코드가 지나치게 복잡해지는 문제가 있었다. 마지막이다라는 심정으로외부 API를 사용하지 않고 데이터를 Local에 저장할 수 있는 다른 방법을 찾아보니 local storage
라는 것이 있었다. 처음엔 단순히 local space, 개인 PC 저장소를 뜻하는 것인줄 알았는데 알고보니 브라우저 기반 저장소였다. 허무하게도 이를 이용하니 문제가 간단히 해결되었다.
이 문제를 해결하는데 왜이리 오랜 시간이 걸렸을까 생각해보니, GPT에 의존한 탓이 큰 것 같다. 초반 cookie를 이용하고자 했던 것도 GPT가 추천했던 방법이기 때문이었는데, 브라우저 내 저장소와 관련해 조금이라도 구글링을 해봤다면 이렇게 굳이 삽질을 하지 않았을까 하는 생각이 들었다.
position:absolute
인 상태에서 preserve-3d
을 적용한다는 것이 얼마나 짜증나는 일인지, display:flex
인 상태에서 :after
선택자를 이용한 정비례 개체 생성을 시도한다는 것이 얼마나 까다로운지 등등..display:none
으로 여러개의 div
를 겹치는 식으로 HTML을 구성했기에 코드의 가독성이 떨어지고 복잡해진 면이 있다. 이번 유데미 프로젝트 캠프에서 React를 학습하여 코드개선을 시도해봐야겠다. 추가로 Firebase 연동으로 랭킹 DB를 구축해야겠다. 플레이어 간의 경쟁을 부추기기 위한 용도이다.