Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

Redis 7.0 첫 번째 릴리스 후보(RC1) 공개!

새 버전은 Redis의 기존 기능들을 한 단계 발전시키고, 새로운 기능을 추가하며, 더 나은 리소스 활용률로 더 강력한 성능을 제공합니다.

Redis 7.0 RC1, 드디어 공개

오늘 우리는 Redis v7의 첫 번째 릴리스 후보(RC1) 출시를 자랑스럽게 발표합니다. 지난 1년 가까이 개발이 진행되어 온 7.0 버전은 프로젝트의 중요한 이정표입니다. 메이저 릴리스는 기능과 내부 구조 측면에서 보다 과감한 변화를 시도할 수 있는 기회이기도 합니다. 기존 릴리스 주기를 따라, Redis 7.0 정식 출시(GA) 전에 약 3주 간격으로 두 개의 후보 버전이 추가로 계획되어 있습니다.

Redis 7.0에는 Functions(함수), ACL v2, 샤딩된 Pub/Sub 등 다양한 새로운 기능이 추가되었습니다. 이번 글과 이후 연재될 일련의 포스트에서 이러한 기능들을 하나씩 소개할 예정입니다. 아울러 이번 버전에 투입된 많은 작업은 대부분의 사용자에게 잘 드러나지 않는 Redis 내부 영역의 개선과 최적화에 집중되었습니다. 이러한 노력은 사실상 Redis의 모든 하위 시스템을 아우르며, 영속성(persistence), 복제(replication), 네트워크, 메모리, 컴퓨팅 사용량 전반에 걸쳐 이루어졌습니다. 그 결과 그 어느 때보다 빠르고, 안정적이며, 경제적인 Redis가 탄생했습니다.

새로운 Redis 버전은 새로운 데이터 구조를 선보이거나 운영 측면을 새로운 차원으로 끌어올리는 데 초점을 맞추지 않았습니다. 대신 프로젝트를 내성적으로 돌아보고, 기존 설계 가정 중 일부에 도전하며, 인프라 개선을 위한 더 대담한 조치를 취하고, 커뮤니티의 요구와 사용 사례를 깊이 반영하는 데 방점을 두었습니다.

Redis Functions란 무엇인가

Redis Functions가 바로 그 좋은 예입니다. Functions는 Redis 프로그래밍 가능성(Programmability)이라는 더 넓은 주제에 속합니다. 'Redis를 프로그래밍한다'는 것은 데이터 지역성(data locality)을 활용하기 위해 서버가 사용자 로직을 실행하도록 하는 것을 의미합니다. 프로그래밍 가능성은 버전 2.6에서 Lua 스크립트가 도입된 이래 Redis의 일부였습니다(자세한 내용은 Eval Scripts 소개 문서를 참조하세요).

Lua 스크립트는 그 이후로 Redis 사용자들 사이에서 꾸준히 채택률이 높아져 왔습니다. 스크립트는 핵심 Redis 연산과 제어 구조를 조합해 서버 측 워크플로우를 구성할 수 있는 효과적이고 간단한 방법을 제공합니다. 또한 애플리케이션의 네이티브 코드로부터 기본 데이터 구조를 추상화하는 역할도 할 수 있습니다. 애플리케이션이 보유한 Lua 스크립트 집합은 해당 애플리케이션의 논리적 연산(예: '사용자 추가', '주문 접수' 스크립트)을 구현합니다.

사용자 피드백이 밝힌 세 가지 요구 사항

스크립팅은 오랫동안 인기 있는 Redis 기능이었기 때문에, 우리는 이에 관해 수많은 피드백을 수집했습니다. 그 결과 대부분의 요구 사항이 다음 세 가지 범주로 분류된다는 것을 알게 되었습니다.

  1. 독립성: 스크립트는 애플리케이션의 일부입니다. 스크립트는 애플리케이션의 내부 구조를 반영하므로 구현과 긴밀하게 결합되어 있습니다. 애플리케이션은 스크립트의 소스 코드를 포함하고 런타임에 이를 로드해야 합니다. 이러한 얽힘은 개발, 테스트, 배포에 이르는 애플리케이션 생명주기의 모든 단계에서 복잡성을 증가시킵니다.
  2. 실행 엔진: Redis에서 스크립트를 작성할 수 있는 언어는 Lua 하나뿐입니다. 게다가 여러 기술적인 이유로 인해 Redis는 줄곧 동일한 Lua 5.1을 사용해 왔습니다. 더 최신 버전을 원하는 사람도 많고, 대부분은 아예 다른 언어를 원합니다.
  3. 견고성: Redis의 Lua 스크립팅 설계와 구현은 다른 소프트웨어와 마찬가지로 특정 가정을 전제로 하며 한계가 있습니다. 어떤 경우에는 이로 인해 메커니즘 확장이 극도로 복잡해지거나 불가능해집니다. 기반이 부족하여 이벤트 처리나 클러스터 스크립트 같은 잠재적으로 가치 있는 기능을 추가하는 데도 걸림돌이 됩니다.

Functions가 가져온 변화

다시 Redis Functions로 돌아가 보겠습니다. Redis 7.0에서 함수는 애플리케이션과 완전히 독립적입니다. 그 결과 함수는 일급(first-class) 데이터베이스 객체로서 실행 가능한 소프트웨어 아티팩트가 됩니다. Redis 서버는 함수를 사용자 데이터와 마찬가지로 관리하므로, 가용성을 위해 함수가 영속화되고 복제됩니다. 데이터베이스에 함수를 로드하는 일은 더 이상 런타임에 애플리케이션이 담당하지 않으며, 예약하고 관리할 수 있는 관리 유지보수 작업이 됩니다.

함수가 서버의 컨텍스트 안에 상주하면 애플리케이션은 함수의 구현에서 자유로워집니다. 대신 애플리케이션은 함수 시그니처를 내장 로직에 대한 API로 삼고, 실제로 사용되는 Redis 명령과 타입은 전혀 알 필요가 없습니다. 이를 통해 서로 다른 애플리케이션이 함수를 공유할 수 있으며, 애플리케이션에 대한 필수 의존성 없이 함수를 개발, 테스트, 유지보수할 수 있습니다.

Redis Functions의 설계는 실행 엔진에 구애받지 않습니다(engine-agnostic). Redis 7.0은 Lua 5.1로 작성된 함수만 지원하지만, 내부 구현은 다른 실행 엔진과 연동할 준비가 거의 되어 있습니다. 향후 더 많은 종류의 실행 엔진 지원이 추가될 계획입니다.

Functions가 가져온 또 하나의 패러다임 전환은 라이브러리의 활용입니다. 라이브러리는 하나 이상의 등록된 함수와 추가적인 내부 함수들로 구성될 수 있습니다. 등록된 함수는 라이브러리의 진입점이자 애플리케이션과의 계약상 API입니다. 반면 내부 함수는 코드 재사용성을 위해 라이브러리 내부에서 직접 호출될 수 있습니다.

맺음말

Redis 7.0에 Functions가 도입된 것은 Redis의 프로그래밍 가능성을 다음 단계로 끌어올리는 큰 진전이라고 기대합니다. 이미 애플리케이션에서 Lua 스크립트를 사용 중이라면, Functions로 마이그레이션하는 것은 선택 사항이며 매우 간단합니다(자세한 내용은 Redis Functions 문서를 참조하세요). 더욱 좋은 점은, 앞으로 나아가면서 Functions가 Redis 프로그래밍 가능성을 개선하고 혁신하기 위한 더 탄탄한 기반이 된다는 것입니다.