Skip to content

LEECHEOLJU/MetaWatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

30 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎯 MetaWatch v3.0 - μ°¨μ„ΈλŒ€ λ³΄μ•ˆκ΄€μ œμ„Όν„°(SOC) λŒ€μ‹œλ³΄λ“œ

Jira API + Supabase 기반 κ³ μ„±λŠ₯ μ‹€μ‹œκ°„ λ³΄μ•ˆμ΄λ²€νŠΈ λͺ¨λ‹ˆν„°λ§ ν”Œλž«νΌ

Version Build Platform

Dashboard Preview

πŸ“‹ μ£Όμš” κΈ°λŠ₯

🚨 μ‹€μ‹œκ°„ λ―Έν•΄κ²° 이벀트 λͺ¨λ‹ˆν„°λ§

  • 30μ΄ˆλ§ˆλ‹€ μžλ™ μ—…λ°μ΄νŠΈ - Jira API 직접 호좜
  • 4컬럼 고밀도 μΉ΄λ“œ λ ˆμ΄μ•„μ›ƒ - 더 λ§Žμ€ 정보λ₯Ό ν•œ λˆˆμ— 확인
  • 고객사별 μ‹œκ·Έλ‹ˆμ²˜ 색상 - ꡿리치(λ…Έλž€μƒ‰), ν•€λ‹€(νŒŒλž€μƒ‰), 삼ꡬ(연두색) λ“±
  • AI λ³΄μ•ˆ 뢄석 톡합 - MetaShield AI 뢄석 원클릭 μ‹€ν–‰
  • Jira ν‹°μΌ“ 직접 μ—°κ²° - μƒˆ νƒ­μ—μ„œ λ°”λ‘œ 이동

πŸ“Š 고객사별 ν˜„ν™© ν…Œμ΄λΈ” (v3.0 λŒ€ν­ κ°œμ„ )

  • 42개 κ°œλ³„ JQL 쿼리 - 각 고객사별 μƒνƒœλ³„ μ •ν™•ν•œ 집계
  • 숫자+밑쀄 λ””μžμΈ - 가독성 μ΅œμ ν™”λ‘œ ν•œ λˆˆμ— νŒŒμ•…
  • μƒνƒœ μš°μ„ μˆœμœ„ μ •λ ¬ - μŠΉμΈλŒ€κΈ° β†’ 정탐 β†’ ν˜‘μ˜μ°¨λ‹¨ β†’ 기차단 β†’ μ˜€νƒ 순
  • 3λΆ„λ§ˆλ‹€ μžλ™ μ—…λ°μ΄νŠΈ - λŒ€λŸ‰ API 호좜 μ΅œμ ν™”
  • 원클릭 Jira 이동 - 각 μ…€ 클릭으둜 ν•΄λ‹Ή μƒνƒœ ν‹°μΌ“ 필터링

πŸ“ˆ 톡계 차트 & 뢄석

  • 닀쀑 차트 λ·° (λ§‰λŒ€ 차트, μ›ν˜• 차트)
  • 뢄석 μΉ΄ν…Œκ³ λ¦¬ (고객사별, μƒνƒœλ³„, μš°μ„ μˆœμœ„λ³„)
  • 상세 데이터 ν…Œμ΄λΈ” 포함
  • 5λΆ„λ§ˆλ‹€ μžλ™ μ—…λ°μ΄νŠΈ

πŸ”— μ‹œμŠ€ν…œ μ—°κ²° μƒνƒœ (μΆ•μ†Œ/ν™•μž₯ ν† κΈ€)

  • μΆ•μ†Œν˜• 헀더 - 곡간 νš¨μœ¨μ„± κ·ΉλŒ€ν™”
  • ν† κΈ€ λ²„νŠΌ - ν•„μš”ν•  λ•Œλ§Œ μ„ΈλΆ€ 정보 확인
  • μ—°κ²° μƒνƒœ μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ - 2λΆ„λ§ˆλ‹€ μžλ™ 체크
  • 7개 ν”„λ‘œμ νŠΈ μƒνƒœ - 각 고객사별 μ—°κ²° ν˜„ν™© ν‘œμ‹œ

