MySQL, Redis가 연결이 안된 경우 계속 시도하는 문제
레디스의 경우 연결이 실패한 경우 계속해서 연결 시도를 반복함.
이 과정에서 무의미하게 로그가 계속해서 쌓임.
DB연결에 실패한 경우 서버가 종료되도록 수정함.
해결 코드
import dbPool from '../../db/database.js';
import { config } from '../../config/config.js';
export const testConnection = async () => {
try {
const [rows] = await dbPool.query('SELECT 1 + 1 AS solution');
console.log(`${config.database.database} 테스트 쿼리 결과:`, rows[0].solution);
} catch (e) {
console.error(
`test 쿼리 실행 실패 : ${e}\nDB 연결에 실패하였습니다. DB의 상태를 확인해주세요.`,
);
console.log('서버를 종료합니다.');
process.exit(1);
}
};
import Redis from 'ioredis';
import { config } from '../config/config.js';
export const redisClient = new Redis({
port: config.redis.port, // Redis port
host: config.redis.host, // Redis host
family: config.redis.family, // 4(IPv4) or 6(IPv6)
password: config.redis.password,
db: 0,
});
redisClient.on('error', (err) => {
console.error('Redis 클라이언트 오류:', err.errno);
switch (err.errno) {
case -4078:
console.error('Redis DB와 연결할 수 없습니다. Redis 상태를 확인해주세요.');
break;
default:
console.error('알 수 없는 오류코드:', JSON.stringify(err));
}
console.log('서버를 종료합니다.');
process.exit(1);
});
// redisClient.on('connect', () => console.log('Redis에 연결되었습니다.'));
export const connectRedis = async () => {
try {
if (redisClient.status === 'ready') {
console.log('Redis에 연결 준비 중.');
}
// 이미 연결되었거나 연결 중이라면 connect()를 호출하면 안돼
if (!redisClient.status || redisClient.status === 'wait') {
console.log('redisClient.status => ', redisClient.status);
await redisClient.connect();
console.log('Redis에 연결되었습니다.');
} else {
console.log('레디스 현재 상태 => ', redisClient.status);
}
} catch (error) {
console.error('Redis에 연결할 수 없습니다:', error);
}
};
await connectRedis();
'TIL' 카테고리의 다른 글
Tower Defense Online Project 트러블 슈팅 - 4 (0) | 2024.11.12 |
---|---|
Tower Defense Online Project 트러블 슈팅 - 3 (0) | 2024.11.12 |
Tower Defense Online Project 트러블 슈팅 - 1 (0) | 2024.11.12 |
데이터 중심 동기화 (Data-oriented Synchronization)에 대하여 (Node.js 중심) (0) | 2024.11.09 |
상태 동기화에 대하여 (1) | 2024.11.07 |