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

홍민희·3일 전
1

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개의 댓글