Redis와 Gopher 프로토콜

Redis와 Gopher 프로토콜

Redis에 내장된 Gopher 프로토콜 구현을 설명합니다. (참고: Gopher 지원은 Redis 7.0에서 제거되었습니다.)

출처: 공식문서 — Redis and the Gopher protocol

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 페이지를 서비스하려면 반드시 인스턴스에 비밀번호를 설정하세요. 비밀번호가 설정되면 다음과 같습니다.

  1. Gopher 서버(기본적으로 아닌 활성화 시)는 Gopher를 통한 콘텐츠 서비스를 중단합니다.
  2. 그러나 클라이언트가 인증하기 전에는 다른 명령도 호출할 수 없습니다.

그러니 requirepass 옵션으로 인스턴스를 보호하세요.

Gopher 지원을 활성화하려면 다음 구성 줄을 사용합니다.

gopher-enabled yes

문자열이 아니거나 존재하지 않는 키에 접근하면 Gopher 프로토콜 형식으로 오류가 생성됩니다.

더 알아보기 (Learn more)

  • RFC 1436 — Gopher 프로토콜 명세
  • gopher2redis — Redis를 Gopher 사이트로 노출하는 스크립트