🎨 UI/UX ν˜μ‹  (v3.0 μ‹ κ·œ)

  • λ ˆμ΄μ•„μ›ƒ μ΅œμ ν™” - 메인 메뉴 μ„Έλ‘œκΈΈμ΄ μΆ•μ†Œ
  • μ‹œκ·Έλ‹ˆμ²˜ 색상 μ‹œμŠ€ν…œ - 각 고객사별 λΈŒλžœλ”© 색상 톡일
  • Jira μƒνƒœ μΆ•μ†Œ/ν™•μž₯ - μ‚¬μš©μž 선택적 정보 ν‘œμ‹œ
  • μΉ΄λ“œ 크기 μ΅œμ ν™” - 4컬럼 λ ˆμ΄μ•„μ›ƒμœΌλ‘œ 정보 밀도 ν–₯상

πŸš€ λΉ λ₯Έ μ‹œμž‘

1. ν™˜κ²½ λ³€μˆ˜ μ„€μ •

.env.local νŒŒμΌμ„ μƒμ„±ν•˜κ³  λ‹€μŒ 정보λ₯Ό μž…λ ₯ν•˜μ„Έμš”:

# Jira API μ„€μ • (ν•„μˆ˜)
NEXT_PUBLIC_JIRA_DOMAIN=your-company.atlassian.net
JIRA_EMAIL=your-email@company.com  
JIRA_API_TOKEN=your-jira-api-token

# πŸ†• Supabase λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key

# AI 뢄석 API μ„€μ • (MetaShield)
AZURE_OPENAI_API_KEY=your-azure-openai-api-key
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/
AZURE_OPENAI_DEPLOYMENT=your-deployment-name

# λ³΄μ•ˆ λΆ„μ„μš© API Keys
VIRUSTOTAL_API_KEY=your-virustotal-api-key
ABUSEIPDB_API_KEY=your-abuseipdb-api-key

# Next.js μ„€μ •
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your-secret-key

2. Jira API 토큰 생성

  1. Atlassian 계정 μ„€μ •μœΌλ‘œ 이동
  2. "API 토큰 생성" 클릭
  3. 토큰 이름 μž…λ ₯ (예: "MetaWatch SOC Dashboard")
  4. μƒμ„±λœ 토큰을 λ³΅μ‚¬ν•˜μ—¬ ν™˜κ²½λ³€μˆ˜μ— μ„€μ •

3. 개발 μ„œλ²„ μ‹€ν–‰

# μ˜μ‘΄μ„± μ„€μΉ˜
npm install

# 개발 μ„œλ²„ μ‹œμž‘
npm run dev

# λΈŒλΌμš°μ €μ—μ„œ http://localhost:3000 접속

4. μ—°κ²° μƒνƒœ 확인

λŒ€μ‹œλ³΄λ“œ 접속 ν›„ ν•˜λ‹¨μ˜ "Jira μ—°κ²° μƒνƒœ" μ„Ήμ…˜μ—μ„œ API 연결을 ν™•μΈν•˜μ„Έμš”.

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰 (v3.0)

