Redis와 Gopher 프로토콜
Redis와 Gopher 프로토콜
Redis에 내장된 Gopher 프로토콜 구현을 설명합니다. (참고: Gopher 지원은 Redis 7.0에서 제거되었습니다.)
Redis에는 RFC 1436에 명시된 Gopher 프로토콜 구현이 포함되어 있습니다.
Gopher 프로토콜은 90년대 후반에 매우 인기 있었습니다. 웹의 대안이었고, 서버·클라이언트 양쪽 구현이 너무 단순해서 Redis 서버는 이 지원을 구현하는 데 단 100줄의 코드만 사용했습니다.
요즘 Gopher로 뭘 하나요? 사실 Gopher는 정말로 죽지 않았고, 최근에는 순수 평문 텍스트 문서로 구성된 보다 계층적인 Gopher 콘텐츠를 부활시키려는 움직임이 있습니다. 어떤 이들은 더 단순한 인터넷을 원하고, 어떤 이들은 주류 인터넷이 너무 통제된다고 생각하며, 신선한 공기를 원하는 이들을 위한 대안 공간을 만드는 게 멋있다고 봅니다.
어쨌든, Redis 10주년 기념으로 Gopher 프로토콜을 선물로 넣었습니다.
어떻게 동작하는가 (How it works)
Redis의 Gopher 지원은 Redis의 인라인 프로토콜을 사용하며, 특히 어쨌든 불법이던 두 종류의 인라인 요청 — 빈 요청 또는 "/"로 시작하는 요청(그런 슬래시로 시작하는 Redis 명령은 없습니다) — 을 사용합니다. 일반적인 RESP2/RESP3 요청은 Gopher 프로토콜 구현 경로와 완전히 분리되어 있으며 평소처럼 서비스됩니다.
Gopher가 활성화된 Redis에 연결해 "/foo" 같은 문자열을 보내면, 이름이 "/foo"인 키가 있다면 그 키가 Gopher 프로토콜로 서비스됩니다.
진짜 Gopher "hole"(Gopher 세계에서 Gopher 사이트를 부르는 말)을 만들려면 https://github.com/antirez/gopher2redis 같은 스크립트가 필요할 것입니다.
보안 경고 (SECURITY WARNING)
공개 주소의 인터넷에 Redis를 올려 Gopher 페이지를 서비스하려면 반드시 인스턴스에 비밀번호를 설정하세요. 비밀번호가 설정되면 다음과 같습니다.
- Gopher 서버(기본적으로 아닌 활성화 시)는 Gopher를 통한 콘텐츠 서비스를 중단합니다.
- 그러나 클라이언트가 인증하기 전에는 다른 명령도 호출할 수 없습니다.
그러니 requirepass 옵션으로 인스턴스를 보호하세요.
Gopher 지원을 활성화하려면 다음 구성 줄을 사용합니다.
gopher-enabled yes
문자열이 아니거나 존재하지 않는 키에 접근하면 Gopher 프로토콜 형식으로 오류가 생성됩니다.
더 알아보기 (Learn more)
- RFC 1436 — Gopher 프로토콜 명세
- gopher2redis — Redis를 Gopher 사이트로 노출하는 스크립트