명세 확립 - 기술 스택 확정하기

goldenGlow_21·2024년 12월 20일
0

목표

  • 기술이 구현 가능한가?
  • 어떤 스택을 사용하여 어떤 구조로 구현할 것인가

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 출력으로 알림을 전송
  • CLI 환경
    • 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의 requestsstem을 사용하여 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의 Scrapystem을 사용하여 다크웹 데이터를 빠르게 수집
    • 수집된 데이터는 실시간으로 Elasticsearch에 적재
  • 데이터 저장 및 검색
    • 모든 데이터를 Elasticsearch에 저장하며, MongoDB를 생략하여 아키텍처를 단순화
    • Elasticsearch의 인덱싱 기능으로 데이터를 빠르게 검색
  • 알림 시스템
    • Elasticsearch에 저장된 데이터를 분석하고, 경고 조건을 만족하면 CLI 출력 및 이메일 알림 전송
  • OSINT 분석
    • Python으로 REST API를 호출하여 수집된 데이터를 Elasticsearch에 추가
    • 데이터를 Elasticsearch에서 분석하여 위험도를 평가
  • CLI 환경
    • typer를 사용하여 Python CLI 환경을 구축
    • 데이터 검색, 분석 결과 확인, 알림 설정을 CLI에서 관리

3. 구현 가능성

  • 이점
    • MongoDB를 제거하여 아키텍처를 단순화하고 관리 부담을 줄임
    • Elasticsearch만으로 데이터 저장과 검색을 처리해 속도와 성능 최적화
  • 타당성
    • 단일 저장소로 Elasticsearch를 사용하는 경우, 데이터 관계가 복잡하지 않다면 매우 효과적
    • 빠른 검색과 실시간 알림 기능이 필요할 때 적합
profile
안드로이드는 리눅스의 꿈을 꾸는가

0개의 댓글