목표
- 기술이 구현 가능한가?
- 어떤 스택을 사용하여 어떤 구조로 구현할 것인가
candidate 1
Python 기반 monolithic 아키텍처
간단한 프로토타입에 적합
1. 개요
-
주요 기술 스택
- 크롤링: Python (
BeautifulSoup, Scrapy, requests, stem)
- 데이터 저장: MongoDB
- 알림 시스템:
smtplib (이메일), plyer (데스크탑 알림)
- OSINT 수집: Python 라이브러리 기반 (
Shodan, Maltego API, hunterio)
- CLI:
click, typer
-
아키텍처 도식

2. 설계 설명
- 크롤링 모듈
- Tor 네트워크 기반으로 다크웹 데이터를 수집하며, 수집된 데이터를 MongoDB에 저장
- 크롤링 주기와 스레드 설정을 통해 실시간성을 유지
- 데이터베이스
- MongoDB를 이용해 유출 데이터를 문서 형식(JSON)으로 저장
- 유출 유형(이메일, 카드정보 등)을 필터링하는 인덱스 구성
- OSINT 분석
- Python으로 OSINT API를 호출하고 데이터를 정제
- 위험 수준을 분석하고 실시간으로 결과를 MongoDB에 저장
- 알림 시스템
- CLI 환경
3. 구현 가능성
- 이점
- Python 기반으로 개발 속도가 빠르고, 다양한 라이브러리 활용 가능
- MongoDB를 사용해 데이터 구조 변경에 유연
- 모노리식 구조로 단일 프로세스에서 전체 기능 실행 가능
- 타당성
- 소규모 프로젝트에 적합하며, 빠른 프로토타이핑 가능
- 초보 개발자도 접근성이 높음
candidate 2
Go 기반 micro-service 아키텍처
확장성이 필요한 프로젝트에 최적
1. 개요
-
주요 기술 스택:
- 크롤링: Go (
colly, rod, go-libtor)
- 데이터 저장: MongoDB (데이터 저장), Elasticsearch (검색 최적화)
- 알림 시스템: Go와 RabbitMQ를 연동하여 메시지 큐 기반 알림 전송
- OSINT 수집: Go REST 클라이언트를 활용한 API 호출
- 프론트엔드: React 기반 대시보드 (선택 사항)
-
아키텍처 도식

2. 설계 설명
- 다크웹 크롤러 서비스
- Go의 고성능 비동기 I/O를 활용해 다크웹 데이터를 빠르게 크롤링
- Tor 네트워크와 통합하여 데이터 수집
- 데이터 저장 및 검색
- MongoDB에 저장된 데이터를 Elasticsearch로 전송하여 검색 속도 향상
- 인덱스를 기반으로 데이터 검색 및 필터링 구현
- 알림 시스템
- RabbitMQ로 메시지를 큐잉하고 소비자가 이메일, CLI, 혹은 Webhook을 통해 알림 제공
- OSINT 분석
- Shodan 및 기타 OSINT API 호출을 통해 데이터를 수집하고, 위험도를 평가
- 확장성
- 데이터 수집, 분석, 알림 모듈이 독립적으로 운영되며 마이크로서비스로 분리 가능
3. 구현 가능성
- 이점:
- Go의 고성능과 병렬 처리로 대규모 데이터 처리에 유리
- RabbitMQ를 통한 비동기 알림은 실시간성 유지에 강점
- 서비스별 독립 운영이 가능해 확장성과 유지보수성 향상
- 타당성
- 프로젝트의 복잡도가 증가하지만, 성능과 확장성이 중요하다면 적합
candidate 3
Rust 기반 high-end 시스템
고성능을 중시할 때 적합
1. 개요
-
주요 기술 스택:
- 크롤링: Rust (
reqwest, tokio)
- 데이터 저장: PostgreSQL
- 알림 시스템: Rust와 Redis Pub/Sub를 사용해 알림 전송
- OSINT 수집: Rust HTTP 클라이언트로 API 호출
- CLI:
clap
-
아키텍처 도식

2. 설계 설명
- 크롤러
- Rust의 비동기 라이브러리
tokio를 활용해 다크웹 데이터를 빠르고 안정적으로 수집 가능
- 데이터 저장
- PostgreSQL을 이용해 정규화된 데이터베이스 설계
- 데이터 무결성과 복잡한 쿼리 처리 지원
- 알림 시스템
- Redis Pub/Sub로 실시간 데이터를 배포하며, 알림 서비스와 연계
- OSINT 분석
- Rust의 고성능 HTTP 클라이언트를 활용해 OSINT 데이터를 수집 및 분석
- CLI 환경
clap을 사용해 직관적이고 강력한 CLI 제공
3. 구현 가능성
- 이점
- Rust는 메모리 안전성과 고성능을 제공하며, 안정적인 크롤링과 데이터 처리가 가능
- PostgreSQL은 복잡한 데이터 관계를 처리할 수 있어 OSINT 분석에 적합
- Redis Pub/Sub는 실시간 알림에서 빠른 응답 속도를 제공
- 타당성
- 러닝 커브가 있지만, 고성능과 안정성을 우선시하는 프로젝트에 적합
candidate 4
Node.js 기반 Full-stack 시스템
대시보드가 필요한 경우에 강점
1. 개요
-
주요 기술 스택:
- 크롤링: Node.js (
puppeteer, axios)
- 데이터 저장: MongoDB
- 알림 시스템: WebSocket, NodeMailer
- OSINT 수집: Node.js로 REST API 연동
- 프론트엔드: React + Express
-
아키텍처 도식

