2024-10-08 CH-4 개인과제 (리얼 타임 과제) redis 유저 정보 저장 구현 후 제출 5

MOON·2024년 10월 8일
0

내일배움캠프 과제

목록 보기
18/36

어느덧 제출 날짜가 왔네요. 도전기능 마지막 redis를 이용한 데이터 저장 현재 테스트를 막하다가 유저 정보까지만 저장하게 구현해 두었습니다.

redis

  • Redis는 인메모리 데이터 구조 저장소로, 다양한 고급 데이터 구조를 지원하는 키-값(key-value) 데이터베이스입니다.

저는 redis 클라우드를 이용해 해당 클라우드 가져와서 연결해 주었습니다.

redisClient 연결

import dotenv from 'dotenv';
import redis from 'redis';

dotenv.config();

const redisClient = redis.createClient({
  password: process.env.REDIS_PASSWORD,
  socket: {
    host: process.env.REDIS_HOST,
    port: process.env.REDIS_PORT,
  },
});

// redis 서버 연결
try {
  await redisClient.connect();
} catch (err) {
  throw new Error(`레디스 연결 실패 ${err}`);
}

export { redisClient };

원래 유저 데이터를 저장하고 관리하는 models/user.model.js 파일을 수정해 redisClient를 이용하여 데이터를 관리하게 작성하였습니다.

수정된 파일

import { redisClient } from '../init/redis.js';

const USERS_KEY_PREFIX = 'users';

// 유저를 등록하는 함수
export const addUser = async (user) => {
  // ${USERS_KEY}:${user.uuid} ":" 콜론을 이용해 작성하면 콜론 왼쪽기준으로 해당 파일안에 데이터가 저장된다
  await redisClient.set(`${USERS_KEY_PREFIX}:${user.uuid}`, JSON.stringify(user));
};

// 유저가 게임종료 접속 해제할시에 접속한 유저를 지우는 함수
export const removeUser = async (uuid) => {
  const userKey = `${USERS_KEY_PREFIX}:${uuid}`;
  const user = await redisClient.get(userKey);
  if (user) {
    await redisClient.del(userKey);
    return JSON.parse(user);
  }
  return { message: 'User has been deleted.' };
};

// 모든 유저를 읽을떄 사용하는 함수
export const getUsers = async () => {
  // 해당 key다 가져오기
  const keys = await redisClient.keys(`${USERS_KEY_PREFIX}:*`);
  const users = Promise.all(
    keys.map(async (key) => {
      const userJson = await redisClient.get(key);
      return JSON.parse(userJson);
    }),
  );
  return users;
};

오늘의 회고

아침에 급하게 제출한다고 배포하는 것도 다시 찾아보면서 정신이 없이 보냈네요.
그리고 클라이언트 부분을 수정하신 분들이 많더라구요. 각자만의 개성있는 게임을 보여주시는데 저도 만들고 빨리 만들고 싶더라구요. 그래서 제출은 했지만 추가로 다른 데이터들도 redis 저장 관리하게 수정하고 클라이언트 부분도 수정해 볼려고 합니다. 짬짬이 시간내면 할 수 있을것 같네요. 그래서 이번 과제 벨로그는 가끔씩 쓸 것 같습니다. 그럼 오늘도 화이팅!

깃허브주소
https://github.com/Moonb7

profile
안녕하세요

0개의 댓글