이 사용 사례는 activepieces, data explorer 및 API를 활용한 인간이 개입하는 인라인(human in the loop) 자동화 워크플로우의 일환으로, 시간적으로 민감한 업로드 삭제를 수행하는 것입니다.
그 목표는 SSH 접근 권한 없이도 일반 모더레이터가 즉시 업로드를 완전히 삭제할 수 있는 간단한 방법을 제공하여, 업로드 참조가 깨지는 모든 알려진 경우를 포괄적으로 처리하고, 특정 URL(프록시된 아바타의 경우 사용자 이름 기반 URL 접두사 포함)에 대해 CDN을 자동으로 정리(purge)할 수 있도록 하는 것입니다.
테스트를 해본 결과, 업로드가 파괴(destroy)될 때 아바타, 프로필 배경, 카드 배경 참조가 자동으로 처리되는 것을 확인하여 안도했습니다.
https://github.com/discourse/discourse/commit/e1975e293f2625259e925b4a3c93d88d5acfcaa8
https://github.com/discourse/discourse/commit/38e7b1a0492dd4282c3cd3b1ddb2b3343661d31f
주요 시나리오는 두 가지로, ‘화약고(Scorched earth)’ 방식과 ‘정밀 제거(Surgical removal)’ 방식입니다. 다음은 화약고 방식에 대한 진행 중인 작업 내용입니다:
업로드 해시 목록으로 변환하기:
-
아바타 URL (정규식으로 사용자 이름 추출) → data explorer 쿼리를 통해 아바타 해시 가져오기 (URL에는 해시가 포함되지 않음)
-
토픽/게시물 URL → data explorer를 사용하여 해당 게시물에서 사용된 모든 업로드 해시 수집
-
직접적인 원본/최적화 업로드 URL (프로필 배경 및 카드 배경 포함) → 정규식으로 해시 추출
그 다음 각 해시를 쿼리하여 모든 발생 위치를 찾습니다 (모든 경우를 포괄하는 하나의 data explorer 쿼리, 한 번에 하나의 해시):
-
아바타로 사용한 사용자 목록 (사용자 이름/ID)
-
프로필 배경으로 사용한 사용자 목록 (사용자 이름/ID)
-
카드 배경으로 사용한 사용자 목록 (사용자 이름/ID)
-
이 업로드를 사용하는 모든 게시물(원본) 목록
실행 작업:
-
해당 업로드를 아바타, 프로필 배경 또는 카드 배경으로 사용한 모든 사용자 정지(suspend)
-
대상 업로드를 참조하는 게시물이 있는 모든 사용자 정지 (단, 인용(quote) 안에 중첩된 참조는 제외)
-
모든 토픽 삭제
-
모든 게시물 삭제
-
업로드 파괴 (API 엔드포인트 없음)
-
모든 CDN URL 정리 (최적화/비최적화)
-
각 관련 사용자 이름에 대해 프록시된 아바타 URL의 표준 접두사 정리 (모든 크기 커버링)
정밀 제거 시나리오는 본질적으로 동일하지만, 관련 사용자를 정지하지 않으며, 게시물/토픽 URL에서 모든 업로드 해시를 수집하는 방식에 일부 변경이 필요합니다.
깨진 참조를 피하기 위해 게시물/토픽 자체를 삭제하는 것이 여전히 필요할 가능성이 높지만, 해당 특정 업로드의 마크다운만 제거하고(다른 업로드에는 영향을 주지 않고) 다른 업로드에는 손대지 않는 방식이 가능하다면 더 우수할 것입니다. 모든 마크다운 업로드 참조를 제거하지 않는다면, 이 자동화와 같은 방식이 될 것입니다.
이상적으로는 해시 자체를 차단할 수 있으면 좋겠습니다. 위에서 설명한 과정을 거친 후에도 누군가가 단순히 새 계정을 만들고 재업로드하지 못하도록 하기 위해서입니다.
![]()
현재 일반 모더레이터가 감시 단어(watched words) 등을 사용하여 이를 수행하는 것은 불가능하다고 생각합니다. 따라서 해시 목록에 대해 주기적으로 위와 같은 스캔을 수행하는 것이 이를 처리하는 방법이 될 수 있습니다.