GN⁺: Bluesky에 호스팅된 웹사이트
(danielmangum.com)Bluesky와 AT 프로토콜
-
Bluesky와 AT 프로토콜 소개
- Bluesky는 개인 데이터 서버(PDS)를 통해 웹사이트를 호스팅할 수 있는 기능을 제공함.
- AT 프로토콜은 웹사이트 콘텐츠 업로드에 사용되는 API를 정의하며, PDS가 이를 구현함.
- Bluesky는
bsky.social
도메인을 통해 PDS에 접근할 수 있는 진입점을 제공함.
-
콘텐츠 유형: 레코드와 블롭
- 대부분의 소셜 애플리케이션은 레코드와 블롭이라는 두 가지 주요 콘텐츠 유형을 가짐.
- 레코드는 사용자가 생성하는 핵심 엔티티로, 구조와 메타데이터를 가짐.
- 블롭은 주로 미디어 자산과 같은 큰 비구조적 데이터로, 레코드를 통해 참조됨.
-
블롭 업로드와 관리
- 블롭은 레코드가 참조하기 전에 PDS에 업로드되어야 함.
- 업로드된 블롭은 임시 저장소에 저장되며, 참조되기 전까지 접근할 수 없음.
- 서버는 레코드 생성 시 참조된 블롭을 확인하고, 성공 시 블롭을 공개적으로 접근 가능하게 함.
-
데이터 생성 및 인증
- PDS에 데이터 생성 작업을 수행하려면 인증을 위한 액세스 토큰이 필요함.
-
com.atproto.server.createSession
XRPC 메서드를 사용하여 사용자 자격 증명을 토큰으로 교환할 수 있음.
-
블롭 참조 및 레코드 생성
- 블롭은
app.bsky.feed.post
레코드에서 참조될 수 있으며, 이미지로 포함될 수 있음. - MIME 타입 검증을 통해 블롭 참조의 유효성을 확인함.
- 블롭은
-
보안 고려 사항
- 웹 서버에서 사용자 업로드 파일을 제공하는 것은 보안 문제를 야기할 수 있음.
- 콘텐츠 보안 정책(CSP)을 통해
getBlob
엔드포인트에 대한 보안을 강화해야 함.
-
CDN을 통한 이미지 제공
- Bluesky 애플리케이션의 이미지 블롭은 PDS 인스턴스가 아닌 CDN을 통해 제공됨.
- 애플리케이션은 CDN을 통해 이미지를 제공하는 방법을 알고 있어야 함.
-
오픈 소스의 장점
- Bluesky의 PDS 구현은 오픈 소스로 제공되어, 블롭 참조가 어떻게 정의되는지 확인할 수 있음.
- 새로운 렉시콘을 지원하기 위해 PDS는 알지 못하는 렉시콘도 처리할 수 있어야 함.
-
렉시콘의 확장 가능성
-
app.bsky.feed.post
타입은 유효한 임베드에 대한 유니온을 포함하며, 기본적으로 오픈되어 있음. - 새로운 타입의 임베드를 추가할 수 있으며, 이는 기존 사용 사례를 확장하는 "마이크로 확장"을 가능하게 함.
-