Skip to content

team-spark-code/redfin_api

Repository files navigation

RedFin API

AI RSS News API Service - FastAPI 기반 뉴스 추천 및 분석 서비스

📋 개요

RedFin API는 RSS 뉴스 피드를 수집, 분석, 제공하는 RESTful API 서비스입니다.
클린 아키텍처 원칙을 따르며, Repository 패턴과 의존성 주입을 통해
유지보수성과 테스트 용이성을 확보한 FastAPI 기반 애플리케이션입니다.

주요 특징

  • 클린 아키텍처: Repository 패턴, 의존성 주입, 계층 분리
  • 다중 백엔드 지원: 파일(JSONL) 및 MongoDB 백엔드
  • API 버전 관리: /api/v1/ 구조로 버전별 엔드포인트 관리
  • 스마트 검색: 텍스트 검색, 소스/그룹 필터링, 신선도 점수 기반 정렬
  • 자동 문서화: Swagger UI 및 ReDoc 제공

기술 스택

  • 프레임워크: FastAPI 0.115+
  • 데이터베이스: MongoDB (Motor 비동기 드라이버)
  • 검증: Pydantic 2.8+
  • 서버: Uvicorn
  • 테스트: Pytest

🏗️ 프로젝트 구조

redfin_api/
├── app/                    # FastAPI 애플리케이션
│   ├── api/v1/endpoints/  # API 엔드포인트
│   ├── repositories/      # 데이터 접근 계층
│   ├── services/          # 비즈니스 로직
│   ├── core/              # 설정 및 의존성 컨테이너
│   ├── schemas/           # Pydantic 스키마
│   └── models/            # 도메인 모델
├── docs/                  # 문서
├── scripts/               # 유틸리티 스크립트
├── tests/                 # 테스트 코드
└── run.py                # 애플리케이션 실행 스크립트

상세한 구조는 개발 가이드 섹션을 참고하세요.

🚀 빠른 시작

1. 환경 설정

# 가상환경 생성 및 활성화
python -m venv .venv
source .venv/bin/activate  # Linux/Mac
# 또는
.venv\Scripts\activate     # Windows

# 의존성 설치
pip install -r requirements.txt

2. 환경 변수 설정

.env 파일을 생성하고 필요한 설정을 추가하세요:

# 백엔드 설정
BACKEND=FILE  # FILE 또는 MONGO

# 파일 백엔드 설정
NEWS_FILE=data/all_entries_20250825_025249.jsonl

# MongoDB 백엔드 설정 (선택사항)
MONGO_URI=mongodb://localhost:27017
MONGO_DB=redfin
MONGO_COL=news

# API 서버 설정
API_HOST=0.0.0.0
API_PORT=8000
API_RELOAD=false

# CORS 설정
CORS_ORIGINS=*

3. 애플리케이션 실행

# 방법 1: Python 스크립트로 실행 (권장)
python run.py

# 방법 2: uvicorn으로 직접 실행
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

🔌 API 엔드포인트

뉴스 API (/api/v1/news)

  • GET / - 뉴스 목록 조회 (검색, 필터링, 정렬 지원)
  • GET /description - 뉴스 description 응답 형식으로 조회
  • GET /health - 헬스체크
  • GET /sources - 사용 가능한 뉴스 소스 목록
  • GET /groups - 사용 가능한 뉴스 그룹 목록

기사 API (/api/v1/articles)

  • GET / - 기사 목록 조회 (페이지네이션, 검색, 태그 필터)
  • POST / - 새 기사 생성
  • GET /{id} - ID로 기사 조회
  • PUT /{id} - 기사 업데이트
  • DELETE /{id} - 기사 삭제
  • GET /categories - 카테고리 목록 조회
  • GET /category/{category} - 카테고리별 기사 조회

기본 엔드포인트

  • GET / - 루트 정보
  • GET /health - 기본 헬스체크

📚 API 문서

서버 실행 후 다음 URL에서 상세한 API 문서를 확인할 수 있습니다:

더 자세한 API 문서는 docs/api.md를 참고하세요.

🔧 주요 기능

