개발자 / 오픈소스

블로그 | 스팀파이프와 마스토돈으로 오픈소스판 ‘블룸버그 터미널’ 만들기

Jon Udell | InfoWorld 2023.01.10
오픈소스 기반 클라우드 쿼리 관리 기술인 스팀파이프(Steampipe)와 마스토돈(오픈소스 분산형 소셜 네트워크)을 함께 사용하면 다양한 기술 실험을 할 수 있다. 그런 의미에서 필자는 마스토돈 API를 포스트그레SQL 외부 테이블에 매핑하는 플러그인과 쿼리 기능을 결합해 페디버스(fediverse) 활동에 필요한 기반을 만들 수 있다고 생각했다. 막상 살펴보니 두 가지 이유로 구현하기 어려웠다.
 
ⓒ Getty Images Bank 

첫째, 마스토돈 커뮤니티는 분석에 필요한 일종의 감시를 반기지 않는다. 사실 원래 그런 기조가 커뮤니티 안에 있었다. 이후 상황이 급변했지만 일단 필자는 그 정신을 존중하고 싶다. 다른 누군가가 페디버스를 크롤링하고 인덱싱할 수 있지만, 필자까지 거기에 힘을 보탤 필요는 없을 것 같다. 그런 방식은 API 데이터의 실시간 수집, 쿼리, 시각화로 대표되는 스팀파이프의 장점을 제대로 살리지 못하기도 한다.

둘째, 마스토돈의 API는 5분당 300개의 요청을 허용한다. 물론 스팀파이프를 일괄 처리(batch) 모드를 활용해 제약을 없애고 포스트그레SQL 데이터베이스에 데이터를 영구적으로 저장할 수 있다. 하지만 이는 스팀파이프와 마스토돈 기술 모두의 철학을 거스르는 것이다. 마스토돈 클라이언트는 동일하게 API 제한을 받는다. 웹 앱을 사용하거나 폰 앱을 사용한다면 ‘제한에 도달했으므로 몇 분 동안 기다려야 한다’는 메시지를 볼 일이 없을 것이다. 실제 필자가 테스트해본 결과 웹 앱을 사용하는 동시에 스팀파이프로 API를 쿼리하기 전까지는 그 메시지를 본 적이 없다. 

마스토돈 기술은 딥 데이터 마이닝이라는 철학에 저항한다. 그렇다면 그런 제한 속에 스팀파이프는 어떤 종류의 마스토돈 클라이언트를 실현할 수 있을까? 일단 스팀파이프는 읽기 전용 시스템이므로 일반적인 클라이언트는 아닐 것이다. 가능한 방향은 인터랙티브 앱을 보강하는 일종의 리더 또는 브라우저다.

스팀파이프를 이용한 대시보드는 홈, 로컬, 연합 타임라나, 툿(toot) 기록, 즐겨찾기, 팔로우와 팔로워, 알림, 용어/사람/해시태그 검색, 팔로우하는 사람들에게 할당한 목록을 기준으로 구성된 타임라인의 테이블 뷰(일부 차트도 함께)를 표시한다. 모두 HTML 테이블로 스팀파이프의 대시보드 서버에 의해 렌더링된다. 열은 모두 정렬 가능하며 테이블의 셀은 링크 또는 일반 텍스트만 포함할 수 있다.

마스토돈 API에서 반환되는 툿 콘텐츠가 HTML이라는 점을 감안하면, 일반 텍스트만 가능하다는 제약은 처음에는 장애물처럼 느껴졌다. 이미지가 없고, 툿 콘텐츠에 링크도 없다면 좋은 점이 과연 무엇일까? 사실 모든 제약이 나쁜 것은 아니다. 가끔 일리 있는 제약이 있다. 여기서도 마찬가지다. 여기서 생성되는 뷰는 화면에 많은 정보를 표시한다. 기본 클라이언트의 기본 뷰는 다음과 같다.
 
ⓒ IDG

