본문 바로가기
카테고리 없음

[Redis] 데이터베이스 부하를 줄이는 캐시 서버 도입 및 기본 설정

by 돌미나리는야생미나리 2026. 4. 7.

웹 서비스의 사용자가 늘어남에 따라 데이터베이스(DB)에 가해지는 부하도 기하급수적으로 증가합니다. 매번 똑같은 데이터를 조회하기 위해 무거운 디스크 기반 DB(MySQL, PostgreSQL 등)를 거치는 것은 비효율적입니다.

오늘은 메모리 기반의 데이터 저장소인 **Redis(Remote Dictionary Server)**를 도입하여 시스템의 응답 속도를 혁신적으로 개선하고, DB의 부담을 덜어주는 캐시 서버 구축 방법을 알아보겠습니다.


1. Redis란 무엇이며 왜 필요한가?

Redis는 '인메모리(In-memory)' 데이터 구조 저장소입니다. 데이터를 디스크가 아닌 RAM에 저장하기 때문에 읽기/쓰기 속도가 압도적으로 빠릅니다.

1.1 캐싱 전략: Look-Aside 패턴

가장 많이 사용되는 방식은 클라이언트가 데이터를 요청할 때, 먼저 Redis(캐시)에 데이터가 있는지 확인하는 것입니다.

  1. Cache Hit: Redis에 데이터가 있다면 즉시 반환 (매우 빠름)
  2. Cache Miss: Redis에 없다면 DB에서 조회 후 Redis에 저장하고 반환

이 과정을 통해 반복적인 DB 쿼리를 줄여 전체적인 서비스 성능을 최적화할 수 있습니다.


2. Ubuntu에서 Redis 설치 및 초기 설정

이제 실습을 통해 서버에 Redis를 설치해 보겠습니다.

2.1 패키지 설치

Bash
 
sudo apt update
sudo apt install redis-server -y

2.2 설정 파일 최적화

Redis의 동작 방식을 제어하기 위해 설정 파일을 수정합니다.

Bash
 
sudo nano /etc/redis/redis.conf
  • 메모리 제한 설정: 서버의 전체 메모리를 다 쓰지 않도록 제한을 둡니다.(LRU 정책은 메모리가 가득 찼을 때 가장 오래 사용되지 않은 데이터를 삭제하여 공간을 확보합니다.)
  • Plaintext
     
    maxmemory 256mb
    maxmemory-policy allkeys-lru
    

2.3 서비스 재시작 및 확인

Bash
 
sudo systemctl restart redis-server
sudo systemctl status redis-server

3. Redis CLI를 이용한 데이터 조작 기초

설치가 완료되었다면 redis-cli를 통해 간단한 명령어를 연습해 볼 수 있습니다. Redis는 Key-Value 쌍으로 데이터를 저장합니다.

  • 데이터 저장: set user:1 "Yumina"
  • 데이터 조회: get user:1
  • 만료 시간 설정(중요): setex session:key 3600 "data" (3600초 뒤에 자동으로 데이터가 삭제되도록 설정하여 메모리를 효율적으로 관리합니다.)

4. 실무 도입 시 주의사항 (Best Practice)

Redis는 강력하지만, 잘못 사용하면 데이터 유실이나 메모리 부족 문제가 발생할 수 있습니다.

  1. 휘발성 데이터 위주로 저장: Redis는 메모리 기반이므로 서버가 꺼지면 데이터가 사라질 수 있습니다. 사라져도 다시 DB에서 불러올 수 있는 '캐시' 용도로 사용하는 것이 가장 안전합니다.
  2. 보안 설정: Redis의 기본 포트(6379)는 외부 공격에 취약할 수 있습니다. 반드시 redis.conf에서 비밀번호(requirepass)를 설정하고, 방화벽을 통해 허용된 IP만 접속 가능하게 제한하세요.
  3. 적절한 만료 시간(TTL): 모든 데이터에 적절한 유효 기간을 설정하여 메모리 파편화를 방지해야 합니다.

5. 결론: 빠르고 견고한 서버를 위한 선택

Redis 도입은 현대 백엔드 아키텍처에서 선택이 아닌 필수 과정 중 하나입니다. 단순한 캐시 서버를 넘어 세션 관리, 실시간 랭킹 시스템, 메시지 큐 등 활용도가 무궁무진합니다.