1. 다중 백엔드 지원

  • 파일 백엔드: JSONL 파일에서 뉴스 데이터 로드
  • MongoDB 백엔드: MongoDB에서 뉴스 데이터 조회

2. 스마트 검색 및 필터링

  • 텍스트 기반 검색 (제목, 요약, 본문)
  • 소스별, 그룹별 필터링
  • 신선도 점수 기반 정렬

3. 캐싱 시스템

  • 5분간 데이터 캐싱
  • 새로고침 옵션으로 캐시 무효화

4. 데이터 검증

  • Pydantic 스키마를 통한 데이터 검증
  • 필수 필드 확인 및 오류 처리

🐳 Docker 실행

자세한 Docker 빌드 및 실행 방법은 빌드 가이드를 참고하세요.

# Docker 이미지 빌드
docker build --target production -t redfin-api:latest .

# Docker Compose로 실행
docker-compose up -d

# 컨테이너 직접 실행
docker run -p 8000:8000 redfin-api:latest

🧪 테스트

# 테스트 실행
pytest

# 특정 테스트 파일 실행
pytest tests/test_news_api.py

📝 개발 가이드

아키텍처 개요

이 프로젝트는 클린 아키텍처 원칙을 따릅니다:

┌─────────────────────────────────────────┐
│         API Layer (v1/endpoints)        │
│         - HTTP 요청/응답 처리            │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│         Service Layer                   │
│         - 비즈니스 로직                  │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│         Repository Layer                │
│         - 데이터 접근 계층               │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│         Database (MongoDB/File)         │
└─────────────────────────────────────────┘

핵심 원칙:

  • Repository 패턴: 데이터 접근 계층 분리 (app/repositories/)
  • 의존성 주입: app/core/container.py를 통한 중앙화된 의존성 관리
  • API 버전 관리: app/api/v1/ 구조로 버전별 엔드포인트 관리
  • 비동기 처리: 모든 서비스 메서드가 async/await 사용

상세 프로젝트 구조

app/
├── api/
│   ├── v1/
│   │   ├── endpoints/      # 엔드포인트 구현
│   │   │   ├── news.py
│   │   │   └── articles.py
│   │   └── api.py          # 라우터 통합
│   └── deps.py             # 의존성 주입 함수
├── repositories/           # 데이터 접근 계층
│   ├── base.py            # BaseRepository
│   ├── news_repository.py
│   └── article_repository.py
├── services/              # 비즈니스 로직
│   ├── news_service.py
│   └── article_service.py
├── core/                  # 핵심 설정
│   ├── config.py          # 애플리케이션 설정
│   ├── database.py        # 데이터베이스 연결
│   ├── container.py       # 의존성 컨테이너
│   └── exceptions.py      # 커스텀 예외
├── schemas/               # Pydantic 스키마
├── models/                # 도메인 모델
└── main.py                # FastAPI 앱 진입점

새로운 API 엔드포인트 추가

  1. app/api/v1/endpoints/ 디렉토리에 새 엔드포인트 파일 생성
  2. app/api/v1/api.py에 라우터 등록
  3. 필요한 스키마를 app/schemas/에 추가
  4. Repository를 app/repositories/에 구현
  5. 비즈니스 로직을 app/services/에 구현
  6. app/api/deps.py에 의존성 주입 함수 추가

새로운 서비스 추가

  1. app/repositories/에 Repository 구현
  2. app/services/ 디렉토리에 서비스 클래스 생성
  3. app/core/container.py에 팩토리 메서드 추가
  4. app/api/deps.py에 의존성 주입 함수 추가
  5. 필요한 의존성을 requirements.txt에 추가
  6. 설정을 app/core/config.py에 추가

API 사용 예제

API 사용 예제는 scripts/example_usage.py를 참고하세요.

📚 문서

상세한 문서는 docs/ 디렉토리에서 확인할 수 있습니다:

📊 성능 최적화

  • 데이터 캐싱으로 반복 쿼리 최적화
  • MongoDB 인덱싱 권장
  • 대용량 데이터 처리를 위한 배치 처리 지원

About

RedFin 서비스의 백엔드 API. FastAPI 기반으로 뉴스 데이터, RAG 검색 결과, 사용자 맞춤형 추천을 외부에 제공합니다.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors