-
[TIL] 심화 주차 개인 과제 (Chrome Dino Web Socket Server) 진행 (D-1)TIL-sparta 2024. 6. 13. 23:01
학습 키워드: Redis, JS Class constructor, Singleton
1. 프로젝트 관련 사항
1) JS Class에서의 Singleton:
- JS에서 new를 이용하여 생성한 객체의 Class constructor 기본 return 값은 this다. 그런데 만약 constructor의 return 값을 별도로 생성한 static instance로 지정해준다면 해당 클래스 객체를 어디서 생성하든 항상 같은 instance를 return하여 singleton처럼 사용할 수 있게 된다. 프로젝트에서 클라이언트의 스코어 정보가 여럿 생성될 일은 없으므로 기존에 index.js에서 생성한 score를 export 하는 대신 이런 방식으로 구현하는 것이 좋겠다고 생각했다.
// 구현 예시 class Score { ... constructor(ctx, scaleRatio) { if (Score.instance) return Score.instance; this.ctx = ctx; this.canvas = ctx.canvas; this.scaleRatio = scaleRatio; Score.instance = this; } ... }
2) Node.js에서 Redis 기본 세팅해보기:
import { createClient } from "redis"; const redisClient = await createClient({ url: "redis://localhost:6379", }) .on("error", (err) => console.log("Redis Client Error", err)) .connect(); export default redisClient; // await redisClient.set('key', 'value'); // const value = await redisClient.get('key'); // await redisClient.disconnect();
- Redis NPM 페이지에서 참고한대로 구현해뒀는데, localhost에서 계정 없이 구현되어 있는 상태지만, config파일을 수정하여 비밀번호를 추가할 수도 있다.
- Windows 기준 redis 설치 디렉토리가 PATH에 추가되어 있다면 CMD에서 redis-server 명령어로 서버를 실행할 수 있다.
- redis-cli를 실행하면 명령어를 입력할 수 있는 cli를 사용할 수 있다. 다음은 처음에 사용해본 몇 가지 기본 명령어 목록이다.
keys * redis에 저장된 key의 목록을 확인할 수 있다. flushall redis에 저장된 모든 데이터를 삭제한다. shutdown redis 서버를 종료한다. 2. 과제 진행 간 발생한 문제점 및 해결 방안
1) Verification 작업이 같은 데이터를 중복으로 호출하는 문제:
지난 프로젝트에서도 지적받은 부분인데 이번에도 구성하다보니 같은 데이터를 access 하는 함수가 여러번 호출되는 문제가 생겼다. 프로젝트 요구사항 구현을 마치고 수정을 거칠 예정인데, 다음부터는 검증 함수 내에서 다른 검증 함수를 호출하는 구조 대신 파라미터로 검증된 정보를 넘겨받는 구조로 구성하여 중복 호출 문제를 없애도록 해야겠다.
2) 모듈 간 의존성 문제:
모듈의 의존성을 고려하지 않고 문제 해결에만 집중했더니, redis 도입 당시 꽤 많은 코드를 수정하게 되었다. 물론 async await을 추가해야해서 수정한 부분이 많은 것도 맞지만 강의에서 배운 내용처럼 결합도가 낮은 코드를 작성하는 방법을 좀 더 고민 해봐야겠다.
--
REFERENCES:
GitHub - donkim1212/nbc-websocket-game-server
Contribute to donkim1212/nbc-websocket-game-server development by creating an account on GitHub.
github.com
> 심화 주차 개인 과제 repository
728x90'TIL-sparta' 카테고리의 다른 글
프로그래머스) 멀쩡한 사각형 풀이 (Java) (2) 2024.06.15 [TIL] 심화 주차 개인 과제 제출 (D-Day) (0) 2024.06.14 [TIL] 심화 주차 개인 과제 (Chrome Dino Web Socket Server) 진행 (D-2) (0) 2024.06.12 [TIL] 심화 주차 개인 과제 진행 (D-3), 강의 수강 (Sharding) (0) 2024.06.11 [TIL] 스파르타) 심화 주차 강의 수강, 개인 과제 시작 (Chrome Dino Web Server) (0) 2024.06.10