Fedify CLI의 숨은 보석: 놓치기 쉬운 팁과 트릭

홍민희·2024년 11월 23일

Fedify는 주로 ActivityPub 서버를 구축하기 위한 프레임워크로 알려져 있지만, ActivityPub 구현을 디버깅하고 테스트하기 위한 강력한 커맨드라인 도구인 fedify 명령어도 함께 제공합니다. Fedify 프레임워크를 사용하지 않더라도 이 CLI 도구는 ActivityPub 개발에 매우 유용할 수 있습니다.

설치

기능을 살펴보기 전에, 먼저 fedify 명령어를 설치해야 합니다. 다음과 같은 여러 가지 설치 방법이 있습니다:

npm(Node.js)을 사용하는 경우:

npm install -g @fedify/cli

Bun을 사용하는 경우:

bun install -g @fedify/cli

Deno를 사용하는 경우:

deno install -A --unstable-fs --unstable-kv --unstable-temporal -n fedify jsr:@fedify/cli

또는 릴리스 페이지에서 미리 빌드된 실행 파일을 다운로드할 수도 있습니다.

자세한 설치 방법과 요구 사항은 공식 문서를 참고하세요.

똑똑한 객체 조회와 콘텐츠 타입 협상

fedify lookup 명령어는 보이는 것보다 더 똑똑합니다. 같은 식별자의 다양한 형식을 처리할 수 있고, 여러 출력 형식을 제공하여 필요에 맞게 사용할 수 있습니다:

# 같은 액터를 조회하는 세 가지 방법:
fedify lookup @user@example.com
fedify lookup user@example.com
fedify lookup acct:user@example.com

# 원본 JSON 응답 보기:
fedify lookup --raw @user@example.com

# 간단한 JSON-LD 표현 보기:
fedify lookup --compact @user@example.com

# 완전히 펼쳐진 JSON-LD 보기:
fedify lookup --expanded @user@example.com

일부 ActivityPub 서버는 공개 콘텐츠에 대해서도 모든 HTTP GET 요청에 서명을 요구하는 authorized fetch(또는 “보안 모드”라고도 함)를 필요로 합니다. -a/--authorized-fetch 플래그는 이런 경우에 도움이 됩니다:

fedify lookup --authorized-fetch @user@secure-instance.example

이 명령어는 임시 ActivityPub 서버를 실행하고 서버의 키로 요청에 서명합니다. 다음과 같은 경우에 특히 유용합니다:

  • 모든 요청에 서명이 필요한 서버(예: 보안 모드의 일부 Mastodon 인스턴스)에 접근할 때
  • 팔로워 전용 게시물과 같은 비공개 콘텐츠를 가져올 때(권한이 있다고 가정)
  • 서명된 요청에 대한 서버의 동작을 테스트할 때

대화형 수신함 테스트

fedify inbox 명령어는 연합을 테스트하는 빠른 방법을 제공할 뿐만 아니라, 수신되는 ActivityPub 액티비티를 검사하기 위한 강력한 웹 인터페이스도 함께 제공합니다. 액티비티를 수신하면 다음과 같은 요청의 모든 세부 정보를 보여줍니다:

  • HTTP 메서드와 헤더
  • 요청 본문(여러 형식으로)
  • 응답 세부 정보
  • 서버 로그

상세한 요청 정보를 보여주는 fedify inbox 웹 인터페이스

다른 서버가 보내는 원본 HTTP 헤더를 볼 수 있어서 서명 검증 문제나 콘텐츠 협상 문제를 디버깅할 때 매우 유용합니다. 인터페이스는 액티비티를 다양한 형식으로 볼 수 있는 탭을 제공합니다:

  • 원본 HTTP 요청/응답
  • 간단한 액티비티(정규화된 JSON-LD)
  • 펼쳐진 액티비티(완전히 펼쳐진 JSON-LD)
  • 원본 액티비티(수신된 그대로)
  • 서버 로그

이 명령어는 매우 유연하게 설정할 수 있어서 어떤 팔로우 요청을 수락할지 제어할 수 있습니다:

# 특정 액터의 팔로우만 수락
fedify inbox -a @specific@user.com -a @another@user.com

# 모든 팔로우 요청 수락
fedify inbox -a "*"

풍부한 NodeInfo 시각화

fedify node 명령어는 다른 인스턴스가 어떻게 구성되어 있는지 이해하는 데 도움이 되도록 NodeInfo 데이터를 보기 좋게 시각화합니다:

# 서버 아이콘과 함께 표준 NodeInfo 데이터 표시
fedify node mastodon.social

# 인스턴스가 노출하는 추가 메타데이터 포함
fedify node -m mastodon.social

# 표준을 완전히 준수하지 않는 NodeInfo 응답도 파싱 시도
fedify node --best-effort problematic-instance.social

# 더 빠른 결과를 위해 파비콘 가져오기 건너뛰기
fedify node --no-favicon mastodon.social

유연한 로컬 개발

ActivityPub 구현을 로컬에서 테스트하기 위해 fedify tunnel 명령어를 사용하면 로컬 서버를 임시로 인터넷에 노출할 수 있습니다. 기본 서비스가 잘 작동하지 않는 경우 여러 터널링 서비스 중에서 선택할 수 있습니다:

# 기본 서비스 사용
fedify tunnel 3000

# 대체 서비스 사용
fedify tunnel --service serveo.net 3000

셸 통합

Bash, fish, zsh용 셸 자동 완성을 활성화하면 타이핑을 줄일 수 있습니다:

# bash용
source <(fedify completions bash)

# fish용
source (fedify completions fish | psub)

# zsh용
source <(fedify completions zsh)

Fedify 1.3.0에서 추가될 기능: 사용자 정의 User-Agent 지원

곧 출시될 Fedify 1.3.0에는 사용자 정의 User-Agent 헤더를 설정하는 기능이 포함됩니다. 이는 서버 로그에서 자신의 요청을 추적하는 데 도움이 됩니다:

# lookup 명령어에 사용자 정의 User-Agent 설정
fedify lookup --user-agent "MyApp/1.0" @user@example.com

# NodeInfo 요청에 사용자 정의 User-Agent 설정
fedify node --user-agent "MyApp/1.0" mastodon.social

이러한 기능들은 Fedify CLI를 처음 사용할 때는 바로 눈에 띄지 않을 수 있지만, 연합 관련 문제를 디버깅하거나 ActivityPub 구현을 테스트할 때 매우 유용할 수 있습니다.

profile
서울에서 소프트웨어 프로그래머로 일하고 있습니다. 자유·오픈 소스 소프트웨어를 만들며, 주로 Haskell, Python, TypeScript 같은 언어로 코딩합니다.

0개의 댓글