MetaWatch/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ dashboard/                          # πŸ“Š λŒ€μ‹œλ³΄λ“œ μœ„μ ―λ“€
β”‚   β”‚   β”‚   β”œβ”€β”€ UrgentSecurityEventsWidget.tsx     # λ―Έν•΄κ²° 이벀트 4컬럼 μΉ΄λ“œ
β”‚   β”‚   β”‚   β”œβ”€β”€ CustomerStatusOverview.tsx         # 고객사 ν˜„ν™© ν…Œμ΄λΈ” (42개 JQL)
β”‚   β”‚   β”‚   β”œβ”€β”€ SecurityStatsChart.tsx             # 톡계 차트 (μ‹œκ·Έλ‹ˆμ²˜ 색상)
β”‚   β”‚   β”‚   └── JiraConnectionStatus.tsx           # Jira μ—°κ²°μƒνƒœ (ν† κΈ€)
β”‚   β”‚   β”œβ”€β”€ layout/                             # 🎨 λ ˆμ΄μ•„μ›ƒ μ‹œμŠ€ν…œ
β”‚   β”‚   β”‚   β”œβ”€β”€ AppLayout.tsx                      # 메인 μ•± λ ˆμ΄μ•„μ›ƒ
β”‚   β”‚   β”‚   β”œβ”€β”€ TopTabs.tsx                        # 상단 νƒ­ (μΆ•μ†Œν˜•)
β”‚   β”‚   β”‚   └── Sidebar.tsx                        # μ‚¬μ΄λ“œλ°” 메뉴
β”‚   β”‚   β”œβ”€β”€ metawatch/                          # 🎯 MetaWatch λŒ€μ‹œλ³΄λ“œ
β”‚   β”‚   β”‚   β”œβ”€β”€ MetaWatchDashboard.tsx             # 메인 λŒ€μ‹œλ³΄λ“œ
β”‚   β”‚   β”‚   └── CustomerDashboard.tsx              # 고객사별 λŒ€μ‹œλ³΄λ“œ
β”‚   β”‚   β”œβ”€β”€ metashield/                         # πŸ›‘οΈ AI λ³΄μ•ˆ 뢄석
β”‚   β”‚   β”‚   └── AIAnalysisDashboard.tsx            # AI 뢄석 λŒ€μ‹œλ³΄λ“œ
β”‚   β”‚   β”œβ”€β”€ ai/                                 # πŸ€– AI 뢄석 μ»΄ν¬λ„ŒνŠΈ
β”‚   β”‚   β”‚   └── AIAnalysisModal.tsx                # AI 뢄석 λͺ¨λ‹¬ (2컬럼)
β”‚   β”‚   └── ui/                                 # πŸ”§ 곡톡 UI μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ pages/
β”‚   β”‚   β”œβ”€β”€ api/
β”‚   β”‚   β”‚   β”œβ”€β”€ db/                             # πŸ†• DATABASE 기반 API (κ³ μ„±λŠ₯)
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ unresolved-events.ts           # DBμ—μ„œ λ―Έν•΄κ²° 이벀트 쑰회
β”‚   β”‚   β”‚   β”‚   └── security-events.ts             # DBμ—μ„œ 톡계 데이터 쑰회
β”‚   β”‚   β”‚   β”œβ”€β”€ jira/                           # πŸ”— Jira 직접 연동
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ test-connection.ts             # Jira μ—°κ²° μƒνƒœ 확인
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ customer-status.ts             # 42개 κ°œλ³„ JQL 쿼리
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ security-events.ts             # λ‚ μ§œλ³„ λ³΄μ•ˆμ΄λ²€νŠΈ 쑰회
β”‚   β”‚   β”‚   β”‚   └── unresolved-events.ts           # λ―Έν•΄κ²° 이벀트 쑰회
β”‚   β”‚   β”‚   β”œβ”€β”€ sync/                           # πŸ”„ 데이터 동기화 μ‹œμŠ€ν…œ
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ realtime-sync.ts               # μ‹€μ‹œκ°„ 동기화 (1λΆ„λ§ˆλ‹€)
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ full-sync.ts                   # 전체 동기화 (일 1회)
β”‚   β”‚   β”‚   β”‚   └── status.ts                      # 동기화 μƒνƒœ 확인
β”‚   β”‚   β”‚   └── ai/                             # πŸ€– AI 뢄석 API
β”‚   β”‚   β”‚       β”œβ”€β”€ analyze-event.ts               # AI λ³΄μ•ˆ 뢄석 메인
β”‚   β”‚   β”‚       └── test.ts                        # AI API μ—°κ²° ν…ŒμŠ€νŠΈ
β”‚   β”‚   └── index.tsx                           # 메인 λŒ€μ‹œλ³΄λ“œ νŽ˜μ΄μ§€
β”‚   β”œβ”€β”€ lib/                                    # πŸ› οΈ μœ ν‹Έλ¦¬ν‹° & μ„€μ •
β”‚   β”‚   β”œβ”€β”€ customer-colors.ts                     # 🎨 μ‹œκ·Έλ‹ˆμ²˜ 색상 μ‹œμŠ€ν…œ
β”‚   β”‚   └── utils.ts                               # 곡톡 μœ ν‹Έ ν•¨μˆ˜λ“€
β”‚   └── config/
β”‚       └── jira-fields.ts                      # Jira μ»€μŠ€ν…€ ν•„λ“œ λ§€ν•‘ (40+ ν•„λ“œ)
β”œβ”€β”€ .env.local                                  # ν™˜κ²½ λ³€μˆ˜ (생성 ν•„μš”)
β”œβ”€β”€ CLAUDE.md                                   # 개발자 κ°€μ΄λ“œ (상세)
β”œβ”€β”€ README.md                                   # μ‚¬μš©μž κ°€μ΄λ“œ (이 파일)
β”œβ”€β”€ package.json                                # μ˜μ‘΄μ„± 관리
└── .nvmrc                                      # Node.js 버전 관리

πŸ”§ 지원 고객사 (μ‹œκ·Έλ‹ˆμ²˜ 색상 μ‹œμŠ€ν…œ)

