아키텍처
ActiCrawl의 아키텍처를 이해하면 플랫폼을 최대한 활용하고 웹 스크래핑 워크플로우를 최적화할 수 있습니다.
시스템 개요
ActiCrawl은 신뢰성, 확장성, 성능을 위해 설계된 분산 클라우드 네이티브 아키텍처를 기반으로 구축되었습니다.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 클라이언트 앱 │────▶│ API 게이트웨이 │────▶│ 로드 밸런서 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
┌─────────────────────────┴─────────────────────────┐
│ │
┌───────▼────────┐ ┌────────▼───────┐
│ 인증 서비스 │ │ 요청 제한 서비스│
└────────────────┘ └────────────────┘
│ │
└─────────────────┬─────────────────────────────────┘
│
┌────────▼────────┐
│ 작업 큐 │
│ (Solid Queue) │
└────────┬────────┘
│
┌─────────────────────────┴─────────────────────────┐
│ │
┌───────▼────────┐ ┌────────▼───────┐
│ 스크래퍼 워커 │ │ 스크래퍼 워커 │
│ 풀 (n) │ │ 풀 (n+1) │
└────────────────┘ └────────────────┘
│ │
└─────────────────┬─────────────────────────────────┘
│
┌─────────▼─────────┐
│ 데이터 처리 │
│ 파이프라인 │
└─────────┬─────────┘
│
┌─────────────────┴─────────────────────┐
│ │
┌───────▼────────┐ ┌────────▼───────┐
│ 객체 스토리지 │ │ 데이터베이스 │
│ (S3) │ │ (PostgreSQL) │
└────────────────┘ └────────────────┘
핵심 구성 요소
1. API 게이트웨이
모든 클라이언트 요청의 진입점입니다. 주요 책임:
- 요청 라우팅 및 로드 밸런싱
- SSL 종료
- 요청/응답 변환
- API 버전 관리
기술 스택:
- NGINX (리버스 프록시)
- Kong (API 관리)
- CloudFlare (DDoS 방어)
2. 인증 서비스
모든 인증 및 권한 부여 처리:
- API 키 검증
- JWT 토큰 관리
- 권한 확인
- 사용량 추적
특징:
- 밀리초 미만의 인증
- 분산 세션 관리
- 역할 기반 액세스 제어 (RBAC)
3. 작업 큐 시스템
비동기 작업 처리 관리:
- 플랜 등급에 따른 작업 우선순위 지정
- 지수 백오프를 통한 재시도 로직
- 실패한 작업을 위한 데드 레터 큐
- 실시간 작업 상태 업데이트
기술:
- SQLite/PostgreSQL (큐 관리)
- Solid Queue (작업 처리)
- ActionCable (실시간 업데이트)
4. 스크래퍼 워커
스크래핑 엔진의 핵심:
- 헤드리스 브라우저 관리 (Chrome/Firefox)
- JavaScript 렌더링
- 쿠키 및 세션 처리
- 탐지 방지 조치
주요 기능:
- 동적 워커 스케일링
- 브라우저 핑거프린트 랜덤화
- 자동 프록시 로테이션
- 리소스 최적화
5. 데이터 처리 파이프라인
원시 스크래핑 데이터 변환:
- HTML 파싱 및 정리
- 콘텐츠 추출
- 형식 변환 (마크다운, JSON 등)
- AI 기반 콘텐츠 향상
처리 단계:
1. 원시 HTML 수집
2. JavaScript 실행 (필요시)
3. 콘텐츠 추출
4. 형식 변환
5. 품질 검증
6. 압축 및 저장
6. 스토리지 레이어
신뢰성을 위한 분산 스토리지:
- 객체 스토리지 (S3): 스크린샷, 원시 HTML
- 데이터베이스 (PostgreSQL): 메타데이터, 사용자 데이터, 분석
- 캐시 (Solid Cache): 자주 액세스하는 데이터
- CDN: 글로벌 콘텐츠 전송
요청 수명 주기
1. 요청 시작
클라이언트 → API 게이트웨이 → 인증 → 요청 제한 → 작업 큐
2. 작업 처리
작업 큐 → 워커 선택 → 브라우저 시작 → 페이지 로드 → 콘텐츠 추출
3. 응답 전달
데이터 처리 → 저장 → 응답 형성 → 클라이언트 전달
확장 전략
수평 확장
- 워커 풀: 큐 깊이에 따라 자동 확장
- 데이터베이스 복제: 쿼리 분산을 위한 읽기 복제본
- 캐시 클러스터링: 고가용성을 위한 Solid Cache 클러스터
수직 확장
- 리소스 할당: 작업별 동적 CPU/메모리 할당
- 브라우저 최적화: 경량 브라우저 구성
- 연결 풀링: 효율적인 리소스 활용
고가용성
다중 지역 배포
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 미국 동부-1 │────▶│ 유럽 서부-1 │────▶│ 아시아 남동부 │
│ 기본 │ │ 복제본 │ │ 복제본 │
└──────────────┘ └──────────────┘ └──────────────┘
장애 조치 전략
- 활성-활성: 지역 간 로드 밸런싱
- 상태 확인: 지속적인 모니터링
- 자동 장애 조치: 1초 미만의 전환
- 데이터 일관성: 최종 일관성 모델
보안 아키텍처
네트워크 보안
- VPC 격리: 프라이빗 네트워크 세그먼트
- 보안 그룹: 세분화된 액세스 제어
- WAF: 웹 애플리케이션 방화벽
- DDoS 방어: 다층 방어
데이터 보안
- 저장 시 암호화: AES-256 암호화
- 전송 시 암호화: TLS 1.3
- 키 관리: AWS KMS 통합
- 액세스 로깅: 포괄적인 감사 추적
브라우저 보안
- 샌드박싱: 격리된 브라우저 환경
- 리소스 제한: CPU/메모리 제약
- 네트워크 격리: 별도의 프록시 네트워크
- 클린 상태: 요청마다 새로운 브라우저
성능 최적화
캐싱 전략
┌────────────┐ ┌────────────┐ ┌──────────────┐
│ 클라이언트 │────▶│ CDN 캐시 │────▶│Solid Cache │
│ 캐시 │ │ (글로벌) │ │ (로컬) │
└────────────┘ └────────────┘ └──────────────┘
리소스 관리
- 브라우저 풀링: 사전 준비된 브라우저
- 연결 재사용: HTTP/2 멀티플렉싱
- 지연 로딩: 온디맨드 리소스 로딩
- 압축: Brotli/gzip 압축
모니터링 및 관찰성
메트릭 수집
- 애플리케이션 메트릭: 응답 시간, 오류율
- 인프라 메트릭: CPU, 메모리, 네트워크
- 비즈니스 메트릭: 사용 패턴, 성공률
분산 추적
요청 ID: abc-123
├─ API 게이트웨이 (2ms)
├─ 인증 (1ms)
├─ 큐 삽입 (3ms)
├─ 워커 처리 (2500ms)
│ ├─ 브라우저 시작 (500ms)
│ ├─ 페이지 로드 (1500ms)
│ └─ 콘텐츠 추출 (500ms)
└─ 응답 전달 (5ms)
총: 2511ms
사용자를 위한 모범 사례
1. 요청 패턴 최적화
- 유사한 요청 일괄 처리
- 비동기 처리를 위한 웹훅 사용
- 클라이언트 측 캐싱 구현
2. 적절한 옵션 선택
- 최소한의 대기 전략 선택
- 특정 선택자 사용
- 압축 활성화
3. 실패를 우아하게 처리
- 재시도 로직 구현
- 지수 백오프 사용
- 오류 패턴 모니터링
향후 아키텍처 계획
예정된 개선 사항
- 엣지 컴퓨팅: 데이터 소스에 더 가까운 처리
- ML 파이프라인: 지능적인 콘텐츠 추출
- GraphQL API: 유연한 데이터 쿼리
- WebSocket 스트리밍: 실시간 데이터 업데이트
실험적 기능
- 분산 브라우저 팜
- P2P 프록시 네트워크
- 블록체인 기반 인증
- 양자 저항 암호화
결론
ActiCrawl의 아키텍처는 신뢰할 수 있고 확장 가능하며 빠른 웹 스크래핑 기능을 제공하도록 설계되었습니다. 이러한 구성 요소를 이해함으로써 통합을 더 잘 최적화하고 플랫폼의 기능을 최대한 활용할 수 있습니다.