Redis 소개: 그것이 무엇이며 왜 빠른가

발행: (2026년 2월 3일 오전 01:09 GMT+9)
9 min read
원문: Dev.to

Source: Dev.to

Redis란 무엇인가?

Redis (Remote DIctionary Server)는 오픈소스 인‑메모리 데이터 구조 저장소이며 가장 인기 있는 NoSQL 데이터베이스 중 하나입니다. 2009년 Salvatore Sanfilippo가 만든 이 시스템은 단순한 키‑값 저장을 넘어서는 다양한 데이터 구조를 지원하기 때문에 흔히 “데이터‑구조 서버”라고 불립니다.

  • 인‑메모리 데이터베이스 – 모든 데이터가 RAM에 상주하여 매우 빠른 읽기/쓰기 작업을 제공합니다.
  • 영속성 옵션 – 메모리 기반이지만 Redis는 데이터를 디스크에 영구 저장할 수 있습니다.
  • 수백 기가바이트 RAM을 갖춘 최신 서버 덕분에 Redis는 실제 업무 환경의 다양한 워크로드에 실용적으로 사용됩니다.

핵심 데이터 유형

  • Strings – 텍스트, 바이너리 데이터 또는 숫자
  • Lists – 문자열의 순서가 있는 컬렉션
  • Sets – 고유 문자열의 순서 없는 컬렉션
  • Hashes – 필드‑값 맵(객체와 유사)
  • Sorted Sets – 점수가 있는 순서가 있는 집합
  • Bitmaps – 공간 효율적인 비트 수준 연산
  • HyperLogLogs – 확률적 카디널리티 추정
  • Streams – 메시징 및 이벤트 소싱을 위한 추가 전용 로그

Persistence

Redis는 두 가지 메커니즘(독립적으로 또는 함께)을 사용하여 데이터를 영구적으로 저장할 수 있습니다:

MechanismDescription
RDB (Redis Database File)주기적인 시점 스냅샷
AOF (Append‑Only File)모든 쓰기 작업을 기록하여 내구성을 높임

복제 및 고가용성

Redis는 마스터‑레플리카 복제를 지원하여 데이터를 여러 레플리카에 복사할 수 있습니다. 이를 통해 다음을 제공합니다:

  • 읽기 확장성
  • 고가용성
  • 데이터 중복성

트랜잭션

Redis 트랜잭션은 명령어 그룹을 원자적으로 실행하여 모든 명령이 단일 단위로 처리되도록 보장합니다.

발행/구독

Redis는 여러 구독자에게 실시간으로 메시지를 브로드캐스트할 수 있는 Pub/Sub 메시징 시스템을 포함하고 있습니다.

서버‑사이드 Lua 스크립팅

Lua 스크립트는 서버에서 실행될 수 있어, 여러 작업을 원자적으로 그리고 효율적으로 단일 스크립트에서 실행할 수 있습니다.

Source:

성능 특성

Redis는 단일 코어에서 초당 100,000+ 연산을 처리할 수 있습니다. 이러한 속도의 주요 이유는 다음과 같습니다:

  • 디스크 I/O 병목 현상이 없음 – 데이터가 RAM에 존재
  • 포인터를 통한 직접 메모리 접근, 비용이 큰 직렬화 회피
  • 단일 스레드, 논블로킹 I/O 모델
    • 컨텍스트 스위칭 오버헤드 없음
    • 레이스 컨디션이나 락 복잡성 없음
    • 예측 가능하고 안정적인 지연 시간

여러 CPU 코어를 활용하려면 동일한 머신에서 여러 Redis 인스턴스를 실행하십시오.

최적화된 내부 데이터 구조

  • Hash tables (증분 재해시)
  • ZipLists – 메모리 효율이 높은 작은 컬렉션
  • IntSets – 정수 전용 집합
  • Skip Lists – 정렬된 집합 (O(log N) 성능)

구현 세부 사항

  • ANSI C 로 작성 → 수동 메모리 관리, 최소 추상화, 직접적인 시스템 수준 최적화
  • 플랫폼에 따라 고성능 시스템 콜(epoll, kqueue, select) 사용
  • RESP (Redis Serialization Protocol) – 간단하고 빠른 파싱
  • 파이프라이닝 – 응답을 기다리지 않고 여러 명령 전송

비동기 백그라운드 작업

  • 백그라운드 RDB 저장
  • AOF 재작성
  • 포크된 자식 프로세스

이러한 작업들은 메인 이벤트 루프가 응답성을 유지하도록 합니다.

일반적인 사용 사례

사용 사례Redis가 적합한 이유
캐싱서브밀리초 읽기, 만료 정책, 스키마 없는 저장소
세션 스토어분산 애플리케이션에서 사용자 세션을 위한 빠르고 중앙 집중식 저장소
카운터 및 속도 제한원자적 증가(INCR)를 통해 페이지 조회 추적 및 온라인 사용자 수를 구현
리더보드 / 순위 매기기정렬된 집합이 효율적인 순위 매김을 제공
메시지 큐 및 백그라운드 작업리스트와 스트림으로 경량 큐 구현
지리공간 인덱싱위치 기반 데이터를 위한 내장 지리공간 명령
실시간 분석Pub/Sub + 스트림을 통해 이벤트 소싱 및 실시간 대시보드 구현

설치

Ubuntu / Debian

sudo apt-get update
sudo apt-get install redis-server

macOS (Homebrew)

brew install redis

Docker

docker run --name redis -d -p 6379:6379 redis

기본 명령어 (Redis CLI)

SET user:1001 "John Doe"
GET user:1001

SET session:abc123 "data" EX 10   # expires after 10 seconds
INCR page_views
LPUSH tasks "send_email"
SADD tags "redis" "database" "cache"

장점

  • 디스크 기반 데이터베이스에 비해 읽기와 쓰기가 훨씬 빠름
  • JOIN이나 복잡한 쿼리가 없음 – 간단한 키 기반 접근
  • 스키마가 없고 유연한 데이터 구조
  • 내장된 영속성, Pub/Sub, 트랜잭션 및 Lua 스크립팅

Limitations

  • Memory cost – RAM은 디스크 저장소보다 비용이 더 많이 듭니다
  • Dataset size – 데이터는 사용 가능한 메모리에 맞춰야 합니다
  • Single‑threaded model – CPU 집약적인 작업이 다른 요청을 차단할 수 있습니다
  • Persistence trade‑offs – RDB와 AOF는 신중한 설정이 필요합니다

요약

  1. 인메모리 저장소는 디스크 I/O를 제거합니다.
  2. 단일 스레드 이벤트 루프는 동시성 오버헤드를 피합니다.
  3. 고도로 최적화된 C 기반 데이터 구조는 효율성을 보장합니다.

Redis는 전통적인 관계형 데이터베이스를 대체하는 것이 아니지만, 캐시, 세션 저장소, 실시간 분석 엔진, 메시지 브로커 및 빠른 데이터 처리기로서 뛰어납니다. 그 단순성, 성능, 유연성 덕분에 Twitter, GitHub, Stack Overflow, Snapchat 등과 같은 기업들이 사용하는 현대 시스템 아키텍처의 핵심 구성 요소가 되었습니다.

작은 애플리케이션을 구축하든, 트래픽이 많은 플랫폼을 확장하든, Redis는 서브밀리초 수준의 응답 시간과 빠르게 변하는 데이터에 대한 탁월한 성능을 제공합니다.

Back to Blog

관련 글

더 보기 »