- BlueSky는 Twitter·Mastodon과 비슷한 마이크로블로깅 앱이지만, 더 큰 목적은 AT Protocol(atproto) 위에서 대규모 분산 소셜 애플리케이션이 가능한지 검증하는 데 있음
- atproto는 블록체인·DAO·NFT가 아니라, 암호화와 Merkle tree 등을 활용해 사용자가 서명한 기록을 PDS, Relay, App View가 나눠 처리하는 연합형 프로토콜임
- 확장성은 사용자의 Personal Data Server(PDS) 가 모든 팔로워에게 직접 게시물을 보내지 않고, Relay가 네트워크 데이터를 모아 firehose로 제공하는 구조에서 나옴
- 조정은 “speech vs reach” 모델로 나뉘며, 콘텐츠 복제와 노출 제어를 분리해 labeler, feed generator, App View가 필터링과 차단을 적용함
- 안정적인 DID 와 도메인 기반 handle은 계정 이동성을 제공하지만, BlueSky가 운영하는
did:plc해석 서비스는 중앙화 논점으로 남아 있음
BlueSky와 atproto의 관계
- BlueSky는 현재 마이크로블로깅 애플리케이션으로 동작하지만, 전체 구상에서는 Authenticated Transfer Protocol, 즉 atproto의 가능성을 입증하는 초기 애플리케이션임
- BlueSky 웹사이트는 “소셜 미디어는 몇몇 기업이 통제하기에는 너무 중요하며, 모두가 미래를 만들 수 있는 소셜 인터넷의 열린 기반을 만들고 있다”고 밝힘
- BlueSky가 회사이기 때문에 “기업이 통제해서는 안 되는 것을 기업이 만든다”는 회의적 시각이 있을 수 있으나, 설계의 핵심은 앱보다 atproto에 있음
- atproto는 대규모 분산 소셜 애플리케이션을 위한 연합형 프로토콜임
암호화폐가 아닌 분산 프로토콜
- atproto는 “분산 네트워크”와 “프로토콜”이라는 표현 때문에 암호화폐처럼 보일 수 있지만, 암호화폐가 아님
- 블록체인, DAO, NFT가 아니며 일부 암호화와 Merkle tree 같은 기술만 사용함
atproto의 기본 구조
- atproto는 여러 주체가 시스템의 다른 부분을 운영하고 서로 통신하는 연합형 구조를 택함
- 대규모 사용자 기반을 염두에 두고, 부하를 감당할 수 있는 주체에게 더 많은 역할을 맡기고 그렇지 않은 주체의 부담은 줄이는 방향으로 설계됨
- BlueSky는 글 작성 시점 기준 그 주에 500만 사용자를 넘었고, 초기 Twitter보다 훨씬 안정적이라고 평가됨
- 현재 atproto는 100% 공개 기반이며, 비공개 메시지 같은 기능은 없음
- 연합 시스템에서 비공개 기능을 제대로 구현하기 어렵기 때문에, 심각한 단서가 있는 기능을 내기보다 제대로 구현하려는 선택임
- 지금은 공개되어도 되는 내용에만 쓰는 것이 적합함
기록, 저장소, App View, Relay
- 사용자는 암호학적으로 서명된 record를 만들고, 이 서명으로 작성자를 증명함
- record는 Lexicon이라는 스키마를 따름
- record는 repository에 저장되며, 이 저장소는 HTTP와 WebSocket을 노출하는 서비스로 동작함
- 이런 서비스는 보통 PDS(Personal Data Server) 라고 불림
- 사용자는 직접 PDS를 운영하거나, 다른 사람이 호스팅하는 PDS를 사용할 수 있음
- 애플리케이션은 네트워크에 저장된 record를 읽고 그 위에서 기능을 만듦
- 이런 서비스는 특정 정보 관점을 노출하므로 App View라고 불림
- 애플리케이션을 만든다는 것은 Lexicon을 정의하고, 그 Lexicon을 쓰는 record를 읽으며, 나머지는 무시하는 방식임
- PDS끼리 직접 알림을 주고받는 방식은 확장성 문제가 큼
- 새 게시물을 올릴 때마다 모든 팔로워의 repository에 직접 보내야 한다면 비효율적이고, 인기 있는 repository 운영 비용이 커짐
- Relay는 이 문제를 줄이기 위해 네트워크 정보를 모아 firehose로 노출함
- 실제 App View는 repository를 직접 보기보다 Relay를 봄
- 게시자가 글을 올리면 repository가 Relay에 알리고, 팔로워는 App View가 Relay 출력을 필터링한 결과를 봄
- Relay는 크고 운영 비용이 클 수 있지만, 특정 사용자 하위 집합만 전파하는 더 작은 Relay도 상상할 수 있음
“speech vs reach” 조정 모델
- atproto는 소셜 애플리케이션을 위한 프로토콜이므로 사람을 연결하는 방식뿐 아니라 연결을 끊는 방식도 고려함
- BlueSky의 조정 모델은 speech vs reach로 나뉨
- speech 계층은 콘텐츠를 의미 내용과 무관하게 네트워크에 복제하는 역할임
- reach 계층은 사용자가 보고 싶지 않은 것의 도달 범위를 제한하는 도구를 제공함
- BlueSky가 “조정을 하지 않는다”거나 “자유 발언만 중시한다”는 말은 부정확함
- 조정 도구는 프로토콜 자체에 들어가 있으며, BlueSky가 아닌 애플리케이션의 콘텐츠에도 작동할 수 있음
- 사용자는 다른 사람의 조정 선택이나 조정 부재에 종속되지 않고, 자신의 조정자를 선택할 수 있음
Feed generator
- atproto에서는 피드가 별도 서비스인 feed generator로 분리됨
- feed generator는 Relay가 만든 firehose를 받아 원하는 기준으로 콘텐츠를 필터링하고 정렬해 목록을 보여줌
- 사용자는 자신이 만든 피드를 다른 사용자와 공유할 수 있음
- 예시 피드:
- Quiet Posters: 자주 글을 쓰지 않는 사람들의 게시물을 보여줌
- the ‘Gram: 사진이 첨부된 게시물만 보여줌
- My Bangers: 자신의 인기 게시물을 보여줌
- BlueSky의 강점 중 하나는 사용자가 자신만의 알고리듬 피드를 만들고 쉽게 공유할 수 있다는 점임
- feed는 atproto에 비교적 최근 추가된 기능이라 아직 완전하지 않을 수 있고, 앞으로 변경될 수 있음
Labeler와 네트워크 수준 조정
- Labeler는 콘텐츠나 계정에 label을 붙이는 서비스임
- 사용자는 특정 labeler를 구독하고, 게시물의 label에 따라 경험이 달라지게 만들 수 있음
- labeler는 운영자가 원하는 방식으로 동작할 수 있음
- 게시물에 자동 알고리듬을 돌릴 수 있음
- 사람이 직접 승인·거부할 수 있음
- 블록리스트나 NSFW 필터로 사용할 수 있음
- label 기능은 존재하지만, 글 작성 시점에서 사용자가 직접 labeler를 실행할 수 있는지는 불확실함
- BlueSky는 자체 labeler를 운영함
- 외부 릴리스는 아직 알려진 것이 없음
- feed, App View, labeler를 조합하면 사용자는 애플리케이션 안팎에서 조정 경험을 선택할 수 있음
- 한 피드에서는 SFW만 보고, 다른 곳에서는 NSFW 콘텐츠를 허용할 수 있음
- 블록리스트를 만들어 공유할 수 있음
- 조정 도구가 애플리케이션이 아니라 프로토콜 수준에서 동작하므로, atproto 위의 다른 애플리케이션에도 같은 labeler를 쓸 수 있음
- atproto 위에 Instagram 클론이 만들어져도 동일한 블록리스트 labeler를 쓸 수 있음
- 한 곳에서 차단한 사용자를 원하는 경우 모든 곳에서 차단할 수 있음
Mastodon식 인스턴스 모델과의 차이
- atproto 모델은 Mastodon처럼 특정 “인스턴스”에 “계정”이 있는 방식과 다름
- “내 인스턴스가 defederate되면 어떻게 되는가” 같은 질문은 그대로 적용되기 어려움
- 특정 PDS에서 온 게시물을 싫어해 무시하는 식으로 비슷한 목표를 달성할 수는 있음
- 다만 그 선택은 서버 소유자가 사용자의 계정을 대신해 결정하는 것이 아니라 사용자 자신의 선택임
DID, handle, 계정 이동성
- atproto의 신원 핵심은 DID(Decentralized Identifier) 임
- 예시 DID는
did:plc:3danwc67lo7obz2fmdg6jxcr형태임
- 예시 DID는
- 사용자가 실제로 보는 신원에는 handle이 함께 쓰이며, handle은 도메인 이름임
- 예:
@steveklabnik.com - BlueSky 가입자는
@username.bsky.social형태의 handle을 받을 수 있음
- 예:
- DID가 안정적이기 때문에 handle을
@steveklabnik.bsky.social에서@steveklabnik.com으로 바꿔도 팔로워에게 중단이 생기지 않고 UI에서 handle만 바뀜 - 도메인을 handle로 쓰려면 PDS가 생성한 DID를 가져와 해당 도메인의 DNS에 TXT record를 추가함
- DNS를 모르는 사용자도 BlueSky와 NameCheap의 제휴를 통해 기술 지식 없이 도메인을 등록하고 handle로 설정할 수 있음
- 계정 이동성은 DID와 암호학적 서명에 기반함
- 특정 DID를 쓰는 사람이 만든 콘텐츠는 서명되고 네트워크에 복제됨
- “계정”을 종료하려면 사용자가 가진 키 사용을 강제로 막아야 하는데, 네트워크 설계상 다른 주체가 그 키에 접근하지 않음
- PDS가 내려가도 네트워크에서 내용을 backfill하고 새 PDS로 이동했음을 알릴 수 있음
did:web과 did:plc의 논점
- BlueSky는 두 가지 DID 방식을 지원함
did:web: 도메인 이름 기반 방식did:plc: BlueSky가 구현한 자체 방식
did:plc의plc는 “placeholder”를 뜻하며, BlueSky는 이를 계속 지원할 계획임did:plc는 BlueSky가 운영하는 서비스를 통해 올바른 정보를 해석해야 한다는 약점이 있음- 예시 조회는 plc.directory에서 가능함
- 이 구조 때문에 BlueSky가 네트워크 설계상 원래 가능한 것보다 더 강하게 사용자를 ban할 수 있다는 비판이 있음
- 이 문제가 치명적이라고 보지 않는 이유도 있음
- 원하지 않으면
did:web을 쓸 수 있음 - 더 나은 시스템이 생기면 이동할 수 있도록 설계됨
- 향후
did:plc거버넌스를 합의 모델로 옮길 가능성이 있음 - 다른 주체가
did:plc서비스를 운영하고 그것을 사용할 수도 있음
- 원하지 않으면
BlueSky가 atproto 위에 올라가는 방식
- BlueSky는 atproto 네트워크 위에 만든 애플리케이션임
- BlueSky는 App View와 이를 사용하는 웹 애플리케이션을 운영함
- 웹앱으로 가입한 사용자를 위한 PDS도 운영하고, 그 PDS들이 통신하는 Relay도 운영함
- BlueSky는 두 종류의 Lexicon을 발행함
com.atproto.*: 네트워크의 어떤 애플리케이션에도 필요한 저수준 작업app.bsky.*: BlueSky에 특화된 작업
- BlueSky의 제품 목표는 사용자가 이런 기술 세부사항을 몰라도 쓸 수 있게 하는 것임
- 인스턴스가 없기 때문에 계정 생성을 위해 인스턴스를 고르는 흐름이 없음
- 호스트가 내려가도 이동할 수 있고, 팔로워는 이를 의식하지 않아도 됨
atproto 위에서 새 애플리케이션 만들기
- atproto 애플리케이션은 Lexicon을 만드는 것에서 시작함
- 이후 네트워크의 데이터 중 해당 Lexicon과 관련된 데이터를 처리하는 App View를 운영함
- 애플리케이션은 사용자가 자신의 PDS에 해당 Lexicon을 사용해 데이터를 쓸 수 있게 해야 함
설계상의 핵심 분리
- atproto와 BlueSky의 역할 분리는 중요한 설계 요소임
- BlueSky 같은 “killer app”은 네트워크를 사용할 이유를 제공함
- BlueSky 자체도 atproto 위에 실제 애플리케이션을 만들 수 있는지 검증하는 dogfooding 역할을 함