Redis(Remote Dictionary Server)는 분산 캐시 및 메시지 브로커로 사용되는 인메모리 키-값 데이터베이스로, 선택적 지속성을 제공한다. 모든 데이터를 메모리에 보관하고 설계상의 특성 덕분에 Redis는 낮은 지연 시간의 읽기 및 쓰기를 제공하며, 캐시가 필요한 사용 사례에 특히 적합하다. 이 프로젝트는 2009년부터 살바토레 산필리포가 개발하고 유지 관리했으며, 여러 후원과 라이선스 변경을 거쳐 널리 채택된 데이터 인프라 구성 요소로 발전했다.
Redis는 데이터 저장소와 캐시로 모두 기능하며, 전통적인 관계형 데이터베이스 관리 시스템(RDBMS)과 차별화된다. 데이터 모델은 SQL 쿼리보다는 추상 데이터 유형에 기반하며, 보조 인덱스나 집계 없이 직접 검색에 최적화되어 있다. 이러한 설계는 인메모리 운영과 결합되어 많은 워크로드에서 서브 밀리초 응답 시간을 가능하게 한다.
역사
Redis 프로젝트는 살바토레 산필리포(별명 antirez)가 자신의 이탈리아 스타트업의 확장성을 개선하려고 실시간 웹 로그 분석기를 개발하면서 시작되었다. 전통적인 데이터베이스 시스템으로 일부 워크로드 유형을 확장하는 데 심각한 문제를 겪은 후, 산필리포는 2009년에 Tcl로 Redis의 첫 번째 개념 증명 버전을 프로토타입으로 만들기 시작했다. 이후 산필리포는 그 프로토타입을 C 언어로 변환하고 첫 번째 데이터 유형인 리스트를 구현했다. 프로젝트를 내부적으로 몇 주간 성공적으로 사용한 후, 산필리포는 이를 오픈 소스로 공개하기로 결정하고 Hacker News에 프로젝트를 발표했다. 프로젝트는 특히 Ruby 커뮤니티에서 traction을 얻기 시작했으며, GitHub와 Instagram이 초기 채택 기업 중 하나였다.
산필리포는 2010년 3월 VMware에 고용되었다. 2013년 5월, Redis는 Pivotal Software(VMware의 분사 기업)의 후원을 받았다. 2015년 6월, 개발은 Redis Ltd.의 후원을 받게 되었다. 2018년 10월, Redis 5.0이 출시되어 Redis Stream이라는 새로운 데이터 구조를 도입했는데, 이는 단일 키에 여러 필드와 문자열 값을 자동으로 시간 기반 순서로 저장할 수 있게 한다. 2020년 6월, 산필리포는 Redis의 단독 유지 관리자에서 물러났고, 요시 고틀립과 오란 아그라가 그 뒤를 이었다. 산필리포는 2024년 12월 Redis에 복귀했다.
라이선스 변화
2018년 8월, 관리형 클라우드 제공업체의 적절한 보상 없는 소프트웨어 사용을 통제하기 위해 Redis Ltd.는 선택적 Redis 모듈을 GNU Affero General Public License(AGPL)에서 Apache License로 재라이선스하겠다고 발표했지만, 상업적 사용을 제한하는 "Commons Clause"로 알려진 부가 조항이 적용되었다. 이로 인해 모듈은 소스 제공 가능(source-available) 상태가 되었고 더 이상 자유 소프트웨어가 아니게 되었다. 핵심 Redis 소프트웨어는 BSD 라이선스로 유지되었으며, Redis Ltd.는 이러한 조건을 유지하겠다고 약속했다.
2019년 2월, 라이선스 조건에 대한 혼란을 이유로 Redis 모듈의 Apache License with Commons Clause 라이선스 조건은 "Redis Source Available License"(RSAL)로 대체되었으며, 이는 모듈을 "데이터베이스, 캐싱 엔진, 스트림 처리 엔진, 검색 엔진, 인덱싱 엔진 또는 ML/DL/AI 서빙 엔진"의 일부로 상업적으로 사용하는 것을 명시적으로 금지한다. 자유 및 오픈 소스 라이선스 하의 모듈 마지막 개정판은 커뮤니티 구성원들이 GoodFORM 프로젝트로 포크했다.
2024년 3월, Redis Ltd.는 버전 7.4부터 핵심 Redis 소프트웨어가 RSAL 및 Server Side Public License(SSPL)로 재라이선스될 것이라고 발표했으며, 둘 다 소스 제공 가능하고 비자유 라이선스이다. Linux Foundation은 이후 마지막 BSD 라이선스 버전의 Redis를 Valkey로 포크하겠다고 발표했다. 2025년 5월, Redis Ltd.는 버전 8.0부터 라이선스를 다시 AGPL로 변경하겠다고 발표했으며, 포크가 차별화된 제품의 "공정한 경쟁 환경"을 만드는 목표를 달성했고 Redis가 라이선스 변경 이후 "기록적인 성장"을 달성했다고 밝혔다.
데이터 모델 및 유형
Redis는 키를 값 유형에 매핑한다. Redis는 문자열, JavaScript Object Notation(JSON) 문서, 해시(필드의 모음으로 각 필드는 이름-값 문자열 쌍), 리스트, 집합, 벡터 집합 등 여러 데이터 유형을 지원한다. 이러한 다양성 덕분에 개발자는 단순한 키-값 조회부터 리더보드용 정렬 집합이나 지리 공간 인덱스와 같은 복잡한 데이터 구조까지 다양한 애플리케이션 시나리오를 Redis 내에서 직접 모델링할 수 있다.
Redis Query Engine을 사용하면 사용자는 Redis를 문서 데이터베이스, 벡터 데이터베이스, 보조 인덱스 및 검색 엔진으로 사용할 수 있다. Redis Query Engine을 통해 사용자는 해시 및 JSON 문서에 대한 인덱스를 정의하고, 벡터 검색, 전문 검색, 지리 공간 쿼리 및 집계를 위한 풍부한 쿼리 언어를 사용할 수 있다. 이는 Redis를 단순한 캐시를 넘어 다중 모델 데이터 플랫폼으로 확장하여 유연한 쿼리 기능이 필요한 현대 애플리케이션을 지원한다.
메시징 및 트랜잭션
Redis Pub/Sub(발행/구독의 약자)은 경량 메시징 기능이다. 발행자는 채널에 메시지를 보내고, 구독자는 해당 채널에서 메시지를 수신한다. 이 패턴은 분리된 구성 요소가 비동기적으로 통신해야 하는 실시간 알림, 채팅 시스템 및 이벤트 기반 아키텍처에서 일반적으로 사용된다.
Redis 트랜잭션은 단일 단계에서 명령 그룹을 실행할 수 있게 한다. 다른 클라이언트가 보낸 요청은 트랜잭션 실행 중에 처리되지 않는다. 이는 명령이 단일 격리 작업으로 실행됨을 보장한다. Redis 트랜잭션은 큐-및-실행 모델에 기반하며, 명령이 큐에 대기된 후 중단 없이 순차적으로 실행되어 배치의 원자성을 보장한다.
Redis 사용자는 서버에 Lua 스크립트를 업로드하고 실행할 수도 있다. 이 기능을 통해 복잡한 작업을 서버 측에서 원자적으로 수행할 수 있어 네트워크 왕복을 줄이고 일관성을 보장한다. Lua 스크립팅은 데이터에 가까운 곳에서 실행되어야 하는 사용자 정의 비즈니스 로직을 구현하는 데 특히 유용하다.
지속성 및 내구성
Redis는 일반적으로 전체 데이터 세트를 메모리에 보관한다. 버전 2.4까지는 데이터 세트의 일부를 디스크에 저장하는 가상 메모리로 구성할 수 있었지만, 이 기능은 더 이상 사용되지 않는다. Redis의 지속성은 두 가지 방법으로 달성할 수 있다: 스냅샷 방식은 데이터 세트를 정기적으로 메모리에서 디스크로 비동기적으로 이진 덤프로 전송하며 Redis RDB Dump File Format을 사용한다; 저널링 방식은 데이터 세트를 수정하는 각 작업의 기록을 백그라운드 프로세스에서 추가 전용 파일(AOF)에 추가한다. Redis는 백그라운드에서 추가 전용 파일을 다시 작성하여 압축하고 복구 시간을 줄일 수 있다.
Redis 구현은 데이터를 보유한 프로세스를 복제하기 위해 fork 시스템 호출을 사용한다. 이를 통해 부모 프로세스는 클라이언트에 계속 서비스를 제공하면서 자식 프로세스는 인메모리 데이터를 디스크에 지속한다. 이 설계는 지속성 작업 중 가동 중지 시간을 최소화하며, 데이터 내구성을 보장하면서 높은 가용성을 유지하는 Redis의 능력에 핵심 요소이다.
다른 데이터베이스 시스템과의 차이점
Redis는 데이터 저장소와 캐시로 모두 기능하는 시스템이다. 데이터는 주 컴퓨터 메모리에서 수정 및 읽히면서도 순차 접근에 최적화된 형식으로 디스크에 지속되며, 무작위 접근이 아닌 형식이다. 형식화된 데이터는 시스템이 다시 시작될 때만 메모리에 재구성된다. 이 접근 방식은 주로 디스크 기반 저장 및 무작위 접근 패턴에 의존하는 전통적인 데이터베이스와 대조된다.
Redis는 관계형 데이터베이스 관리 시스템(RDBMS)과 다른 데이터 모델을 사용한다. 명령은 데이터베이스 엔진이 실행할 쿼리보다는 추상 데이터 유형에 대한 작업을 지정한다. 데이터는 직접 검색을 위해 설계된 구조에 저장된다. 보조 인덱스, 집계 또는 전통적인 RDBMS에서 흔한 다른 기능에 의존하지 않는다. 이러한 단순성과 인메모리 운영에 대한 집중은 특정 접근 패턴에서 Redis를 매우 빠르게 만들지만, 복잡한 분석 쿼리는 다른 시스템에 더 적합하다는 것을 의미한다.
현대적 사용 및 생태계
2025년 5월 1일 기준으로 Redis 8.0부터 시작하는 모든 버전에서 모든 데이터 유형이 동일한 패키지에 포함되어 Redis Source Available License v2 하에 제공된다. 이전에는 일부 데이터 유형이 분리되어 있어 다른 라이선스로 제공되었다. 이러한 통합은 사용자의 배포 및 라이선스 관리를 단순화하여 Redis를 더 응집력 있는 플랫폼으로 만든다.
Redis는 많은 기술 스택에서 기본 구성 요소가 되었으며, 클라우드 제공업체 및 주요 클라우드 플랫폼과 함께 캐싱, 세션 관리 및 실시간 분석에 자주 사용된다. 낮은 지연 시간 특성은 모델 서빙이나 피처 스토어에 빠른 데이터 접근이 필요한 AI 및 머신 러닝 애플리케이션에도 적합하다. Redis Query Engine의 벡터 검색 지원은 임베딩에 대한 유사성 검색에 의존하는 생성형 AI 및 대규모 언어 모델 애플리케이션에 대한 증가하는 수요와 일치한다.