Redis는 “오픈 코어”가 아니다
원문은 Salvatore Sanfilippo님이 에 게재했습니다. 이 블로그 구독하기
사람은 새로운 사실을 이미 존재하는 범주에 끼워 맞추려는 강한 경향이 있다. 이는 비슷한 사건들을 동일한 논리적 틀 안에서 정신적으로나 문화적으로 분류하는 데는 유용하다. 그래서 이틀 전 내가 Redis 코어는 여전히 순수 BSD 라이선스로 배포되며, Redis Labs가 개발한 일부 Redis 모듈만이 AGPL에서 다른 비오픈소스 라이선스로 변경될 예정이라고 설명했을 때, 사람들은 “아! 알겠네, 오픈 코어로 가는 거구나”라고 말했다.
하지만 여기서 실제로 무슨 일이 일어나고 있는지의 진실을 제대로 파악하고 싶다면, 이번 단순화는 통하지 않는다. 오픈 코어 기술이 성립하려면 두 가지가 필요하다. 하나는 시스템이 모듈식으로 이루어져 있다는 것이고, 다른 하나는 그 시스템의 일부를 독점화해 자유 소프트웨어를 기반으로 제품을 만들어 낸다는 것이다. 예를 들어 데이터베이스의 단일 노드만 오픈소스로 제공하고 클러스터링 로직과 메커니즘을 별도의 비자유(non-free) 레이어에 구현한다면 이는 오픈 코어 기술이다. 마찬가지로 모듈식 스토리지 시스템을 갖춘 관계형 데이터베이스를 만들면서 강력한 보장을 제공하는 유일한 스토리지가 비자유 소프트웨어라면 역시 오픈 코어다. 오픈소스 시스템을 둘러싼 오픈 코어 비즈니스 모델에서는 자유 소프트웨어 부분에서 유용한 무언가를 떼어내는 것이 *근본*이다.
이제 Redis는 한동안 모듈식 시스템이었다. Redis 모듈을 이용하면 최근에 도입된 cluster message bus API를 활용한 새로운 분산 시스템을 비롯해 네이티브처럼 보이는 새로운 자료형까지 다양한 것을 만들 수 있다. 하지만 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다운 방식”을 따르며 새로운 것들을 탐색하고 있을 뿐이다.
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기