# RSS Feed Subscription Service RSS/Atom 피드를 구독하고 관리하는 서비스입니다. ## 주요 기능 ### 1. 피드 구독 관리 - RSS/Atom 피드 URL 구독 - 카테고리별 분류 (뉴스, 기술, 비즈니스 등) - 자동 업데이트 스케줄링 - 피드 상태 모니터링 ### 2. 엔트리 관리 - 새로운 글 자동 수집 - 읽음/안읽음 상태 관리 - 별표 표시 기능 - 전체 내용 저장 ### 3. 자동 업데이트 - 설정 가능한 업데이트 주기 (기본 15분) - 백그라운드 스케줄러 - 에러 처리 및 재시도 ## API 엔드포인트 ### 피드 구독 ``` POST /api/feeds { "url": "https://example.com/rss", "title": "Example Blog", "category": "tech", "update_interval": 900 } ``` ### 피드 목록 조회 ``` GET /api/feeds?category=tech&status=active ``` ### 엔트리 조회 ``` GET /api/entries?feed_id=xxx&is_read=false&limit=50 ``` ### 읽음 표시 ``` PUT /api/entries/{entry_id}/read?is_read=true ``` ### 별표 표시 ``` PUT /api/entries/{entry_id}/star?is_starred=true ``` ### 통계 조회 ``` GET /api/stats?feed_id=xxx ``` ### OPML 내보내기 ``` GET /api/export/opml ``` ## 사용 예제 ### 1. 기술 블로그 구독 ```bash curl -X POST http://localhost:8017/api/feeds \ -H "Content-Type: application/json" \ -d '{ "url": "https://techcrunch.com/feed/", "category": "tech" }' ``` ### 2. 한국 뉴스 RSS 구독 ```bash curl -X POST http://localhost:8017/api/feeds \ -H "Content-Type: application/json" \ -d '{ "url": "https://www.hani.co.kr/rss/", "category": "news", "update_interval": 600 }' ``` ### 3. 안읽은 엔트리 조회 ```bash curl "http://localhost:8017/api/entries?is_read=false&limit=20" ``` ### 4. 모든 엔트리 읽음 처리 ```bash curl -X POST "http://localhost:8017/api/entries/mark-all-read?feed_id=xxx" ``` ## 지원 카테고리 - `news`: 뉴스 - `tech`: 기술 - `business`: 비즈니스 - `science`: 과학 - `health`: 건강 - `sports`: 스포츠 - `entertainment`: 엔터테인먼트 - `lifestyle`: 라이프스타일 - `politics`: 정치 - `other`: 기타 ## 환경 설정 ### 필수 설정 ```env MONGODB_URL=mongodb://mongodb:27017 DB_NAME=rss_feed_db REDIS_URL=redis://redis:6379 REDIS_DB=3 ``` ### 선택 설정 ```env DEFAULT_UPDATE_INTERVAL=900 # 기본 업데이트 주기 (초) MAX_ENTRIES_PER_FEED=100 # 피드당 최대 엔트리 수 ENABLE_SCHEDULER=true # 자동 업데이트 활성화 SCHEDULER_TIMEZONE=Asia/Seoul # 스케줄러 타임존 ``` ## Docker 실행 ```bash # 빌드 및 실행 docker-compose build rss-feed-backend docker-compose up -d rss-feed-backend # 로그 확인 docker-compose logs -f rss-feed-backend ``` ## 데이터 구조 ### FeedSubscription - `title`: 피드 제목 - `url`: RSS/Atom URL - `description`: 설명 - `category`: 카테고리 - `status`: 상태 (active/inactive/error) - `update_interval`: 업데이트 주기 - `last_fetch`: 마지막 업데이트 시간 - `error_count`: 에러 횟수 ### FeedEntry - `feed_id`: 피드 ID - `title`: 글 제목 - `link`: 원문 링크 - `summary`: 요약 - `content`: 전체 내용 - `author`: 작성자 - `published`: 발행일 - `categories`: 태그/카테고리 - `thumbnail`: 썸네일 이미지 - `is_read`: 읽음 상태 - `is_starred`: 별표 상태 ## 추천 RSS 피드 ### 한국 뉴스 - 한겨레: `https://www.hani.co.kr/rss/` - 조선일보: `https://www.chosun.com/arc/outboundfeeds/rss/` - 중앙일보: `https://rss.joins.com/joins_news_list.xml` ### 기술 블로그 - TechCrunch: `https://techcrunch.com/feed/` - The Verge: `https://www.theverge.com/rss/index.xml` - Ars Technica: `https://feeds.arstechnica.com/arstechnica/index` ### 개발자 블로그 - GitHub Blog: `https://github.blog/feed/` - Stack Overflow Blog: `https://stackoverflow.blog/feed/` - Dev.to: `https://dev.to/feed` ## 헬스 체크 ```bash curl http://localhost:8017/health ``` ## 문제 해결 ### 1. 피드 파싱 실패 - RSS/Atom 형식이 올바른지 확인 - URL이 접근 가능한지 확인 - 피드 인코딩 확인 (UTF-8 권장) ### 2. 업데이트 안됨 - 스케줄러 활성화 확인 (`ENABLE_SCHEDULER=true`) - MongoDB 연결 상태 확인 - 피드 상태가 `active`인지 확인 ### 3. 중복 엔트리 - 피드에서 고유 ID를 제공하는지 확인 - 엔트리 ID 생성 로직 확인