Dweb: Secure Scuttlebutt 으로 소셜 피드 작성하기

지난번 시리즈 소개글에서, 우리는 온라인 소셜 활동에 대한 결정권을 사람에게 부여하는 것이 중요함을 짚어봤습니다. 혐오표현이나 유해표현에 대한 판단을 수익만 추구하는 영리회사에게 맡기는 대신 말이죠. Dweb 시리즈 이번 회차에서 다룰 대상은 Secure Scuttlebutt 입니다. Secure Scuttlebutt 은 사용자가 온라인 커뮤니티에 관한 모든 결정권을 갖는 세계로 안내해줍니다.

앞으로 몇 주 동안 우리는 탈중앙화/분산화 분야의 다양한 프로젝트들을 다룰 것입니다. 이 프로젝트들은 Mozilla 와 연계된 것들이 아닙니다. 그리고 어떤 프로젝트들은 우리와 다른 방식으로 웹 브라우저를 정의합니다. 이 프로젝트들에는 몇 가지 공통점이 있습니다. 이 프로젝트들은 오픈소스이고 누구나 참여할 수 있습니다. 그리고 모두에게 공개되고 누구나 접근 가능한 웹을 추구한다는 점에서 Mozilla 와 같은 사명을 공유하고 있습니다.

이 글의 저자는 André Staltz 입니다. 그는 영리회사가 운영하는 소셜 네트워크가 우세한 현실 아래서 웹의 운명에 관해 많은 글을 썼습니다. 그리고 그는 Scuttlebutt 프로젝트의 핵심 기여자입니다. –Dietrich Ayala

Scuttlebutt 을 시작해 봅시다

Scuttlebutt 은 무료 오픈소스 소셜 네트워크입니다. Scuttlebutt 은 독특하게도 오프라인을 우선시하며 피어-투-피어 방식입니다. JavaScript 오픈소스 프로그래머인 저는 2년 전에 Scuttlebutt 을 알게 되었습니다. 저는 Scuttlebutt 이 영리회사 소유의 플랫폼을 대신하는 새로운 “소셜 웹”이 될 것이라고 생각합니다. 대중화된 플랫폼 덕분에 현재 소셜은 웹 보다 인기있는 컨텐츠를 만들고 소비하는 방식입니다. Scuttlebutt 은 기존의 웹 기술을 모바일 소셜 앱 시대에 맞추려고 시도하지 않습니다. 대신, Scuttlebutt 은 새로운 생태계를 처음부터 만들 수 있게 해줍니다.

로컬 데이터베이스, 친구들과 공유할 수 있습니다

Secure Scuttlebutt (SSB) 프로토콜의 핵심 아이디어는 간단합니다. 당신의 소셜 계정은 단지 로컬 데이터베이스에 저장된 암호 키(당신의 identity)와 로그 메시지(당신의 feed) 일 뿐입니다. 여기까지는 인터넷과 아무 관계 없습니다. 시간 순으로 추가되는 당신의 글(post)은 단지 로컬 데이터베이스에만 저장됩니다. 그래서 당신은 일기처럼 글을 쓸 수 있습니다. 로컬에 저장된 글이 인터넷이나 로컬 네트워크를 통해서 여러 컴퓨터들 사이에서 공유될 때 SSB 는 소셜 네트워크가 됩니다. SSB 프로토콜은 피드(feed, 글)를 피어-투-피어 방식으로 복제할 수 있습니다. 그래서 당신은 친구들의 피드를 로컬에 (완전하게) 복제하여 가질 수 있습니다. 당신이 온라인에 접속될 때마다 친구들의 피드가 갱신됩니다. SSB 구현체 중 하나인 Scuttlebot 은 Node.js 를 이용해서 UI 어플리케이션을 제공합니다. 이 UI 어플리케이션을 통해 로컬 데이터베이스와 네트워크에 연동합니다.

Scuttlebot 사용하기

SSB 는 다양한 랭귀지로 구현되어 있습니다 (Go, Rust, C). 하지만 지금 시점에서 가장 우세한 구현체는 scuttlebot npm 패키지와 그 패키지를 이용하는 Electron 데스크탑 앱입니다. 자신만의 UI 어플리케이션을 바닥부터 직접 만들고 싶다면, Scuttlebot 패키지를 설치하고, 브라우저에 UI를 전송할 로컬 HTTP 서버를 설치하면 됩니다.

