Don't Marry Your Podcasting Platform: Host Your Own Podcast Feed

Michael Lynch

팟캐스트 플랫폼에 종속되지 마세요: 팟캐스트 피드는 직접 호스팅하세요

원문은 Michael Lynch님이 에 게재했습니다. 이 블로그 구독하기

팟캐스트를 Libsyn이나 Podbean 같은 플랫폼에 호스팅하고 있다고 가정해 보자. 나중에 팟캐스트 플랫폼을 옮기기로 하면 어떻게 될까? 이미 모든 사람에게 기존 플랫폼을 가리키는 RSS URL을 알려준 상태다.

예를 들어 Libsyn은 팟캐스트에 다음과 같은 RSS URL을 제공한다:

  • https://feeds.libsyn.com/12345/rss

Apple Podcasts에 팟캐스트를 등록하고 청취자에게 RSS URL을 공유했을 때, 사실상 팟캐스트 플랫폼을 직접 가리키게 한 셈이다.

옮기게 되면 모든 청취자의 팟캐스트 앱은 여전히 기존 URL에서 팟캐스트를 찾으려 할 것이다.

리다이렉트에 의존하지 마세요

대부분의 팟캐스트가 플랫폼을 옮길 때 기존 플랫폼에 리다이렉트 설정을 요청한다. 예를 들어 Libsyn에서 Podbean으로 옮긴다면 Libsyn 설정에서 새 팟캐스트 URL을 가리키도록 설정하는 식이다.

이렇게 하면 청취자가 기존 Libsyn RSS URL에 접속할 때마다 Libsyn이 이전했다는 사실을 알려준다.

이 방식에는 두 가지 문제가 있다:

  1. 모든 팟캐스트 플레이어가 리다이렉트를 보고 URL을 업데이트하지는 않으므로, 계속해서 기존 피드만 확인하게 된다.
  2. 기존 팟캐스트 호스트가 계속해서 리다이렉트를 제공해 줄 거라는 보장이 없다.

(2)는 특히 중요하다. 팟캐스트 호스팅 플랫폼 입장이라면 왜 고객이 플랫폼을 떠나는 것을 돕는 기능을 제공하고 싶겠는가? 플랫폼이 생존을 위해 필사적이 되면 리다이렉트는 가장 먼저 없앨 기능 중 하나가 될 가능성이 높다.

그렇다면 어떻게 해야 할까? 청취자에게 팟캐스트 URL을 알려줘야 하는데, 이 문제를 어떻게 피할 수 있을까?

RSS 피드를 직접 호스팅하세요

팟캐스팅 플랫폼은 겉보기에는 하나의 서비스처럼 보이지만 실제로는 두 가지 별개의 서비스를 호스팅한다.

Libsyn이나 Podbean에 팟캐스트를 호스팅하면 실제로 두 종류의 파일을 대신 호스팅해 주는 셈이다:

  1. 오디오/비디오 녹음 파일
  2. 모든 녹음 파일의 목록인 팟캐스트 RSS 피드

하지만 이 두 서비스는 실제로 완전히 독립적이다. 원한다면 두 개의 다른 업체에서 각각 호스팅해도 아무 문제 없이 동작한다. 실제로 필자도 그렇게 하고 있으며 다른 팟캐스트 운영자들에게도 그렇게 하라고 권한다.

두 서비스 모두 기술적으로 그리 어렵지 않지만, 특히 (2)번은 비용이 매우 저렴하다.

팟캐스트 녹음 파일은 길이, 품질, 비디오 포함 여부에 따라 보통 50MB에서 5GB에 이르는 큰 파일이다. 반면 팟캐스트 RSS 피드는 매우 작아서 일반적으로 1MB도 안 된다. 호스팅 비용으로 따지면 청취자가 팟캐스트 피드를 1만 번 확인할 때마다 약 1센트 정도 든다.

팟캐스트 제공자 앞에 CDN을 두면 RSS 피드를 간단하고 저렴하게 호스팅할 수 있다. CDN은 RSS 피드 제공만 담당하고, 팟캐스트 플레이어는 여전히 큰 오디오/비디오 파일을 팟캐스트 제공자로부터 직접 가져온다.

