팟캐스트 RSS 2.0 규격과 구조적 요구사항
팟캐스트 배포의 기반이 되는 RSS 2.0 XML은 엄격한 구조적 규칙을 따릅니다. 본 검증기는 입력된 XML이 웰폼드(Well-formed) 상태인지, 그리고 규격에 정의된 필수 요소들을 올바르게 갖추고 있는지 정적으로 분석합니다.
검증을 진행하기 위해 입력하는 XML 문서의 루트는 반드시 <rss>여야 하며, <rss>의 version 속성은 "2.0"으로 설정되어야 합니다. 또한 RSS 문서 내에는 정확히 하나의 직접적인 <channel> 요소만 존재해야 합니다. 만약 XML 문서 내에 DOCTYPE 선언이 포함되어 있다면 검증을 진행할 수 없으므로, "이 피드를 확인하기 전에 DOCTYPE 선언을 제거하십시오."라는 오류가 발생합니다. XML 마크업 자체에 문법적 오류가 있어 파싱이 불가능한 경우에는 "손상된 XML을 수정한 후 다시 검증하십시오."라는 메시지와 함께 파서 세부 정보가 제공됩니다.
Apple Podcasts 채널 및 에피소드 필수 필드
글로벌 팟캐스트 플랫폼인 Apple Podcasts 등에 피드를 정상적으로 등록하려면 표준 RSS 2.0 필드 외에도 특정 네임스페이스와 메타데이터가 필수적으로 요구됩니다. 먼저 <rss> 요소에 Apple Podcasts 네임스페이스가 올바르게 선언되어 있어야 합니다.
채널과 에피소드 수준에서 누락된 필수 필드가 발견되면 "필수 ‹field›를 추가하십시오."라는 오류가 표시됩니다. 주요 검증 규칙은 다음과 같습니다.
- 링크 및 이미지: 채널 및 에피소드의 링크 필드는 "
‹field›는 완전한 HTTP 또는 HTTPS URL이어야 합니다." 규격을 충족해야 하며, 이미지의 주소는 "itunes:image href를 완전한 HTTP 또는 HTTPS URL로 설정하십시오." 규칙을 만족해야 합니다. - 카테고리:
<itunes:category>를 사용할 때는 "itunes:category에 비어 있지 않은 text 속성을 추가하세요." 오류를 피하기 위해 유효한 텍스트 속성을 지정해야 합니다. - 콘텐츠 등급:
<itunes:explicit>태그는 반드시 "true" 또는 "false"로 설정되어야 합니다. - 에피소드 구성: 채널에는 최소 하나의 에피소드가 포함되어야 하며, 연속형(Serial) 쇼의 경우 각 에피소드마다 양의 정수로 된
<itunes:episode>번호가 필요합니다.
오디오 첨부 파일(Enclosure) 속성 검증
팟캐스트 에피소드는 오디오 파일을 담고 있는 <enclosure> 요소를 통해 배포됩니다. 본 검증기는 각 에피소드마다 정확히 하나의 <enclosure>가 존재하는지 확인하며, 이를 초과하는 경우 오류를 발생시킵니다.
<enclosure> 요소 내부의 속성들은 다음과 같은 엄격한 기준에 따라 검사됩니다.
| 속성 항목 | 검증 규칙 및 오류/경고 메시지 |
|---|---|
| 필수 속성 누락 | 에 필수 ‹attribute› 속성이 누락된 경우 오류가 발생합니다. |
| URL 유효성 | "<enclosure>의 url 속성에 완전한 HTTP 또는 HTTPS URL을 입력하세요." |
| 파일 크기 (Length) | "<enclosure>의 length 속성에 정수 바이트 수를 입력하세요." 만약 이 값이 0으로 설정되어 있다면 "<enclosure>의 length 속성이 0입니다. 게시 전에 실제 바이트 수를 확인하세요."라는 경고가 표시됩니다. |
| MIME 유형 | "audio/mpeg와 같은 유효한 MIME 유형을 사용하십시오." 만약 오디오가 아닌 형식으로 지정된 경우 "이 <enclosure>는 오디오로 표시되지 않았습니다. 영상 또는 문서 에피소드를 의도했는지 확인하세요."라는 경고가 발생합니다. |
| 확장자 불일치 | 파일의 확장자와 지정된 MIME 타입이 서로 다르면 "미디어 파일 이름과 MIME 유형이 일치하지 않습니다 (‹extension› vs ‹mime›)." 경고를 출력합니다. |
| 중복 URL | 피드 내에서 동일한 미디어 주소가 반복 사용되면 "이 첨부 URL은 ‹first› 줄의 값을 반복합니다." 오류로 처리됩니다. |
날짜 형식(RFC 2822) 및 에피소드 제한
에피소드의 발행일 정보를 담는 <pubDate>는 팟캐스트 앱이 에피소드를 올바른 순서로 정렬하고 발행하는 데 매우 중요합니다. 이 필드가 누락되면 "팟캐스트 앱에서 이 에피소드를 안정적으로 정렬하고 게시할 수 있도록 <pubDate>을 추가하세요."라는 경고가 표시됩니다.
날짜 값은 반드시 RFC 2822 규격을 준수해야 합니다. 올바르지 않은 날짜 형식이 감지되면 "RFC 2822 날짜를 실제 달력 날짜와 시간대와 함께 사용하세요. 예: Sat, 01 Apr 2023 19:00:00 +0000." 오류가 발생합니다. 또한, 시간대에 "EST"나 "KST" 같은 문자형 이름이 사용된 경우 "이 명명된 시간대는 허용되지만 호환성이 떨어집니다. +0000과 같은 숫자 오프셋을 사용하는 것이 좋습니다."라는 경고를 통해 호환성을 높이도록 권장합니다.
에피소드의 수량도 검증 대상입니다. 피드 내 전체 에피소드 수가 2,000개를 초과하는 경우 "이 피드에는 ‹count›개의 에피소드가 있습니다; Apple Podcasts는 최근 2,000개만 표시합니다."라는 경고를 통해 플랫폼 표시 한계를 안내합니다. 에피소드 고유 식별자인 <guid> 값 역시 고유해야 하며, 중복이 발견되면 "이 GUID는 ‹first› 줄의 값을 반복합니다." 오류가 발생합니다.
디버깅 정보 활용 및 검증 한계
본 도구는 XML 파싱 결과에 따라 구체적인 위치 정보를 제공하여 피드 수정을 돕습니다. 검증 결과 화면에는 발견된 오류와 경고의 총 개수, 그리고 감지된 에피소드 수가 표시됩니다.
각 문제 항목은 "줄 ‹line›, 열 ‹column›" 형식으로 정확한 발생 위치를 짚어주며, XPath 스타일의 경로를 "수정: ‹path›" 형태로 제공합니다. 사용자는 "줄 ‹line›에서 ‹path›로 이동" 링크를 클릭하여 해당 문제 위치로 즉시 이동할 수 있습니다. 피드 내에 문제가 너무 많을 때는 "전체 ‹total› 문제 중 처음 ‹shown›개 표시." 문구와 함께 목록이 일부 제한되어 나타날 수 있습니다.
정적 검증을 통과하여 "구조적 문제 없음" 메시지가 표시되더라도, 이것이 플랫폼 등록이나 실제 배포 성공을 보장하는 것은 아닙니다. 본 검증기는 피드, 아트워크, 미디어 URL에 직접 접속하여 다운로드하거나 오디오를 디코딩하지 않으므로, 링크의 실제 접근 가능 여부와 팟캐스트 디렉터리의 최종 승인 여부는 사용자가 별도로 확인해야 합니다.
개인정보 보호 및 처리 방식
본 팟캐스트 RSS 검증기는 사용자의 프라이버시를 최우선으로 하여 작동합니다. 입력하신 팟캐스트 피드 XML 데이터는 외부 서버로 전송되지 않으며, 오직 사용자의 웹 브라우저 내부에서만 처리됩니다. BroBroGo는 사용자가 입력한 어떠한 데이터나 피드 내용도 서버에 업로드하거나 저장하지 않습니다.
자주 묻는 질문 (FAQ)
Q1. 이 팟캐스트 RSS 검증기는 무엇을 확인하나요?
A1. RSS 2.0 XML이 올바르게 작성되었는지, 필수 RSS 필드와 Apple Podcasts에서 흔히 쓰는 채널 및 에피소드 필드가 있는지 확인하고, <enclosure> 속성, 중복 값, RFC 2822 날짜도 검사합니다.
Q2. 오디오 파일을 테스트하나요?
A2.<enclosure>의 URL, 바이트 길이, MIME 타입, 중복 여부, 파일 이름과 타입의 일치 여부를 확인합니다. 오디오를 다운로드하거나 디코딩하지는 않습니다.
Q3. 검증을 통과한 피드는 모든 곳에서 허용되나요?
A3. 아니요. 팟캐스트 앱은 규칙과 원격 검사를 추가할 수 있습니다. 통과한다는 것은 이곳에 붙여넣은 XML이 여기 표시된 정적 검사를 통과했음을 의미하며, 디렉토리가 받아들이거나 게시할 것임을 의미하지 않습니다.
Q4. 검증할 수 있는 피드 크기에 제한이 있나요?
A4. 본 도구는 1회 검증 시 최대 500,000자까지의 XML 입력을 허용합니다. 글자 수가 이 제한을 초과하면 "이 도구는 체크당 최대 ‹max› 자를 허용합니다."라는 메시지가 표시되며, 분석 시간이 너무 오래 걸릴 경우 "검증 시간이 너무 길었습니다. 더 작은 피드로 다시 시도하세요."라는 안내가 나타납니다.