특징
|
Celery
|
Scarpy
|
BeautifulSoup+ Requests
|
AWS Lambda
|
설치/설정 복잡성
|
브로커 설정 필요
|
파이썬 패키지로 간단하게 설치 가능
|
파이썬 내장 라이브러리로 간단하게 사용 가능
|
AWS 계정 및 Lambda 함수 설정 필요
|
비동기 처리
|
지원
|
제한적 (scarpy-redis 사용)
|
직접 구현 필요
|
자동 확장
|
주기 작업 관리
|
지원(django-celery-beat)
|
지원하지 않음 (스케줄러 별도로 필요)
|
cron 작업이나 celery 연동 필요
|
지원(EventBridge)
|
확장성
|
워커 수를 조절하여 확장 가능
|
Redis 기반으로 확장 가능
|
확장성 낮음
|
작업량에 따라 자동 확장
|
유지 보수
|
브로커와 워커 관리 필요
|
Scrapy 프로젝트 구조로 통합 관리 용이
|
관리가 간단함
|
함수 단위로 유지보수 필요
|
웹사이트 유형
|
모든 유형
|
정적 및 일부 동적 웹사이트
|
정적 웹사이트에 더 적합
|
모든 유형
|
단점
|
설정이 복잡할 수 있음
|
비동기 처리와 확장성이 제한적임
|
동적 크롤링과 그 이후의 과정까지 한번에 처리하기 어려움
|
실행 시간 제한(15분) → 작업 병렬처리 필요
|
각 도구의 주요 특징 및 선택 기준
Celery:
적합한 상황: 크롤링 이후 대규모 데이터 처리가 필요하거나, 작업 실패 시 재시도와 상태 추적이 중요한 경우.
장점: 확장성 우수, 체이닝/그룹 작업 등 복잡한 워크플로우 관리 가능.
단점: 설정 및 메시지 브로커 관리 필요.
Scrapy:
적합한 상황: 크롤링이 주요 목적이며, 정적 웹사이트나 간단한 동적 사이트 크롤링이 필요한 경우.
장점: 크롤링에 특화된 구조와 라이브러리 지원. 크롤러 개발이 쉬움.
단점: 비동기 처리 및 주기 작업에 추가 설정 필요. 복잡한 데이터 처리에는 부적합.
BeautifulSoup + Requests:
적합한 상황: 단순한 크롤링 작업이 필요한 경우.
장점: 간단하고 직관적. 소규모 프로젝트에 적합.
단점: 동적 웹사이트 크롤링 어려움. 확장성과 유지보수에 한계.
Playwright:
적합한 상황: JavaScript 렌더링이 필요한 동적 웹사이트 크롤링.
장점: 브라우저 자동화 지원, 동적 요소 처리 가능.
단점: 설정 복잡, 성능 면에서 비교적 느림.
AWS Lambda:
적합한 상황: 서버 관리 없이 크롤링 작업을 비동기적으로 실행하려는 경우.
장점: 서버리스 환경, 사용량에 따라 비용 절감 가능.
단점: 실행 시간 제한(15분)으로 장기 작업에 부적합.
왜 Celery를 선택했는가?
비동기 작업과 병렬 처리:
Celery는 크롤링 후 데이터를 병렬로 처리하고, Redis와 RabbitMQ를 통해 작업 상태를 관리하는 데 이상적입니다.
대규모 작업 처리와 확장성이 우수하므로 복잡한 데이터 워크플로우를 구축할 수 있습니다.
자동 재시도 및 오류 복구:
크롤링 실패나 네트워크 문제 발생 시 Celery의 자동 재시도 기능은 안정성을 보장합니다.
작업 실패에 대비한 백오프(backoff)와 상태 추적 기능도 장점입니다.
워크플로우 관리:
Celery는 체이닝, 그룹 작업, 서브태스크를 지원하므로 데이터를 크롤링한 후 이를 챗봇에 전달하고 저장하는 복잡한 흐름을 간단히 관리할 수 있습니다.
주기 작업 관리:
django-celery-beat와 통합하여 주기적인 크롤링 작업을 자동화할 수 있습니다.
유연성과 확장성:
Celery는 다양한 메시지 브로커(Redis, RabbitMQ 등)를 지원하며, 워커(worker)를 추가하여 성능 확장이 용이합니다.
'프로젝트' 카테고리의 다른 글
DB설계 전략-2 (0) | 2025.01.24 |
---|---|
DB설계 전략 (0) | 2025.01.23 |
도커 실행 시 크롬드라이버와 크롬 버전 불일치 (1) | 2025.01.22 |
ResourceExhausted (0) | 2025.01.21 |
소셜계정 연동 시 중복확인 문제 (0) | 2025.01.20 |