피드

직접 소유한 커스텀 도메인으로만 배포하세요

https://feeds.libsyn.com/12345/rss 같은 URL을 청취자와 팟캐스트 디렉터리에 배포하면 Libsyn(혹은 호스팅 제공자)에 종속되는 셈이다.

대신 직접 소유한 도메인 이름의 RSS URL만 배포해야 한다.

예를 들어 팟캐스트 이름이 “My Awesome Dinosaur Podcast”라면 쇼를 위해 다음과 같은 도메인 이름을 등록할 수 있다:

  • myawesomedinosaurpodcast.com

참고: 도메인 이름 구매 방법은 이 글의 범위를 벗어나므로 설명하지 않겠지만, 어떤 도메인 제공자를 써도 괜찮다. 필자는 개인적으로 DNSimple을 선호한다.

청취자와 팟캐스트 디렉터리에 알려줄 팟캐스트 피드 URL은 다음과 같게 된다:

팟캐스트 호스트를 옮기더라도 청취자는 아무것도 할 필요가 없다. 여전히 같은 feeds.myawesomedinosaurpodcast.com URL로 듣게 되기 때문이다. 청취자는 Libsyn이나 Podbean URL을 본 적조차 없게 된다.

RSS 피드 직접 호스팅하기

이 예시에서는 다음과 같은 값을 사용하겠다:

  • https://feeds.libsyn.com/12345/rss: 팟캐스트 호스트가 사용하라고 알려준 RSS 피드.
  • https://feeds.myawesomedinosaurpodcast.com: 대신 실제로 사용할 URL.

BunnyCDN 계정 만들기

먼저 BunnyCDN에 계정을 만든다.

어떤 CDN을 사용해도 되지만, 필자는 Bunny가 간단하고 저렴해서 선호한다.

Pull Zone 추가하기

Bunny 계정에서 CDN > Add Pull Zone으로 이동한다.

Pull Zone 이름을 정한다. 이름은 아무거나 상관없다. 이 예시에서는 example12345라는 이름을 사용한다.

Origin Type에서 “Origin URL”을 선택하고 업체의 팟캐스트 RSS URL을 입력한다:

“Standard Tier”를 선택한다.

“Pricing Zones”에서는 가장 저렴한 옵션만 선택하고 나머지는 해제한다. RSS 피드가 모든 지역에서 초고속일 필요는 없으며, 청취 경험에도 영향을 주지 않는다.

마지막으로 “Add Pull Zone”을 클릭한다.

URL 테스트하기

Bunny가 Pull Zone을 생성하면 상단에 생성된 b-cdn.net URL을 방문해 본다:

제대로 됐다면 해당 링크를 방문했을 때 팟캐스트의 RSS 피드가 보여야 한다(브라우저가 파일을 자동으로 다운로드할 수도 있다).

모든 것이 정상적으로 동작한다면 어려운 부분은 끝난 셈이다. 이제 커스텀 도메인 이름만 설정하면 된다.

커스텀 도메인 연결하기

생성한 pull zone에서 General > Hostnames로 이동한다.

다음과 같이 팟캐스트 도메인을 입력한다:

  • feeds.myawesomedinosaurpodcast.com

참고: 서브도메인이 꼭 feeds일 필요는 없다. 원하는 무엇이든 쓸 수 있지만, 필자는 feeds가 유용한 관례라고 생각한다.

Bunny가 도메인 등록기관 쪽에서 활성화해야 하는 DNS 레코드를 알려줄 것이다.

도메인을 등록한 곳으로 돌아가 Bunny가 보여준 DNS 항목을 추가한다.

도메인 등록기관에 CNAME 레코드 추가를 마쳤다면 다시 Bunny 화면으로 돌아와 “Verify & Activate SSL”을 클릭한다.

캐싱 재정의하기

