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

Redis OM .NET 소개: .NET 개발자를 위한 Redis 객체 매핑 라이브러리

.NET과 Redis를 위한 유창한(Fluent) API와 객체 모델

Redis는 속도와 단순함이라는 두 가지 이유로 수많은 개발자에게 사랑받는 훌륭한 기술입니다. Redis는 프로그래머가 이미 잘 알고 있는 데이터 구조로 직관적으로 구성된 네이티브 인터페이스를 제공합니다. 게다가 이러한 구조들은 사용하기 쉬우면서도 놀랍도록 최적화되어 있습니다. 새로운 .NET용 클라이언트 라이브러리인 Redis OM의 출시는 바로 이 '속도와 단순함'의 완벽한 조합을 겨냥한 것입니다.

Redis OM .NET이란?

Redis OM은 Redis를 위한 객체 매핑(Object Mapping), 그리고 그 이상을 제공합니다. Redis OM의 탄생 배경에는 "개발자가 모든 Redis 명령어를 익히지 않고도 Redis를 최대한 활용할 수 있는 방법은 무엇일까?"라는 질문이 있습니다. 이번 첫 프리뷰 릴리스에서는 "도메인 객체를 Redis에 어떻게 저장하고 찾을 수 있을까?"라는 질문에 답하는 데 초점을 맞췄습니다. Redis OM .NET 프리뷰 릴리스는 객체 매퍼이자, 보조 인덱스 빌더이며, 단순하면서도 강력한 쿼리 빌더입니다. 이 모든 것이 여러분이 Redis로 도메인 객체를 손쉽게 저장하고 검색할 수 있도록 돕기 위한 것입니다.

Redis 모듈

모듈 API는 Redis에 큰 전환점을 가져온 요소입니다. 모듈은 플랫폼에 엄청난 유연성을 더하는 동시에 Redis에 필수적인 기능들을 제공합니다. 특히 RedisJSON은 보조 인덱싱과 문서 모델링을 중심으로 방대한 기능을 열어줍니다. Redis OM은 코어 Redis에서도 잘 작동하지만, RedisJSON을 함께 사용할 때 진정한 힘을 발휘합니다. RedisJSON을 최대한 활용하면 Redis에서 객체를 모델링하고 쿼리할 수 있는 풍부하고 강력한 API를 구현할 수 있습니다.

주요 기능

Redis OM .NET 프리뷰 버전은 다음 네 가지 핵심 기능을 제공합니다:

  1. 객체 모델링
  2. 인덱스 생성
  3. 유창한(Fluent) 쿼리
  4. 유창한(Fluent) 애그리게이션(집계)

작동 방식

Redis OM을 본격적으로 사용하기 전에 프로젝트에 패키지를 설치해야 합니다. 다음 명령어를 실행하면 됩니다:

dotnet add package Redis.OM

Redis OM 라이브러리의 핵심 연결 로직은 RedisConnectionProvider에 있습니다. 이 프로바이더는 Redis와 통신하는 데 사용할 수 있는 세 가지 객체에 대한 접근을 제공합니다:

  1. IRedisConnection: ExecuteExecuteAsync 메서드를 통해 Redis와 직접 통신할 수 있습니다.
  2. RedisCollection<T>: 제네릭 타입의 객체 컬렉션으로, 유창한 쿼리 API를 제공합니다.
  3. RedisAggregationSet<T>: Fluent API를 사용해 Redis에서 애그리게이션 파이프라인을 구축하고 실행할 수 있습니다.

Redis 연결하기

ASP.NET Core에서 Redis OM을 Redis에 연결하려면 RedisConnectionProvider 인스턴스를 싱글턴(Singleton)으로 주입해야 합니다. 이를 위해 Redis URI를 사용합니다. .NET 6를 사용한다면 program.cs 파일을 열고 다음 코드를 추가합니다:

.NET 5처럼 Startup.cs 파일을 사용하는 경우에는 Startup.ConfigureServices에 다음을 추가하면 됩니다:

객체 모델링과 검색

RedisJSON을 사용하면 JSON 객체를 Redis에 네이티브하게 저장하고 쿼리할 수 있습니다. 하지만 JSON을 쿼리하려면 먼저 인덱스를 정의해야 합니다. 이 과정을 더 쉽게 만들기 위해 Redis OM .NET에는 선언적 인터페이스를 통해 인덱스를 정의할 수 있는 선언적 모델이 도입되었습니다. 클래스를 Redis에 저장하고 속성을 인덱싱하려면 클래스에 Document 어트리뷰트를 붙이고, 각 속성에는 Indexed 또는 Searchable 어트리뷰트를 지정합니다. Indexed는 일반적인 인덱스를 의미하며, Searchable은 문자열에만 적용되며 해당 속성이 전문(Full-text) 검색으로 쿼리 가능함을 의미합니다. 그런 다음 어트리뷰트가 적용된 타입을 IRedisConnection.CreateIndex 메서드에 전달하여 Redis에 인덱스를 생성할 수 있습니다. 예를 들어 인덱스가 있는 Customer 클래스를 선언하려면 다음과 같이 작성합니다:

쿼리

인덱스가 생성되면 이제 RedisCollection<T>를 사용해 Redis에 저장된 객체를 쿼리할 수 있습니다. 예를 들어 John이라는 고객이 Customer 객체로 Redis에 저장되어 있다면 다음과 같이 조회할 수 있습니다:

범위(Range) 쿼리도 손쉽게 수행할 수 있습니다. 예를 들어 아직 은퇴 연령에 도달하지 않은 모든 고객을 찾으려면 다음과 같이 작성합니다:

RedisCollection과 RedisJSON을 함께 사용하면 평소 LINQ에서 하듯 풍부하고 복잡한 쿼리를 자연스럽게 작성할 수 있으며, Redis OM이 이를 Redis의 쿼리 언어로 변환하는 작업을 대신 처리해 줍니다.

애그리게이션(집계)

쿼리 외에도 Redis 애그리게이션을 활용하면 다양한 작업을 수행하는 애그리게이션 파이프라인을 구축할 수 있습니다. 예를 들어 각 고객의 3년 후 나이를 구하고 싶다면 Apply 표현식 안에 간단한 산술 연산을 넣기만 하면 되며, 이는 Redis에서 올바르게 형식화된 애그리게이션 파이프라인으로 자동 변환됩니다:

또한 레코드를 그룹화하고 그룹별 요약 통계를 계산할 수도 있습니다. 예를 들어 고객을 성(Last Name)별로 그룹화한 뒤 평균 나이를 계산하는 방법은 다음과 같습니다:

마무리

지금까지 Redis OM for .NET의 핵심 기능을 간략하게 살펴보았습니다. 더 자세히 알고 싶다면 공식 튜토리얼을 확인하고 API 문서를 참고해 보세요. 저희는 앞으로 Redis.OM에 더 많은 기능을 추가할 계획이며, 이를 위해 커뮤니티 여러분의 피드백을 적극적으로 기다리고 있습니다. 지금 바로 사용해 보시고, 문제를 발견하거나 라이브러리에 추가되었으면 하는 기능이 있다면 GitHub에서 이슈를 열어 알려주세요. 물론 커뮤니티의 기여는 언제나 환영하며, PR도 언제든 받고 있습니다 :)