Tags에 ActivityPub 지원을 어떻게 가장 잘 추가할지 계획하고 있습니다. 즉, Tags가 ActivityPub 액터로 기능할 수 있도록 하는 것입니다. ActivityPub 지원이 필요한 모델에는 레코드별 맞춤 저장소가 필요합니다. 이를 위한 방법 중 하나는 커스텀 필드를 사용하는 것입니다. 예를 들어 다음과 같습니다.
같은 결과를 얻을 수 있는 다른 방법들도 있지만, 커스텀 필드가 아마도 가장 직관적이고, ActivityPub 플러그인뿐 아니라 Discourse 자체의 데이터 모델과도 가장 일관성이 있을 것입니다.
따라서 먼저 discourse/discourse에 PR을 만들어 Tags에 CustomField 지원을 추가할 수 있는지에 대한 의견을 들어보고자 합니다.
태그가 ActivityPub 액터 역할을 수행하도록, 태그와 연관된 ActivityPub 데이터를 저장할 예정입니다. discourse/discourse 클라이언트의 어떤 부분에도 직렬화가 필요하지 않습니다. 사용자는 일반적인 discourse/discourse 클라이언트의 어느 부분에서도 이 데이터를 볼 수 없습니다. 관리 클라이언트로의 직렬화는 다른 데이터와 함께 이루어지지만, 이는 플러그인이 전담하는 전용 플러그인 관리 라우트에서 관리됩니다. 말씀하신 대로 기존 discourse/discourse 태그 라우트(또는 사이트 직렬화기)에서의 직렬화는 여러 가지 이유로 까다로울 수 있으며, 저는 이를 시도하고 싶지 않으므로 preload나 editable API 메서드를 추가하지 않았습니다.
안정적인 API를 활용할 수 있다는 장점 외에도, ActivityPub 플러그인에서 이러한 방식이 선호되는 이유는 플러그인이 ActivityPub 활동을 별도의 데이터 모델 세트인 discourse_activity_pub_* 테이블에 저장하고, 이는 정의된 플러그인 API와 핵심 모델의 커스텀 필드를 통해 discourse/discourse와 통합되기 때문입니다. 여기에는 Discourse와 ActivityPub 데이터 간의 관심사 분리를 적절히 보장하기 위한 의도적인 중복이 존재합니다. Discourse와 ActivityPub는 서로 연관되어 있지만 서로 다른 개념과 데이터 모델을 가지고 있으므로, 크고 복잡한 플러그인에서 일정 수준의 명확성(그리고 건전성)을 유지하려면 ActivityPub 데이터와 discourse/discourse 데이터 간의 명확한 구분이 필요합니다. 커스텀 필드를 통합 지점으로 사용하는 것은 이러한 분리를 깔끔하고 안정적으로 유지하는 데 매우 유용합니다.
@angus님, 지연되어 죄송합니다. ActivityPub에 태그 커스텀 필드 없이 태그 지원 기능을 추가할 수 있을까요?
현재 카테고리에서 사용하고 있는 데이터 모델과 일관성이 없다는 점은 알고 있지만, 저희가 선호하는 접근 방식입니다. 코어에 태그용 커스텀 필드 지원 기능을 추가하면 코어에서 태그에 대한 전체적인 지원 기능을 열게 되며, PR에 해당 기능이 포함되지 않았다는 점은 알지만, 다음 개발자가 그 문을 조금 더 열게 만드는 계기가 될 것입니다.