Bunny(그리고 모든 CDN)는 데이터를 적극적으로 캐시한다. 다른 서버의 부하를 줄이도록 설계되어 있기 때문에, Bunny는 기본적으로 “Origin URL”(팟캐스트 제공자)에 가끔씩만 업데이트를 확인한다.

이는 청취자가 제때 업데이트를 받는 데 방해가 될 수 있다. 팟캐스트를 업데이트했는데 Bunny가 오래된 복사본을 제공해서 하루 이틀 동안 아무도 새 내용을 보지 못하게 하고 싶지는 않을 것이다.

pull zone에서 Caching > General로 이동하면 Bunny가 팟캐스트 피드의 오래된 복사본을 제공하지 않도록 방지할 수 있다.

“Cache Expiration Time”을 “Override: 20 minutes”로 변경한다.

이렇게 하면 Bunny가 팟캐스트 피드 복사본을 최대 20분 동안만 저장하도록 한다. 선호도에 따라 이 시간을 늘리거나 줄일 수 있다.

“Do not cache”는 권장하지 않는다. 인기 있는 팟캐스트라서 수백 명의 청취자가 한 번에 피드를 확인하면 Bunny가 팟캐스트 제공자에게 한 번에 수백 건의 요청을 보내게 되고, 제공자가 Bunny의 요청을 차단하게 되어 청취자에게 오류 메시지가 표시될 수 있다.

정식 URL 교체하기

RSS 피드의 미묘한 점 중 하나는 다음과 같은 self 태그를 포함한다는 것이다:

<atom:link href="https://feeds.libsyn.com/12345/rss" rel="self" type="application/rss+xml"/>

https://feeds.myawesomedinosaurpodcast.com URL을 배포하더라도 일부 팟캐스트 플레이어는 원본 URL보다 self 태그를 우선시하므로 CDN에서 호스팅하는 버전을 우회하게 된다.

이를 방지하려면 커스텀 Bunny 엣지 스크립트를 사용해야 한다.

  1. Edge Platfrom > Scripting으로 이동하여 “Add Script”를 클릭한다.
  2. “Deploy and edit on Bunny.net”을 선택한다.
  3. 스크립트 이름을 “Replace RSS self tag”로 정한다.
  4. Type을 “Middleware”로 변경한다.
  5. “Add Script”를 클릭한다.
  6. 코드 편집기에 다음 코드를 입력한다:
import * as BunnySDK from "https://esm.sh/@bunny.net/[email protected]";

// Replace with the vendor-specific URL to your RSS feed.
const SOURCE_URL = "https://feeds.libsyn.com/12345/rss";

// Replace with the domain name that you own.
const TARGET_URL = "https://feeds.myawesomedinosaurpodcast.com";

/**
 * Modifies the response from the origin to replace a specific URL.
 *
 * @param {Context} context - The context of the middleware.
 * @param {Request} request - The current request done to the origin.
 * @param {Response} response - The HTTP response or string.
 */
async function onOriginResponse(context: { request: Request, response: Response }): Promise<Response> | Response | void {
  const responseText = await context.response.text();

  // Replace the URL with simple string replacement
  const modifiedText = responseText.replace(SOURCE_URL, TARGET_URL);

  // Create a new response with the modified text
  return new Response(modifiedText, {
    status: context.response.status,
    statusText: context.response.statusText,
    headers: context.response.headers
  });
}

BunnySDK.net.http.servePullZone()
  .onOriginResponse(onOriginResponse);

마지막으로 “Connect Pull Zone” 버튼을 눌러 이 스크립트를 RSS 피드에 연결한다.

끝났습니다!

제대로 설정했다면 이제 팟캐스트 피드를 제공하는 커스텀 URL이 생긴 것이다.

이제 직접 관리하는 URL이 생겼다. 나중에 팟캐스트 플랫폼을 옮기게 되더라도 BunnyCDN pull zone의 “Origin” 필드만 업데이트하면 된다. 리다이렉트를 처리하거나 기존 플랫폼이 가두려 할까 걱정할 필요가 전혀 없다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.

댓글