Samuraizer — 사이버 보안 지식 베이스 엔진
💡 왜 Samuraizer인가?
모든 보안 연구자는 그 기분을 압니다 — 흥미로운 GitHub 저장소, 새로운 CVE 분석글, 새로운 익스플로잇 기법에 대한 블로그 게시물을 발견합니다. 왓츠앱으로 자신에게 전달합니다. 바로 채팅에 묻혀버립니다. 몇 주 후에 그 글을 실제로 필요할 때 — 이미 사라져 있습니다.
다시는 찾지 못할 링크를 자신에게 보내지 마세요 — Samuraizer에 한 번 보내면 요약되고, 태그가 지정되며, 영원히 검색 가능합니다.
| 전에는 😵 |
지금은 🗡️ |
 채팅 기록에 흩어져 묻힌 링크들 |
 분석되고, 태그되어, 언제든 찾을 준비가 된 상태 |
🔐 로컬 우선 개인정보 보호 (로컬 전용 기능)
🎯 추가 개인정보 보호 모드 (로컬 전용) — ollama로 실행하면 모든 데이터가 내 컴퓨터에 남습니다.
- 🗄️
samuraizer.db에 로컬 벡터 저장소 + Ollama를 통한 로컬 AI 임베딩
- ⚡ 모델을 한 번 풀(
ollama pull qwen3:4b, ollama pull qwen3-embedding:8b)하면 완전히 오프라인에서 작동
- ✅ 폐쇄망/격리 환경이 필요한 보안 팀과 연구자에게 적합
🧩 한눈에 보는 기능
🔍 분석 — URL을 붙여넣고 결과가 스트리밍되는 것을 지켜보세요
- 📝 하나 이상의 URL(GitHub 저장소, CVE 분석글, 블로그 게시물, YouTube 동영상)을 붙여넣으면 결과가 실시간으로 스트리밍되어 돌아옵니다
- 📄 파일 업로드 — 브라우저나 텔레그램에서 직접 파일을 업로드하면 전체 텍스트가 추출, 분석, 저장되어 UI에서 볼 수 있습니다
- 지원 형식:
.pdf, .docx, .pptx, .txt, .md
- 🗞️ 블로그 스캐너: 블로그 홈페이지를 붙여넣으면 모든 기사 링크를 추출하여 한 번에 일괄 분석합니다
- ✨ 추천 읽을거리: 분석 탭에서 세션마다 읽지 않은 관련 항목이 하나씩 표시되어 작업 큐를 계속 진행할 수 있게 해줍니다
🗂️ 지식 베이스
- ✏️ 인라인 태그 편집 (항목, 피드, 리스트 항목에 태그 추가/제거)
- 🔎 의미 검색(벡터 검색 via Gemini 임베딩) + 일반 전체 텍스트 검색
- 🧩 태그 클라우드 + 다중 필터링 (태그, 카테고리, 출처, 리스트, 읽음/유용함 기준)
- 📚 리스트 관리 — 항목을 수동 리스트, RSS 리스트, 채널 리스트로 그룹화
- 👁️🗨️ 호버 미리보기 (요약 카드) 및 빠른 복사 버튼
🗺️ 지식 그래프
- 전체 지식 베이스를 대화형 힘-방향 그래프로 시각화
- 항목과 태그가 노드 — 가장자리는 어떤 태그가 어떤 기사와 연결되는지를 보여줍니다
- 클릭하여 항목 미리보기; 더블클릭하여 원래 URL 열기
- 카테고리별 색상 코드 (CVE, 기사, 도구, 동영상, 블로그 등)
- 태그를 검색하여 그래프 전체에서 관련 클러스터 강조
- RSS/Atom 피드 추가 — 서버가 매시간 폴링하여 새 게시물을 자동 수집 및 요약합니다
- 새 게시물은 자동으로 지식 베이스에 추가됩니다
- 각 피드는 자체 리스트가 되어 일괄 검토가 용이합니다
- 피드 항목에는 출처 메타데이터가 표시되며 다른 항목과 마찬가지로 태그 지정 및 필터링 가능
🎥 YouTube 채널 구독
- URL을 통해 YouTube 채널 구독 (예: https://www.youtube.com/@핸들, /channel/UCxxx)
- 구독 전 최신 동영상 미리보기 및 분석할 동영상 선택
- 구독 시 선택한 동영상은 즉시 분석됩니다. 향후 업로드는 매시간 자동 폴링됩니다
/yt-channels API를 통해 실행되며 UI의 RSS/YT 섹션에 표시됩니다
🤖 텔레그램 봇 (선택사항)
- 모든 URL을 봇에 전송하면 동일한 백엔드를 통해 분석하고 포맷된 카드를 반환합니다
- PDF 파일 전송 — 다운로드하여 분석하고 파일을 보거나 다운로드할 수 있는 링크가 포함된 결과 카드를 반환합니다
- 분석이 실행되는 동안 실시간 진행 업데이트가 스트리밍됩니다
- 추천 읽을거리 알림 수신 — 봇이 적극적으로 읽지 않은 항목을 알려줍니다
 URL 분석 |
 일일 추천 읽을거리 |
💬 채팅 (RAG + 스트리밍 + 고정 컨텍스트)
- 지식 베이스에 대해 질문 — 가장 일치하는 항목에서 인용된 답변 제공
- ⚡ 실시간 타이핑 및 출처별 관련성 점수를 포함한 스트리밍 응답
- 🗂️ 저장된 기록 및 모델 선택이 가능한 여러 채팅 세션
- 📌 특정 기사를 컨텍스트로 고정 — 자동 완성을 위해
@ 입력 또는 @ 찾아보기 버튼 사용
- 항목이 고정되면 Gemini는 해당 기사에서만 답변 — RAG 노이즈 없음
- 고정된 항목은 입력창 위에 칩으로 표시됩니다. 출처에는 점수 대신 📌 배지가 표시됩니다
- 특정 PDF, 분석글 또는 CVE를 깊이 파고들기에 완벽
 출처 점수가 포함된 RAG 채팅 |
 고정 컨텍스트 채팅 |
[!IMPORTANT]
Samuraizer의 미래를 만들어가세요! 현재 로컬 LLM, 옵시디언 내보내기 등 새로운 기능에 대해 투표가 진행 중입니다.
여기서 투표하세요!
🏗 아키텍처 (개략적)
flowchart LR
Browser[Browser UI] -->|HTTP| Frontend[React Frontend]
Frontend -->|REST/NDJSON| Backend[Flask API]
Backend -->|SQL| SQLite[(samuraizer.db)]
Backend -->|API| Gemini[Gemini 2.5 Flash]
Backend -->|local API| Ollama[Ollama - Local LLM]
Backend -->|GitHub API| GitHub[GitHub]
Backend -->|RSS| RSS[RSS feeds]
Telegram[Telegram Bot] -->|HTTP| Backend
🧠 작동 방식 (엔드 투 엔드)
- 웹 UI(또는 텔레그램 봇)를 통해 URL 또는 PDF 제출.
- 백엔드가 유형(GitHub 저장소, 블로그 게시물, RSS 피드, PDF 등)을 판단하고 콘텐츠를 가져옵니다/추출합니다.
- 콘텐츠가 Gemini 2.5 Flash로 전송되어 다음을 생성합니다:
- 간결한 요약
- 카테고리 및 태그
- (선택사항) 의미 검색에 사용되는 임베딩
- 결과는
samuraizer.db에 저장되고 프론트엔드에 표시됩니다.
- 프론트엔드에서 다음을 수행할 수 있습니다:
- 태그, 카테고리, 출처, 리스트, 읽음/유용함 플래그로 필터링
- 인라인 태그 편집 (변경 사항은
PATCH /entries/<id>를 통해 유지)
- 의미 검색 사용 (Gemini 임베딩을 통한 벡터 검색)
- RSS 피드는 주기적으로 폴링됩니다. 새 게시물은 자동으로 수집됩니다.
🧰 기술 스택
| 계층 | 기술 / 라이브러리 |
|---|
| 백엔드 | Python, Flask, SQLite, feedparser, PyMuPDF |
| LLM | Gemini 2.5 Flash (Gemini API), Ollama (로컬 선택사항) |
| 프론트엔드 | React 18, Vite, Tailwind CSS |
| 봇 | python-telegram-bot v20 |
| 자막 | transcriptapi.com |
🚀 설정
선호하는 설정 방법을 선택하세요:
⚙️ 로컬 설정 (수동 설치)
0) 저장소 클론 📥
git clone https://github.com/zomry1/Samuraizer.git
cd Samuraizer
1) 설정 🔐
.env.example을 .env로 복사하고 값을 입력하세요.
또는 웹 UI를 열고 설정 탭으로 이동하여 저장하기 전에 설정(제공자, API 키, Ollama 모델명, 임베딩 모델명)을 조정할 수 있습니다.
cp .env.example .env