웹 소켓 레디스

변우영·2024년 10월 11일

NodeJS

목록 보기
11/11

Redis 실행하기

1. 필요한 패키지 설치

Socket.IO, Redis, socket.io-redis 패키지를 설치합니다:

npm install socket.io express redis socket.io-redis

각 패키지 설명:

  • socket.io: 클라이언트와 서버 간의 양방향 실시간 통신을 가능하게 합니다.
  • express: Node.js의 최소한의 웹 프레임워크입니다.
  • redis: Node.js용 Redis 클라이언트입니다.
  • socket.io-redis: Redis를 사용하여 여러 서버 간에 Socket.IO 메시지를 동기화하는 Redis 어댑터입니다.

2. Redis 설정

2.1 Redis 설치

Redis가 설치되어 있지 않다면, 여기에서 설치 방법을 확인할 수 있습니다.

2.2 Redis 서버 실행

Redis를 설치한 후, Redis 서버를 실행합니다:

redis-server

Redis가 정상적으로 실행 중인지 확인하려면 다음 명령어로 Redis 클라이언트에 접속합니다:

redis-cli

3. Socket.IO와 Redis를 사용한 기본 서버 설정

아래는 Socket.IORedis를 사용한 Node.js 서버의 기본 예시입니다:

server.js:

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const redis = require('redis');
const { createAdapter } = require('socket.io-redis');

const app = express();
const server = http.createServer(app);
const io = socketIo(server);

// Redis 클라이언트 설정 및 Socket.IO와 연결
const pubClient = redis.createClient();
const subClient = redis.createClient();
io.adapter(createAdapter({ pubClient, subClient }));

io.on('connection', (socket) => {
  console.log('유저가 연결되었습니다.');

  // 커스텀 이벤트 처리
  socket.on('message', (data) => {
    console.log(`메시지 수신: ${data}`);
    io.emit('message', data); // 모든 클라이언트에게 메시지 전송
  });

  socket.on('disconnect', () => {
    console.log('유저가 연결을 끊었습니다.');
  });
});

// 서버 실행
server.listen(3000, () => {
  console.log('서버가 3000번 포트에서 실행 중입니다.');
});

코드 설명:

  1. Express를 사용하여 기본 HTTP 서버를 만듭니다.
  2. Socket.IO는 클라이언트 연결을 대기하고 실시간 통신을 처리합니다.
  3. Redis는 여러 Socket.IO 서버 간의 메시지를 동기화하는 데 사용됩니다.
  4. io.adapter(createAdapter({ pubClient, subClient })): 이 줄은 Redis와 Socket.IO를 연결하여, 여러 인스턴스 간에 이벤트를 브로드캐스트할 수 있게 합니다.

4. 프로젝트 실행

코드를 작성한 후, 다음 명령어로 서버를 실행할 수 있습니다:

node server.js

이제 Socket.IO 서버가 실행되며, Redis를 통해 여러 인스턴스 간에 메시지를 브로드캐스트할 수 있습니다.


Redis 함수 이해하기

Redis는 메모리 기반의 데이터 구조 저장소로, 데이터베이스, 캐시, 메시지 브로커로 사용됩니다. 아래는 애플리케이션에서 자주 사용되는 Redis 함수들입니다:

1. set(key, value)

키에 대한 값을 저장합니다.

redisClient.set('username', 'john_doe');

2. get(key)

지정된 키의 값을 가져옵니다.

redisClient.get('username', (err, reply) => {
  console.log(reply); // 출력: john_doe
});

3. del(key)

지정된 키를 삭제합니다.

redisClient.del('username');

4. publish(channel, message)

특정 채널에 메시지를 전송합니다. Redis를 메시지 브로커로 사용할 때 유용합니다.

redisClient.publish('chat', 'Hello World');

5. subscribe(channel)

특정 채널을 구독하여 메시지를 수신합니다.

redisClient.subscribe('chat');
redisClient.on('message', (channel, message) => {
  console.log(`${channel} 채널로부터 메시지: ${message}`);
});
profile
개발자로 한걸음!

0개의 댓글