Skip to content

yeonju0110/db-agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

68 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

DB Monitoring Pro

AI 기반 μžμ—°μ–΄ 쿼리와 μ‹€μ‹œκ°„ 이상 νƒμ§€λ‘œ λˆ„κ΅¬λ‚˜ μ‰½κ²Œ λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λ‹ˆν„°λ§ν•  수 μžˆλŠ” ν•œκ΅­ν˜• DB λͺ¨λ‹ˆν„°λ§ ν”Œλž«νΌμž…λ‹ˆλ‹€.

☁️ μ£Όμš” κΈ°λŠ₯

1. μžμ—°μ–΄ 기반 λͺ¨λ‹ˆν„°λ§ μ„€μ •

  • Text-to-SQL: μžμ—°μ–΄λ‘œ μž…λ ₯ν•œ λͺ¨λ‹ˆν„°λ§ μ§€ν‘œλ₯Ό μžλ™μœΌλ‘œ SQL둜 λ³€ν™˜
  • μ‹€μ‹œκ°„ 미리보기: μƒμ„±λœ SQL 쿼리 κ²°κ³Όλ₯Ό μ¦‰μ‹œ 확인
  • 슀마트 ν…Œμ΄λΈ” μΆ”μ²œ: κ΄€λ ¨ ν…Œμ΄λΈ”μ„ AIκ°€ μžλ™ μΆ”μ²œν•˜μ—¬ μ΄μƒμΉ˜ 감지 정확도 ν–₯상

2. μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§

  • μžλ™ μŠ€μΌ€μ€„λ§: 1μ‹œκ°„λ§ˆλ‹€ λ“±λ‘λœ μ§€ν‘œλ₯Ό μžλ™ μ‹€ν–‰
  • λ‹€μ–‘ν•œ μ§€ν‘œ νƒ€μž…: μˆ˜μΉ˜ν˜•, μΉ΄ν…Œκ³ λ¦¬ν˜•, μƒνƒœν˜• μ§€ν‘œ 지원
  • μ‹€μ‹œκ°„ λŒ€μ‹œλ³΄λ“œ: 직관적인 μ°¨νŠΈμ™€ μ‹œκ°ν™”λ‘œ λͺ¨λ‹ˆν„°λ§ ν˜„ν™© 확인

3. μ΄μƒμΉ˜ 감지 및 μ•Œλ¦Ό

  • μžλ™ 이상 탐지: 톡계 기반 μ΄μƒμΉ˜ 감지 μ•Œκ³ λ¦¬μ¦˜
  • 닀쀑 μ•Œλ¦Ό 채널: 이메일, Slack, Webhook 지원
  • νŒ€ ν˜‘μ—…: 역할별 μ•Œλ¦Ό λŒ€μƒ μ„€μ •

4. 톡합 λŒ€μ‹œλ³΄λ“œ

  • μ‹€μ‹œκ°„ μƒνƒœ λͺ¨λ‹ˆν„°λ§: μ§€ν‘œλ³„ 정상/κ²½κ³ /μž₯μ•  μƒνƒœ ν‘œμ‹œ
  • DB μ—°κ²° μƒνƒœ: μ—°κ²°λœ λ°μ΄ν„°λ² μ΄μŠ€ μƒνƒœ μ‹€μ‹œκ°„ 확인
  • μŠ€μΌ€μ€„λŸ¬ μƒνƒœ: λ°±κ·ΈλΌμš΄λ“œ λͺ¨λ‹ˆν„°λ§ μ„œλΉ„μŠ€ μƒνƒœ ν‘œμ‹œ

☁️ 기술 μŠ€νƒ

Backend

  • FastAPI: κ³ μ„±λŠ₯ Python μ›Ή ν”„λ ˆμž„μ›Œν¬
  • LangGraph: AI μ—μ΄μ „νŠΈ μ›Œν¬ν”Œλ‘œμš° μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜
  • Azure OpenAI: GPT-4 기반 μžμ—°μ–΄ 처리
  • Azure Cosmos DB: λͺ¨λ‹ˆν„°λ§ 데이터 μ €μž₯
  • Azure AI Search: μŠ€ν‚€λ§ˆ 검색 및 RAG
  • APScheduler: λ°±κ·ΈλΌμš΄λ“œ μž‘μ—… μŠ€μΌ€μ€„λ§

