Redis는 인메모리 데이터 구조 저장소로, 일본 서버에서 웹 서비스 성능을 크게 향상시킬 수 있는 도구입니다. DB 쿼리 결과를 캐싱하고, 세션을 저장하며, 메시지 대기열을 구현하는 데 널리 사용됩니다.
Redis가 필요한 이유
웹 서비스에서 데이터베이스는 대부분 디스크에서 데이터를 읽습니다. Redis는 데이터를 메모리(RAM)에 저장하므로 조회 속도가 데이터베이스 대비 수십~수백 배 빠릅니다.
대표적인 활용 사례:
- 오브젝트 캐시: DB 쿼리 결과를 Redis에 저장해 반복 쿼리 제거
- 세션 저장: PHP, Node.js 세션을 Redis에 저장
- 속도 제한(Rate Limiting): API 요청 횟수 제한
- 메시지 대기열: 비동기 작업 처리
- 실시간 기능: 채팅, 알림 등 Pub/Sub 구현
1단계: Redis 설치
apt update
apt install redis-server -y
# 서비스 시작 및 자동 시작
systemctl enable redis-server
systemctl start redis-server
# 버전 확인
redis-server --version
# 동작 테스트
redis-cli ping
# 응답: PONG
2단계: Redis 기본 설정
nano /etc/redis/redis.conf
메모리 제한 설정
# 최대 메모리 설정 (서버 RAM의 25~30%)
maxmemory 512mb
# 메모리 초과 시 정책 (캐시 용도라면 allkeys-lru)
maxmemory-policy allkeys-lru
보안 설정 (비밀번호)
# 비밀번호 설정
requirepass 강력한비밀번호
# 외부 접근 차단 (로컬만 허용)
bind 127.0.0.1 ::1
영속성 설정 (선택)
캐시 목적이라면 영속성을 비활성화해 성능을 높일 수 있습니다:
# RDB 스냅샷 비활성화 (캐시 전용)
save ""
# AOF 비활성화
appendonly no
systemctl restart redis-server
3단계: 주요 Redis 명령어
# Redis CLI 접속
redis-cli -a 비밀번호
# 기본 조작
SET key value # 값 저장
GET key # 값 조회
DEL key # 키 삭제
EXISTS key # 키 존재 확인
EXPIRE key 3600 # TTL 설정 (초)
TTL key # 남은 TTL 확인
# 문자열
SET user:1:name "홍길동"
GET user:1:name
# 해시 (오브젝트 저장)
HSET user:1 name "홍길동" email "hong@example.com"
HGET user:1 name
HGETALL user:1
# 리스트 (대기열)
RPUSH queue:email "task1"
LPOP queue:email
# 모니터링
INFO memory # 메모리 사용량
INFO stats # 통계
DBSIZE # 총 키 수
4단계: 언어별 Redis 연동
PHP (WordPress 오브젝트 캐시)
apt install php8.1-redis -y
systemctl restart php8.1-fpm
WordPress에서 Redis Object Cache 플러그인 설치 후 wp-config.php에 추가:
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PASSWORD', '비밀번호');
define('WP_REDIS_DATABASE', 0);
Node.js (ioredis)
npm install ioredis
const Redis = require('ioredis');
const redis = new Redis({
host: '127.0.0.1',
port: 6379,
password: '비밀번호',
});
// 캐시 패턴
async function getUser(id) {
const cached = await redis.get(`user:${id}`);
if (cached) return JSON.parse(cached);
const user = await db.findUser(id); // DB 조회
await redis.setex(`user:${id}`, 3600, JSON.stringify(user)); // 1시간 캐시
return user;
}
Python (redis-py)
pip install redis
import redis
import json
r = redis.Redis(host='127.0.0.1', port=6379, password='비밀번호', decode_responses=True)
def get_cached_data(key, fetch_func, ttl=3600):
cached = r.get(key)
if cached:
return json.loads(cached)
data = fetch_func()
r.setex(key, ttl, json.dumps(data, ensure_ascii=False))
return data
5단계: 세션 저장소로 활용
PHP 세션을 Redis에 저장
apt install php8.1-redis -y
# /etc/php/8.1/fpm/php.ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=비밀번호"
세션 관리가 Redis로 이관되어 여러 서버 간 세션 공유도 가능해집니다.
Redis 성능 확인
# 성능 벤치마크
redis-benchmark -a 비밀번호 -q -n 100000
# 히트율 확인 (keyspace_hits / (keyspace_hits + keyspace_misses))
redis-cli -a 비밀번호 info stats | grep keyspace
캐시 히트율이 80% 이상이면 Redis가 효과적으로 동작하는 것입니다.
마치며
Redis를 일본 서버에 도입하면 데이터베이스 부하를 크게 줄이고 응답 속도를 개선할 수 있습니다. 특히 트래픽이 많은 서비스에서 효과가 두드러집니다. Redis 설정에 대한 문의는 TCP-80.NET 텔레그램 @tcp80net으로 주세요.