기본 타임라인에는 항목 3개가 보인다. 100개의 항목을 스크롤해 넘어갈 수 있지만, 조금 불편할 것이다. 다음은 스팀파이프 대시보드의 홈 타임라인이다. 한 번에 십여 개의 항목을 볼 수 있고 그 크기 단위로 100개 항목을 손쉽게 훑어볼 수 있다.
 
ⓒ IDG

소프트웨어 주제로 다양한 저서를 펴낸 그렉 윌슨에게 이 부분에 대해 설명했더니 윌슨은 “마스토돈의 블룸버그 터미널 격이다”라고 표현했다. 개인적으로 블룸버그 터미널을 사용해본 적이 없지만, 터미널 디자인이 ‘UX의 대참사’라고 불릴 만큼 조롱을 받는다는 사실은 알고 있다. 하지만 다양한 소스를 빠른 속도로 불러오고 데이터 피드를 훑어볼 수 있도록 도와준다는 맥락에서 맞을 수 있다. 재미있고 그럴듯한 비유라고 생각한다.

여기서 원칙은 최대한 밀도 높게 정보를 표시한다는 것이다. 인간의 뇌는 한눈에 많은 정보를 흡수하도록 만들어졌는데, 정보가 잘 정리돼 있다면 매우 효과적으로 흡수할 수 있다. 필자는 촘촘하게 배치된 마스토돈 활동을 살펴볼 때 실제로 그렇다고 느낀다.

필자는 이 효과를 강화하기 위해 필터를 적용하기 시작했다. 예를 들어 마스토돈 타임라인에서는 말 많은 사용자의 글이 첫 화면을 거의 다 차지할 수 있다. 원래 소셜 미디어 자체가 항상 서로의 관심을 요청하는 곳이다. 피드의 게시자라면 무질서하게 쏟아지는 항목이 독자의 경험을 망칠 수 있음을 고려해야 한다. 피드를 읽는 사용자가 말이 많은 소스를 필터링할 수 있는 방법을 고려하는 것도 좋다. 스팀파이프의 SQL 기반은 쉽고 자연스럽게 이를 구현할 수 있다. 여기 링크에서 리스트 값을 출력하는 쿼리 전체를 볼 수 있다. 
 
select distinct on (list, user_name, person, hour) -- only one per list/user/hour
  person,
  url,
  hour,
  toot
from
  data
order by
  hour desc, list, person

한 사용자가 시간당 최대 하나의 툿만 올릴 수 있도록 규칙을 만들기는 쉬웠다. 그다음 단계는 이 규칙을 다른 뷰에 적용하고 접힌 툿의 개수를 표시하고 사람별로 규칙을 설정하는 것이다.

마스토돈 웹 앱에는 항상 링크가 있다. 필자는 이미지를 보거나 게시물에 반응을 보이거나 답장하고 싶을 때 관련 링크를 따라 들어간다. 대시보드는 많은 마스토돈 활동을 신속하게 살펴보면서 어느 항목을 더 볼지 결정하는 데 도움이 된다. 여기서는 아무런 서식 없는 일반 텍스트의 500자 이하 툿을 보며 소통해야 한다. 제약이 많긴 하지만 개인적으로는 마음에 든다.

대시보드 시스템이 앞으로 HTML 테이블 셀의 서식 있는 텍스트와 이미지를 지원하게 되기를 기대한다. 그렇게 되면 마스토돈 대시보드에서 켜거나 끌 수 있는 옵션으로 제공되면 좋을 것이다. 기본값은 어떻게 해야 할까? 특히 툿 텍스트와 함께 이미지 캡션을 표시할 수 있다면 이미지 없는 일반 텍스트가 좋을 것 같다. 마스토돈 문화는 신규 사용자가 대거 유입되면서 달라지고 있지만, 이미지 설명을 쓰는 문화는 지금까지 유지되고 있다. 그러니까 짧고 신중한 포스트를 작성하고, 이미지를 포함하는 경우 이미지에 대한 캡션을 작성하라. 필자라면 클릭해서 더 자세히 살펴볼 것이다.
editor@itworld.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.