Frontend

  • React 19: μ΅œμ‹  React 버전
  • TypeScript: νƒ€μž… μ•ˆμ „μ„±
  • Tailwind CSS: μœ ν‹Έλ¦¬ν‹° 기반 μŠ€νƒ€μΌλ§
  • Recharts: 데이터 μ‹œκ°ν™”
  • TanStack Query: μ„œλ²„ μƒνƒœ 관리

☁️ Azure μ•„ν‚€ν…μ²˜

핡심 Azure μ„œλΉ„μŠ€

1. Azure OpenAI Service

  • GPT-4: μžμ—°μ–΄ 쿼리λ₯Ό SQL둜 λ³€ν™˜ν•˜λŠ” 핡심 AI λͺ¨λΈ
  • Text Embedding: μŠ€ν‚€λ§ˆ λ¬Έμ„œμ˜ 벑터화λ₯Ό ν†΅ν•œ 의미 기반 검색
  • Chat Completion API: λŒ€ν™”ν˜• SQL 생성 및 검증

2. Azure AI Search

  • ν•˜μ΄λΈŒλ¦¬λ“œ 검색: ν‚€μ›Œλ“œ 검색 + 벑터 κ²€μƒ‰μ˜ μ‘°ν•©
  • ν•œκ΅­μ–΄ 뢄석기: ko.lucene λΆ„μ„κΈ°λ‘œ ν•œκ΅­μ–΄ 쿼리 μ΅œμ ν™”
  • λ©€ν‹°ν…Œλ„ŒνŠΈ 지원: 고객사별 μŠ€ν‚€λ§ˆ 인덱슀 뢄리
  • 필터링: μŠ€ν‚€λ§ˆ, ν…Œμ΄λΈ”, λΉ„μ¦ˆλ‹ˆμŠ€ νƒœκ·Έ 기반 μ •λ°€ 검색

3. Azure Cosmos DB

  • NoSQL λ¬Έμ„œ μ €μž₯: λͺ¨λ‹ˆν„°λ§ μ§€ν‘œ, 쿼리 νžˆμŠ€ν† λ¦¬, 이상 감지 κ²°κ³Ό
  • μžλ™ μŠ€μΌ€μΌλ§: νŠΈλž˜ν”½ 증가에 λ”°λ₯Έ μžλ™ μ„±λŠ₯ ν™•μž₯
  • κΈ€λ‘œλ²Œ λΆ„μ‚°: 닀쀑 리전 볡제둜 κ³ κ°€μš©μ„± 확보

4. Azure Container Apps

  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 배포: λ°±μ—”λ“œ API와 μŠ€μΌ€μ€„λŸ¬ μ„œλΉ„μŠ€ 뢄리
  • μžλ™ μŠ€μΌ€μΌλ§: μ‚¬μš©λŸ‰μ— λ”°λ₯Έ μ»¨ν…Œμ΄λ„ˆ μΈμŠ€ν„΄μŠ€ μ‘°μ •
  • κ΄€λ¦¬ν˜• 인프라: μ„œλ²„λ¦¬μŠ€ ν™˜κ²½μœΌλ‘œ 운영 λΆ€λ‹΄ μ΅œμ†Œν™”

μ•„ν‚€ν…μ²˜ ν”Œλ‘œμš°

μ‚¬μš©μž μžμ—°μ–΄ μž…λ ₯
    ↓
Azure OpenAI (GPT-4) - 쿼리 이해
    ↓
Azure AI Search - κ΄€λ ¨ μŠ€ν‚€λ§ˆ 검색 (RAG)
    ↓
Azure OpenAI (GPT-4) - SQL 생성
    ↓
PostgreSQL - 쿼리 μ‹€ν–‰
    ↓
