블루스카이(Bluesky)를 떠받치는 분산 소셜 프로토콜 atproto에 비공개 데이터를 다룰 수 있는 확장 기능 '스페이스(spaces)'가 알파 단계로 공개됐다. 개발사는 이를 프로토콜 최초 출시 이후 가장 큰 업데이트라고 표현했다. 지금 당장 실행 가능한 코드, 배포된 SDK, 예제 앱, 그리고 계정을 만들어 곧바로 개발해 볼 수 있는 호스팅 PDS까지 함께 제공된다. 다만 명확한 알파 단계인 만큼 파괴적 변경(breaking change)이 예정돼 있으며, 실서비스 코드를 붙여서는 안 된다고 못 박고 있다.
스페이스는 그동안 '프라이빗 데이터', '퍼미션드 데이터', 잠깐은 '버킷'으로 불리다 지금의 이름에 안착했다. 이름이 여러 번 바뀐 것 자체가 지난 2월 개발 일지와 정식 제안서를 거치며 생태계의 피드백을 반영해 설계가 계속 다듬어졌다는 방증이다.
왜 필요한가
atproto는 설계상 오늘날 프로토콜에 저장되는 모든 데이터가 공개다. 게시물, 팔로우, 좋아요, 차단까지 전부 누구나 운영할 수 있는 분산 서버망에 저장되고, 누구나 접속할 수 있는 글로벌 '파이어호스'가 이를 모아 다시 방송한다. 이 개방성 덕분에 블루스카이나 탱글드(Tangled) 같은 대규모 애플리케이션을 '열린 상태로 잠긴' 네트워크 위에서 만들 수 있었다. 그러나 설정값, 비공개 북마크, 수십에서 수백만 규모의 포럼, 구독 전용 발행 앱처럼 공개를 전제하지 않는 데이터 모델을 요구하는 기능과 제품도 존재한다. 스페이스는 이동 가능한 신원, 상호운용·재조합 가능한 데이터, 무허가 참여라는 atproto의 장점을 유지하면서 비공개 데이터를 저장·동기화하는 새로운 프로토콜 원시타입(primitive)이다.
어떻게 동작하나
하나의 스페이스는 특정 사람과 애플리케이션만 접근하도록 게이트를 건, 축소판 atproto 네트워크에 가깝다. 표현은 거창하지만 실제로는 매우 가볍다. 레코드 하나만 담은 최소 규모부터 10억 개 레코드 규모까지 확장된다. 스페이스 자체를 제외하면 나머지는 기존 방식과 동일하다. 사용자는 DID를 갖고, 자신의 리포지토리에 데이터를 호스팅하며, 레코드는 렉시콘(Lexicon)으로 정의된 JSON이고, 앱은 리포를 동기화해 뷰를 구성한다. 접근 제어는 '스페이스 오소리티'가 맡는데, 이는 일반 계정과 다를 바 없는 하나의 DID이며 경우에 따라 본인 계정 자체가 되기도 한다. 이 오소리티가 어떤 DID의 접근을 허용할지 결정하고, 레코드는 작성자 PDS 안의 스페이스별 권한 리포에 저장된다.
여기서 반드시 짚어야 할 한계가 있다. 스페이스가 제공하는 것은 접근 제어이지 기밀성이 아니다. 스페이스 안의 데이터는 암호화되지 않으며, 접근 권한을 가진 사용자나 앱은 누구나 읽을 수 있다. 민감 정보를 다루려는 개발자라면 이 구분을 전제로 설계해야 한다.
동기화 구조도 공개 데이터와 다르다. 스페이스 데이터에는 릴레이 개념이 없다. 공개 데이터에서 릴레이는 네트워크 전역 데이터에 대한 접근을 제공하지만, 스페이스에서는 콘텐츠를 재방송하는 것 자체가 바람직하지 않은 경우가 많기 때문이다. 대신 애플리케이션은 PDS 호스트에서 스페이스 데이터를 직접 동기화한다. 그만큼 프로토콜이 더 가볍고 실시간 동기화 수단을 제공한다.
실무자가 지금 할 수 있는 것
인프라 없이 시험해 보려면 개발사가 운영하는 호스팅 PDS를 쓰면 된다. BPS 계정에서 초대 코드와 알파 PDS 링크를 받을 수 있다. 단 이 샌드박스는 공용이며, 실험 외 용도로 악용하거나 모더레이션 문제를 일으키면 영구 차단된다. 저장 데이터는 영속적이지도 안정적이지도 않아 예고 없이 전부 삭제될 수 있고, 알파 종료 후 PDS 전체가 삭제된다. 자체 PDS를 돌리려면 ghcr.io/bluesky-social/atproto:pds-spaces-alpha 태그의 도커 이미지를 쓸 수 있는데, 레퍼런스 PDS 배포판과 호환되며 별도 설정이 필요 없다. 실계정을 이 버전으로 마이그레이션하지 말라는 경고는 특히 새겨둘 만하다. 버전 간 깔끔한 업그레이드조차 보장되지 않는다.
생태계에서는 이미 제안 스펙을 구현하기 시작한 프로젝트들이 나왔다. 예제 앱 bulletin.my는 스페이스를 활용한 게시판으로, 자신의 팔로워만 볼 수 있는 보드에 상호 팔로우한 사람들이 스티키 노트를 남기는 방식이다. 코드는 깃허브(bluesky-social/bulletin)에 공개돼 있고, 이를 위해 TypeScript @atproto 패키지가 alpha 태그의 스냅샷 버전으로 배포됐다. 프로토콜을 더 깊이 파고들려면 proposals 리포의 최신 명세와 atproto 리포의 spaces 브랜치 레퍼런스 구현을 참고하면 된다. 개발사는 가을 내내 반복 개발을 이어가 올해 안 정식 출시를 목표로 하며, 매주 목요일 새 빌드를 배포하고 변경 사항을 atmosphere.community 공지 스레드에 올린다고 밝혔다. 결국 지금 단계에서 실무자가 얻을 수 있는 것은 완성품이 아니라, 비공개·게이트형 커뮤니티라는 새로운 애플리케이션 부류를 미리 실험하고 명세 논의에 기여할 기회다.