다음 npm 명령으로 당신의 Node.js 프로젝트에 Scuttlebot 패키지를 추가합시다.

npm install --save scuttlebot

당신은 커멘드라인 인터페이스로 Scuttlebot 을 로컬 환경에서 이용할 수 있습니다. 그래서 글을 쓰고, 읽고, 친구들과 연결할 수 있습니다. 우선, 서버를 실행시킵니다.

$(npm bin)/sbot server

이제 다른 터미널에서, 앞서 실행시킨 서버를 이용해서 로컬 피드에 글을 추가할 수 있습니다.

$(npm bin)/sbot publish --type post --text "Hello world"

또 당신은 인바이트 코드(invite code)를 이용해서 친구들과 연결할 수 있습니다. 그러면 친구들의 피드를 복제해서 가져올 수 있습니다. 인바이트 코드는 pub server 들에서 가져옵니다.
이 pub server 들은 커뮤니티 소속 친구들 것으로 커뮤니티 피드의 미러(mirror) 역할을 합니다. 인바이트 코드를 이용하는 것은 서버가 당신에게 접속해서 당신의 데이터에 접근할 수 있도록 허용하는 것이기도 합니다.

$(npm bin)/sbot invite.accept $INSERT_INVITE_CODE_HERE

당신의 로컬 피드를 표시하는 간단한 웹앱을 만들려면, Node.js 스크립트로 scuttlebot 서버를 실행시키면 됩니다 (내부적으로 ssb-configpull-stream 도 이용하게 됩니다). 그러면 HTTP 서버가 피드를 제공합니다.

// server.js
const fs = require('fs');
const http = require('http');
const pull = require('pull-stream');
const sbot = require('scuttlebot/index').call(null, require('ssb-config'));

http
  .createServer((request, response) => {
    if (request.url.endsWith('/feed')) {
      pull(
        sbot.createFeedStream({live: false, limit: 100}),
        pull.collect((err, messages) => {
          response.end(JSON.stringify(messages));
        }),
      );
    } else {
      response.end(fs.readFileSync('./index.html'));
    }
  })
  .listen(9000);

node server.js 명령으로 서버를 실행시킵니다. 그리고 브라우저로 localhost:9000 에 연결합니다. 서버는 다음의 index.html 페이지를 제공할 것입니다.

<html>

<body>
  <script>
    fetch('/feed')
      .then(res => res.json())
      .then(messages => {
        document.body.innerHTML = `
          <h1>Feed</h1>
          <ul>${messages
            .filter(msg => msg.value.content.type === 'post')
            .map(msg =>
              `<li>${msg.value.author} said: ${msg.value.content.text}</li>`
            )
          }</ul>
        `;
      });
  </script>
</body>

</html>

더 알아봅시다

SSB 어플리케이션은 메시징보다 더 많은 것을 할 수 있습니다. Secure Scuttlebutt 은 Git 협업, 체스 게임, 온라인 모임 관리에 사용되고 있습니다.

당신은 SSB 를 기반으로 자신만의 어플리케이션을 창조하거나, 또는 특별한 API 나 특별한 데이터베이스 플러그인을 이용해서 어플리케이션을 만들 수 있습니다. 커스텀 플러그인 만드는 법을 알고 싶다면 secret-stack 을 보세요. 데이터베이스에 커스텀 인덱스 생성하는 법을 알고 싶다면 flumedb 를 보세요. 그 밖에도 많은 유용한 레파지토리들이 GitHub 에 마련되어 있습니다.

모든 구현체들이 이용하는 프로토콜 자체를 알고 싶다면 프로토콜 가이드를 보세요. 프로토콜이 사용하는 암호 기술과 모두의 동의하에 만들어진 데이터 포맷에 대해 배울 수 있습니다.

마지막으로, Scuttlebutt.nz 페이지를 잊지 마세요. 설계상의 결정과 우리가 중요하게 생각하는 원칙들을 설명합니다. 우리는 인터넷 커뮤니티에 있어 사람의 역할을 중요하게 생각합니다. 사람이 해야 하는 역할을 컴퓨터가 대신하면 안 됩니다.

이 글은 André Staltz 이 쓴 Dweb: Social Feeds with Secure Scuttlebutt 의 한국어 번역본입니다.

작성자: ingeeKim

"누구에게나 평등하고 자유로운 웹"에 공감하는 직장인.

ingeeKim가 작성한 문서들…


댓글이 없습니다.

댓글 쓰기