Azure Cosmos DB - κ²°κ³Ό μ €μž₯
    ↓
μ΄μƒμΉ˜ 감지 μ•Œκ³ λ¦¬μ¦˜
    ↓
μ•Œλ¦Ό μ‹œμŠ€ν…œ (Slack/Email)

☁️ AI μ›Œν¬ν”Œλ‘œμš° (LangGraph)

LangGraph μ—μ΄μ „νŠΈ λ…Έλ“œ ꡬ쑰

1. 검색 λ…Έλ“œ (search_tables)

  • Azure AI Searchλ₯Ό ν†΅ν•œ κ΄€λ ¨ ν…Œμ΄λΈ” 검색
  • ν•˜μ΄λΈŒλ¦¬λ“œ κ²€μƒ‰μœΌλ‘œ 정확도 ν–₯상
  • λΉ„μ¦ˆλ‹ˆμŠ€ μ»¨ν…μŠ€νŠΈ 기반 μŠ€μ½”μ–΄λ§

2. SQL 생성 λ…Έλ“œ (generate_sql)

  • κ²€μƒ‰λœ μŠ€ν‚€λ§ˆ 정보λ₯Ό λ°”νƒ•μœΌλ‘œ SQL 생성
  • GPT-4 기반 μžμ—°μ–΄ β†’ SQL λ³€ν™˜
  • λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ³ λ €ν•œ 쿼리 μ΅œμ ν™”

3. 검증 λ…Έλ“œ (validate_sql)

  • SQL 문법 및 λ³΄μ•ˆ 검증
  • μŠ€ν‚€λ§ˆ ν˜Έν™˜μ„± 확인
  • μœ„ν—˜ν•œ 쿼리 차단 (DDL, DML λ“±)

4. μ‹€ν–‰ λ…Έλ“œ (execute_sql)

  • 읽기 μ „μš© κ³„μ •μœΌλ‘œ μ•ˆμ „ν•œ 쿼리 μ‹€ν–‰
  • νƒ€μž„μ•„μ›ƒ 및 κ²°κ³Ό μ œν•œ μ„€μ •
  • μ—λŸ¬ 핸듀링 및 λ‘œκΉ…

5. 이상 감지 λ…Έλ“œ (detect_anomaly)

  • 톡계 기반 μ΄μƒμΉ˜ 탐지 μ•Œκ³ λ¦¬μ¦˜
  • νžˆμŠ€ν† λ¦¬ 데이터와 비ꡐ 뢄석
  • μž„κ³„κ°’ 기반 μ•Œλ¦Ό 트리거

μƒνƒœ 관리 (AgentState)

class AgentState(TypedDict):
    user_query: str                    # μ‚¬μš©μž μž…λ ₯
    relevant_tables: List[dict]         # κ²€μƒ‰λœ ν…Œμ΄λΈ” 정보
    generated_sql: str                 # μƒμ„±λœ SQL
    sql_valid: bool                    # 검증 κ²°κ³Ό
    query_result: dict                 # μ‹€ν–‰ κ²°κ³Ό
    anomaly_detected: bool             # 이상 감지 μ—¬λΆ€
    notification_sent: bool            # μ•Œλ¦Ό λ°œμ†‘ μƒνƒœ

☁️ RAG (Retrieval-Augmented Generation) κ΅¬ν˜„

1. μŠ€ν‚€λ§ˆ 인덱싱 νŒŒμ΄ν”„λΌμΈ

PostgreSQL μŠ€ν‚€λ§ˆ μΆ”μΆœ
    ↓
λΉ„μ¦ˆλ‹ˆμŠ€ μ»¨ν…μŠ€νŠΈ 생성 (YAML)
    ↓
λ¬Έμ„œν™” 및 메타데이터 μΆ”κ°€
    ↓
Azure OpenAI μž„λ² λ”© 생성
    ↓
Azure AI Search 인덱싱

2. 검색 증강 생성 ν”„λ‘œμ„ΈμŠ€

  • 쿼리 뢄석: μ‚¬μš©μž μžμ—°μ–΄ μž…λ ₯ νŒŒμ‹±
  • μ»¨ν…μŠ€νŠΈ 검색: κ΄€λ ¨ ν…Œμ΄λΈ”/컬럼 정보 검색
  • μ»¨ν…μŠ€νŠΈ μ••μΆ•: 쀑볡 제거 및 κ΄€λ ¨μ„± 높은 정보 선별
  • SQL 생성: κ²€μƒ‰λœ μ»¨ν…μŠ€νŠΈλ₯Ό λ°”νƒ•μœΌλ‘œ μ •ν™•ν•œ SQL 생성

3. 인덱슀 μŠ€ν‚€λ§ˆ 섀계

{
  "id": "table_name",
  "object_type": "table|column|view",
  "name": "ν…Œμ΄λΈ”λͺ…",
  "description": "ν…Œμ΄λΈ” μ„€λͺ…",
  "content": "κ²€μƒ‰μš© ν…μŠ€νŠΈ",
  "columns_text": "컬럼 정보",
  "relations_text": "관계 정보",
  "sample_queries_text": "μ˜ˆμ‹œ 쿼리",
  "business_tags": ["νƒœκ·Έ1", "νƒœκ·Έ2"],
  "embedding": [벑터값...]
}

☁️ λͺ¨λ‹ˆν„°λ§ 및 μŠ€μΌ€μ€„λ§

APScheduler 기반 λ°±κ·ΈλΌμš΄λ“œ λͺ¨λ‹ˆν„°λ§

  • 1μ‹œκ°„ 간격: λ“±λ‘λœ λͺ¨λ“  μ§€ν‘œ μžλ™ μ‹€ν–‰
  • λ©€ν‹°ν…Œλ„ŒνŠΈ: 고객사별 독립적인 λͺ¨λ‹ˆν„°λ§
  • μž₯μ•  볡ꡬ: μ‹€νŒ¨ν•œ μž‘μ—… μžλ™ μž¬μ‹œλ„
  • μƒνƒœ 좔적: μ‹€μ‹œκ°„ μŠ€μΌ€μ€„λŸ¬ μƒνƒœ λͺ¨λ‹ˆν„°λ§

κ³ λ„ν™”λœ μ΄μƒμΉ˜ 감지 μ•Œκ³ λ¦¬μ¦˜

  • μƒλŒ€μ  λΉ„μœ¨ 감지: 20개 쀑 1개(5%)도 μ΄μƒμΉ˜λ‘œ 감지
  • μΉ΄ν…Œκ³ λ¦¬ν˜• 뢄포 뢄석: κ·Ήμ†Œ/μ†Œμˆ˜ μΉ΄ν…Œκ³ λ¦¬ μžλ™ 감지
  • λ‹€μΈ΅ 감지 μ‹œμŠ€ν…œ: NULL, 쀑볡, 뢄포 μ΄μƒμΉ˜ μ’…ν•© 뢄석
  • 톡계적 방법: Z-score, IQR 기반 μˆ˜μΉ˜ν˜• 아웃라이어 탐지
  • μ‹œκ³„μ—΄ 뢄석: νŠΈλ Œλ“œ λ³€ν™” 및 νŒ¨ν„΄ 이상 감지
  • ν•™μŠ΅ κΈ°λŠ₯: νžˆμŠ€ν† λ¦¬ 데이터 기반 μž„κ³„κ°’ μžλ™ μ‘°μ •

감지 레벨

  • κ·Ήμ†Œ μΉ΄ν…Œκ³ λ¦¬: 1% 미만 (100개 쀑 1개)
  • μ†Œμˆ˜ μΉ΄ν…Œκ³ λ¦¬: 5% 미만 (20개 쀑 1개) ← 핡심 κΈ°λŠ₯
  • 뢄포 λΆˆκ· ν˜•: ν•œ 값이 90% 이상 μ°¨μ§€
  • μƒλŒ€μ  NULL 감지: 15개 쀑 1개만 NULL이어도 μ΄μƒμΉ˜λ‘œ 감지
    • NOT NULL μ»¬λŸΌμ— NULL κ°’ 쑴재 (심각)
    • μ†Œμˆ˜ NULL (5% 미만) - 20개 쀑 1개 미만
    • κ·Ήμ†Œ NULL (1% 미만) - 100개 쀑 1개 미만
    • λ‹€μˆ˜ NULL (20% 이상) - 데이터 ν’ˆμ§ˆ 문제

☁️ 핡심 차별화 포인트

1. ν•œκ΅­ν˜• μžμ—°μ–΄ 처리

  • ν•œκ΅­μ–΄ μ΅œμ ν™”: ko.lucene λΆ„μ„κΈ°λ‘œ ν•œκ΅­μ–΄ 쿼리 정확도 ν–₯상
  • λΉ„μ¦ˆλ‹ˆμŠ€ μ»¨ν…μŠ€νŠΈ: 도메인별 μš©μ–΄μ™€ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 이해
  • λ§₯락적 이해: "μ‹ κ·œ νšŒμ›κ°€μž…μˆ˜", "μ΄νƒˆλ₯ " λ“± λΉ„μ¦ˆλ‹ˆμŠ€ μš©μ–΄ μžλ™ 해석

2. μ§€λŠ₯ν˜• μŠ€ν‚€λ§ˆ 검색

  • ν•˜μ΄λΈŒλ¦¬λ“œ 검색: ν‚€μ›Œλ“œ + 벑터 κ²€μƒ‰μœΌλ‘œ 정확도 κ·ΉλŒ€ν™”
  • κ΄€κ³„ν˜• μΆ”λ‘ : ν…Œμ΄λΈ” κ°„ 관계λ₯Ό κ³ λ €ν•œ 슀마트 μΆ”μ²œ
  • μ»¨ν…μŠ€νŠΈ μ••μΆ•: κ΄€λ ¨μ„± 높은 μ •λ³΄λ§Œ μ„ λ³„ν•˜μ—¬ 토큰 νš¨μœ¨μ„± μ¦λŒ€

3. μ§€λŠ₯ν˜• μ΄μƒμΉ˜ 감지

  • μƒλŒ€μ  λΉ„μœ¨ 감지: 20개 쀑 1개(5%)도 μ •ν™•νžˆ 감지
  • μΉ΄ν…Œκ³ λ¦¬ν˜• 뢄석: 뢄포 λΆˆκ· ν˜• 및 μ†Œμˆ˜ μΉ΄ν…Œκ³ λ¦¬ μžλ™ 탐지
  • λ‹€μΈ΅ 감지: NULL, 쀑볡, 뢄포 μ΄μƒμΉ˜λ₯Ό μ’…ν•©μ μœΌλ‘œ 뢄석
  • μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§: 1μ‹œκ°„λ§ˆλ‹€ μžλ™ μ‹€ν–‰λ˜λŠ” λ°±κ·ΈλΌμš΄λ“œ λͺ¨λ‹ˆν„°λ§

4. ν™•μž₯ κ°€λŠ₯ν•œ μ•„ν‚€ν…μ²˜

  • λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€: API, μŠ€μΌ€μ€„λŸ¬, μ•Œλ¦Ό μ„œλΉ„μŠ€ 뢄리
  • ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ: Azure μ„œλΉ„μŠ€ 기반 μ™„μ „ κ΄€λ¦¬ν˜• 인프라
  • μžλ™ μŠ€μΌ€μΌλ§: νŠΈλž˜ν”½ 증가에 λ”°λ₯Έ μžλ™ ν™•μž₯

☁️ μ„€μΉ˜ 및 μ‹€ν–‰

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

# ν™˜κ²½ λ³€μˆ˜ μ„€μ •
cp .env.sample .env
# .env νŒŒμΌμ— ν•„μš”ν•œ Azure μ„œλΉ„μŠ€ 킀듀을 μ„€μ •ν•˜μ„Έμš”

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

# λ°±μ—”λ“œ μ„œλ²„ (포트 8000)
uv run uvicorn backend.api.v1.main:app --reload --port 8000

# ν”„λ‘ νŠΈμ—”λ“œ μ„œλ²„ (포트 5173)
cd frontend
yarn install
yarn dev

☁️ Azure 배포

배포 슀크립트 μ‚¬μš©λ²•

1. 톡합 배포 (κΈ°λ³Έ)

# λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈμ—”λ“œ λͺ¨λ‘ 배포
./scripts/deployment/azure/deploy-container-apps.sh

# λ˜λŠ” λͺ…μ‹œμ μœΌλ‘œ all μ˜΅μ…˜ μ‚¬μš©
./scripts/deployment/azure/deploy-container-apps.sh all

2. λ°±μ—”λ“œλ§Œ 배포

./scripts/deployment/azure/deploy-container-apps.sh backend

3. ν”„λ‘ νŠΈμ—”λ“œλ§Œ 배포

./scripts/deployment/azure/deploy-container-apps.sh frontend

4. κ°œλ³„ 슀크립트 μ‚¬μš©

# λ°±μ—”λ“œ μ „μš© 배포
./scripts/deployment/azure/deploy-backend.sh

# ν”„λ‘ νŠΈμ—”λ“œ μ „μš© 배포
./scripts/deployment/azure/deploy-frontend.sh

5. 도움말 보기

./scripts/deployment/azure/deploy-container-apps.sh help

배포 μ „ 쀀비사항

  1. Azure CLI μ„€μΉ˜ 및 둜그인

    az login
    az account set --subscription "your-subscription-id"
  2. ν™˜κ²½λ³€μˆ˜ μ„€μ •

    # .env.production 파일 생성
    cp .env.sample .env.production
    # ν•„μš”ν•œ Azure μ„œλΉ„μŠ€ 킀듀을 μ„€μ •
  3. ν•„μˆ˜ ν™˜κ²½λ³€μˆ˜

    • ACR_NAME: Azure Container Registry 이름
    • COSMOS_ENDPOINT, COSMOS_KEY: Cosmos DB μ—°κ²° 정보
    • AZURE_SEARCH_*: Azure AI Search μ„€μ •
    • AZURE_OPENAI_*: Azure OpenAI μ„œλΉ„μŠ€ μ„€μ •
    • 기타 λͺ¨λ‹ˆν„°λ§ κ΄€λ ¨ μ„€μ •λ“€

πŸ”§ 개발 κ°€μ΄λ“œ

ν”„λ‘œμ νŠΈ ꡬ쑰

db-agent/
β”œβ”€β”€ backend/                # FastAPI λ°±μ—”λ“œ
β”‚   β”œβ”€β”€ api/v1/             # API μ—”λ“œν¬μΈνŠΈ
β”‚   β”œβ”€β”€ core/ai/            # AI μ—μ΄μ „νŠΈ 및 LangGraph
β”‚   β”œβ”€β”€ services/           # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”‚   β”œβ”€β”€ models/             # 데이터 λͺ¨λΈ
β”‚   └── repositories/       # 데이터 μ ‘κ·Ό 계측
β”œβ”€β”€ frontend/               # React ν”„λ‘ νŠΈμ—”λ“œ
β”‚   β”œβ”€β”€ src/pages/          # νŽ˜μ΄μ§€ μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ src/components/     # μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ
β”‚   └── src/features/       # κΈ°λŠ₯별 λͺ¨λ“ˆ
β”œβ”€β”€ scripts/                # μ„€μ • 및 μœ ν‹Έλ¦¬ν‹° 슀크립트
└── infrastructure/         # 인프라 μ½”λ“œ

☁️ ν™”λ©΄

λžœλ”© νŽ˜μ΄μ§€

Image

DB μŠ€ν‚€λ§ˆ 인덱싱

Image

λͺ¨λ‹ˆν„°λ§ μ§€ν‘œ μ„€μ •

Image

λŒ€μ‹œλ³΄λ“œ

Image Image

About

πŸ›°οΈ DB Monitoring Agent MVP

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published