npm feed

개요

feed는 Node.js 환경에서 RSS 2.0, Atom 1.0, JSON Feed 1.0 형식의 피드를 생성하기 위한 npm 라이브러리이다. TypeScript로 작성되어 타입 안정성을 제공하며, 하나의 API로 여러 피드 포맷을 동시에 지원하는 것이 특징이다.

이 라이브러리는 웹사이트나 블로그, 콘텐츠 플랫폼에서 글 목록을 표준 피드 형식으로 배포할 때 사용된다.

설치

yarn add feed

또는 npm을 사용하는 경우

npm install feed

기본 사용 방법

Feed 클래스를 생성한 뒤, 피드 메타데이터를 설정하고 아이템(게시물)을 추가한 후 원하는 포맷으로 출력한다.

import { Feed } from "feed";

const feed = new Feed({
  title: "Feed Title",
  description: "This is my personal feed!",
  id: "http://example.com/",
  link: "http://example.com/",
  language: "en",
  image: "http://example.com/image.png",
  favicon: "http://example.com/favicon.ico",
  copyright: "All rights reserved 2013, John Doe",
  updated: new Date(2013, 6, 14),
  generator: "awesome",
  feedLinks: {
    json: "https://example.com/json",
    atom: "https://example.com/atom",
  },
  author: {
    name: "John Doe",
    email: "johndoe@example.com",
    link: "https://example.com/johndoe",
  },
});

아이템 추가

피드에 포함될 각 게시물은 addItem 메서드를 사용해 추가한다.

feed.addItem({
  title: post.title,
  id: post.url,
  link: post.url,
  description: post.description,
  content: post.content,
  author: [
    {
      name: "Jane Doe",
      email: "janedoe@example.com",
      link: "https://example.com/janedoe",
    },
  ],
  contributor: [
    {
      name: "Shawn Kemp",
      email: "shawnkemp@example.com",
      link: "https://example.com/shawnkemp",
    },
  ],
  date: post.date,
  image: post.image,
});

카테고리와 기여자

피드 단위로 카테고리와 기여자를 추가할 수 있다.

feed.addCategory("Technologie");

feed.addContributor({
  name: "Johan Cruyff",
  email: "johancruyff@example.com",
  link: "https://example.com/johancruyff",
});

피드 출력

지원되는 포맷별로 문자열을 생성할 수 있다.

feed.rss2();   // RSS 2.0
feed.atom1(); // Atom 1.0
feed.json1(); // JSON Feed 1.0

생성된 문자열은 파일로 저장하거나 HTTP 응답으로 그대로 전달할 수 있다.

Feed 옵션

Feed 생성 시 사용할 수 있는 주요 옵션은 다음과 같다.

  • title: 피드 제목
  • id: 피드 식별자 (Atom 필수)
  • link: 웹사이트 URL
  • description: 피드 설명
  • copyright: 저작권 정보
  • language: 언어 코드
  • updated: 마지막 업데이트 날짜
  • generator: 생성기 이름
  • image: 피드 이미지 URL
  • favicon: 파비콘 URL
  • author: 피드 작성자 정보
  • feedLinks: 각 포맷별 피드 URL
  • feed: 자기 자신을 가리키는 피드 URL
  • hub: WebSub 허브 URL
  • ttl: RSS 캐시 유지 시간
  • docs: RSS 문서 URL
  • stylesheet: XSL 스타일시트 URL
  • podcast: 팟캐스트 확장 사용 여부
  • category: 팟캐스트 카테고리

Item 옵션

아이템에 사용할 수 있는 주요 속성은 다음과 같다.

  • title: 아이템 제목
  • link: 아이템 URL
  • date: 수정 또는 업데이트 날짜
  • id: 고유 식별자
  • guid: RSS 전용 GUID
  • description: 요약
  • content: 전체 콘텐츠
  • author: 작성자 목록
  • contributor: 기여자 목록
  • category: 카테고리
  • published: 최초 발행 날짜
  • copyright: 아이템 저작권
  • image: 이미지 첨부
  • audio: 오디오 첨부
  • video: 비디오 첨부
  • enclosure: 일반 미디어 첨부
  • extensions: 사용자 정의 확장

Author (RSS 기준)

RSS 2.0에서 작성자 정보는 <author> 요소로 표현되며, 형식이 엄격하게 제한되어 있다.

  • name: 작성자 이름. email과 함께 사용되어 <author> 태그의 표시 이름으로 포함된다.
  • email: 작성자 이메일 주소. RSS 2.0에서 <author> 요소에 필수적으로 사용되는 값이다.

RSS에서는 name과 email만 의미를 가지며, link와 avatar는 RSS 출력에 사용되지 않는다.

Enclosure (RSS 기준)

RSS 2.0에서 <enclosure>는 오디오, 비디오, 이미지 같은 외부 미디어 파일을 첨부할 때 사용된다.

  • url: 첨부 파일의 실제 URL. RSS enclosure에서 필수 값이다.
  • type: 첨부 파일의 MIME 타입. 예를 들어 audio/mpeg, image/jpeg 같은 값이 들어간다.
  • length: 파일 크기(Byte 단위). RSS enclosure에서 사용된다.

title과 duration은 RSS 2.0 표준 enclosure 요소에는 포함되지 않으며, RSS 기준에서는 의미가 없다.

Category (RSS 기준)

RSS 2.0에서는 <category> 요소를 통해 아이템이나 피드의 분류를 표현한다.

  • name: 카테고리 이름. RSS <category> 태그의 텍스트 값으로 사용된다.
  • domain: 카테고리 분류 체계를 설명하는 URI. RSS <category domain=""> 속성으로 사용된다.

scheme과 term은 Atom 전용 개념이므로 RSS에서는 사용되지 않는다.

Extension (RSS 기준)

RSS 2.0 자체에는 확장 필드에 대한 공식 타입 정의가 없지만, 네임스페이스를 이용한 커스텀 확장은 허용된다.

  • name: 확장 요소의 이름. RSS XML 네임스페이스 하위에 커스텀 태그로 사용된다.
  • objects: 확장 요소 내부에 들어갈 데이터 구조. RSS 출력 시 XML 형태로 직렬화된다.

Extension은 RSS 표준 필드는 아니지만, 커스텀 RSS 확장을 구현할 때 사용된다.

정리 요약 (RSS에서 의미 있는 필드만)

  • Author: name, email
  • Enclosure: url, type, length
  • Category: name, domain
  • Extension: name, objects

참조