2. 설계 설명
- 크롤링
- Node.js의
puppeteer로 다크웹 페이지를 렌더링하고 데이터를 수집
- 데이터 저장
- MongoDB에 데이터를 저장하며, 크롤링 데이터와 분석 데이터를 분리
- 알림 시스템
- WebSocket을 통해 실시간 알림을 브라우저로 전송
- 이메일 알림은
NodeMailer로 구현
- OSINT 분석
- Node.js의 REST API 클라이언트를 활용해 Shodan 및 기타 OSINT 데이터를 연동
- 프론트엔드
- React로 사용자 친화적인 대시보드를 제공하여 데이터를 시각화
3. 구현 가능성
- 이점
- 풀스택 환경으로 프론트엔드와 백엔드 통합 개발이 가능
- Node.js는 대규모 비동기 작업에 강점
- 타당성
- 크롤링과 알림 기능이 간단한 경우 적합하며, 대시보드를 통해 UI를 제공
Candidate 5
Python 기반 시스템 / 후보 2 와 비슷함
데이터 저장과 검색 최적화
1. 개요
-
주요 기술 스택:
- 크롤링: Python (
requests, BeautifulSoup, stem)
- 데이터 저장: MongoDB (원본 데이터 저장), Elasticsearch (검색 최적화 및 실시간 탐색)
- 알림 시스템:
smtplib (이메일), CLI 출력
- OSINT 수집: Python REST API 연동 (e.g., Shodan, Hunter.io)
- CLI 환경:
click
-
아키텍처 도식

2. 설계 설명
- 크롤링
- Python의
requests와 stem을 사용하여 Tor 네트워크를 통해 데이터를 수집
- 수집된 데이터는 MongoDB에 저장하며, 정제 후 Elasticsearch로 전송
- 데이터 저장
- MongoDB: 원본 데이터를 저장하고 관리
- Elasticsearch: 정제된 데이터를 실시간 검색 및 분석에 활용
- 알림 시스템
- CLI를 통해 알림 출력
- 이메일 알림은
smtplib로 구현
- OSINT 분석
- Python의 REST API 클라이언트를 사용하여 Shodan, Hunter.io 등의 데이터를 수집
- 수집된 데이터는 위험도를 평가하여 저장
- CLI 환경
click 라이브러리를 사용하여 직관적인 CLI 인터페이스 제공
3. 구현 가능성
- 이점
- MongoDB와 Elasticsearch의 결합으로 저장과 검색 성능을 모두 충족
- Python 기반으로 개발이 쉬우며, 다양한 라이브러리 활용 가능
- 타당성
- 데이터 크기가 커지더라도 Elasticsearch로 검색 속도를 유지할 수 있어 확장성 보장
- MongoDB를 사용해 데이터 구조 변경에 유연하게 대처 가능
Candidate 6
Python 기반 Elasticsearch 전용 시스템
차가운 현실에 타협한 버전
1. 개요
-
주요 기술 스택
- 크롤링: Python (
Scrapy, requests, stem)
- 데이터 저장 및 검색: Elasticsearch
- 알림 시스템:
smtplib (이메일), CLI 출력
- OSINT 수집: Python REST API 연동 (e.g., Shodan, VirusTotal)
- CLI 환경:
typer
-
아키텍처 도식

2. 설계 설명
- 크롤링
- Python의
Scrapy와 stem을 사용하여 다크웹 데이터를 빠르게 수집
- 수집된 데이터는 실시간으로 Elasticsearch에 적재
- 데이터 저장 및 검색
- 모든 데이터를 Elasticsearch에 저장하며, MongoDB를 생략하여 아키텍처를 단순화
- Elasticsearch의 인덱싱 기능으로 데이터를 빠르게 검색
- 알림 시스템
- Elasticsearch에 저장된 데이터를 분석하고, 경고 조건을 만족하면 CLI 출력 및 이메일 알림 전송
- OSINT 분석
- Python으로 REST API를 호출하여 수집된 데이터를 Elasticsearch에 추가
- 데이터를 Elasticsearch에서 분석하여 위험도를 평가
- CLI 환경
typer를 사용하여 Python CLI 환경을 구축
- 데이터 검색, 분석 결과 확인, 알림 설정을 CLI에서 관리
3. 구현 가능성
- 이점
- MongoDB를 제거하여 아키텍처를 단순화하고 관리 부담을 줄임
- Elasticsearch만으로 데이터 저장과 검색을 처리해 속도와 성능 최적화
- 타당성
- 단일 저장소로 Elasticsearch를 사용하는 경우, 데이터 관계가 복잡하지 않다면 매우 효과적
- 빠른 검색과 실시간 알림 기능이 필요할 때 적합