Gopher: Redis를 위한 선물
원문은 Salvatore Sanfilippo님이 에 게재했습니다. 이 블로그 구독하기
10년 전 Redis는 Hacker News에 처음 발표됐습니다. 저는 이를 프로젝트의 가상 생일로 삼고 있습니다. 대중에게 공개된 시점이 프로젝트의 첫 코드 한 줄이 작성된 실제 날짜보다 더 중요하다고 생각하기 때문입니다(동물의 수정과 실제 출생을 생각해 보세요). Redis의 10주년을 핑계로 지난 며칠간 조금 만지작거리던 것을 공개하려 합니다. 원래는 만우절 장난으로 쓰려고 했지만, 그날은 아직 멀었고 이 프로젝트에 대해 지금 바로 이야기하고 싶습니다… 그러니 생일 축하해, Redis! 여기 네 선물이야: Gopher 프로토콜 구현이다.
[… 여기서 Redis는 눈물을 참으려 하지만 감정은 너무 벅차고 바닥에는 비트(그러니까 0과 1)가 흩어져 있다 …]
‘도대체 무슨 소리야?!’가 여러분의 첫 반응이어야 할 겁니다. 2019년에 Gopher라니 조금 이상하게 들리죠. 하지만 이건 *단순한* 농담은 아닙니다. 물론 상당 부분은 농담이 맞지만요. 구현 자체는 어차피 단 100줄에 불과합니다. 페이지를 Redis 키로 렌더링하는 외부 도구는 제외하고 말이죠. 하지만… 요점은 Gopher 주변에 실제로 활동하는 커뮤니티가 존재한다는 것입니다. 아주 작지만 최근 몇 년, 몇 달 사이에 점점 커지고 있는 커뮤니티 말이죠. 인터넷이 더 이상 예전 같지 않다고 느끼는 사람들이 있습니다. 너무 많은 통제, 기업들의 추적, 댓글, 좋아요, 리트윗 때문에 콘텐츠가 더 이상 왕이 아닙니다. 사람들은 무언가 새로운 것을 써도 5시간 동안 인기 있다가 사라집니다. 모든 당사자가 가능한 모든 감정과 거슬리는 단어, 신념을 자기 검열하지 않는 한, 몇 분 이상 불꽃 튀는 논쟁이 되지 않고 유지되는 토론은 더 이상 존재하지 않으며, 그렇게까지 하면 토론 자체가 꽤 쓸모없어집니다. 결국 텍스트 1k짜리 멍청한 페이지 하나를 불러오는 데도 JavaScript 파일 50개를 불러와야 하고, 클라이언트 사이드 렌더링이 멋지다고 화면이 깜빡이는 걸 봐야 하고, 뭐 그런 식입니다.
반면 Gopher는 오직 텍스트 문서만을 전달하는 데 탁월한 텍스트 전용 프로토콜로, 오로지 여러분이 쓴 내용 자체에 집중하게 해줍니다. 하지만 그게 전부라면 그저 페티시즘에 불과하겠죠. 제게 Gopher의 결정적 장점은 그것이 UNCOOL하다는 점입니다. AFAIK 영원히 쿨해지지 않을 정도로 쿨하지 않기에, 특정 사람들이 나머지로부터 분리되어 BBS 시절이나 인터넷 초창기와 더 비슷한, 다른 방식으로 무언가를 경험하기로 결정할 수 있는 대안적 현실이 될 수 있습니다. 대부분의 사람들이 80컬럼 고정폭 글꼴로 괴짜스러운 글을 읽으려고 굳이 찾아가고 싶어 하지 않을 그런 곳 말이죠.
Gopher에서 하는 일은 자신만의 Gopher hole, 즉 Gopher 세계 안의 자신만의 공간을 만드는 것입니다. 기본적으로 인터넷에서의 웹사이트 같은 거죠. 이를 위한 도구는 이미 부족하지 않았지만, Redis는 몇 가지 이유로 꽤 괜찮습니다. Redis 키를 바꾸는 것만으로 사이트 콘텐츠를 실시간으로 바꿀 수 있어 편리합니다. replication을 이용해 사이트를 복제할 수도 있고, RDB 파일을 저장하는 것만으로 백업이나 기록 보관을 위해 전체 Gopher hole의 정확한 복사본을 가질 수도 있습니다.
이 Redis Gopher 개념은 카타니아에 있는 역사적인 해킹 실험실인 FreakNet과의 협업으로 만들어졌습니다. https://it.wikipedia.org/wiki/FreakNet. 이 분들은 Palazzolo Acreide에 있는 레트로컴퓨팅 하드웨어 박물관 프로젝트를 비롯해 정말 흥미로운 일들을 많이 하고 있습니다: https://museo.freaknet.org/en/.
어떻게 동작할까?
사실 아주 간단합니다. 저는 inline 프로토콜을 가로챘고, 특히 어차피 비정상적이었던 두 종류의 inline 요청을 이용했습니다. 빈 요청이거나 “/”로 시작하는 모든 요청이죠(Redis 명령어 중 슬래시로 시작하는 것은 없습니다). 일반적인 RESP2/RESP3 요청은 Gopher 프로토콜 구현 경로를 완전히 벗어나 있어 평소처럼 정상적으로 처리됩니다. Gopher가 활성화된 상태에서 Redis에 연결해 “/foo” 같은 문자열을 보내면, “/foo”라는 이름의 키가 있을 경우 Gopher 프로토콜을 통해 제공됩니다. 전체 구현은 100줄입니다. 처음에는 자료구조를 활용해 Gopher 타입으로 의미론적 변환을 하려고도 했지만, 그냥 복잡하고 쓸모없더군요.
대신 제가 한 일은 Redis 위에서 동작하는 Gopher 저작 도구를 제공하는 것이었고, 여기서 찾을 수 있습니다:
https://github.com/antirez/gopher2redis
Redis 인스턴스에서 실행 중인 예제 Gopher hole을 보려면 gopher://gopher.antirez.com으로 접속하면 됩니다. 참고로 이 주소는 앞으로 며칠 안에 제가 직접 만들게 될 Gopher hole의 주소가 될 예정입니다. P.S. Gopher에 접속할 때는 텍스트 전용 웹/Gopher 브라우저인 Lynx를 사용해 보시길 권합니다.
Gopher 지원은 기본적으로 비활성화되어 있습니다. 활성화하려면 Redis unstable 브랜치를 사용하고 “gopher-enabled” 옵션을 yes로 설정하세요. 다만 반드시 Redis에 비밀번호를 설정하세요. Gopher 프로토콜은 여전히 콘텐츠를 제공하지만, 동시에 일반 Redis 명령어는 접근할 수 없게 됩니다. 이렇게 하면(그리고 해당 인스턴스에 Gopher 키 외에 노출할 데이터가 없다는 전제 하에) 인스턴스를 진짜 Gopher 서버처럼 공개적으로 만들 수 있습니다.
자, Gopher와 함께 즐거운 시간 보내세요! 이 Gopher 프로젝트가 계속 이어지길 바랍니다. 저는 현대 인터넷의 혼란 바깥에 커뮤니티를 만들어야 할 사람들이 우리 중에 분명히 몇 명 있다고 믿습니다. 물론 아예 상호작용을 끊을 수는 없습니다. 예를 들어 저는 블로깅이나 인터넷 사용을 그만둘 생각은 없습니다. 하지만 좀 더 느리고 더 높은 품질의 소통이 번성할 수 있는 장소가 필요합니다.
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기