Redis 6.0.0 정식 버전이 나왔습니다!
드디어 Redis 6.0.0 안정 버전이 나왔습니다. 이번에는 첫 릴리스 후보가 나온 뒤 안정 버전 최종 릴리스까지 걸린 주기가 비교적 짧았습니다. 약 4개월이 걸렸으니 결코 짧은 시간은 아니지만, 과거 기록과 비교하면 긴 편도 아닙니다 :)
큰 소식은 앞서 발표했던 내용과 같지만, 눈여겨볼 만한 변경 사항도 있습니다. 기존에 추가된 기능은 SSL, ACL, RESP3, 클라이언트 측 캐싱, 스레드 I/O, 복제본의 디스크리스 복제, Redis-benchmark의 클러스터 지원과 redis-cli의 클러스터 지원 개선, Redis 모듈로 베타 제공되는 Disque, 그리고 Redis Cluster Proxy입니다(현재는 https://github.com/RedisLabs/redis-cluster-proxy에서 제공됩니다).
그렇다면 안정성 외에 RC1과 오늘 사이에 무엇이 바뀌었을까요?
1. 클라이언트 측 캐싱은 몇 가지 측면에서 재설계되었습니다. 특히 캐시 슬롯 방식을 폐기하고 키 이름만 사용하는 방식으로 바꿨습니다. 다른 대안들을 분석하고 Redis 코어 팀의 다른 구성원들과 논의한 끝에, 결국 이 방식이 더 나아 보였습니다. 그 밖에도 이 기능을 위해 작업 목록에 남아 있던 항목들을 마침내 모두 구현해 기능을 완성했습니다. 특히 제가 이 기능에서 가장 인기 있는 사용 방식 중 하나가 될 것으로 생각하는 “브로드캐스팅 모드”가 포함되었습니다.
브로드캐스팅을 사용하면 서버는 더 이상 각 클라이언트가 어떤 키를 요청했는지 기억하지 않습니다. 대신 클라이언트가 키 접두사별로 구독하면, 해당 접두사와 일치하는 키가 수정될 때마다 알림을 받습니다. 따라서 메시지 수는 늘어나지만(선택한 접두사에 대해서만 늘어납니다) 서버 측에서 메모리를 사용할 필요가 없습니다. 또한 이제 옵트인/옵트아웃 모드도 지원하므로, 브로드캐스팅 모드를 사용하지 않는 클라이언트도 캐시할 키를 서버에 정확히 알려 무효화 메시지 수를 줄일 수 있습니다. 요컨대 메모리를 적게 사용하는 모드가 필요할 때나, 매우 선별적인 저대역폭 모드가 필요할 때나 이 기능이 훨씬 좋아졌습니다.
2. 많은 사용자가 오래전부터 요청했던 기능입니다. 이제 Redis는 복제에 사용되는 RDB 파일이 더 이상 필요하지 않으면 즉시 삭제되는 모드를 지원합니다. 특정 환경에서는 데이터를 디스크에 남겨 두지 않고 메모리에만 보관하는 것이 좋은 방법입니다.
3. ACL도 몇 가지 측면에서 개선되었습니다. 먼저 ACL을 위반하는 모든 클라이언트를 확인할 수 있는 새로운 ACL LOG 명령이 추가되었습니다. 사용해서는 안 되는 명령이나 키에 접근한 클라이언트, 인증에 실패한 클라이언트를 확인할 수 있습니다. 로그는 실제로 메모리에 저장되므로 어떤 외부 에이전트든 “ACL LOG”를 호출해 현재 상황을 확인할 수 있습니다. ACL 문제를 디버깅할 때 매우 유용합니다.
하지만 제가 가장 마음에 드는 기능은 ACL GENPASS를 다시 구현한 것입니다. 이제 SHA256 기반 HMAC을 사용하며, 추측할 수 없는 의사 난수 문자열을 몇 비트 길이로 생성할지 서버에 알려 주는 선택적 인수도 받습니다. Redis는 시작할 때 /dev/urandom에서 내부 키의 시드 값을 가져오고, 이후 카운터 모드에서 HMAC을 사용해 다른 난수를 생성합니다. 따라서 이 API를 매번 원하는 만큼 호출해도 됩니다. 매우 빠르게 동작하기 때문입니다. 애플리케이션에서 추측할 수 없는 세션 ID를 생성하고 싶다고요? ACL GENPASS를 호출하면 됩니다. 그 밖에도 여러 용도로 사용할 수 있습니다.
4. 복제 프로토콜인 PSYNC2가 개선되었습니다. 이제 프로토콜 마지막 부분의 PING를 잘라낼 수 있으므로 Redis가 부분 재동기화를 수행할 수 있는 경우가 늘어납니다. 복제본과 마스터가 공통 오프셋을 찾을 가능성이 높아지기 때문입니다.
5. 타임아웃을 사용하는 Redis 명령이 훨씬 좋아졌습니다. 이제 BLPOP를 비롯해 과거에 초 단위만 받던 명령들도 소수 값을 받을 수 있습니다. 또한 연결된 클라이언트 수와 관계없이 실제 해상도가 현재 “HZ” 값보다 나빠지지 않도록 개선되었습니다.
6. 이제 RDB 파일을 더 빠르게 로드합니다. 파일의 실제 구성에 따라(값이 크거나 작은지에 따라) 20~30% 정도의 성능 향상을 기대할 수 있습니다. 연결된 클라이언트가 많을 때 INFO도 더 빨라졌습니다. 오랫동안 남아 있던 문제였는데 이제 마침내 해결되었습니다.
7. 복잡한 문자열 알고리즘을 구현한 새로운 명령 STRALGO가 추가되었습니다. 현재 구현된 알고리즘은 최장 공통 부분 수열(LCS) 하나뿐입니다. LCS는 코로나바이러스의 RNA를 비교할 때(일반적으로 다른 생물의 DNA와 RNA를 비교할 때도) 사용되는 중요한 알고리즘입니다. 지금 일어나고 있는 일은 너무나 큰 일이어서, Redis 안에 흔적 하나쯤은 남겨야 했습니다.
Redis 6은 지금까지 나온 Redis 릴리스 중 가장 큰 릴리스입니다. 따라서 안정 버전이기는 하지만 신중하게 다루고, 운영 환경에 적용하기 전에 여러분의 워크로드에서 테스트해 보시기 바랍니다. 지금까지 큰 문제는 발견되지 않았지만, 주의해서 사용해야 합니다. 버그 제보를 수집하는 대로 최대한 빨리 Redis 6.0.1을 릴리스할 준비를 하겠습니다.
이번 릴리스에서 저와 함께 코드를 작성해 준 많은 분께 진심으로 감사드립니다. 제 작업을 후원해 준 모든 회사에도 감사드립니다(Redis Labs, 고맙습니다). 다른 기여자들의 작업을 후원해 준 모든 회사에도 감사드립니다(다른 회사들, 고맙습니다). 때로는 지루한 절차를 따라 변경 후 다시 테스트해 가며 세심하게 버그를 제보해 주신 많은 분들, 그리고 어떤 형태로든 개선 사항을 제안해 주신 분들께도 진심으로 감사드립니다.
평소처럼 Redis 6은 여러 곳에서 받을 수 있습니다. https://redis.io에서 tarball로 받을 수 있고, GitHub 저장소에서는 “6.0.0” 태그로 확인할 수 있습니다.
Redis 6을 즐겨 주세요.
antirez
글을 무작위로 읽기