Spring(java) Redis 클라이언트 라이브러리
스프링(자바) 환경에서 사용할 수 있는 레디스를 위한 클라이언트 라이브러리는 여러 종류가 있다.
Redis 저수준 라이브러리(드라이버)는 자바 라이브러리인 Jedis 와 Lettuce 가 존재한다. 이 라이브러리는 프로토콜 처리, Redis와의 연결, 네트워크 I/O 작업을 담당한다. Redis 고수준 라이브러리는 RedisTemplate, Redis Repository이 있다. 고수준 라이브러리의 존재 이유는 개발자가 저수준 라이브러리를 통해 레디스의 작업을 하기에 복잡하고 어렵기 때문에 사용성을 위해 제공되는 라이브러이다. 그리고 고 저수준 + 고수준을 동시에 지원하는 Redisson java 라이브러리도 있다.
Jedis vs Lettuce
Redis 저수준 라이브러리에는 Jedis 와 Lettuce 가 존재한다.
Jedis는 단순하고 직관적인 라이브러리이다. 개발자 입장에서 사용하기 Lettuce 보다 쉽다. 동기식(sync/blocking) 작업으로 처리한다.
Lettuce는 사용하기는 Jedis 보다 어렵지만 비동기/Reactive 통신을 지원하는 Netty 기반의 라이브러리이다.
Lettuce 는 비동기/Reactive 통신을 지원하는 라이브러리이므로 Jedis 보다 성능적으로 우수하다. 그리고 Jedis는 멀티쓰레드 환경에서 취약한데 Jedis 객체는 여러 쓰레드에서 접근 시 문제가 생길 수 있으므로 멀티 쓰레드 환경에서 쓰레드마다 개별 Jedis 객체를 생성해야 하고 보통은 Jedis Pool 을 이용한다. 반면 Lettuce는 멀티 쓰레드 환경에서 안정적이기 때문에 하나의 Lettuce 객체로도 운영이 가능하다. Jedis 가 Lettuce보다 개발자의 입장에서 사용하기 쉽다는 장점이 있지만 어차피 Redis 사용 시 고수준의 라이브러리를 같이 사용하므로 장점이 되기 힘들고 최근에는 Lettuce를 많이 사용하는 추세이다.
RedisTemplate vs Redis Repository
스프링 부트에서 Redis 고수준 라이브러리로 Redis Template 과 Redis Repository 라이브러리를 제공한다. 두 라이브러리 모두 Spring data Redis 의존성을 추가하면 사용할 수 있다.
implementation 'org.springframework.data:spring-data-redis:3.4.3'
두 라이브러리 모두 어플리케이션 설정 파일을 통해 레디스 관련 설정을 하면 자동으로 관련 객체를 생성하고 스프링 컨테이너에 빈으로 등록을 한다. 별도의 추가적인 설정을 하려면 별도의 Config 클래스를 통해 정의하고 빈으로 등록하면 된다.(보통 드라이버 라이브러리 설정이나 직렬화/역직렬화 설정을 위해 별도의 Config 파일을 작성한다.) RedisTemplate은 동기적 방식으로 동작하는데 굳이 드라이버로 라이브러리로 Lettuce을 사용하는 것이 이점이 있을까 생각을 했지만 리소스 차원에서 쓰레드 안정성 때문에 Jedis 는 메모리를 많이 사용하기 때문에 잘 사용하지 않는 것 같다.(이 부분은 내 생각이다. 틀릴 수도 있다.)
Redis Template은 모든 데이터 타입에 대한 연산을 제공한다. 모든 데이터 타입에 대하여 처리를 하기 때문에 개발자가 사용하기에 조금 불편할 수도 있지만 trade-off 라고 생각하자. Redis Repository는 Spring Data Jpa 을 다루는 것처럼 사용할 수 있어 개발자가 편하게 사용할 수 있다. 하지만, 도메인 객체만을 저장할 수 있어 실제로 Redis 에서 사용할 수 있는 타입은 hash(키-값) 뿐이다.
Redisson
Redisson 은 Redis Java 클라이언트 저수준 + 고수준 라이브러리이다.
Jedis 와 Lettuce 드라이버를 사용하지 않고 내부적으로 별도의 Netty 기반 저수준 통신 계층을 활용하여 비동기, 논블로킹 네트워크 통신으로 구현되었다. 동기, 비동기, Reactive API 를 모두 지원하여 개발자가 필요한 방식으로 사용할 수 있다.
Redisson 의 특징으로 단순 키-값을 저장하는 기능을 넘어 분산 객체, 분산 락, 분산 컬렉션 등 다양한 분산 데이터 구조와 기능을 제공하여 분산 시스템에서 사용하기 좋은 라이브러리이다.
implementation 'org.redisson:redisson:3.45.0'
Redisson 세부적인 특징과 활용은 별도의 챕터에서 다룬다.
참고자료
https://www.linkedin.com/pulse/battle-titans-lettuce-vs-jedis-ultimate-java-redis-ghazanfar-cycjc
Battle of the Titans: Lettuce vs. Jedis – The Ultimate Java Redis Showdown
Have you ever wondered why there are two prominent clients for connecting Java with Redis? In a world where speed, scalability, and ease of use can make or break an application, Lettuce and Jedis both shine for different reasons. Each has carved out a plac
www.linkedin.com
https://turtledev.tistory.com/35
[Spring] Redis Template과 Redis Repository 특징과 장단점
Redis는 뛰어난 성능과 유연성을 제공하는 인메모리 데이터베이스로, 다양한 애플리케이션에서 필수적으로 사용됩니다. 하지만 Spring 환경에서 Redis를 다룰 때는 두 가지 접근 방식인 RedisTemplate과
turtledev.tistory.com
https://www.baeldung.com/redis-redisson