ν˜„μž¬ λŒ€μ‹œλ³΄λ“œλŠ” λ‹€μŒ 7개 κ³ κ°μ‚¬μ˜ λ³΄μ•ˆμ΄λ²€νŠΈλ₯Ό λͺ¨λ‹ˆν„°λ§ν•©λ‹ˆλ‹€:

고객사 Jira ν”„λ‘œμ νŠΈ ν‚€ ν•œκΈ€λͺ… 🎨 μ‹œκ·Έλ‹ˆμ²˜ 색상
GOODRICH GOODRICH ꡿리치 🟑 λ…Έλž€μƒ‰ (#fbbf24)
FINDA FINDA ν•€λ‹€ πŸ”΅ νŒŒλž€μƒ‰ (#3b82f6)
SAMKOO SAMKOO 삼ꡬ아이앀씨 🟒 연두색 (#84cc16)
WCVS WCVS ν•œν™”μœ„μΊ λ²„μŠ€ 🟠 주황색 (#f97316)
GLN GLN GLN 🩷 핑크-보라색 (#d946ef)
KURLY KURLY 컬리 🟣 연보라색 (#a855f7)
ISU ISU μ΄μˆ˜μ‹œμŠ€ν…œ πŸ”· ν•˜λŠ˜μƒ‰ (#06b6d4)

πŸ’‘ μ‚¬μš© 팁

μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ μ΅œμ ν™”

  • λ―Έν•΄κ²° 이벀트: 30초 κ°„κ²©μœΌλ‘œ μ—…λ°μ΄νŠΈ (κ°€μž₯ μ€‘μš”)
  • 고객사 ν˜„ν™©: 2λΆ„ κ°„κ²©μœΌλ‘œ μ—…λ°μ΄νŠΈ (μ•ˆμ •μ  λͺ¨λ‹ˆν„°λ§)
  • 톡계 차트: 5λΆ„ κ°„κ²©μœΌλ‘œ μ—…λ°μ΄νŠΈ (νŠΈλ Œλ“œ 뢄석)

μΉ΄λ“œ λ ˆμ΄μ•„μ›ƒ ν™œμš©

  • λ°μŠ€ν¬ν†±: 3μ—΄ κ·Έλ¦¬λ“œλ‘œ λ§Žμ€ 티켓을 ν•œ λ²ˆμ— 확인
  • νƒœλΈ”λ¦Ώ: 2μ—΄ κ·Έλ¦¬λ“œλ‘œ μ μ ˆν•œ 가독성
  • λͺ¨λ°”일: 1μ—΄ μ„Έλ‘œ 슀크둀둜 νŽΈλ¦¬ν•œ λͺ¨λ°”일 λͺ¨λ‹ˆν„°λ§

λΉ λ₯Έ μ•‘μ…˜

  • μΉ΄λ“œ 클릭: Jira ν‹°μΌ“μœΌλ‘œ 직접 이동
  • 고객사 클릭: ν•΄λ‹Ή κ³ κ°μ‚¬μ˜ λͺ¨λ“  ν‹°μΌ“ 보기
  • μƒνƒœ 숫자 클릭: νŠΉμ • μƒνƒœμ˜ ν‹°μΌ“λ§Œ 필터링

🎨 UI/UX νŠΉμ§•

닀크 λͺ¨λ“œ λ””μžμΈ

  • SOC ν™˜κ²½ μ΅œμ ν™”: μž₯μ‹œκ°„ λͺ¨λ‹ˆν„°λ§μ— μ ν•©ν•œ μ–΄λ‘μš΄ ν…Œλ§ˆ
  • κ³ λŒ€λΉ„ 색상: μ€‘μš” 정보 κ°•μ‘° (빨간색: λ―Έν•΄κ²°, μ΄ˆλ‘μƒ‰: μ™„λ£Œ)
  • μ΅œμ†Œν•œμ˜ 눈의 ν”Όλ‘œ: λΆ€λ“œλŸ¬μš΄ κ·ΈλΌλ””μ–ΈνŠΈμ™€ 그림자

λ°˜μ‘ν˜• λ””μžμΈ

  • λͺ¨λ“  κΈ°κΈ° λŒ€μ‘: λ°μŠ€ν¬ν†±, νƒœλΈ”λ¦Ώ, λͺ¨λ°”일
  • ν„°μΉ˜ μΉœν™”μ : λͺ¨λ°”μΌμ—μ„œλ„ μ‰¬μš΄ μ‘°μž‘
  • λΉ λ₯Έ λ‘œλ”©: μ΅œμ ν™”λœ μ„±λŠ₯

μ‹€μ‹œκ°„ ν”Όλ“œλ°±

  • λ‘œλ”© μ• λ‹ˆλ©”μ΄μ…˜: 데이터 μ—…λ°μ΄νŠΈ μƒνƒœ ν‘œμ‹œ
  • νŽ„μŠ€ 효과: μƒˆλ‘œμš΄ 이벀트 κ°•μ‘°
  • λΆ€λ“œλŸ¬μš΄ μ „ν™˜: Framer Motion μ• λ‹ˆλ©”μ΄μ…˜

πŸ” 문제 ν•΄κ²°

μ—°κ²° 문제

# 1. ν™˜κ²½λ³€μˆ˜ 확인
cat .env.local

# 2. Jira μ—°κ²° ν…ŒμŠ€νŠΈ
curl http://localhost:3000/api/jira/test-connection

# 3. 개발 μ„œλ²„ μž¬μ‹œμž‘
npm run dev

데이터가 ν‘œμ‹œλ˜μ§€ μ•ŠλŠ” 경우

  1. Jira API 토큰 확인: λ§Œλ£Œλ˜μ—ˆκ±°λ‚˜ κΆŒν•œμ΄ λΆ€μ‘±ν•  수 μžˆμŠ΅λ‹ˆλ‹€
  2. λ„€νŠΈμ›Œν¬ μ—°κ²°: λ°©ν™”λ²½μ΄λ‚˜ ν”„λ‘μ‹œ 섀정을 ν™•μΈν•˜μ„Έμš”
  3. λΈŒλΌμš°μ € μ½˜μ†”: F12 개발자 λ„κ΅¬μ—μ„œ μ—λŸ¬ λ©”μ‹œμ§€ 확인

μ„±λŠ₯ 문제

  1. μƒˆλ‘œκ³ μΉ¨: λΈŒλΌμš°μ € μΊμ‹œ 문제일 수 μžˆμŠ΅λ‹ˆλ‹€
  2. 인터넷 속도: Jira API 응닡 속도에 따라 λ‘œλ”© μ‹œκ°„μ΄ λ‹¬λΌμ§‘λ‹ˆλ‹€
  3. λ™μ‹œ μ‚¬μš©μž: λ§Žμ€ μ‚¬μš©μžκ°€ 접속 μ‹œ μ„œλ²„ λΆ€ν•˜κ°€ 생길 수 μžˆμŠ΅λ‹ˆλ‹€

πŸš€ 배포 κ°€μ΄λ“œ

Render.com 배포 (ꢌμž₯)

  1. GitHub λ ˆν¬μ§€ν† λ¦¬ μ—°κ²°
  2. λΉŒλ“œ μ„€μ •:
    • Build Command: npm run build
    • Start Command: npm start
  3. ν™˜κ²½ λ³€μˆ˜ μ„€μ • (μœ„μ˜ .env.local λ‚΄μš©)
  4. μžλ™ 배포 ν™œμ„±ν™”

λ‹€λ₯Έ ν”Œλž«νΌ

  • Vercel: Next.js μ΅œμ ν™”
  • Netlify: JAMstack 배포
  • AWS/Google Cloud: μ»€μŠ€ν…€ μ„œλ²„ ν™˜κ²½

πŸ“ž 지원 및 문의

기술 지원

  • 이슈 λ¦¬ν¬νŒ…: GitHub Issues ν™œμš©
  • κΈ°λŠ₯ μš”μ²­: μƒˆλ‘œμš΄ κΈ°λŠ₯이 ν•„μš”ν•  λ•Œ
  • 버그 리포트: 문제 발견 μ‹œ μƒμ„Έν•œ μ„€λͺ…κ³Ό ν•¨κ»˜

ν–₯ν›„ κ³„νš

  • 인증 μ‹œμŠ€ν…œ: μ‚¬μš©μž 둜그인 및 κΆŒν•œ 관리
  • μ•Œλ¦Ό κΈ°λŠ₯: Slack, Teams, 이메일 연동
  • κ³ κΈ‰ 뢄석: νŠΈλ Œλ“œ 뢄석, 예츑 λͺ¨λΈ
  • λͺ¨λ°”일 μ•±: λ„€μ΄ν‹°λΈŒ λͺ¨λ°”일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜

MetaWatch둜 λ³΄μ•ˆκ΄€μ œ μ—…λ¬΄μ˜ νš¨μœ¨μ„±μ„ λ†’μ΄μ„Έμš”! πŸ›‘οΈβœ¨

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •