Redis is not "open core"

Salvatore Sanfilippo

Redis는 “오픈 코어”가 아니다

인간은 새로운 사실을 이미 존재하는 범주에 넣으려는 강한 경향이 있습니다. 비슷한 사건들을 같은 논리적 틀 안에서 정신적으로, 문화적으로 분류하는 데 유용하기 때문입니다. 그래서 이틀 전 제가 Redis 코어는 여전히 순수 BSD 라이선스로 배포되며, Redis Labs가 개발한 일부 Redis 모듈만 AGPL에서 다른 비오픈소스 라이선스로 변경될 예정이라고 설명했을 때, 사람들은 “아! 알겠습니다, 오픈 코어로 가는 거군요”라고 말했습니다.

이번처럼 단순화하는 방식은 여기서 실제로 무슨 일이 일어나고 있는지의 진실을 파악하는 것이 중요하다면 통하지 않습니다. 오픈 코어 기술이 성립하려면 두 가지가 필요합니다. 하나는 시스템이 모듈식이라는 것이고, 다른 하나는 그 시스템의 일부를 독점화해 자유 소프트웨어를 둘러싼 제품을 만드는 것입니다. 예를 들어 데이터베이스의 단일 노드만 오픈소스로 제공하고 클러스터링 로직과 메커니즘을 별도의 비자유 레이어로 구현하는 것은 오픈 코어 기술입니다. 모듈식 스토리지 시스템으로 관계형 데이터베이스를 만들면서 강력한 보장을 제공하는 유일한 스토리지가 비자유인 경우도 마찬가지입니다. 오픈소스 시스템을 둘러싼 오픈 코어 비즈니스 모델에서는 자유 소프트웨어 부분에서 유용한 무언가를 빼내는 것이 *근본적으로* 중요합니다.

이제 Redis는 한동안 모듈식 시스템이었습니다. 최근에 도입된 cluster message bus API를 이용해 새로운 분산 시스템을 만들거나 네이티브처럼 보이는 새로운 자료형을 작성하는 등 Redis 모듈을 이용해 많은 것을 만들 수 있습니다. 하지만 Redis를 모듈식으로 만든 이유는 시스템에서 유용한 무언가를 빼내 가격표를 붙이기 위해서가 아니었습니다. 예를 들어 Redis 5의 새로운 자료구조 중 하나인 streams는 코어의 일부이며 BSD 라이선스로 배포됩니다. streams는 Redis가 이미 모듈식 시스템이 된 뒤에 구현되었습니다.

Redis 모듈은 다른 관찰에서 출발했습니다. 전제로 말씀드리자면 저는 소프트웨어 개발에 있어 매우 보수적인 사람입니다. 저는 Redis가 인메모리 자료구조로 동작할 때 다른 방식으로 같은 일을 하는 것보다 분명한 이점을 제공하는 문제에만 집중해야 한다고 믿습니다. 저는 Redis가 지금 하는 것보다 훨씬 더 많은 일을 하거나 가능한 모든 일관성 트레이드오프를 다 끌어안기를 원하지 않습니다. 저는 Redis가 Redis이기를 바랍니다. 즉 개발자가 특정 문제들을 다양한 방식으로 해결하는 데 사용할 수 있는 그런 범용 도구 말입니다.

하지만 Redis Labs에서는 Redis가 특정 문제들을 해결하지 못하는 것이 조금 아쉽다고 여러 차례 느꼈습니다. 예를 들어 Redis가 제대로 된 전문 검색 엔진이라면 어떨까요? 또 개발자들은 JSON을 정말 많이 원하는데, JSON을 직접 다루는 API가 있다면 어떨까요? 그리고 인메모리 그래프를 현명하게 표현하면 엄청나게 빠를 수 있는데, 풍부한 질의 언어를 갖춘 그래프 데이터베이스 기능을 제공하면 어떨까요? Redis Labs 고객들도 이런 것들을 직접 요청하는 경우가 많았습니다. 사실 그런 기능들은 멋질 수 있지만, 그건 Redis가 아니고 저는 관심이 없으며, 게다가 Redis 오픈소스 쪽에는 이런 것들을 계속 유지해 나갈 개발 역량이 없습니다. 그리고 이는 Redis와 Redis Labs 모두에게 큰 장점입니다. 내부적으로는 저와 몇 명의 OSS 개발 시간만 부담하면 비교적 저렴하게 유지하면서, 나머지 자원은 Redis Enterprise SaaS와 제품이 잘 동작하도록 하는 등 Redis Labs 비즈니스에 유용한 것들을 개발하는 데 쓸 수 있기 때문입니다. 어쨌든 커뮤니티로부터도 많은 기여가 이어지고 있습니다. 그리고 저는 Redis를 다른 영역으로 끌고 갈 화려한 아이디어들에 계속 “안 된다”고 말해 왔습니다… 그것 또한 문제이기도 합니다.

그래도 Redis와 비슷하지만 Redis의 범위를 벗어나는 그런 것들을 갖는 것은 멋진 일일 것입니다. Redis의 사명은 아니더라도, 사람들은 실시간으로 데이터를 넣으면서 동시에 코어당 상당한 양의 질의를 처리할 수 있는 빠른 역색인 기반 전문 검색 기능을 충분히 잘 활용할 수 있기 때문입니다. Redis Labs가 하고 있는 것이 바로 이것입니다. 같은 Redis 기술과 접근 방식을 이용해 Redis가 하려던 것보다 더 많은 일을 하는 것입니다. 기능적인 영역뿐만 아니라 일관성 모델 같은 다른 영역에서도 그렇습니다. 저는 어떤 부분에 대해서는 생각이 확고한 편인데, 예를 들어 CRDT는 특정 사용 사례에서는 정말 멋지지만, 더 약한 일관성 모델을 감수하더라도 동일한 메모리 사용량과 성능, 단순함을 유지하려는 Redis에는 적합하지 않다고 생각합니다. 그래서 Redis Labs는 이 분야의 최고 연구자와 함께 그것을 만들었습니다(그리고 이는 소스를 공개하지 않는 독점 제품입니다). 저는 그런 기능이 특정 운영 환경에서는 엄청나게 유용할 수 있다는 것을 알지만, Redis는 모든 것을 해결하기 위해 존재한 것이 아니었고, Redis Labs가 그것을 해낸 것입니다.

이건 오픈 코어가 아닙니다. Redis Labs는 제가 절대 하지 않을 일들을 하고 있습니다. 여력이 부족하기도 하고, 모든 소프트웨어가 결국 거대해져야 한다고 믿지 않기 때문입니다.

그래서 저는 이 모델을 “오픈 코어”라고 부르는 것이 오해를 불러일으킨다고 생각합니다. Redis라는 식탁에서 무엇이 치워진 것은 아무것도 없고, 단지 Redis 프로젝트가 원래 다루지 않던 다른 영역에서 “Redis다운 방식”을 따르며 새로운 것들을 탐색하고 있을 뿐입니다.

원문은 Salvatore Sanfilippo님이 에 게재했습니다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.