마스토돈은 사실 채팅 서비스이다
완전관리되는 마스토돈 서버 자원을 늘리려다가 문득 액티비티펍 네트워크의 검색 없음, 인용 없음 같은 특징은 이 서비스를 오래된 채팅과 비슷한 과거 기록에 접근이 거의 불가능한 서비스라는 점을 깨달았습니다.
처음엔 그저 일론님의 기분에 따라 아무말 인프라가 방해 받는 모습이 마음에 안 들어 적당한 또 다른 아무말 인프라를 찾으며 사용하기 시작한 액티비티펍 네트워크를 사용하기 시작한 지 만 1년이 훌쩍 지났습니다. 마스토돈으로 액티비티펍 네트워크를 사용하기 시작하고 한 반 년쯤 지날 때 마스토돈 커뮤니티는 오래 못 갈 거라고 봐요 라고 예상했는데 그로부터 다시 반 년이 넘게 지난 지금 이 예상은 한 반 정도는 맞고 다른 반 정도는 틀렸습니다.
얼마 못 갈 거라고 생각했지만 여전히 다양한 사람들이 액티비티펍 네트워크에 글을 쓰고 있고 이 규모는 어떤 이벤트에 의해 급격하게 변할 것 같지는 않습니다. 또 서비스 사용을 시작할 때 예상보다 높은 기술적인 이해를 요구할 뿐 아니라 마스토돈에 인용과 검색 기능 부재는 플랫폼의 명백한 한계, 마스토돈의 계정 이동성에 대한 걱정 같은 일단 사용을 시작한 사람 입장에서는 사소해 보이지만 사용을 검토하는 사람 입장에서는 신경 쓰이게 만드는 문제들 때문에 액티비티펍 네트워크에 새로운 사용자들이 갑자기 나타날 것 같지도 않습니다.
요즘 제 시야에 보이는 액티비티펍 네트워크 사용자분들은 직접 서버를 구축하고 관리하는데 관심이 있는 분들이 많이 계십니다. 개인적으로 워드프레스 정도를 설치하기 위해 LAMP 환경을 만드는 정도가 제가 가진 기술의 한계인 입장에서 마스토돈 서버가 요구하는 다양한 스택은 보는 순간 제가 원활하게 관리할 수 없으리라는 예상을 하게 만들었습니다. 소프트웨어 한 두 개라면 몰라도 여러 스택을 구성하는 소프트웨어 각각의 구동을 관리해야 하고 이들 중 어느 하나를 업데이트 할 때 다른 소프트웨어에 끼치는 영향을 관리해야 하며 나아가 이들 모두가 정상적인 동작을 유지하며 결국 그 위에서 동작하는 액티비티펍 네트워크 호환 소프트웨어 자체도 멀쩡하게 구동해야 한다는 점에서 저 역시 종종 제가 사용할 서비스 환경을 직접 구축하는데 관심이 있지만 이번에는 그러지 말아야겠다는 결정을 내립니다. 그리고 완전관리되는 위키를 사용하는 것과 마찬가지로 마스토돈 서버를 만들어 제 도메인을 붙일 수 있기는 하지만 서버 자체는 한 달마다 비용을 내고 완전관리되는 서비스를 선택해 액티비티펍 네트워크 사용을 시작했습니다.
완전관리되는 서비스에 기반해 마스토돈을 사용할 때 장단점이 확실했는데 저는 그저 사용하기만 하면 됐습니다. 백업, 복원, 장애대응, 소프트웨어 업데이트 같은 온갖 자잘하지만 실수하면 골치아픈 일들이 알아서 처리됩니다. 특히 마스토돈 버전이 올라갈 때 버전이 올라갔다는 사실을 제가 알기도 전에 이미 버전이 업데이트 되어 있었고 이번 버전 업데이트에 따라 자잘한 문제가 생기면 이미 관리자가 이 문제를 임시 수정한 패치를 적용해 문제를 회피하도록 해 줬을 뿐 아니라 이 코드를 제출해 문제가 정식으로 수정되는데 기여하기까지 합니다. 인프라에 문제가 생기더라도 잠깐 기다리면 관리자가 문제를 인지했고 해결하는 중이라는 메시지를 빨리 받을 수 있어 서비스를 완전히 사용할 수 없다면 잠깐 기다리고 서비스를 사용할 수 있다면 좀 느려진 상태를 감안하고 그냥 조금 느리게 아무 말이나 하고 있으면 곧 문제를 해결했다는 메시지를 받을 수 있었습니다. 만약 이런 온갖 문제를 제가 직접 대응하려 했다면 저는 아무말을 열심히 하는 대신 그 아무말을 하는 인프라를 유지보수 하느라 정작 목적이었던 아무말에는 소홀했을 수 있습니다.
단점도 확실한데 관리자는 종종 커스텀 하고 싶은 부분이 있으면 메일로 요청하면 대응해준다고 이야기했지만 그런 커스텀은 시행착오를 반복하는 가운데 적절한 방법을 찾기 마련이라 매번 시행착오마다 누군가에게 요청해야 하는 환경에서는 커스텀 하기 어렵습니다. 다른 서버 관리자 분들이 핵심 기능에 영향을 끼치지 않는 범위 안에서 조그만 커스텀 기능을 구현해 적용하는 모습을 보고 얼마간 부러워 하곤 했습니다. 물론 마스토돈을 오직 아이보리 앱을 통해서만 사용하니 그런 자잘한 커스텀에 별 의미가 없다는 사실을 깨닫는데 그리 오랜 시간이 걸리지는 않았습니다. 하지만 좀 아쉽고 서운하긴 합니다.
또 액티비티펍 네트워크의 부하 내구성 문제를 겪던 상황에서 다른 관리자분들 중 문제를 정확히 파악하신 분들은 서버의 워크로드 밸런스를 조절해 다른 작업보다 글 처리를 더 빨리 하도록 조절하기도 했는데 완전관리되는 서비스를 사용하는 입장에서는 이런 최적화를 수행할 여지가 전혀 없었습니다. 그나마 몇몇 기술 수준이 저와 크게 다르지 않은 관리자 분들이 일시적으로 서버를 증설하시는 것과 마찬가지로 저 역시 그 달에만 사용하던 상품을 한 단계 위 상품으로 변경해 엄청나게 밀린 글을 처리하도록 하는 정도가 할 수 있는 대응의 전부였습니다. 미래에 비슷한 일이 일어난다면 아마 그 때도 기술을 동원한 최적화 보다는 신용카드를 통한 대응을 할 수밖에 없을 겁니다.
그렇게 마스토돈을 1년 넘게 사용하다 보니 슬슬 지금 사용 중인 자원에 한계가 가까워지고 있습니다. 제가 사용하는 마스토돈 완전관리 서비스인 masto.host는 요금제에 따라 동시에 처리할 수 있는 큐 갯수, 데이터베이스 용량, 미디어 스토리지 용량에 제한이 있습니다. 저 혼자 사용하는 마스토돈 서버는 가장 저렴한 요금제를 사용하는데 제가 24시간 내내 아무말을 뿜어내고 있지 않은 이상 큐 갯수 제한은 아무런 문제도 없었습니다. 아마 동시에 몇 명이 이따금씩 아무말을 하는 정도로도 문제를 일으키지 않을 겁니다. 미디어 스토리지는 20기가 제한이 있는데 다른 서버로부터 받아 온 미디어에 한해 리텐션 설정을 조절해 항상 20기가 미만으로 사용하도록 설정하면 아무 문제도 없었습니다.
물론 미디어 스토리지를 늘려 다른 서버로부터 받은 미디어를 로컬에 유지하면 나중에 다른 서버로부터 가져온 오래된 글에 포함된 이미지를 다시 외부 서버에 요청하지 않고 순식간에 열어 볼 수 있는 장점은 있겠지만 마스토돈에 인용과 검색 기능 부재는 플랫폼의 명백한 한계에 이야기한 대로 애초에 제대로 된 검색 기능이 없는 이상 오래된 글을 찾을 방법이 거의 없다는 점을 고려하면 굳이 다른 서버로부터 받은 미디어를 모두 들고 있을 필요가 없다고 생각합니다. 지난 1년 사이에 규모가 큰 서버가 문을 닫기도 했는데 이 때 수많은 글과 미디어가 사라졌지만 검색이 없는 이상 이 글들이 사라졌다고 해서 현 시점의 액티비티펍 네트워크 사용에 거의 영향을 끼치지 않았습니다.
미디어 리텐션 설정을 통해 미디어 스토리지를 항상 20기가 미만으로 사용하기로 결정하는데는 별 어려움이 없었지만 서버를 운용하기 시작한 지 1년이 넘게 경과하자 최대 2기가로 제한된 데이터베이스 용량이 슬슬 차 오르기 시작했고 신경이 쓰였습니다. 미디어 스토리지와 마찬가지로 데이터베이스는 제가 쓴 글, 저에게 보이는 다른 서버로부터 받은 글을 모두 저장하고 있어 이미 받아 둔 다른 서버의 글이라면 굳이 다른 서버에 다시 요청하지 않고서도 글을 순식간에 가져올 수 있게 해 줍니다. 또 미디어와 마찬가지로 오래된 글을 가져올 때 그 서버가 지금도 운영되는지 여부에 관계 없이 바로 로컬에서 글과 미디어를 찾을 수 있으니 스토리지를 사용해 다른 서버의 기록을 보관하는 건 나쁘지 않은 선택입니다.
또 컨텐츠 리텐션 설정을 건드리면 이에 의해 데이터베이스로부터 제거되는 오래된 글을 통제할 수 없게 되는데 가령 오래된 글을 북마크 했더라도 컨텐츠 리텐션 설정에 의해 이 글이 로컬에서 사라지면 북마크 역시 사라집니다. 또 오래된 글을 리포스트 했거나 페이버릿 한 다음 시간이 지나 이 글이 로컬 데이터베이스로부터 사라지면 리포스트, 페이버릿 설정을 바꿀 수 없게 된다고 합니다. 미디어 리텐션 설정에 의해 미디어를 다른 서버에 요청해 가져오는데 비해 컨텐츠 리텐션 설정에 의한 결과는 해결할 수 없는 문제를 일으킬 수 있어 보여 지난 1년 넘는 기간 동안 건드리지 않고 사용해 왔습니다.
그래서 데이터베이스가 가득 차면 상위 요금제로 넘어가야겠다고 생각했는데 얼마 전 생각하다 보니 문득 액티비티펍 네트워크의 속성은 제가 지금까지 생각해 온 마이크로블로그나 소셜 네트워크 서비스가 아닐 수 있다는 생각을 했습니다. 블로그는 근본적으로 컨텐츠를 쌓고 여러 방법으로 컨텐츠들 사이를 연결하고 이들이 검색엔진에 의해 발견될 것을 염두하는 서비스라고 생각합니다. 여기에 ‘마이크로’라는 접두사를 붙이면 다른 특징은 똑같이 가져가되 글 자체의 길이가 급격히 줄어들어 더 짧은 글을 더 간편하게, 더 부담 없이 쓸 수 있는 서비스로 볼 수 있습니다. 글이 짧아지더라도 여전히 컨텐츠를 쌓고 컨텐츠가 발견되며 이들 사이에 인용, 연결 등을 통한 관계를 만들 수도 있습니다. 소셜 네트워크 서비스는 어떤 면으로는 마이크로블로그와 비슷하지만 이번에는 그 글을 만들어내는 개개인에 집중해 다른 사람의 타임라인을 구독하고 이 구독 관계를 만드는데 허가가 필요하게 만들어 조금 덜 공개적으로 운영할 수도 있고 특정 사용자가 어떤 다른 사용자들의 타임라인을 구독하는지 여부에 따라 그들 사이의 관계를 예측하는데 사용할 여지도 있습니다. 이런 모든 기능은 컨텐츠가 여러 가지 방법으로 발견될 것을 감안하고 또 발견될 방법을 통제하는데 그 핵심이 있습니다.
액티비티펍 네트워크의 여러 호환 소프트웨어 중 지금 사용 중인 마스토돈에 초점을 맞춰 보면 마스토돈은 전통의 마이크로블로그나 소셜 네트워크 서비스와 대체로 비슷해 보입니다. 트윗봇 앱을 사용하다가 아이보리 앱을 사용하면 심지어 지금 사용하는 이 서비스가 트위터인지 마스토돈인지 구분하기 어렵습니다. 그런데 액티비티펍 네트워크를 계속해서 사용하다 보니 전통의 마이크로블로그나 소셜 네트워크 서비스와는 상당히 다를지도 모르겠다는 생각이 듭니다. 먼저 검색 기능이 없는데 사실 검색이 불가능하지는 않고 별도로 검색 소프트웨어를 서버 수준에서 사용해야만 합니다. 하지만 비용이나 관리 문제로 서버들 대부분은 검색을 지원하지 않으며 이는 기술적으로 가능하기는 하지만 사실상 기능이 없다고 보는 편이 옳습니다. 검색이 없으면 오래된 글에 접근하기 아주 어려워지고 오래된 글을 발견할 가능성이 낮아집니다. 오래된 글을 발견할 수 없으면 이들 사이에 인용, 링크를 통한 상호작용이 일어나지 않게 되어 오래된 글은 그냥 데이터베이스와 미디어 스토리지를 차지한 디지털 쓰레기가 됩니다.
또 마스토돈에는 인용 기능이 없는데 인용 기능은 타임라인에 집중하지 않는 사람들에게도 이전 글과 상호작용하는 글의 맥락을 따라가는데 아주 중요한 역할을 합니다. 종종 다른 글을 리포스트 한 다음 바로 이어서 그 글에 대한 의견을 별도 글로 남기는 분들이 있는데 자신의 타임라인 상에서는 바로 이어서 나타나는 두 글의 맥락을 알 수 있는 것처럼 보이겠지만 다른 사람들의 타임라인에서는 결코 그 모양 그대로 나타나지 않습니다. 그래서 누군가가 방금 리포스트한 글에 대한 이야기라며 뭔가 말할 때 도대체 무슨 이야기를 하는 것인지 그 사람 프로필 타임라인에 찾아가 훑어 봐도 찾기 어려울 때가 대부분입니다. 작성된지 얼마 안 된 글조차 이런 상황인데 오래된 글과 상호작용 하려 할 때 인용 기능이 없어 그저 링크만 사용하면 맥락을 파악하기 어려운 것은 둘째 치고 오래된 글에 대한 접근성이 크게 떨어져 검색과 인용 기능이 있는 다른 서비스에서 오래된 글과 상호작용 하는 것과는 완전히 다른 상호작용이 거의 불가능한 상태라고 봐야 합니다.
다른 마이크로블로그 혹은 소셜 네트워크 서비스에서는 오래된 글을 현재에 다시 발견하고 의미를 가지도록 만들기 위해 오래된 글을 퍼올려 작성자에게 보여주고 별도 리스트를 만들어 글을 유지할 수 있게 해 줍니다. 하지만 특히 마스토돈은 오래된 글을 재발견해 의미 부여할 가능성이 거의 혹은 아예 없습니다. 오래된 글이 일단 최신 타임라인에서 밀려나면 고작 몇 시간 뒤에도 그 글을 다시 찾기는 아주 어렵습니다. 그나마 글 쓴 사람을 기억하고 있다면 그 사람의 프로필 타임라인에 찾아가 글을 찾을 수 있을 지 모르지만 키워드만 기억하고 있다면 검색이 불가능하기 때문에 글을 찾기는 아주 어려울 겁니다.
그런데 이런 속성을 생각해보니 여러 사람이 아주 간편하게 글을 올리지만 글 하나하나에 의미는 적은 편이고 각 글이 다시 발견될 가능성에 딱히 신경 쓰지 않는다는 측면에서 오래된 채팅 서비스와 속성이 더 비슷하다고 생각하게 됐습니다. 물론 현대적인 채팅 서비스는 글 하나하나에 주소를 부여해 특정 글을 가리킬 수도 있고 오래된 글을 검색할 수도 있으며 다양한 검색 조건을 사용해 지나간 모든 채팅 기록에 의미를 부여하고 있습니다. 하지만 좀 더 오래된 채팅 서비스를 떠올려 보면 개개인이 작성한 글은 순간적인 의미가 있을 뿐 일단 글이 지나가고 나면 이를 다시 확인하기는 쉽지 않습니다. 아주 오래 전에는 이런 문제를 완화하기 위해 참여한 모든 채팅창의 로그를 다 남겼다가 나중에 이 로그를 검색하는 방법으로 오래된 기록을 찾곤 했는데 그나마 이 글을 웹 주소로 가리키는 방법 같은 것은 존재하지 않아 오래된 기록과 상호작용 할 수도 없었고 심지어 서버가 오래된 기록을 가지고 있지도 않았습니다. 현대에 검색 기능이 없는 액티비티펍 네트워크 호환 소프트웨어인 마스토돈은 마이크로블로그나 소셜 네트워크 서비스가 아니라 일종의 개방형 채팅 서비스에 더 가깝고 이렇게 생각하는 순간 검색이나 인용의 부재는 이상한 점이 아니라 좀 낡긴 했지만 당연하게 생각할 수 있습니다.
이 관점에서 마스토돈 서버의 미디어 스토리지나 데이터베이스 용량을 증설하는데 아무런 의미가 없습니다. 소프트웨어 스스로가 글과 미디어를 물리적으로 쌓을 수는 있지만 이들에 접근하고 이들을 발견할 방법을 제공하지 않는 이상 오래된 글은 그저 스토리지의 전기신호일 뿐 현대에 아무런 역할을 하지 않으며 이런 특징은 좀 오래된 채팅 서비스의 동작과 일치합니다. 여기까지 생각한 끝에 데이터베이스 용량을 증설하기 위해 상위 요금제를 사용하는 대신 컨텐츠 리텐션 설정을 건드려 오래된 글을 삭제하도록 설정을 변경했습니다. 어차피 소프트웨어 자체가 오래된 글에 대한 접근성을 제공하지 않는 마당에 오래된 글을 가지고 있어 봐야 의미가 없고 또 근미래에 갑자기 접근성을 제공할 가능성도 없어 보여 이를 기대하며 더 높은 운영 비용을 지출할 필요가 없다고 생각합니다.
정리하면 적어도 마스토돈의 기능 상으로는 겉보기에 마이크로블로그나 소셜 네트워크 서비스처럼 보이지만 기능 상 제약으로 인해 일어나는 실제 동작은 채팅에 더 가깝습니다. 마스토돈을 컨텐츠에 대한 휘발성이 높은 채팅으로 인식하면 데이터베이스나 미디어 스토리지를 증설해 오래된 다른 서버의 글을 들고 있어도 이들에 대한 접근성이 거의 없어 사실상 의미가 없습니다. 이런 생각 끝에 컨텐츠 리텐션 설정을 변경하고 상위 요금제를 사용하지 않기로 결정했습니다.